Browse Source

Adusting fields to support updated TripalField class

Stephen Ficklin 8 years ago
parent
commit
69b20d48b5

+ 11 - 3
tripal/includes/TripalField.inc

@@ -409,9 +409,17 @@ class TripalField {
    * Drupal typically does not provide a submit hook for fields.  The
    * TripalField provides one to allow for behind-the-scenes actions to
    * occur.   This function should never be used for updates, deletes or
-   * inserts into the storage backend. Rather, the appropriate Field Storage
-   * implementation will take care of that. Use this function instead to
-   * to change the $items array before insertion into the database.
+   * inserts for the Chado table associated with the field.  Rather, the
+   * storage backend should be allowed to handle inserts, updates deletes.
+   * However, it is permissible to perform inserts, updates or deletions within
+   * Chado using this function.  Those operations can be performed if needed but
+   * on other tables not directly associated with the field.
+   *
+   * An example is the chado.feature_synonym table.  The chado_linker__synonym
+   * field allows the user to provide a brand new synonynm and it must add it
+   * to the chado.synonym table prior to the record in the
+   * chado.feature_synonym table.  This insert occurs in the widgetFormSubmit
+   * function.
    *
    *  @param $entity_type
    *    The type of $entity.

+ 2 - 2
tripal/includes/tripal.entity.inc

@@ -46,10 +46,10 @@ function tripal_entity_info() {
     'access callback' => 'tripal_entity_access',
 
     // FALSE disables caching. Caching functionality is handled by Drupal core.
-    'static cache' => FALSE,
+//    'static cache' => FALSE,
 
     // Disable caching of fields
-    'field cache' => FALSE,
+//    'field cache' => FALSE,
 
     // This entity doesn't support bundles.
     'bundles' => array (),

+ 2 - 2
tripal_chado/includes/TripalFields/chado_feature__md5checksum.inc

@@ -75,11 +75,11 @@ class chado_feature__md5checksum  extends TripalField {
     $field_column = $field['settings']['chado_column'];
 
     // Get the residues so we can calculate teh length.
-    $residues = $form_state['values']['feature__residues']['und'][0]['value']['residues'];
+    $residues = $form_state['values']['feature__residues']['und'][0]['chado-feature__residues'];
 
     if ($residues) {
       $residues = preg_replace('/\s/', '', $residues);
-      $form_state['values']['feature__residues']['und'][0]['value']['chado-feature__residues'] = $residues;
+      $form_state['values']['feature__residues']['und'][0]['chado-feature__residues'] = $residues;
       $items[0]['chado-feature__md5checksum'] = md5($residues);
     }
     else {

+ 2 - 2
tripal_chado/includes/TripalFields/chado_feature__seqlen.inc

@@ -70,11 +70,11 @@ class chado_feature__seqlen extends TripalField {
     $field_column = $this->field['settings']['chado_column'];
 
     // Get the residues so we can calculate teh length.
-    $residues = $form_state['values']['feature__residues']['und'][0]['value']['residues'];
+    $residues = $form_state['values']['feature__residues']['und'][0]['chado-feature__residues'];
     // Remove any white spaces.
     if ($residues) {
       $residues = preg_replace('/\s/', '', $residues);
-      $form_state['values']['feature__residues']['und'][0]['value']['chado-feature__residues'] = $residues;
+      $form_state['values']['feature__residues']['und'][0]['chado-feature__residues'] = $residues;
       $items[0]['chado-feature__seqlen'] = strlen($residues);
     }
     else {

+ 4 - 3
tripal_chado/includes/TripalFields/chado_gene__transcripts.inc

@@ -159,10 +159,11 @@ class chado_gene__transcripts extends TripalField {
       $i++;
     }
   }
+
   /**
-   * @see TripalField::widgetForm()
+   * We don't want a widget so override this function.
    */
-  public function widgetForm(&$widget, &$form, &$form_state, $langcode, $items, $delta, $element) {
-
+  public static function widgetInfo() {
+    return array();
   }
 }

+ 42 - 41
tripal_chado/includes/TripalFields/chado_linker__cvterm.inc

@@ -33,8 +33,8 @@ class chado_linker__cvterm extends TripalField {
 
     $chado_table = $this->field['settings']['chado_table'];
     foreach ($items as $delta => $item) {
-      if ($item[$chado_table . '__cvterm_id']) {
-        $cvterm = chado_generate_var('cvterm', array('cvterm_id' => $item[$chado_table . '__cvterm_id']));
+      if ($item['chado-' . $chado_table . '__cvterm_id']) {
+        $cvterm = chado_generate_var('cvterm', array('cvterm_id' => $item['chado-' . $chado_table . '__cvterm_id']));
         $dbxref = $cvterm->dbxref_id;
 
         // Build the accession.
@@ -45,7 +45,7 @@ class chado_linker__cvterm extends TripalField {
 
         // Build the publication reference.
         $pub_ref = '';
-        $pub_id = $item[$chado_table . '__pub_id'];
+        $pub_id = $item['chado-' . $chado_table . '__pub_id'];
         if ($pub_id) {
           $pub = chado_generate_var('pub', array('pub_id' => $pub_id));
           $pub_ref = $pub->title;
@@ -53,7 +53,7 @@ class chado_linker__cvterm extends TripalField {
         $rows[] = array(
           $accession,
           $cvterm->definition,
-          $item[$chado_table . '__is_not'] ? 'Yes' : '',
+          $item['chado-' . $chado_table . '__is_not'] ? 'Yes' : '',
           '',
         );
       }
@@ -121,14 +121,15 @@ class chado_linker__cvterm extends TripalField {
     // array.  This happens when editing an existing record.
     if (array_key_exists($delta, $items)) {
       $record_id = $items[$delta]['value'];
-      $fkey_value = $items[$delta][$table_name . '__' . $fkey];
-      $cvterm_name = $items[$delta][$table_name . '--cvterm__name'];
-      $is_not = $items[$delta][$table_name . '__is_not'];
-      $cvterm_id = $items[$delta][$table_name . '__cvterm_id'];
+      $fkey_value = $items[$delta]['chado-' . $table_name . '__' . $fkey];
+      $cvterm_name = $items[$delta]['cvterm__name'];
+      $is_not = $items[$delta]['chado-' . $table_name . '__is_not'];
+      $cvterm_id = $items[$delta]['chado-' . $table_name . '__cvterm_id'];
     }
 
     // Check $form_state['values'] to see if an AJAX call set the values.
     if (array_key_exists('values', $form_state) and array_key_exists($delta, $form_state['values'])) {
+      // See example in chado_linker_contact.inc
 //       $record_id = tripal_chado_get_field_form_values($table_name, $form_state, $delta, $table_name);
 //       $fkey_value = tripal_chado_get_field_form_values($table_name, $form_state, $delta, $table_name . '__' . $fkey);
 //       $is_not = tripal_chado_get_field_form_values($table_name, $form_state, $delta, $table_name . '__is_not');
@@ -154,24 +155,24 @@ class chado_linker__cvterm extends TripalField {
       '#value' => $items[$delta]['value'],
     );
 
-    $widget[$table_name . '__' . $pkey] = array(
+    $widget['chado-' . $table_name . '__' . $pkey] = array(
       '#type' => 'value',
       '#default_value' => $record_id,
     );
-    $widget[$table_name . '--cvterm__cv_id--cv__cv_id'] = array(
+    $widget['cv__cv_id'] = array(
       '#type' => 'value',
       '#default_value' => $cv_id,
     );
-    $widget[$table_name . '__cvterm_id'] = array(
+    $widget['chado-' . $table_name . '__cvterm_id'] = array(
       '#type' => 'value',
       '#default_value' => $cvterm ? $cvterm->cvterm_id : '',
     );
-    $widget[$table_name . '__' . $fkey] = array(
+    $widget['chado-' . $table_name . '__' . $fkey] = array(
       '#type' => 'value',
       '#default_value' => $fkey_value,
     );
 
-    $widget[$table_name . '--cvterm__name'] = array(
+    $widget['cvterm__name'] = array(
       '#type' => 'textfield',
       '#title' => t('Term Name'),
       '#default_value' => $cvterm_name,
@@ -186,55 +187,55 @@ class chado_linker__cvterm extends TripalField {
       ),
     );
 
-    $widget[$table_name . '__is_not'] = array(
+    $widget['chado-' . $table_name . '__is_not'] = array(
       '#type' => 'checkbox',
       '#title' => t('Is Not'),
       '#default_value' => $is_not,
       '#required' => $element['#required'],
     );
 
-    $widget[$table_name . '--cvterm__definition'] = array(
+    $widget['cvterm__definition'] = array(
       '#type' => 'item',
       '#markup' => '',
     );
 
   }
-  
+
   public function widgetFormSubmit($entity_type, $entity, $langcode, &$items, $form, &$form_state) {
 
     $field_name = $element['#field_name'];
     $delta = $element['#delta'];
     $table_name = $element['#table_name'];
     $fkey = $element['#fkey_field'];
-    
+
     // If the form ID is field_ui_field_edit_form, then the user is editing the
     // field's values in the manage fields form of Drupal.  We don't want
     // to validate it as if it were being used in a data entry form.
     if ($form_state['build_info']['form_id'] =='field_ui_field_edit_form') {
       return;
     }
-    
+
     // Get the field values.
     //   $cvterm_id = tripal_chado_get_field_form_values($field_name, $form_state, $delta, $table_name . '__cvterm_id');
     //   $cv_id = tripal_chado_get_field_form_values($field_name, $form_state, $delta, $table_name . '--cvterm__cv_id--cv__cv_id');
     //   $cvterm_name = tripal_chado_get_field_form_values($field_name, $form_state, $delta, $table_name . '--cvterm__name');
     //   $cvterm_id = tripal_chado_get_field_form_values($field_name, $form_state, $delta, $table_name . '__cvterm_id');
     //   $pub_id = tripal_chado_get_field_form_values($field_name, $form_state, $delta, $table_name . '__pub_id');
-    
+
     // If the user provided a cv_id and a name then we want to set the
     // foreign key value to be the chado_record_idd
     if ($cvterm_name) {
-    
+
       $fkey_value = $element['#entity']->chado_record_id;
       tripal_chado_set_field_form_values($field_name, $form_state, $fkey_value, $delta, $table_name . '__' . $fkey);
-    
+
       // Get the cvterm ID. If one is not available because it's a newly added
       // record, then we need to retrieve it and set the form element.
       if (!$cvterm_id) {
         $cvterm = tripal_get_cvterm(array('cv_id' => $cv_id, 'name' => $cvterm_name));
         tripal_chado_set_field_form_values($field_name, $form_state, $cvterm->cvterm_id, $delta, $table_name . '__cvterm_id');
       }
-    
+
       if (!$pub_id) {
         $pub = chado_generate_var('pub', array('uniquename' => 'null'));
         tripal_chado_set_field_form_values($field_name, $form_state, $pub->pub_id, $delta, $table_name . '__pub_id');
@@ -272,23 +273,23 @@ class chado_linker__cvterm extends TripalField {
     // Set some defaults for the empty record.
     $entity->{$field_name}['und'][0] = array(
       'value' => '',
-      $field_table . '__' . $fkey_lcolumn => '',
-      $field_table . '__' . 'cvterm_id' => '',
+      'chado-' . $field_table . '__' . $fkey_lcolumn => '',
+      'chado-' . $field_table . '__' . 'cvterm_id' => '',
       // The pub column is present in the cell_line_cvterm, feature_cvterm,
       // library_cvterm, phenotype_comparision_cvterm, phenotype_cvterm,
       // stock_cvterm, and stock_relationship_cvterm.
-      $field_table . '__' . 'pub_id' => '',
+      'chado-' . $field_table . '__' . 'pub_id' => '',
       // The is_not column is present in feature_cvterm and stock_cvterm tables.
-      $field_table . '__' . 'is_not' => '',
+      'chado-' . $field_table . '__' . 'is_not' => '',
       // The rank column is present in the cell_line_cvterm, expression_cvterm,
       // feature_cvterm, phenotype_comparision_cvterm, phenotype_cvterm,
       // and stock_cvterm tables.
-      $field_table . '__' . 'rank' => '',
+      'chado-' . $field_table . '__' . 'rank' => '',
       // The cvterm_type_id is present in the expression_cvterm table.
-      $field_table . '--' . 'cvterm_type_id' => '',
+      'cvterm_type_id' => '',
       // The following field are to help link the cvterm.
-      $field_table . '--' . 'cvterm__cv_id--cv__cv_id' => '',
-      $field_table . '--' . 'cvterm__name' => '',
+      'cv__cv_id' => '',
+      'cvterm__name' => '',
     );
 
     // Get the annotations associated with this base record for this fields type.
@@ -309,14 +310,14 @@ class chado_linker__cvterm extends TripalField {
       $cvterm = chado_generate_var('cvterm', array('cvterm_id' => $linker->cvterm_id));
       $entity->{$field_name}['und'][$i] = array(
         'value' => $linker->$pkey,
-        $field_table . '__' . $fkey_lcolumn => $linker->$fkey_lcolumn,
-        $field_table . '__' . 'cvterm_id' => $linker->cvterm_id,
-        $field_table . '__' . 'pub_id' => property_exists($linker, 'pub_id') ? $linker->pub_id : '',
-        $field_table . '__' . 'is_not' => property_exists($linker, 'is_not') ? $linker->is_not : '',
-        $field_table . '__' . 'rank' => property_exists($linker, 'rank') ? $linker->rank : '',
-        $field_table . '__' . 'cvterm_type_id' => property_exists($linker, 'cvterm_type_id') ? $linker->cvterm_type_id : '',
-        $field_table . '--' . 'cvterm__cv_id--cv__cv_id' => $cvterm->cv_id->cv_id,
-        $field_table . '--' . 'cvterm__name' => $cvterm->name,
+        'chado-' . $field_table . '__' . $fkey_lcolumn => $linker->$fkey_lcolumn,
+        'chado-' . $field_table . '__' . 'cvterm_id' => $linker->cvterm_id,
+        'chado-' . $field_table . '__' . 'pub_id' => property_exists($linker, 'pub_id') ? $linker->pub_id : '',
+        'chado-' . $field_table . '__' . 'is_not' => property_exists($linker, 'is_not') ? $linker->is_not : '',
+        'chado-' . $field_table . '__' . 'rank' => property_exists($linker, 'rank') ? $linker->rank : '',
+        'chado-' . $field_table . '__' . 'cvterm_type_id' => property_exists($linker, 'cvterm_type_id') ? $linker->cvterm_type_id : '',
+        'cv__cv_id' => $cvterm->cv_id->cv_id,
+        'cvterm__name' => $cvterm->name,
       );
     }
   }
@@ -338,13 +339,13 @@ function theme_chado_linker__cvterm_widget($variables) {
   $layout = "
       <div class=\"annotation-cvterm-widget\">
         <div class=\"annotation-cvterm-widget-item\">" .
-        drupal_render($element[$table_name . '--cvterm__cv_id--cv__cv_id']) . "
+        drupal_render($element['cv__cv_id']) . "
         </div>
         <div class=\"annotation-cvterm-widget-item\">" .
-        drupal_render($element[$table_name . '--cvterm__name']) . "
+        drupal_render($element['cvterm__name']) . "
         </div>
         <div class=\"annotation-cvterm-widget-item\">" .
-        drupal_render($element[$table_name . '__is_not']) . "
+        drupal_render($element['chado-' . $table_name . '__is_not']) . "
         </div>
       </div>
     ";