public function obi__organism::query

3.x obi__organism.inc public obi__organism::query($query, $condition)

Overrides ChadoField::query

See also

ChadoField::query()

File

tripal_chado/includes/TripalFields/obi__organism/obi__organism.inc, line 283

Class

obi__organism

Code

public function query($query, $condition) {
  $alias = $this->field['field_name'];
  $operator = $condition['operator'];

  $field_term_id = $this->getFieldTermID();
  $genus_term = $field_term_id . ',' . chado_get_semweb_term('organism', 'genus');
  $species_term = $field_term_id . ',' . chado_get_semweb_term('organism', 'species');
  $infraspecific_name_term = $field_term_id . ',' . chado_get_semweb_term('organism', 'infraspecific_name');
  $infraspecific_type_term = $field_term_id . ',' . chado_get_semweb_term('organism', 'type_id');

  // Join to the organism table for this field.
  $this->queryJoinOnce($query, 'organism', $alias, "base.organism_id = $alias.organism_id");

  // If the column is the field name then we're during a search on the full
  // scientific name.
  if ($condition['column'] == $field_term_id or 
    $condition['column'] == $field_term_id . ',rdfs:label') {
    if (chado_get_version() <= 1.3) {
      $query->where("CONCAT($alias.genus, ' ', $alias.species) $operator :full_name", array(':full_name' => $condition['value']));
    }
    else {
      $this->queryJoinOnce($query, 'cvterm', $alias . '_cvterm', 'base.infraspecific_type = ' . $alias . '_cvterm.type_id', 'LEFT OUTER');
      $query->where("CONCAT($alias.genus, ' ', $alias.species, ' ', " . $alias . "'_cvterm.name', ' ', $alias.infraspecific_name) $operator :full_name", array(':full_name' => $condition['value']));
    }
  }

  // If the column is a subfield.
  if ($condition['column'] == $species_term) {
    $query->condition("$alias.species", $condition['value'], $operator);
  }
  if ($condition['column'] == $genus_term) {
    $query->condition("$alias.genus", $condition['value'], $operator);
  }
  if ($condition['column'] == $infraspecific_name_term) {
    $query->condition("$alias.infraspecific_name", $condition['value'], $operator);
  }
  if ($condition['column'] == $infraspecific_type_term) {
    $this->queryJoinOnce($query, 'cvterm', 'CVT', "base.type_id = CVT.cvterm_id");
    $query->condition("CVT.name", $condition['value'], $operator);
  }
}