Browse Source

Fixed bugs found when saving an organism or a feature

Chun-Huai Cheng 8 years ago
parent
commit
742e3d72ac

+ 4 - 4
tripal_chado/includes/TripalFields/data__accession/data__accession_widget.inc

@@ -44,15 +44,15 @@ class data__sequence_length_widget extends ChadoFieldWidget {
     $field_column = $this->instance['settings']['chado_column'];
 
     // Get the residues so we can calculate teh length.
-    $residues = $form_state['values']['feature__residues']['und'][0]['chado-feature__residues'];
+    $residues = $form_state['values']['data__sequence']['und'][0]['value'];
     // Remove any white spaces.
     if ($residues) {
       $residues = preg_replace('/\s/', '', $residues);
-      $form_state['values']['feature__residues']['und'][0]['chado-feature__residues'] = $residues;
-      $items[0]['chado-feature__seqlen'] = strlen($residues);
+      $form_state['values']['data__sequence']['und'][0]['value'] = $residues;
+      $form_state['values']['data__sequence_length']['und'][0]['chado-feature__seqlen'] = strlen($residues);
     }
     else {
-      $items[0]['chado-feature__seqlen'] = '__NULL__';
+      $form_state['values']['data__sequence_length']['und'][0]['chado-feature__seqlen'] = '__NULL__';
     }
   }
 }

+ 10 - 6
tripal_chado/includes/TripalFields/obi__organism/obi__organism.inc

@@ -180,8 +180,12 @@ class sbo__relationship extends ChadoField {
       $orelationships = $record->$rel_table->object_project_id;
     }
     else {
-      $srelationships = $record->$rel_table->subject_id;
-      $orelationships = $record->$rel_table->object_id;
+      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;
+      }
     }
 
     $i = 0;
@@ -650,10 +654,10 @@ class sbo__relationship extends ChadoField {
     }
 
     foreach ($items as $delta => $item) {
-      $subject_id = $item['chado' . $field_table . '__' . $subject_id_key];
-      $object_id = $item['chado' . $field_table . '__' . $object_id_key];
-      $type_id = $item['chado' . $field_table . '__type_id'];
-      $type_id = isset($item['type_id']) ? $item['chado' . $field_table . '__type_id'] : $type_id;
+      $subject_id = $item['chado-' . $field_table . '__' . $subject_id_key];
+      $object_id = $item['chado-' . $field_table . '__' . $object_id_key];
+      $type_id = $item['chado-' . $field_table . '__type_id'];
+      $type_id = isset($item['type_id']) ? $item['chado-' . $field_table . '__type_id'] : $type_id;
       $type_name = isset($item['type_name']) ? $item['type_name'] : '';
       $subject_name = $item['subject_name'];
       $object_name = $item['object_name'];

+ 22 - 13
tripal_chado/includes/TripalFields/sbo__relationship/sbo__relationship_widget.inc

@@ -114,7 +114,7 @@ class sbo__relationship_widget extends ChadoFieldWidget {
       $subject_uniquename = $form_state['values'][$field_name]['und'][$delta]['subject_name'];
       $type = $form_state['values'][$field_name]['und'][$delta]['type_name'];
     }
-   $widget['#table_name'] = $chado_table;
+   $widget['#table_name'] = $field_table;
 
     $widget['#fkeys'] = $schema['foreign keys'];
     $widget['#base_table'] = $base_table;
@@ -160,7 +160,7 @@ class sbo__relationship_widget extends ChadoFieldWidget {
       '#title' => t('Subject'),
       '#default_value' => $subject_uniquename,
       '#required' => $element['#required'],
-      '#maxlength' => array_key_exists('length', $schema['fields'][$subject_id_key]) ? $schema['fields'][$subject_id_key]['length'] : 255,
+      '#maxlength' => array_key_exists($subject_id_key, $schema['fields']) && array_key_exists('length', $schema['fields'][$subject_id_key]) ? $schema['fields'][$subject_id_key]['length'] : 255,
       '#size' => 35,
       '#autocomplete_path' => "admin/tripal/storage/chado/auto_name/$base_table",
     );
@@ -321,7 +321,7 @@ class sbo__relationship_widget extends ChadoFieldWidget {
       '#title' => t('Object'),
       '#default_value' => $object_uniquename,
       '#required' => $element['#required'],
-      '#maxlength' => array_key_exists('length', $schema['fields'][$object_id_key]) ? $schema['fields'][$object_id_key]['length'] : 255,
+      '#maxlength' => array_key_exists($object_id_key, $schema['fields']) && array_key_exists('length', $schema['fields'][$object_id_key]) ? $schema['fields'][$object_id_key]['length'] : 255,
       '#size' => 35,
       '#autocomplete_path' => "admin/tripal/storage/chado/auto_name/$base_table",
     );
@@ -354,10 +354,10 @@ class sbo__relationship_widget extends ChadoFieldWidget {
       $object_id_key = 'object_project_id';
     }
 
-    $type_name = array_key_exists('type_name', $item) ? $item['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];
-    $type_id = $form_state['values'][$field_name][$langcode][$delta]['chado' . $field_table . '__type_id'];
+    $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];
+    $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'];
     $object_name = $form_state['values'][$field_name][$langcode][$delta]['object_name'];
@@ -367,6 +367,11 @@ class sbo__relationship_widget extends ChadoFieldWidget {
       return;
     }
 
+    // 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'])) {
+      return;
+    }
     // Get the subject ID.
     $subject_id = '';
     $fkey_rcolumn = $fkeys[$base_table]['columns']['subject_id'];
@@ -377,7 +382,9 @@ class sbo__relationship_widget extends ChadoFieldWidget {
     else {
       $values = array('uniquename' => $subject_name);
       $subject = chado_select_record($base_table, array($fkey_rcolumn), $values);
-      $subject_id = $subject[0]->$fkey_rcolumn;
+      if(count($subject) > 0) {dpm($subject);
+        $subject_id = $subject[0]->$fkey_rcolumn;
+      }
     }
 
     // Get the object ID.
@@ -390,14 +397,16 @@ class sbo__relationship_widget extends ChadoFieldWidget {
     else {
       $values = array('uniquename' => $object_name);
       $object = chado_select_record($base_table, array($fkey_rcolumn), $values);
-      $object_id = $object[0]->$fkey_rcolumn;
+      if (count($object) > 0) {
+        $object_id = $object[0]->$fkey_rcolumn;
+      }
     }
 
     // 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_name;
-    $form_state['values'][$field_name][$langcode][$delta]['chado' . $field_table . '__rank'] = $item['_weight'];
+    $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_name;
+    $form_state['values'][$field_name][$langcode][$delta]['chado-' . $field_table . '__rank'] = $form_state['values'][$field_name][$langcode][$delta]['_weight'];
   }
 
   /**

+ 5 - 0
tripal_chado/tripal_chado.module

@@ -692,6 +692,11 @@ function tripal_chado_theme($existing, $type, $theme, $path) {
       );
       $mapped_table = chado_get_cvterm_mapping($params);
 
+      // Do not proceed if there is not a mapped_table
+      if (!$mapped_table) {
+        return;
+      }
+      
       $chado_table = $mapped_table->chado_table;
       $legacy_template = 'legacy_template--chado_' . $chado_table;
       if (key_exists($legacy_template, $enabled_templates) && $enabled_templates[$legacy_template]) {