|  | @@ -279,130 +279,168 @@ function chado_stock_load($node) {
 | 
	
		
			
				|  |  |    $node->stock_id = $map->stock_id;  
 | 
	
		
			
				|  |  |    
 | 
	
		
			
				|  |  |    //Get the main stock information from the chado stock table-----------------------------------
 | 
	
		
			
				|  |  | -  $previous_db = tripal_db_set_active('chado');
 | 
	
		
			
				|  |  | -  $chado_stock = db_fetch_object(db_query(
 | 
	
		
			
				|  |  | -    "SELECT s.name, s.uniquename, s.description, c.name as type, c.cvterm_id as type_id, s.is_obsolete, s.organism_id "
 | 
	
		
			
				|  |  | -    ."FROM stock s, cvterm c WHERE s.type_id=c.cvterm_id AND stock_id=%d",
 | 
	
		
			
				|  |  | -    $map->stock_id
 | 
	
		
			
				|  |  | -  ));
 | 
	
		
			
				|  |  | -  tripal_db_set_active($previous_db);
 | 
	
		
			
				|  |  | -  //add to node
 | 
	
		
			
				|  |  | -  $node->stock_name = $chado_stock->name;
 | 
	
		
			
				|  |  | -  $node->uniquename = $chado_stock->uniquename;
 | 
	
		
			
				|  |  | -  $node->description = $chado_stock->description;
 | 
	
		
			
				|  |  | -  $node->stock_type = $chado_stock->type;
 | 
	
		
			
				|  |  | -  $node->stock_type_id = $chado_stock->type_id;
 | 
	
		
			
				|  |  | -  $node->is_obsolete = $chado_stock->is_obsolete;
 | 
	
		
			
				|  |  | +  $columns = array('name', 'uniquename', 'description', 'type_id', 'is_obsolete', 'organism_id', 'dbxref_id');
 | 
	
		
			
				|  |  | +  $values = array('stock_id' => $node->stock_id);
 | 
	
		
			
				|  |  | +  $results = tripal_core_chado_select('stock', $columns, $values);
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  $node->stock_name = $results[0]->name;
 | 
	
		
			
				|  |  | +  $node->uniquename = $results[0]->uniquename;
 | 
	
		
			
				|  |  | +  $node->description = $results[0]->description;
 | 
	
		
			
				|  |  | +  $node->stock_type_id = $results[0]->type_id;
 | 
	
		
			
				|  |  | +  $node->organism->organism_id = $results[0]->organism_id;
 | 
	
		
			
				|  |  | +  $node->main_db_reference->dbxref_id = $results[0]->dbxref_id;
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  if (preg_match('/t/', $results[0]->is_obsolete)) {
 | 
	
		
			
				|  |  | +    $node->is_obsolete = TRUE;
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    $node->is_obsolete = FALSE;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  // Get type for current stock------------------------------------------------------------------
 | 
	
		
			
				|  |  | +  $columns = array('name');
 | 
	
		
			
				|  |  | +  $values = array('cvterm_id' => $node->stock_type_id);
 | 
	
		
			
				|  |  | +  $results = tripal_core_chado_select('cvterm', $columns, $values);
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  $node->stock_type = $results[0]->name;
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  |    // Get organism details from chado & add to node-----------------------------------------------
 | 
	
		
			
				|  |  |    // get organism if for current stock
 | 
	
		
			
				|  |  |    // pull all data from chado for the organism and assign it to the current node
 | 
	
		
			
				|  |  | -  $node->organism = tripal_organism_get_organism_by_organism_id($chado_stock->organism_id);
 | 
	
		
			
				|  |  | +  $node->organism = tripal_organism_get_organism_by_organism_id($node->organism->organism_id);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Add Synonyms for stock----------------------------------------------------------------------
 | 
	
		
			
				|  |  |    // These are a special case of property (stockprop table) where cvterm='synonym'
 | 
	
		
			
				|  |  | -  $previous_db = tripal_db_set_active('chado');
 | 
	
		
			
				|  |  | -  $results = db_query(
 | 
	
		
			
				|  |  | -    "SELECT sp.stockprop_id, sp.value as value, sp.type_id, 'synonym' as type FROM stockprop sp, cvterm c "
 | 
	
		
			
				|  |  | -    ."WHERE sp.stock_id=%d AND sp.type_id=c.cvterm_id AND c.name='synonym'",
 | 
	
		
			
				|  |  | -    $map->stock_id
 | 
	
		
			
				|  |  | +  $columns = array('stockprop_id', 'type_id', 'value', 'rank');
 | 
	
		
			
				|  |  | +  $values = array(
 | 
	
		
			
				|  |  | +    'stock_id' => $node->stock_id, 
 | 
	
		
			
				|  |  | +    'type_id' => array(
 | 
	
		
			
				|  |  | +      'cv_id' => variable_get('chado_stock_prop_types_cv', 'null'), 
 | 
	
		
			
				|  |  | +      'name' => 'synonym'
 | 
	
		
			
				|  |  | +    ) 
 | 
	
		
			
				|  |  |    );
 | 
	
		
			
				|  |  | -  tripal_db_set_active($previous_db);
 | 
	
		
			
				|  |  | -  $i=0;
 | 
	
		
			
				|  |  | -  // Node->synonyms is an array of synonyms(strings)
 | 
	
		
			
				|  |  | -  while ($r = db_fetch_object($results) ) {
 | 
	
		
			
				|  |  | -    $synonyms[$i++] = $r;
 | 
	
		
			
				|  |  | +  $results = tripal_core_chado_select('stockprop', $columns, $values);
 | 
	
		
			
				|  |  | +  foreach ($results as $r) {
 | 
	
		
			
				|  |  | +    $r->type = 'synonym';
 | 
	
		
			
				|  |  | +    $node->synonyms[] = $r;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  $node->synonyms = $synonyms;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Add properties for stock (not including synonyms)-------------------------------------------
 | 
	
		
			
				|  |  |    // $node->properties is an array of objects where each object describes a single property and has a type and value
 | 
	
		
			
				|  |  | -  $previous_db = tripal_db_set_active('chado');
 | 
	
		
			
				|  |  | -  $results = db_query(
 | 
	
		
			
				|  |  | -    "SELECT sp.stockprop_id, c.name as type, sp.value as value FROM stockprop sp, cvterm c "
 | 
	
		
			
				|  |  | -    ."WHERE sp.stock_id=%d AND sp.type_id=c.cvterm_id AND c.name != 'synonym'",
 | 
	
		
			
				|  |  | -    $map->stock_id
 | 
	
		
			
				|  |  | +  $columns = array('stockprop_id', 'type_id', 'value', 'rank');
 | 
	
		
			
				|  |  | +  $values = array(
 | 
	
		
			
				|  |  | +    'stock_id' => $node->stock_id, 
 | 
	
		
			
				|  |  |    );
 | 
	
		
			
				|  |  | -  tripal_db_set_active($previous_db);
 | 
	
		
			
				|  |  | -  $i=0;
 | 
	
		
			
				|  |  | -  while ($r = db_fetch_object($results) ) {
 | 
	
		
			
				|  |  | -    $properties[$i++] = $r;
 | 
	
		
			
				|  |  | +  $results = tripal_core_chado_select('stockprop', $columns, $values);
 | 
	
		
			
				|  |  | +  foreach ($results as $r) {
 | 
	
		
			
				|  |  | +    $columns = array('name');
 | 
	
		
			
				|  |  | +    $values = array('cvterm_id' => $r->type_id);
 | 
	
		
			
				|  |  | +    $type_results = tripal_core_chado_select('cvterm', $columns, $values);
 | 
	
		
			
				|  |  | +    $r->type = $type_results[0]->name;
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    $node->properties[] = $r;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  $node->properties = $properties;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Add in main db reference-----------------------------------------------------------------------
 | 
	
		
			
				|  |  |    // this is the dbxref_id in the stock table
 | 
	
		
			
				|  |  | -  //$node->main_db_reference is an object describing the dbxref and has an accession, version, description, db_name, db_description, & urlprefix
 | 
	
		
			
				|  |  | -  $previous_db = tripal_db_set_active('chado');
 | 
	
		
			
				|  |  | -  $db_reference = db_fetch_object(db_query(
 | 
	
		
			
				|  |  | -    "SELECT dbx.dbxref_id, dbx.accession, dbx.version, dbx.description, db.db_id, db.name as db_name, db.description as db_description, db.urlprefix as db_urlprefix "
 | 
	
		
			
				|  |  | -    ."FROM dbxref dbx, db db, stock s WHERE stock_id=%d AND s.dbxref_id=dbx.dbxref_id AND dbx.db_id=db.db_id",
 | 
	
		
			
				|  |  | -    $map->stock_id
 | 
	
		
			
				|  |  | -  ));
 | 
	
		
			
				|  |  | -  tripal_db_set_active($previous_db);
 | 
	
		
			
				|  |  | -  $node->main_db_reference = $db_reference;
 | 
	
		
			
				|  |  | +  if (!empty($node->main_db_reference->dbxref_id)) {
 | 
	
		
			
				|  |  | +    $columns = array('dbxref_id', 'accession', 'version', 'description', 'db_id');
 | 
	
		
			
				|  |  | +    $values = array('dbxref_id' => $node->main_db_reference->dbxref_id);
 | 
	
		
			
				|  |  | +    $results = tripal_core_chado_select('dbxref', $columns, $values);
 | 
	
		
			
				|  |  | +    $node->main_db_reference = $results[0];
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    //get db info
 | 
	
		
			
				|  |  | +    $columns = array('name', 'description', 'url', 'urlprefix');
 | 
	
		
			
				|  |  | +    $values = array('db_id' => $node->main_db_reference->db_id);
 | 
	
		
			
				|  |  | +    $results = tripal_core_chado_select('db', $columns, $values);
 | 
	
		
			
				|  |  | +    $node->main_db_reference->db_name = $results[0]->name;
 | 
	
		
			
				|  |  | +    $node->main_db_reference->db_description = $results[0]->description;
 | 
	
		
			
				|  |  | +    $node->main_db_reference->db_url = $results[0]->url;
 | 
	
		
			
				|  |  | +    $node->main_db_reference->db_urlprefix = $results[0]->urlprefix;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  // Add in extra references to external databases---------------------------------------------------
 | 
	
		
			
				|  |  | +  // Add in extra references to external databases--------------------------------------------------
 | 
	
		
			
				|  |  |    // this includes all the dbxref entries in stock_dbxref
 | 
	
		
			
				|  |  | -  // $node->db_referencesi s an array of objects where each object describes a given dbxref and has the same fields as the main db references
 | 
	
		
			
				|  |  | -  $previous_db = tripal_db_set_active('chado');
 | 
	
		
			
				|  |  | -  $results = db_query(
 | 
	
		
			
				|  |  | -    "SELECT dbx.dbxref_id, dbx.accession, dbx.version,	dbx.description, db.db_id, db.name as db_name, db.description as db_description, db.urlprefix as db_urlprefix "
 | 
	
		
			
				|  |  | -    ."FROM dbxref dbx, db db, stock_dbxref s WHERE stock_id=%d AND s.dbxref_id=dbx.dbxref_id AND dbx.db_id=db.db_id",
 | 
	
		
			
				|  |  | -    $map->stock_id
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -  tripal_db_set_active($previous_db);
 | 
	
		
			
				|  |  | -    $i=0;
 | 
	
		
			
				|  |  | -  while ($r = db_fetch_object($results) ) {
 | 
	
		
			
				|  |  | -    $db_references[$i++] = $r;
 | 
	
		
			
				|  |  | +  $columns = array('dbxref_id');
 | 
	
		
			
				|  |  | +  $values = array('stock_id' => $node->stock_id);
 | 
	
		
			
				|  |  | +  $results = tripal_core_chado_select('stock_dbxref',$columns,$values);
 | 
	
		
			
				|  |  | +  $node->db_references = array();
 | 
	
		
			
				|  |  | +  foreach ($results as $r) {
 | 
	
		
			
				|  |  | +    $columns = array('dbxref_id', 'accession', 'version', 'description', 'db_id');
 | 
	
		
			
				|  |  | +    $values = array('dbxref_id' => $r->dbxref_id);
 | 
	
		
			
				|  |  | +    $sub_results = tripal_core_chado_select('dbxref', $columns, $values);   
 | 
	
		
			
				|  |  | +    $dbxref = $sub_results[0];
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    //get db info
 | 
	
		
			
				|  |  | +    $columns = array('name', 'description', 'url', 'urlprefix');
 | 
	
		
			
				|  |  | +    $values = array('db_id' => $dbxref->db_id);
 | 
	
		
			
				|  |  | +    $results = tripal_core_chado_select('db', $columns, $values);
 | 
	
		
			
				|  |  | +    $dbxref->db_name = $results[0]->name;
 | 
	
		
			
				|  |  | +    $dbxref->db_description = $results[0]->description;
 | 
	
		
			
				|  |  | +    $dbxref->db_url = $results[0]->url;
 | 
	
		
			
				|  |  | +    $dbxref->db_urlprefix = $results[0]->urlprefix;    
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    $node->db_references[] = $dbxref;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  $node->db_references = $db_references;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  // Add relationships for stock---------------------------------------------------------------------
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  // Add relationships for stock--------------------------------------------------------------------
 | 
	
		
			
				|  |  |    // Relationships are broken down into those where the current stock is the subject (other details stored in $node->object_relationships)
 | 
	
		
			
				|  |  |    // and those where the current stock is the object (other details stored in $node->subject_relationships)
 | 
	
		
			
				|  |  |    // fields available to each include object/subject_name, object/subject_id (stock_id in chado) and object/subject_nid (node id in drupal)
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  |       // where current is subject.............................
 | 
	
		
			
				|  |  | -     $previous_db = tripal_db_set_active('chado');
 | 
	
		
			
				|  |  | -     $result = db_query(
 | 
	
		
			
				|  |  | -       "SELECT sr.stock_relationship_id, c.name as relationship_type, sr.type_id as relationship_type_id, s.uniquename as object_uniquename, s.name as object_name, s.stock_id as object_id "
 | 
	
		
			
				|  |  | -       . "FROM stock_relationship sr, stock s, cvterm c "
 | 
	
		
			
				|  |  | -       . "WHERE sr.subject_id=%d AND sr.object_id=s.stock_id AND sr.type_id=c.cvterm_id",
 | 
	
		
			
				|  |  | -       $map->stock_id
 | 
	
		
			
				|  |  | -     );
 | 
	
		
			
				|  |  | -     tripal_db_set_active($previous_db);
 | 
	
		
			
				|  |  | -     $i=0;
 | 
	
		
			
				|  |  | -     $relationships= array();
 | 
	
		
			
				|  |  | -     while ($r = db_fetch_object($result) ) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -       //get nid
 | 
	
		
			
				|  |  | -       $object = db_fetch_object(db_query("SELECT * FROM {node} n, {chado_stock} c WHERE c.nid=n.nid AND c.vid=n.vid AND c.stock_id=%d", $r->object_id ));
 | 
	
		
			
				|  |  | -       $r->object_nid = $object->nid;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -       $relationships[$i++] = $r;
 | 
	
		
			
				|  |  | -     }
 | 
	
		
			
				|  |  | -     $node->object_relationships = $relationships;
 | 
	
		
			
				|  |  | +    $columns = array('stock_relationship_id', 'subject_id', 'type_id', 'object_id', 'value', 'rank');
 | 
	
		
			
				|  |  | +    $values = array('subject_id' => $node->stock_id);
 | 
	
		
			
				|  |  | +    $results = tripal_core_chado_select('stock_relationship', $columns, $values);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    $node->object_relationships = array();
 | 
	
		
			
				|  |  | +    foreach ($results as $r) {
 | 
	
		
			
				|  |  | +      $columns = array('name', 'uniquename', 'description', 'type_id', 'is_obsolete', 'organism_id', 'dbxref_id');
 | 
	
		
			
				|  |  | +      $values = array('stock_id' => $r->object_id);
 | 
	
		
			
				|  |  | +      $results = tripal_core_chado_select('stock', $columns, $values);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      $r->object->stock_id = $r->object_id;
 | 
	
		
			
				|  |  | +      unset($r->object_id);
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      $r->object->stock_name = $results[0]->name;
 | 
	
		
			
				|  |  | +      $r->object->uniquename = $results[0]->uniquename;
 | 
	
		
			
				|  |  | +      $r->object->description = $results[0]->description;
 | 
	
		
			
				|  |  | +      $r->object->stock_type_id = $results[0]->type_id;
 | 
	
		
			
				|  |  | +      $r->object->organism->organism_id = $results[0]->organism_id;
 | 
	
		
			
				|  |  | +      $r->object->main_db_reference->dbxref_id = $results[0]->dbxref_id;        
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      $sql = "SELECT nid FROM {chado_stock} WHERE stock_id=%d";
 | 
	
		
			
				|  |  | +      $object_node = db_fetch_object(db_query($sql, $r->object->stock_id));
 | 
	
		
			
				|  |  | +      $r->object->nid = $object_node->nid;
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      $node->object_relationships[] = $r;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |       // where current is object.............................
 | 
	
		
			
				|  |  | -     $previous_db = tripal_db_set_active('chado');
 | 
	
		
			
				|  |  | -     $result = db_query(
 | 
	
		
			
				|  |  | -       "SELECT sr.stock_relationship_id, c.name as relationship_type, sr.type_id as relationship_type_id, s.uniquename as subject_uniquename, s.name as subject_name, s.stock_id as subject_id "
 | 
	
		
			
				|  |  | -       . "FROM stock_relationship sr, stock s, cvterm c "
 | 
	
		
			
				|  |  | -       . "WHERE	sr.object_id=%d AND sr.subject_id=s.stock_id AND sr.type_id=c.cvterm_id",
 | 
	
		
			
				|  |  | -       $map->stock_id
 | 
	
		
			
				|  |  | -     );
 | 
	
		
			
				|  |  | -     tripal_db_set_active($previous_db);
 | 
	
		
			
				|  |  | -     $i=0;
 | 
	
		
			
				|  |  | -     $relationships= array();
 | 
	
		
			
				|  |  | -     while ($r = db_fetch_object($result) ) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -       //get nid
 | 
	
		
			
				|  |  | -       $subject = db_fetch_object(db_query("SELECT * FROM {node} n, {chado_stock} c WHERE c.nid=n.nid AND c.vid=n.vid AND c.stock_id=%d", $r->subject_id ));
 | 
	
		
			
				|  |  | -       $r->subject_nid = $subject->nid;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -       $relationships[$i++] = $r;
 | 
	
		
			
				|  |  | -     }
 | 
	
		
			
				|  |  | -     $node->subject_relationships = $relationships;
 | 
	
		
			
				|  |  | +    $columns = array('stock_relationship_id', 'subject_id', 'type_id', 'object_id', 'value', 'rank');
 | 
	
		
			
				|  |  | +    $values = array('object_id' => $node->stock_id);
 | 
	
		
			
				|  |  | +    $results = tripal_core_chado_select('stock_relationship', $columns, $values);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $node->subject_relationships = array();    
 | 
	
		
			
				|  |  | +    foreach ($results as $r) {
 | 
	
		
			
				|  |  | +      $columns = array('name', 'uniquename', 'description', 'type_id', 'is_obsolete', 'organism_id', 'dbxref_id');
 | 
	
		
			
				|  |  | +      $values = array('stock_id' => $r->subject_id);
 | 
	
		
			
				|  |  | +      $results = tripal_core_chado_select('stock', $columns, $values);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      $r->subject->stock_id = $r->subject_id;
 | 
	
		
			
				|  |  | +      unset($r->subject_id);  
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      $r->subject->stock_name = $results[0]->name;
 | 
	
		
			
				|  |  | +      $r->subject->uniquename = $results[0]->uniquename;
 | 
	
		
			
				|  |  | +      $r->subject->description = $results[0]->description;
 | 
	
		
			
				|  |  | +      $r->subject->stock_type_id = $results[0]->type_id;
 | 
	
		
			
				|  |  | +      $r->subject->organism->organism_id = $results[0]->organism_id;        $r->subject->main_db_reference->dbxref_id = $results[0]->dbxref_id;        
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      $sql = "SELECT nid FROM {chado_stock} WHERE stock_id=%d";
 | 
	
		
			
				|  |  | +      $subject_node = db_fetch_object(db_query($sql, $r->subject->stock_id));
 | 
	
		
			
				|  |  | +      $r->subject->nid = $subject_node->nid;
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      $node->subject_relationships[] = $r;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |       return $node;
 | 
	
		
			
				|  |  |  }
 |