function chado_get_property

2.x tripal_core.chado_general.api.inc chado_get_property($record, $property)

Retrieve a property for a given base table record.

Parameters

$record: An array used to identify the record to which the property is associated. The following keys must be used: -table: The base table for which the property should be updated. Thus to update a property for a feature the base_table=feature. -id: The primary key value of the base table. The property will be associated with the record that matches this id. -prop_id: The primary key in the [table]prop table. If this value is supplied then the 'table' and 'id' keys are not needed.

$property: An associative array used to specify the property to be selected. It can contain the following keys. The keys must be specified to uniquely identify the term to be applied. If the options identify more than one CV term then an error will occur. -type_name: The cvterm name to be selected. -type_id: The cvterm_id of the term to be selected. -cv_id: The cv_id of the CV that contains the term. -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.

Return value

An array in the same format as that generated by the function chado_generate_var(). If only one record is returned it is a single object. If more than one record is returned then it is an array of objects

Related topics

18 calls to chado_get_property()
chado_contact_form in tripal_contact/includes/tripal_contact.chado_node.inc
Implementation of hook_form().
chado_insert_property in tripal_core/api/tripal_core.chado_general.api.inc
Insert a property for a given base table.
chado_library_form in tripal_library/includes/tripal_library.chado_node.inc
Implements hook_form().
chado_project_form in tripal_project/includes/tripal_project.chado_node.inc
Implementation of hook_form().
chado_update_property in tripal_core/api/tripal_core.chado_general.api.inc
Update a property for a given base table record and property name.

... See full list

File

tripal_core/api/tripal_core.chado_general.api.inc, line 218
Provides an application programming interface (API) to manage data withing the Chado database.

Code

function chado_get_property($record, $property) {

  $base_table = array_key_exists('table', $record) ? $record['table'] : '';
  $base_id = array_key_exists('id', $record) ? $record['id'] : '';
  $prop_id = array_key_exists('prop_id', $record) ? $record['prop_id'] : '';

  $type_name = array_key_exists('type_name', $property) ? $property['type_name'] : '';
  $type_id = array_key_exists('type_id', $property) ? $property['type_id'] : '';
  $cv_name = array_key_exists('cv_name', $property) ? $property['cv_name'] : '';
  $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;


  // Build the values array for checking if the CVterm exists and for
  // retrieving the term as a property.
  $type = array();
  if ($cv_id) {
    $type['cv_id'] = $cv_id;
  }
  if ($cv_name) {
    $type['cv_id'] = array(
      'name' => $cv_name,
    );
  }
  if ($type_name) {
    $type['name'] = $type_name;
  }
  if ($type_id) {
    $type['cvterm_id'] = $type_id;
  }

  // Make sure the CV term exists;
  $options = array();
  $term = chado_select_record('cvterm', array('cvterm_id'), $type, $options);
  if (!$term or count($term) == 0) {
    tripal_report_error('tripal_core', TRIPAL_ERROR, "chado_get_property: " .
      "Cannot find the term described by: %property.", 
    array('%property' => print_r($property, TRUE)));
    return FALSE;
  }
  if (count($term) > 1) {
    tripal_report_error('tripal_core', TRIPAL_ERROR, "chado_get_property: " .
      "Multiple terms found. Cannot add the property. Property was described " .
      "by: %property.", 
    array('%property' => print_r($property, TRUE)));
    return FALSE;
  }

  // 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']);

  // construct the array of values to be selected
  $values = array(
    $fkcol => $base_id,
    'type_id' => $type,
  );

  // if we have the unique property_id make sure to add that to the values
  if ($prop_id) {
    $property_pkey = $table_desc['primary key'][0];
    $values[$property_pkey] = $prop_id;
  }
  $results = chado_generate_var($base_table . 'prop', $values);
  if ($results) {
    $results = chado_expand_var($results, 'field', $base_table . 'prop.value');
  }

  return $results;
}