Browse Source

Fixed bugs in relationship field. Fixed bug in web services for linking to existing entities. Fixed bug in associating the organism.type_id with the additionalType term'

Stephen Ficklin 8 years ago
parent
commit
5aa70d2613

+ 116 - 25
tripal_chado/includes/TripalFields/sbo__relationship/sbo__relationship.inc

@@ -188,11 +188,61 @@ class sbo__relationship extends ChadoField {
       foreach ($orelationships as $relationship) {
         $rel_acc = $relationship->type_id->dbxref_id->db_id->name . ':' . $relationship->type_id->dbxref_id->accession;
         $rel_type = $relationship->type_id->name;
-        $verb = self::get_rel_verb($rel_type);
-        $subject_name = $relationship->$subject_id_key->name;
-        $subject_type = $relationship->$subject_id_key->type_id->name;
-        $object_name = $relationship->$object_id_key->name;
-        $object_type = $relationship->$object_id_key->type_id->name;
+        $verb = $this->get_rel_verb($rel_type);
+
+        // The linked to table of a relationship linker table may not always
+        // have a type_id or name field.  So we have to be a bit more
+        // specific about how we set some variables.
+        switch ($relationship->tablename) {
+          case 'acquisition_relationship':
+            $subject_type = 'acquisition';
+            $object_type = 'acquisition';
+            break;
+          case 'analysis_relationship':
+            $subject_type = 'analysis';
+            $object_type = 'analysis';
+            break;
+          case 'biomaterial_relationship':
+            $subject_type = 'biomaterial';
+            $object_type = 'biomaterial';
+            break;
+          case 'cell_line_relationship':
+            $subject_type = 'cell_line';
+            $object_type = 'cell_line';
+            break;
+          case 'element_relationship':
+            $subject_name = $relationship->$subject_id_key->feature_id->name;
+            $object_name = $relationship->$object_id_key->feature_id->name;
+            break;
+          case 'organism_relationship':
+            $subject_name = $relationship->$subject_id_key->genus . ' ' . $relationship->$subject_id_key->species;
+            $object_name = $relationship->$object_id_key->genus . ' ' . $relationship->$object_id_key->species;
+            $subject_type = 'organism';
+            $object_type = 'organism';
+            break;
+          case 'project_relationship':
+            $subject_type = 'project';
+            $object_type = 'project';
+            break;
+          case 'phylonode_relationship':
+            $subject_name = $relationship->$subject_id_key->label;
+            $object_name = $relationship->$object_id_key->label;
+            break;
+          case 'pub_relationship':
+            $subject_name = $relationship->$subject_id_key->uniquename;
+            $object_name = $relationship->$object_id_key->uniquename;
+            break;
+          case 'quantification_relationship':
+            $subject_type = 'quantification';
+            $object_type = 'quantification';
+            break;
+          default:
+            $subject_name = isset($relationship->$subject_id_key->name) ? $relationship->$subject_id_key->name : '';
+            $subject_type = isset($relationship->$subject_id_key->type_id) ? $relationship->$subject_id_key->type_id->name : '';
+            $object_name = isset($relationship->$object_id_key->name) ? $relationship->$object_id_key->name : '';
+            $object_type = isset($relationship->$object_id_key->type_id) ? $relationship->$object_id_key->type_id->name : '';
+        }
+
         $entity->{$field_name}['und'][$i]['value'] = array(
           'local:relationship_subject' => array(
             'rdfs:type' => $subject_type,
@@ -215,12 +265,13 @@ class sbo__relationship extends ChadoField {
           $entity_id = $relationship->$subject_id_key->entity_id;
           $entity->{$field_name}['und'][$i]['value']['local:relationship_subject']['entity'] = 'TripalEntity:' . $entity_id;
         }
+
+        // Add the clause to the values array.
         $rel_type_clean = lcfirst(preg_replace('/_/', ' ', $rel_type));
         $entity->{$field_name}['und'][$i]['value']['SIO:000493'] = 'The ' . $subject_type . ', ' .
-        $subject_name . ', ' . $verb . ' '  . $rel_type_clean . ' this '  .
-        $object_type . '.';
+          $subject_name . ', ' . $verb . ' '  . $rel_type_clean . ' this '  .
+          $object_type . '.';
 
-        //dpm("OR:" . $entity->{$field_name}['und'][$i]['value']['SIO:000493']);
         $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__' . $pkey] = $relationship->$pkey;
         $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__' . $subject_id_key] = $relationship->$subject_id_key->$subject_pkey;
         $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__type_id'] = $relationship->type_id->cvterm_id;
@@ -243,22 +294,61 @@ class sbo__relationship extends ChadoField {
       foreach ($srelationships as $relationship) {
         $rel_acc = $relationship->type_id->dbxref_id->db_id->name . ':' . $relationship->type_id->dbxref_id->accession;
         $rel_type = $relationship->type_id->name;
-        $verb = self::get_rel_verb($rel_type);
-
-        $subject_name = isset($relationship->$subject_id_key->name) ? $relationship->$subject_id_key->name : '';
-        if (!$subject_name) {
-          if ($relationship->tablename == 'organism_relationship') {
+        $verb = $this->get_rel_verb($rel_type);
+
+        // The linked to table of a relationship linker table may not always
+        // have a type_id or name field.  So we have to be a bit more
+        // specific about how we set some variables.
+        switch ($relationship->tablename) {
+          case 'acquisition_relationship':
+            $subject_type = 'acquisition';
+            $object_type = 'acquisition';
+            break;
+          case 'analysis_relationship':
+            $subject_type = 'analysis';
+            $object_type = 'analysis';
+            break;
+          case 'biomaterial_relationship':
+            $subject_type = 'biomaterial';
+            $object_type = 'biomaterial';
+            break;
+          case 'cell_line_relationship':
+            $subject_type = 'cell_line';
+            $object_type = 'cell_line';
+            break;
+          case 'element_relationship':
+            $subject_name = $relationship->$subject_id_key->feature_id->name;
+            $object_name = $relationship->$object_id_key->feature_id->name;
+            break;
+          case 'organism_relationship':
             $subject_name = $relationship->$subject_id_key->genus . ' ' . $relationship->$subject_id_key->species;
-          }
-        }
-        $subject_type =  isset($relationship->$subject_id_key->type_id) ? $relationship->$subject_id_key->type_id->name : ' ';
-        $object_name = isset($relationship->$object_id_key->name) ? $relationship->$object_id_key->name : '';
-        if (!$object_name) {
-          if ($relationship->tablename == 'organism_relationship') {
             $object_name = $relationship->$object_id_key->genus . ' ' . $relationship->$object_id_key->species;
-          }
+            $subject_type = 'organism';
+            $object_type = 'organism';
+            break;
+          case 'project_relationship':
+            $subject_type = 'project';
+            $object_type = 'project';
+            break;
+          case 'phylonode_relationship':
+            $subject_name = $relationship->$subject_id_key->label;
+            $object_name = $relationship->$object_id_key->label;
+            break;
+          case 'pub_relationship':
+            $subject_name = $relationship->$subject_id_key->uniquename;
+            $object_name = $relationship->$object_id_key->uniquename;
+            break;
+          case 'quantification_relationship':
+            $subject_type = 'quantification';
+            $object_type = 'quantification';
+            break;
+          default:
+            $subject_name = isset($relationship->$subject_id_key->name) ? $relationship->$subject_id_key->name : '';
+            $subject_type = isset($relationship->$subject_id_key->type_id) ? $relationship->$subject_id_key->type_id->name : '';
+            $object_name = isset($relationship->$object_id_key->name) ? $relationship->$object_id_key->name : '';
+            $object_type = isset($relationship->$object_id_key->type_id) ? $relationship->$object_id_key->type_id->name : '';
         }
-        $object_type = isset($relationship->$object_id_key->type_id) ? $relationship->$object_id_key->type_id->name : ' ';
+
         $entity->{$field_name}['und'][$i]['value'] = array(
           'local:relationship_subject' => array(
             'rdfs:type' => $subject_type,
@@ -281,12 +371,13 @@ class sbo__relationship extends ChadoField {
           $entity_id = $relationship->$object_id_key->entity_id;
           $entity->{$field_name}['und'][$i]['value']['local:relationship_object']['entity'] = 'TripalEntity:' . $entity_id;
         }
+
+        // Add the clause to the value array.
         $rel_type_clean = lcfirst(preg_replace('/_/', ' ', $rel_type));
         $entity->{$field_name}['und'][$i]['value']['SIO:000493'] = 'This ' .
-        $subject_name . ' ' . $verb . ' '  . $rel_type_clean . ' the '  .
-        $object_type . ', ' . $object_name . '.';
+          $subject_type . ', ' . $subject_name . ' ' . $verb . ' '  . $rel_type_clean . ' the '  .
+          $object_type . ', ' . $object_name . '.';
 
-        //dpm("SR:" . $entity->{$field_name}['und'][$i]['value']['SIO:000493']);
         $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__' . $pkey] = $relationship->$pkey;
         $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__' . $subject_id_key] = $relationship->$subject_id_key->$subject_pkey;
         $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__type_id'] = $relationship->type_id->cvterm_id;
@@ -380,7 +471,7 @@ class sbo__relationship extends ChadoField {
    * @return
    *   The verb to use when creating a sentence of the relationship.
    */
-  public static function get_rel_verb($rel_type) {
+  private function get_rel_verb($rel_type) {
     $rel_type_clean = lcfirst(preg_replace('/_/', ' ', $rel_type));
     $verb = '';
     switch ($rel_type_clean) {

+ 5 - 0
tripal_chado/includes/tripal_chado.semweb.inc

@@ -213,6 +213,11 @@ function tripal_chado_populate_vocab_SCHEMA() {
   $tables = chado_get_table_names(TRUE);
   foreach ($tables as $table) {
     $schema = chado_get_schema($table);
+    // The type_id for the organism is infraspecific type, so don't make
+    // the association for that type.
+    if ($table == 'organism') {
+      continue;
+    }
     if (in_array("type_id", array_keys($schema['fields']))) {
       tripal_associate_chado_semweb_term($table, 'type_id', $term);
     }

+ 2 - 2
tripal_ws/includes/tripal_ws.rest_v0.1.inc

@@ -930,8 +930,8 @@ function tripal_ws_services_v0_1_rewrite_field_items_entity(&$items, &$response,
       if ($item_eid) {
         $item_entity = tripal_load_entity($item_etype, array($item_eid));
         $item_entity = reset($item_entity);
-        $item_term = tripal_load_term_entity(array('term_id' => $item_entity->term_id));
-        $items['@id'] = url($api_url . '/content/' . $item_term->name . '/' . $item_eid, array('absolute' => TRUE));
+        $bundle = tripal_load_bundle_entity(array('name' => $item_entity->bundle));
+        $items['@id'] = url($api_url . '/content/' . $bundle->label . '/' . $item_eid, array('absolute' => TRUE));
       }
       unset($items['entity']);
     }