|  | @@ -169,6 +169,7 @@ function chado_insert_property($record, $property, $options = array()) {
 | 
	
		
			
				|  |  |    $cv_id       = array_key_exists('cv_id', $property) ? $property['cv_id'] : '';
 | 
	
		
			
				|  |  |    $value       = array_key_exists('value', $property) ? $property['value'] : '';
 | 
	
		
			
				|  |  |    $rank        = array_key_exists('rank', $property) ? $property['rank'] : 0;
 | 
	
		
			
				|  |  | +  $cvalue_id   = array_key_exists('cvalue_id', $property) ? $property['cvalue_id'] : '';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    $update_if_present = array_key_exists('update_if_present', $options) ? $options['update_if_present'] : FALSE;
 | 
	
		
			
				|  |  |    $force_rank = array_key_exists('force_rank', $options) ? $options['force_rank'] : FALSE;
 | 
	
	
		
			
				|  | @@ -249,6 +250,20 @@ function chado_insert_property($record, $property, $options = array()) {
 | 
	
		
			
				|  |  |        array('%property' => print_r($property, TRUE)));    return FALSE;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //Check that the cvalue property exists
 | 
	
		
			
				|  |  | +    if ($cvalue_id){
 | 
	
		
			
				|  |  | +        $term = chado_select_record('cvterm', array('cvterm_id'), array('cvterm_id' => $cvalue_id), $options);
 | 
	
		
			
				|  |  | +       if (!$term or count($term) == 0) {
 | 
	
		
			
				|  |  | +            tripal_report_error('tripal_chado', TRIPAL_ERROR, "chado_insert_property: " .
 | 
	
		
			
				|  |  | +                "Cannot find the term for the property value described by: %property.",
 | 
	
		
			
				|  |  | +                array('%property' => print_r($property, TRUE)));
 | 
	
		
			
				|  |  | +           return FALSE;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $values['cvalue'] = $cvalue_id;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    // Get the foreign key for this property table
 | 
	
		
			
				|  |  |    $table_desc = chado_get_schema($base_table . 'prop');
 | 
	
		
			
				|  |  |    $fkcol = key($table_desc['foreign keys'][$base_table]['columns']);
 | 
	
	
		
			
				|  | @@ -287,6 +302,9 @@ function chado_insert_property($record, $property, $options = array()) {
 | 
	
		
			
				|  |  |   *     -cv_name: The name of the CV that contains the term.
 | 
	
		
			
				|  |  |   *     -value: The specific value for the property.
 | 
	
		
			
				|  |  |   *     -rank: The specific rank for the property.
 | 
	
		
			
				|  |  | + *     -cvalue_id: The cvterm_id of the value for the property.
 | 
	
		
			
				|  |  | + *      **note** cvalue_id is an anticipated column in the the next Chado release (1.4).  It is included here for early adopters.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  |   * @param $options
 | 
	
		
			
				|  |  |   *   An associative array containing the following keys:
 | 
	
		
			
				|  |  |   *     -insert_if_missing: A boolean indicating whether a record should be
 | 
	
	
		
			
				|  | @@ -310,6 +328,7 @@ function chado_update_property($record, $property, $options = array()) {
 | 
	
		
			
				|  |  |    $cv_id       = array_key_exists('cv_id', $property) ? $property['cv_id'] : '';
 | 
	
		
			
				|  |  |    $value       = array_key_exists('value', $property) ? $property['value'] : '';
 | 
	
		
			
				|  |  |    $rank        = array_key_exists('rank', $property) ? $property['rank'] : 0;
 | 
	
		
			
				|  |  | +  $cvalue_id   = array_key_exists('cvalue_id', $property) ? $property['cvalue_id'] : '';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    $insert_if_missing = array_key_exists('insert_if_missing', $options) ? $options['insert_if_missing'] : FALSE;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -385,6 +404,18 @@ function chado_update_property($record, $property, $options = array()) {
 | 
	
		
			
				|  |  |      $values['rank'] = $rank;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  // If a cvalue_id is supplied, check that it is a valid cvterm
 | 
	
		
			
				|  |  | +    if ($cvalue_id) {
 | 
	
		
			
				|  |  | +        $term = chado_select_record('cvterm', array('cvterm_id'), array('cvterm_id' => $cvalue_id), $options);
 | 
	
		
			
				|  |  | +        if (!$term or count($term) == 0) {
 | 
	
		
			
				|  |  | +            tripal_report_error('tripal_chado', TRIPAL_ERROR, "chado_insert_property: " .
 | 
	
		
			
				|  |  | +                "Cannot find the term for the property value described by: %property.",
 | 
	
		
			
				|  |  | +                array('%property' => print_r($property, TRUE)));
 | 
	
		
			
				|  |  | +            return FALSE;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $values['cvalue_id'] = $cvalue_id;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    // If we have the unique property_id then we can also update the type
 | 
	
		
			
				|  |  |    // thus add it to the values to be updated
 | 
	
		
			
				|  |  |    if ($prop_id) {
 | 
	
	
		
			
				|  | @@ -516,6 +547,9 @@ function chado_delete_property($record, $property) {
 | 
	
		
			
				|  |  |   *     -cv_name: The name of the CV that contains the term.
 | 
	
		
			
				|  |  |   *     -value: The specific value for the property.
 | 
	
		
			
				|  |  |   *     -rank: The specific rank for the property.
 | 
	
		
			
				|  |  | + *     -cvalue_id: The cvterm_id of the value for the property.
 | 
	
		
			
				|  |  | + *      **note** cvalue_id is an anticipated column in the the next Chado release (1.4).  It is included here for early adopters.
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  |   * @param $options
 | 
	
		
			
				|  |  |   *   An array of options supported by chado_generate_var(). These keys
 | 
	
		
			
				|  |  |   *   are used for generating the cvterm objects returned by this function.
 |