|  | @@ -0,0 +1,149 @@
 | 
	
		
			
				|  |  | +<?php
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +class TrpVocabularyTermController extends DrupalDefaultEntityController {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @param $ids
 | 
	
		
			
				|  |  | +   *   An array of entity IDs, or FALSE to load all entities.
 | 
	
		
			
				|  |  | +   * @param $conditions
 | 
	
		
			
				|  |  | +   *   DEPRECATED. An array of conditions. Keys are field names on the entity's
 | 
	
		
			
				|  |  | +   *   base table.Values will be compared for equality. All the comparisons will
 | 
	
		
			
				|  |  | +   *   be ANDed together. This parameter is deprecated; use an EntityFieldQuery
 | 
	
		
			
				|  |  | +   *   instead.
 | 
	
		
			
				|  |  | +   * @return multitype:An
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  public function load($ids = array(), $conditions = array()) {
 | 
	
		
			
				|  |  | +    $entities = array();
 | 
	
		
			
				|  |  | +    $queried_entities = array();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Get the list of records that match the loading criteria
 | 
	
		
			
				|  |  | +    $sql = "
 | 
	
		
			
				|  |  | +      SELECT CVT.cvterm_id, CVT.name, CVT.definition,
 | 
	
		
			
				|  |  | +        DB.name as namespace, DBX.accession, CV.name as vocabulary,
 | 
	
		
			
				|  |  | +        CV.cv_id
 | 
	
		
			
				|  |  | +      FROM {cvterm} CVT
 | 
	
		
			
				|  |  | +        INNER JOIN {cv} CV      ON CV.cv_id      = CVT.cv_id
 | 
	
		
			
				|  |  | +        INNER JOIN {dbxref} DBX ON DBX.dbxref_id = CVT.dbxref_id
 | 
	
		
			
				|  |  | +        INNER JOIN {db} DB      ON DB.db_id      = DBX.db_id
 | 
	
		
			
				|  |  | +    ";
 | 
	
		
			
				|  |  | +    $where = '';
 | 
	
		
			
				|  |  | +    if ($ids) {
 | 
	
		
			
				|  |  | +      $where .= 'CVT.cvterm_id IN (:ids) ';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if ($where) {
 | 
	
		
			
				|  |  | +      $sql .= "WHERE $where ";
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $sql .= "ORDER BY CVT.name ";
 | 
	
		
			
				|  |  | +    $sql .= "LIMIT 10 OFFSET 0 ";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $results = chado_query($sql, array(':ids' => $ids));
 | 
	
		
			
				|  |  | +    while ($result = $results->fetchObject()) {
 | 
	
		
			
				|  |  | +      $cvterm = new stdClass();
 | 
	
		
			
				|  |  | +      $cvterm->vocabulary_internal_id = $result->cv_id;
 | 
	
		
			
				|  |  | +      $cvterm->vocabulary = $result->vocabulary;
 | 
	
		
			
				|  |  | +      $cvterm->namespace = $result->namespace;
 | 
	
		
			
				|  |  | +      $cvterm->internal_id = $result->cvterm_id;
 | 
	
		
			
				|  |  | +      $cvterm->id = $result->namespace . ':' . $result->accession;
 | 
	
		
			
				|  |  | +      $cvterm->name = $result->name;
 | 
	
		
			
				|  |  | +      $cvterm->def = $result->definition;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Find any alternate IDs or xrefs for this term.
 | 
	
		
			
				|  |  | +      $sql = "
 | 
	
		
			
				|  |  | +        SELECT DB.name as namespace, DBX.accession
 | 
	
		
			
				|  |  | +        FROM {cvterm_dbxref} CVTDBX
 | 
	
		
			
				|  |  | +          INNER JOIN {dbxref} DBX ON DBX.dbxref_id = CVTDBX.dbxref_id
 | 
	
		
			
				|  |  | +          INNER JOIN {db} DB      ON DB.db_id = DBX.db_id
 | 
	
		
			
				|  |  | +        WHERE CVTDBX.cvterm_id = :cvterm_id
 | 
	
		
			
				|  |  | +      ";
 | 
	
		
			
				|  |  | +      $dbxref_results = chado_query($sql, array(':cvterm_id' => $result->cvterm_id));
 | 
	
		
			
				|  |  | +      $xrefs = array();
 | 
	
		
			
				|  |  | +      $alt_ids = array();
 | 
	
		
			
				|  |  | +      while ($dbxref = $dbxref_results->fetchObject()) {
 | 
	
		
			
				|  |  | +        if ($dbxref->namespace = $result->namespace) {
 | 
	
		
			
				|  |  | +          $alt_ids[] = $dbxref->namespace . ':' . $dbxref->accession;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else {
 | 
	
		
			
				|  |  | +          $xrefs[] = $dbxref->namespace . ':' . $dbxref->accession;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (count($xrefs) > 0) {
 | 
	
		
			
				|  |  | +        $cvterm->xref_id = $xrefs;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (count($alt_ids) > 0) {
 | 
	
		
			
				|  |  | +        $cvterm->alt_id = $alt_ids;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Find any comments for this term.
 | 
	
		
			
				|  |  | +      $sql = "
 | 
	
		
			
				|  |  | +        SELECT CVTP.value
 | 
	
		
			
				|  |  | +        FROM {cvtermprop} CVTP
 | 
	
		
			
				|  |  | +          INNER JOIN {cvterm} CVT on CVT.cvterm_id = CVTP.type_id
 | 
	
		
			
				|  |  | +        WHERE CVT.name = 'comment' and CVTP.cvterm_id = :cvterm_id
 | 
	
		
			
				|  |  | +      ";
 | 
	
		
			
				|  |  | +      $comment_results = chado_query($sql, array(':cvterm_id' => $result->cvterm_id));
 | 
	
		
			
				|  |  | +      $comment = $comment_results->fetchObject();
 | 
	
		
			
				|  |  | +      if ($comment) {
 | 
	
		
			
				|  |  | +        $cvterm->comment = $comment->value;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Find any relationships of this term
 | 
	
		
			
				|  |  | +      $sql = "
 | 
	
		
			
				|  |  | +        SELECT CVT.name as rel, CVTO.name, DB.name as namespace, DBX.accession
 | 
	
		
			
				|  |  | +        FROM {cvterm_relationship} CVTR
 | 
	
		
			
				|  |  | +          INNER JOIN {cvterm} CVT  ON CVT.cvterm_id  = CVTR.type_id
 | 
	
		
			
				|  |  | +          INNER JOIN {cvterm} CVTO ON CVTO.cvterm_id = CVTR.object_id
 | 
	
		
			
				|  |  | +          INNER JOIN {dbxref} DBX  ON DBX.dbxref_id  = CVTO.dbxref_id
 | 
	
		
			
				|  |  | +          INNER JOIN {db}     DB   ON DB.db_id       = DBX.db_id
 | 
	
		
			
				|  |  | +        WHERE CVT.name = 'is_a' and CVTR.subject_id = :cvterm_id
 | 
	
		
			
				|  |  | +      ";
 | 
	
		
			
				|  |  | +      $rel_results = chado_query($sql, array(':cvterm_id' => $result->cvterm_id));
 | 
	
		
			
				|  |  | +      $rels = array();
 | 
	
		
			
				|  |  | +      while ($rel = $rel_results->fetchObject()) {
 | 
	
		
			
				|  |  | +        $rel_text = $rel->namespace . ':' . $rel->accession;
 | 
	
		
			
				|  |  | +        if ($rel->name) {
 | 
	
		
			
				|  |  | +          $rel_text .= ' ! ' . $rel->name;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        $rels[$rel->rel][] = $rel_text;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      foreach ($rels as $rel_type => $rel_list) {
 | 
	
		
			
				|  |  | +        $cvterm->$rel_type = $rel_list;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Find any synonyms for this term
 | 
	
		
			
				|  |  | +      $sql = "
 | 
	
		
			
				|  |  | +        SELECT CVTS.synonym, CVTT.name as scope
 | 
	
		
			
				|  |  | +        FROM {cvtermsynonym} CVTS
 | 
	
		
			
				|  |  | +          INNER JOIN {cvterm} CVT  ON  CVT.cvterm_id = CVTS.cvterm_id
 | 
	
		
			
				|  |  | +          INNER JOIN {cvterm} CVTT ON CVTT.cvterm_id = CVTS.type_id
 | 
	
		
			
				|  |  | +        WHERE CVTS.cvterm_id = :cvterm_id
 | 
	
		
			
				|  |  | +      ";
 | 
	
		
			
				|  |  | +      $synonym_results = chado_query($sql, array(':cvterm_id' => $result->cvterm_id));
 | 
	
		
			
				|  |  | +      $synonyms = array();
 | 
	
		
			
				|  |  | +      while ($synonym = $synonym_results->fetchObject()) {
 | 
	
		
			
				|  |  | +        $synonyms[] = '"' . $synonym->synonym . '" ' . strtoupper($synonym->scope);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (count($synonyms) > 0) {
 | 
	
		
			
				|  |  | +        $cvterm->synonyms = $synonyms;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      $queried_entities[$cvterm->internal_id] = $cvterm;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Pass all entities loaded from the database through $this->attachLoad(),
 | 
	
		
			
				|  |  | +    // which attaches fields (if supported by the entity type) and calls the
 | 
	
		
			
				|  |  | +    // entity type specific load callback, for example hook_node_load().
 | 
	
		
			
				|  |  | +    if (!empty($queried_entities)) {
 | 
	
		
			
				|  |  | +//      $this->attachLoad($queried_entities);
 | 
	
		
			
				|  |  | +      $entities += $queried_entities;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Ensure that the returned array is ordered the same as the original
 | 
	
		
			
				|  |  | +    // $ids array if this was passed in and remove any invalid ids.
 | 
	
		
			
				|  |  | +    return $entities;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 |