Browse Source

Fixed bugs for display of custom field title and empty text. Fixed lots of bugs for data__accession, md5checksum, synonym, relationship fields.

Chun-Huai Cheng 8 years ago
parent
commit
ece6c4fc47

+ 1 - 1
tripal/includes/TripalFields/TripalFieldFormatter.inc

@@ -262,7 +262,7 @@ function tripal_autocomplete_organism($text) {
   $items = array();
   foreach ($results as $organism) {
     $name = $organism->genus . ' ' .$organism->species;
-    $items[$name] = $name;
+    $items["$name [id: $organism->organism_id]"] = $name;
   }
   drupal_json_output($items);
 }

+ 0 - 1
tripal_chado/includes/TripalFields/data__accession/data__accession.inc

@@ -90,7 +90,6 @@ class data__accession extends ChadoField {
 
     $field_name = $this->field['field_name'];
     $settings = $this->field['settings'];
-    $field_name = $this->field['field_name'];
     $field_type = $this->field['type'];
     $field_table = $this->instance['settings']['chado_table'];
     $field_column = $this->instance['settings']['chado_column'];

+ 7 - 2
tripal_chado/includes/TripalFields/data__accession/data__accession_widget.inc

@@ -124,6 +124,9 @@ class data__accession_widget extends ChadoFieldWidget {
     $fk_val = isset($form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $field_column]) ? $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $field_column] : '';
     $db_id = isset($form_state['values'][$field_name][$langcode][$delta]['db_id']) ? $form_state['values'][$field_name][$langcode][$delta]['db_id'] : '';
     $accession = isset($form_state['values'][$field_name][$langcode][$delta]['accession']) ? $form_state['values'][$field_name][$langcode][$delta]['accession'] : '';
+    if (!$accession) {
+      $accession = $form_state['values'][$field_name][$langcode][$delta]['value'];
+    }
     $version = isset($form_state['values'][$field_name][$langcode][$delta]['version']) ? $form_state['values'][$field_name][$langcode][$delta]['version'] : '';
 
     // If user did not select a database, we want to remove dbxref_id from the
@@ -180,11 +183,13 @@ class data__accession_widget extends ChadoFieldWidget {
  * An Ajax callback for the tripal_chado_admin_publish_form..
  */
 function data__accession_widget_form_ajax_callback($form, $form_state) {
+  
+  $instance = $form['#instance'];
   $field_name = $form_state['triggering_element']['#parents'][0];
   $field = field_info_field($field_name);
   $field_type = $field['type'];
-  $field_table = $this->instance['settings']['chado_table'];
-  $field_column = $this->instance['settings']['chado_column'];
+  $field_table = $instance['settings']['chado_table'];
+  $field_column = $instance['settings']['chado_column'];
   $field_prefix = 'chado-' . $field_table . '__' . $field_column;
 
   //   $db_id = tripal_chado_get_field_form_values($field_name, $form_state, 0, $field_prefix . '--db_id');

+ 2 - 2
tripal_chado/includes/TripalFields/data__sequence_checksum/data__sequence_checksum_widget.inc

@@ -49,12 +49,12 @@ class data__sequence_checksum_widget extends ChadoFieldWidget {
     $field_column = $this->instance['settings']['chado_column'];
 
     // Get the residues so we can calculate the length.
-    $residues = isset($form_state['values']['feature__residues'][$langcode][0]['chado-feature__residues']) ? $form_state['values']['feature__residues'][$langcode][0]['chado-feature__residues'] : '';
+    $residues = isset($form_state['values']['data__sequence'][$langcode][0]['chado-feature__residues']) ? $form_state['values']['data__sequence'][$langcode][0]['chado-feature__residues'] : '';
 
     if ($residues) {
       // Remove spaces and new lines from the residues string.
       $residues = preg_replace('/\s/', '', $residues);
-      $form_state['values']['feature__residues'][$langcode][0]['chado-feature__residues'] = $residues;
+      $form_state['values']['data__sequence'][$langcode][0]['chado-feature__residues'] = $residues;
       $form_state['values'][$field_name][$langcode][$delta]['chado-feature__md5checksum'] = md5($residues);
     }
     else {

+ 74 - 62
tripal_chado/includes/TripalFields/sbo__relationship/sbo__relationship.inc

@@ -78,13 +78,17 @@ class sbo__relationship extends ChadoField {
     $subject_fkey_table = '';
     $object_fkey_table = '';
     $fkeys = $schema['foreign keys'];
+    $subject_id_key = 'subject_id';
+    $object_id_key = 'object_id';
     foreach ($fkeys as $fktable => $details) {
       foreach ($details['columns'] as $fkey_lcolumn => $fkey_rcolumn) {
-        if ($fkey_lcolumn == 'subject_id') {
+        if (preg_match('/^subject_.*id/', $fkey_lcolumn)) {
           $subject_fkey_table = $fktable;
+          $subject_id_key = $fkey_lcolumn;
         }
-        if ($fkey_lcolumn == 'object_id') {
+        if (preg_match('/^object_.*id/', $fkey_lcolumn)) {
           $object_fkey_table = $fktable;
+          $object_id_key = $fkey_lcolumn;
         }
       }
     }
@@ -120,8 +124,8 @@ class sbo__relationship extends ChadoField {
       */
       ),
       'chado-' . $field_table . '__' . $pkey => '',
-      'chado-' . $field_table . '__subject_id' => '',
-      'chado-' . $field_table . '__object_id' => '',
+      'chado-' . $field_table . '__' . $subject_id_key => '',
+      'chado-' . $field_table . '__' . $object_id_key => '',
       'chado-' . $field_table . '__type_id' => '',
       // These elements don't need to follow the naming scheme above
       // becasue we don't need the chado_field_storage to try and
@@ -152,10 +156,10 @@ class sbo__relationship extends ChadoField {
       // relationship type and the object and subject
       'include_fk' => array(
         'type_id' => 1,
-        'object_id' => array(
+        $object_id_key => array(
           'type_id' => 1,
         ),
-        'subject_id'  => array(
+        $subject_id_key  => array(
           'type_id' => 1,
         ),
       ),
@@ -171,21 +175,12 @@ class sbo__relationship extends ChadoField {
     }
     $srelationships = null;
     $orelationships = null;
-    if ($rel_table == 'nd_reagent_relationship') {
-      $srelationships = $record->$rel_table->subject_reagent_id;
-      $orelationships = $record->$rel_table->object_reagent_id;
-    }
-    else if ($rel_table == 'project_relationship') {
-      $srelationships = $record->$rel_table->subject_project_id;
-      $orelationships = $record->$rel_table->object_project_id;
+
+    if (isset($record->$rel_table->$subject_id_key)) {
+      $srelationships = $record->$rel_table->$subject_id_key;
     }
-    else {
-      if (isset($record->$rel_table->subject_id)) {
-        $srelationships = $record->$rel_table->subject_id;
-      }
-      if (isset($record->$rel_table->object_id)) {
-        $orelationships = $record->$rel_table->object_id;
-      }
+    if (isset($record->$rel_table->$object_id_key)) {
+      $orelationships = $record->$rel_table->$object_id_key;
     }
 
     $i = 0;
@@ -194,10 +189,10 @@ class sbo__relationship extends ChadoField {
         $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->name;
-        $subject_type = $relationship->subject_id->type_id->name;
-        $object_name = $relationship->object_id->name;
-        $object_type = $relationship->object_id->type_id->name;
+        $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;
         $entity->{$field_name}['und'][$i]['value'] = array(
           'local:relationship_subject' => array(
             'rdfs:type' => $subject_type,
@@ -210,14 +205,14 @@ class sbo__relationship extends ChadoField {
             'entity' => 'TripalEntity:' . $entity->id,
           )
         );
-        if (property_exists($relationship->subject_id, 'uniquename')) {
-          $entity->{$field_name}['und'][$i]['value']['local:relationship_subject']['data:0842'] =  $relationship->subject_id->uniquename;;
+        if (property_exists($relationship->$subject_id_key, 'uniquename')) {
+          $entity->{$field_name}['und'][$i]['value']['local:relationship_subject']['data:0842'] =  $relationship->$subject_id_key->uniquename;;
         }
-        if (property_exists($relationship->object_id, 'uniquename')) {
-          $entity->{$field_name}['und'][$i]['value']['local:relationship_object']['data:0842'] = $relationship->object_id->uniquename;
+        if (property_exists($relationship->$object_id_key, 'uniquename')) {
+          $entity->{$field_name}['und'][$i]['value']['local:relationship_object']['data:0842'] = $relationship->$object_id_key->uniquename;
         }
-        if (property_exists($relationship->subject_id, 'entity_id')) {
-          $entity_id = $relationship->subject_id->entity_id;
+        if (property_exists($relationship->$subject_id_key, 'entity_id')) {
+          $entity_id = $relationship->$subject_id_key->entity_id;
           $entity->{$field_name}['und'][$i]['value']['local:relationship_subject']['entity'] = 'TripalEntity:' . $entity_id;
         }
         $rel_type_clean = lcfirst(preg_replace('/_/', ' ', $rel_type));
@@ -225,14 +220,15 @@ class sbo__relationship extends ChadoField {
         $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'] = $relationship->subject_id->$subject_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;
-        $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__object_id'] = $relationship->object_id->$object_pkey;
+        $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__' . $object_id_key] = $relationship->$object_id_key->$object_pkey;
 
         $entity->{$field_name}['und'][$i]['type_name'] = $relationship->type_id->name;
-        $entity->{$field_name}['und'][$i]['subject_name'] = $relationship->subject_id->name . ' [id: ' . $relationship->subject_id->$fkey_rcolumn . ']';
-        $entity->{$field_name}['und'][$i]['object_name'] = $relationship->object_id->name  . ' [id: ' . $relationship->object_id->$fkey_rcolumn . ']';
+        $entity->{$field_name}['und'][$i]['subject_name'] = $relationship->$subject_id_key->name . ' [id: ' . $relationship->$subject_id_key->$fkey_rcolumn . ']';
+        $entity->{$field_name}['und'][$i]['object_name'] = $relationship->$object_id_key->name  . ' [id: ' . $relationship->$object_id_key->$fkey_rcolumn . ']';
         if (array_key_exists('value', $schema['fields'])) {
           $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__value'] = $relationship->value;
         }
@@ -248,10 +244,21 @@ class sbo__relationship extends ChadoField {
         $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->name;
-        $subject_type = $relationship->subject_id->type_id->name;
-        $object_name = $relationship->object_id->name;
-        $object_type = $relationship->object_id->type_id->name;
+
+        $subject_name = isset($relationship->$subject_id_key->name) ? $relationship->$subject_id_key->name : '';
+        if (!$subject_name) {
+          if ($relationship->tablename == '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;
+          }
+        }
+        $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,
@@ -264,29 +271,30 @@ class sbo__relationship extends ChadoField {
             'schema:name' => $object_name,
           )
         );
-        if (property_exists($relationship->subject_id, 'uniquename')) {
-          $entity->{$field_name}['und'][$i]['value']['local:relationship_subject']['data:0842'] = $relationship->subject_id->uniquename;
+        if (property_exists($relationship->$subject_id_key, 'uniquename')) {
+          $entity->{$field_name}['und'][$i]['value']['local:relationship_subject']['data:0842'] = $relationship->$subject_id_key->uniquename;
         }
-        if (property_exists($relationship->object_id, 'uniquename')) {
-          $entity->{$field_name}['und'][$i]['value']['local:relationship_object']['data:0842'] = $relationship->object_id->uniquename;
+        if (property_exists($relationship->$object_id_key, 'uniquename')) {
+          $entity->{$field_name}['und'][$i]['value']['local:relationship_object']['data:0842'] = $relationship->$object_id_key->uniquename;
         }
-        if (property_exists($relationship->object_id, 'entity_id')) {
-          $entity_id = $relationship->object_id->entity_id;
+        if (property_exists($relationship->$object_id_key, 'entity_id')) {
+          $entity_id = $relationship->$object_id_key->entity_id;
           $entity->{$field_name}['und'][$i]['value']['local:relationship_object']['entity'] = 'TripalEntity:' . $entity_id;
         }
         $rel_type_clean = lcfirst(preg_replace('/_/', ' ', $rel_type));
-        $entity->{$field_name}['und'][$i]['value']['SIO:000493'] = 'This  ' .
-        $subject_type . ' ' . $verb . ' '  . $rel_type_clean . ' the '  .
+        $entity->{$field_name}['und'][$i]['value']['SIO:000493'] = 'This ' .
+        $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'] = $relationship->subject_id->$subject_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;
-        $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__object_id'] = $relationship->object_id->$object_pkey;
+        $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__' . $object_id_key] = $relationship->$object_id_key->$object_pkey;
 
         $entity->{$field_name}['und'][$i]['type_name'] = $relationship->type_id->name;
-        $entity->{$field_name}['und'][$i]['subject_name'] = $relationship->subject_id->name  . ' [id: ' . $relationship->subject_id->$fkey_rcolumn . ']';
-        $entity->{$field_name}['und'][$i]['object_name'] = $relationship->object_id->name  . ' [id: ' . $relationship->object_id->$fkey_rcolumn . ']';
+        $entity->{$field_name}['und'][$i]['subject_name'] = $subject_name . ' [id: ' . $relationship->$subject_id_key->$fkey_rcolumn . ']';
+        $entity->{$field_name}['und'][$i]['object_name'] = $object_name . ' [id: ' . $relationship->$object_id_key->$fkey_rcolumn . ']';
 
         if (array_key_exists('value', $schema['fields'])) {
           $entity->{$field_name}['und'][$i]['chado-' . $field_table . '__value'] = $relationship->value;
@@ -374,7 +382,7 @@ class sbo__relationship extends ChadoField {
    */
   public static function get_rel_verb($rel_type) {
     $rel_type_clean = lcfirst(preg_replace('/_/', ' ', $rel_type));
-    $verb = $rel_type_clean;
+    $verb = '';
     switch ($rel_type_clean) {
       case 'integral part of':
       case 'instance of':
@@ -652,6 +660,10 @@ class sbo__relationship extends ChadoField {
       $subject_id_key = 'subject_project_id';
       $object_id_key = 'object_project_id';
     }
+    else if ($field_table == 'organism_relationship') {
+      $subject_id_key = 'subject_organism_id';
+      $object_id_key = 'object_organism_id';
+    }
 
     foreach ($items as $delta => $item) {
       $subject_id = $item['chado-' . $field_table . '__' . $subject_id_key];
@@ -671,19 +683,19 @@ class sbo__relationship extends ChadoField {
       // Make sure we have values for all of the fields.
       $form_error = FALSE;
       if (!$type_name && !$type_id) {
-        $errors[$this->field['field_name']][$langcode][$delta][] = array(
+        $errors[$field_name][$delta]['und'][] = array(
           'error' => 'sbo__relationship',
           'message' => t("Please provide the type of relationship."),
         );
       }
       if ($entity and !$subject_name) {
-        $errors[$this->field['field_name']][$langcode][$delta][] = array(
+        $errors[$field_name][$delta]['und'][] = array(
           'error' => 'sbo__relationship',
           'message' => t("Please provide the subject of the relationship."),
         );
       }
       if ($entity and !$object_name) {
-        $errors[$this->field['field_name']][$langcode][$delta][] = array(
+        $errors[$field_name][$delta]['und'][] = array(
           'error' => 'sbo__relationship',
           'message' => t("Please provide the object of the relationship."),
         );
@@ -705,7 +717,7 @@ class sbo__relationship extends ChadoField {
           $values = array($fkey_rcolumn => $subject_id);
           $subject = chado_select_record($base_table, array($fkey_rcolumn), $values);
           if (count($subject) == 0) {
-            $errors[$this->field['field_name']][$langcode][$delta][] = array(
+            $errors[$field_name][$delta]['und'][] = array(
               'error' => 'sbo__relationship',
               'message' => t("The subject record cannot be found using the specified id (e.g. [id: xx])."),
             );
@@ -715,13 +727,13 @@ class sbo__relationship extends ChadoField {
           $values = array('uniquename' => $subject_name);
           $subject = chado_select_record($base_table, array($fkey_rcolumn), $values);
           if (count($subject) == 0) {
-            $errors[$this->field['field_name']][$langcode][$delta][] = array(
+            $errors[$field_name][$delta]['und'][] = array(
               'error' => 'sbo__relationship',
               'message' => t("The subject record cannot be found. Please check spelling."),
             );
           }
           elseif (count($subject) > 1) {
-            $errors[$this->field['field_name']][$langcode][$delta][] = array(
+            $errors[$field_name][$delta]['und'][] = array(
               'error' => 'sbo__relationship',
               'message' => t("The subject is not unique and therefore the relationship cannot be made."),
             );
@@ -739,7 +751,7 @@ class sbo__relationship extends ChadoField {
           $values = array($fkey_rcolumn => $object_id);
           $object = chado_select_record($base_table, array($fkey_rcolumn), $values);
           if (count($subject) == 0) {
-            $errors[$this->field['field_name']][$langcode][$delta][] = array(
+            $errors[$field_name][$delta]['und'][] = array(
               'error' => 'sbo__relationship',
               'message' => t("The object record cannot be found using the specified id (e.g. [id: xx])."),
             );
@@ -749,13 +761,13 @@ class sbo__relationship extends ChadoField {
           $values = array('uniquename' => $object_name);
           $object = chado_select_record($base_table, array($fkey_rcolumn), $values);
           if (count($object) == 0) {
-            $errors[$this->field['field_name']][$langcode][$delta][] = array(
+            $errors[$field_name][$delta]['und'][] = array(
               'error' => 'sbo__relationship',
               'message' => t("The object record cannot be found. Please check spelling."),
             );;
           }
           elseif (count($object) > 1) {
-            $errors[$this->field['field_name']][$langcode][$delta][] = array(
+            $errors[$field_name][$delta]['und'][] = array(
               'error' => 'sbo__relationship',
               'message' =>  t("The object is not unique and therefore the relationship cannot be made."),
             );
@@ -767,7 +779,7 @@ class sbo__relationship extends ChadoField {
       if ($entity) {
         $chado_record_id = $entity->chado_record_id;
         if ($object_id != $chado_record_id  and $subject_id != $chado_record_id) {
-          $errors[$this->field['field_name']][$langcode][$delta][] = array(
+          $errors[$field_name][$delta]['und'][] = array(
             'error' => 'sbo__relationship',
             'message' =>  t("Either the subject or the object in the relationship must refer to this record."),
           );
@@ -775,7 +787,7 @@ class sbo__relationship extends ChadoField {
 
         // Make sure that the object and subject are not both the same thing.
         if ($object_id == $subject_id) {
-          $errors[$this->field['field_name']][$langcode][$delta][] = array(
+          $errors[$field_name][$delta]['und'][] = array(
             'error' => 'sbo__relationship',
             'message' =>  t("The subject and the object in the relationship cannot both refer to the same record."),
           );

+ 3 - 6
tripal_chado/includes/TripalFields/sbo__relationship/sbo__relationship_formatter.inc

@@ -52,7 +52,8 @@ class sbo__relationship_formatter extends ChadoFieldFormatter {
    */
   public function view(&$element, $entity_type, $entity, $langcode, $items, $display) {
     // Get the settings
-    $settings = $display['settings'];
+    //$settings = $display['settings'];
+    $settings = $this->instance['display']['default']['settings'];
 
     $rows = array();
     $headers = array($settings['title']);
@@ -70,10 +71,7 @@ class sbo__relationship_formatter extends ChadoFieldFormatter {
       // Handle some special cases.
       // For mRNA objects we don't want to show the CDS, exons, 5' UTR, etc.
       // we want to show the parent gene and the protein.
-      if ($object_type == 'mRNA' and ($subject_type != 'polypeptide')) {
-        continue;
-      }
-      if ($subject_type == 'mRNA' and ($object_type != 'gene')) {
+      if ($object_type == 'mRNA' and (in_array($subject_type, array('CDS', 'exon', 'five_prime_UTR', 'three_prime_UTR')))) {
         continue;
       }
 
@@ -98,7 +96,6 @@ class sbo__relationship_formatter extends ChadoFieldFormatter {
       $rows[] = array($phrase);
     }
 
-
     // the $table array contains the headers and rows array as well as other
     // options for controlling the display of the table.  Additional
     // documentation can be found here:

+ 28 - 9
tripal_chado/includes/TripalFields/sbo__relationship/sbo__relationship_widget.inc

@@ -75,6 +75,10 @@ class sbo__relationship_widget extends ChadoFieldWidget {
       $subject_id_key = 'subject_project_id';
       $object_id_key = 'object_project_id';
     }
+    else if ($field_table == 'organism_relationship') {
+      $subject_id_key = 'subject_organism_id';
+      $object_id_key = 'object_organism_id';
+    }
 
     // If the field already has a value then it will come through the $items
     // array.  This happens when editing an existing record.
@@ -353,10 +357,15 @@ class sbo__relationship_widget extends ChadoFieldWidget {
       $subject_id_key = 'subject_project_id';
       $object_id_key = 'object_project_id';
     }
+    else if ($field_table == 'organism_relationship') {
+      $subject_id_key = 'subject_organism_id';
+      $object_id_key = 'object_organism_id';
+    }
 
+    $voc_id = array_key_exists('vocabulary', $form_state['values'][$field_name][$langcode][$delta]) ? $form_state['values'][$field_name][$langcode][$delta]['vocabulary'] : '';
     $type_name = array_key_exists('type_name', $form_state['values'][$field_name][$langcode][$delta]) ? $form_state['values'][$field_name][$langcode][$delta]['type_name'] : '';
-    $subject_id = $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $subject_id_key];
-    $object_id = $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $object_id_key];
+    $subject_id = isset($form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $subject_id_key]) ? $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $subject_id_key] : '';
+    $object_id = isset($form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $object_id_key]) ? $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $object_id_key]: '';
     $type_id = $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__type_id'];
 
     $subject_name = $form_state['values'][$field_name][$langcode][$delta]['subject_name'];
@@ -366,15 +375,23 @@ class sbo__relationship_widget extends ChadoFieldWidget {
     if (!($type_id or !$type_name) and !$subject_name and !$object_name) {
       return;
     }
+    else if ($type_name && $voc_id) {
+      $val = array(
+        'cv_id' => $voc_id,
+        'name' => $type_name
+      );
+      $cvterm = chado_generate_var('cvterm', $val);
+      $type_id = $cvterm->cvterm_id;
+    }
 
     // Do not proceed if subject ID or object ID does not exist
-    if (!key_exists('subject_id', $fkeys[$base_table]['columns']) ||
-        !key_exists('object_id', $fkeys[$base_table]['columns'])) {
+    if (!key_exists($subject_id_key, $fkeys[$base_table]['columns']) ||
+        !key_exists($object_id_key, $fkeys[$base_table]['columns'])) {
       return;
     }
     // Get the subject ID.
     $subject_id = '';
-    $fkey_rcolumn = $fkeys[$base_table]['columns']['subject_id'];
+    $fkey_rcolumn = $fkeys[$base_table]['columns'][$subject_id_key];
     $matches = array();
     if (preg_match('/\[id: (\d+)\]/', $subject_name, $matches)) {
       $subject_id =  $matches[1];
@@ -389,7 +406,7 @@ class sbo__relationship_widget extends ChadoFieldWidget {
 
     // Get the object ID.
     $object_id = '';
-    $fkey_rcolumn = $fkeys[$base_table]['columns']['object_id'];
+    $fkey_rcolumn = $fkeys[$base_table]['columns'][$object_id_key];
     $matches = array();
     if (preg_match('/\[id: (\d+)\]/', $object_name, $matches)) {
       $object_id = $matches[1];
@@ -401,13 +418,15 @@ class sbo__relationship_widget extends ChadoFieldWidget {
         $object_id = $object[0]->$fkey_rcolumn;
       }
     }
-    
+
     if ($subject_id && $object_id && $type_id) {
       // Set the IDs according to the values that were determined above.
       $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $subject_id_key] = $subject_id;
       $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $object_id_key] = $object_id;
       $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__type_id'] = $type_id;
-      $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__rank'] = $form_state['values'][$field_name][$langcode][$delta]['_weight'];
+      if ($field_table == 'feature_relationship') {
+        $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__rank'] = $form_state['values'][$field_name][$langcode][$delta]['_weight'];
+      }
     }
     else {
       $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__' . $subject_id_key] = '';
@@ -476,13 +495,13 @@ function theme_sbo__relationship_instance_settings ($variables) {
  * An Ajax callback for the relationshp widget.
  */
 function sbo__relationship_widget_form_ajax_callback(&$form, $form_state) {
-
   // Get the triggering element
   $form_element_name = $form_state['triggering_element']['#name'];
   preg_match('/(.+?)\[(.+?)\]\[(.+?)\]/', $form_element_name, $matches);
   $field = $matches[1];
   $lang = $matches[2];
   $delta = $matches[3];
+
   // Return the widget that triggered the AJAX call
   if (isset($form[$field][$lang][$delta])) {
     return $form[$field][$lang][$delta];

+ 12 - 13
tripal_chado/includes/TripalFields/schema__alternate_name/schema__alternate_name_widget.inc

@@ -157,21 +157,19 @@ class schema__alternate_name_widget extends ChadoFieldWidget {
 
       // Get the synonym. If one with the same name and type is already present
       // then use that. Otherwise, insert a new one.
-      if (!$synonym_id) {
-        $synonym = chado_generate_var('synonym', array('name' => $syn_name, 'type_id' => $syn_type));
-        if (!$synonym) {
-          $synonym = chado_insert_record('synonym', array(
-            'name' => $syn_name,
-            'type_id' => $syn_type,
-            'synonym_sgml' => '',
-          ));
-          $synonym = (object) $synonym;
-        }
-
-        // Set the synonym_id and FK value
-        $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__synonym_id'] = $synonym->synonym_id;
+      $synonym = chado_generate_var('synonym', array('name' => $syn_name, 'type_id' => $syn_type));
+      if (!$synonym) {
+        $synonym = chado_insert_record('synonym', array(
+          'name' => $syn_name,
+          'type_id' => $syn_type,
+          'synonym_sgml' => '',
+        ));
+        $synonym = (object) $synonym;
       }
 
+      // Set the synonym_id and FK value
+      $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__synonym_id'] = $synonym->synonym_id;
+
       if (!$pub_id) {
         $pub = chado_generate_var('pub', array('uniquename' => 'null'));
         $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__pub_id'] = $pub->pub_id;
@@ -183,6 +181,7 @@ class schema__alternate_name_widget extends ChadoFieldWidget {
       $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__synonym_id'] = '';
       $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__is_internal'] = '';
       $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__is_current'] = '';
+      $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__pub_id'] = '';
     }
   }
 

+ 8 - 0
tripal_chado/tripal_chado.module

@@ -577,6 +577,14 @@ function tripal_chado_menu() {
     'file path' => drupal_get_path('module', 'tripal_chado'),
     'type' => MENU_CALLBACK,
   );
+  $items['admin/tripal/storage/chado/auto_name/organism/%'] = array(
+    'page callback' => 'tripal_autocomplete_organism',
+    'page arguments' => array(6),
+    'access arguments' => array('access content'),
+    'file' => 'api/modules/tripal_chado.organism.api.inc',
+    'file path' => drupal_get_path('module', 'tripal_chado'),
+    'type' => MENU_CALLBACK,
+  );
   return $items;
 
 }