Explorar el Código

Converting fields over to classes... dbxref_id done.

Stephen Ficklin hace 9 años
padre
commit
a44fd31eda

+ 16 - 3
tripal/includes/TripalField.inc

@@ -4,6 +4,20 @@
 /**
  * A base class for all Fields supported by the Tripal Chado module.
  *
+ * This class provides all of the necessary functions for a TripalField field.
+ * It helps simplify and unify the process of creating fields for Tripal.  This
+ * class simply defines the function prototypes. It is up to the class that
+ * extends this class to implement the functions.
+ *
+ * Each module that creates new fields should use the normal Field API hooks
+ * (e.g. hook_field_info(), hook_field_widget_form(), etc.) to instantiate the
+ * appropriate TripalField class.
+ *
+ * Because of the way Drupal handles callbacks, form validate functions,
+ * AJAX callbacks and theme functions cannot be part of the implementation of
+ * this class.  Those functions should be added to the bottom of the file
+ * where the child class is housed..
+ *
  */
 class TripalField {
   /**
@@ -180,7 +194,7 @@ class TripalField {
    * @param $record
    *
    */
-  public function load($field, &$entity) {
+  public function load($field, $entity, $details) {
 
   }
 
@@ -194,8 +208,7 @@ class TripalField {
    * @return
    *   A single value or an array of values that should be used for this field.
    */
-  public function ws_formatter(&$element, $entity_type, $entity,
-      $field, $instance, $items) {
+  public function ws_formatter($entity_type, $entity, $field, $instance, $items) {
 
   }
 

+ 0 - 7
tripal_chado/api/tripal_chado.api.inc

@@ -219,13 +219,6 @@ function tripal_replace_chado_tokens($string, $record) {
             if (property_exists($var, $index)) {
               $value = $var->$index;
             }
-            else {
-              tripal_report_error('tripal_chado', TRIPAL_WARNING,
-                'Tokens: Unable to determine the value of %token. Things went awry when trying ' .
-                'to access \'%index\' for the following: \'%var\'.',
-                array('%token' => $token, '%index' => $index, '%var' => print_r($var,TRUE))
-              );
-            }
           }
           // if the $var is an array then there are multiple instances of the same
           // table in a FK relationship (e.g. relationship tables)

+ 312 - 358
tripal_chado/includes/fields/chado_base__dbxref_id.inc

@@ -1,295 +1,294 @@
 <?php
-/**
- * Implements hook_info() for fields.
- *
- * This is a hook provided by the tripal_chado module for offloading the
- * hook_field_info() hook for each field to specify.
- */
-function chado_base__dbxref_id_info() {
-  return array(
-    'label' => t('Cross reference'),
-    'description' => t('This record can be cross referenced with a record in
-      another online database. This field is intended for the most prominent
-      reference.  At a minimum, the database and accession must be provided.'),
-    'default_widget' => 'chado_base__dbxref_id_widget',
-    'default_formatter' => 'chado_base__dbxref_id_formatter',
-    'settings' => array(),
-    'storage' => array(
-      'type' => 'field_chado_storage',
-      'module' => 'tripal_chado',
-      'active' => TRUE
-    ),
-  );
-}
-/**
- * Implements hook_attach_info().
- *
- * This is a hook provided by the tripal_chado module. It allows the field
- * to specify which bundles it will attach to and to specify the settings.
- *
- * @param $entity_type
- * @param $entity
- * @param $term
- *
- * @return
- *   A field array
- */
-function chado_base__dbxref_id_attach_info($entity_type, $bundle, $target) {
-
-  $field_info = array();
-
-  $table_name = $target['data_table'];
-  $type_table = $target['type_table'];
-  $type_field = $target['field'];
-  $cv_id      = $target['cv_id'];
-  $cvterm_id  = $target['cvterm_id'];
 
-  // Check the schema for the data table if it does not have
-  // a 'dbxref_id' column then we don't want to attach this field.
-  $schema = chado_get_schema($table_name);
-  if (!array_key_exists('dbxref_id', $schema['fields'])) {
-    return $field_info;
+class chado_base__dbxref_id extends TripalField {
+  /**
+   * @see TripalField::field_info()
+   */
+  function field_info() {
+    return array(
+      'label' => t('Cross reference'),
+      'description' => t('This record can be cross referenced with a record in
+        another online database. This field is intended for the most prominent
+        reference.  At a minimum, the database and accession must be provided.'),
+      'default_widget' => 'chado_base__dbxref_id_widget',
+      'default_formatter' => 'chado_base__dbxref_id_formatter',
+      'settings' => array(),
+      'storage' => array(
+        'type' => 'field_chado_storage',
+        'module' => 'tripal_chado',
+        'active' => TRUE
+      ),
+    );
   }
+  /**
+   * @see TripalField::attach_info()
+   */
+  function attach_info($entity_type, $bundle, $target) {
+
+    $field_info = array();
+
+    $table_name = $target['data_table'];
+    $type_table = $target['type_table'];
+    $type_field = $target['field'];
+    $cv_id      = $target['cv_id'];
+    $cvterm_id  = $target['cvterm_id'];
+
+    // Check the schema for the data table if it does not have
+    // a 'dbxref_id' column then we don't want to attach this field.
+    $schema = chado_get_schema($table_name);
+    if (!array_key_exists('dbxref_id', $schema['fields'])) {
+      return $field_info;
+    }
 
-  // There is an dbxref_id column so attach the field!
-  $field_info = array(
-    'field_name' => $table_name . '__dbxref_id',
-    'field_type' => 'chado_base__dbxref_id',
-    'widget_type' => 'chado_base__dbxref_id_widget',
-    'description' => 'This record can be cross referenced with a ' .
-      'record in another online database. The primary reference is for the ' .
-      'most prominent reference.  At a minimum, the database and accession ' .
-      'must be provided.  To remove a set reference, change the database ' .
-      'field to "Select a Database".',
-    'label' => 'Cross Reference',
-    'is_required' => 0,
-    'storage' => 'field_chado_storage',
-    'widget_settings' => array(
-      'display_label' => 1
-    ),
-    'field_settings' => array(
-      'chado_table' => $table_name,
-      'chado_column' => 'dbxref_id',
-      'semantic_web' => array(
-        'type' => '',
-        'ns' => '',
-        'nsurl' => '',
+    // There is an dbxref_id column so attach the field!
+    $field_info = array(
+      'field_name' => $table_name . '__dbxref_id',
+      'field_type' => 'chado_base__dbxref_id',
+      'widget_type' => 'chado_base__dbxref_id_widget',
+      'description' => 'This record can be cross referenced with a ' .
+        'record in another online database. The primary reference is for the ' .
+        'most prominent reference.  At a minimum, the database and accession ' .
+        'must be provided.  To remove a set reference, change the database ' .
+        'field to "Select a Database".',
+      'label' => 'Cross Reference',
+      'is_required' => 0,
+      'storage' => 'field_chado_storage',
+      'widget_settings' => array(
+        'display_label' => 1
       ),
-    ),
-  );
+      'field_settings' => array(
+        'chado_table' => $table_name,
+        'chado_column' => 'dbxref_id',
+        'semantic_web' => array(
+          'type' => '',
+          'ns' => '',
+          'nsurl' => '',
+        ),
+      ),
+    );
 
-  return $field_info;
+    return $field_info;
 
-}
-/**
- * Implements hook_widget_info.
- *
- * This is a hook provided by the tripal_chado module for offloading
- * the hook_field_widget_info() hook for each field to specify.
- */
-function chado_base__dbxref_id_widget_info() {
-  return array(
-    'label' => t('Cross reference'),
-    'field types' => array('chado_base__dbxref_id'),
-    'description' => t('This record can be cross referenced with a record in
-        another online database. This field is intended for the most
-        prominent reference.  At a minimum, the database and accession
-        must be provided.'),
-  );
-}
-/**
- * Implements hook_formatter_info.
- *
- * This is a hook provided by the tripal_chado module for
- * offloading the hook_field_formatter_info() for each field
- * to specify.
- *
- */
-function chado_base__dbxref_id_formatter_info() {
-  return array(
-    'label' => t('Database Cross Reference'),
-    'field types' => array('chado_base__dbxref_id'),
-    'settings' => array(
-    ),
-  );
-}
-/**
- *
- * @param unknown $entity_type
- * @param unknown $entity
- * @param unknown $field
- * @param unknown $instance
- * @param unknown $langcode
- * @param unknown $items
- * @param unknown $display
- */
-function chado_base__dbxref_id_formatter(&$element, $entity_type, $entity, $field,
-    $instance, $langcode, $items, $display) {
+  }
+  /**
+   * @see TripalField::widget_info()
+   */
+  function widget_info() {
+    return array(
+      'label' => t('Cross reference'),
+      'field types' => array('chado_base__dbxref_id'),
+      'description' => t('This record can be cross referenced with a record in
+          another online database. This field is intended for the most
+          prominent reference.  At a minimum, the database and accession
+          must be provided.'),
+    );
+  }
+  /**
+   * @see TripalField::formatter_info()
+   */
+  function formatter_info() {
+    return array(
+      'label' => t('Database Cross Reference'),
+      'field types' => array('chado_base__dbxref_id'),
+      'settings' => array(
+      ),
+    );
+  }
+  /**
+   * @see TripalField::formatter_view()
+   */
+  function formatter_view(&$element, $entity_type, $entity, $field,
+      $instance, $langcode, $items, $display) {
+
+    $record = $entity->chado_record;
+
+    foreach ($items as $delta => $item) {
+      $accession = '';
+      if ($item['value']) {
+        $dbxref = $record->dbxref_id;
+        $accession = $dbxref->db_id->name . ':' . $dbxref->accession;
+        if ($dbxref->db_id->urlprefix) {
+          $accession = l($accession, $dbxref->db_id->urlprefix . '/' . $dbxref->accession,
+              array('attributes' => array('target' => '_blank')));
+        }
+      }
+      $element[$delta] = array(
+        '#type' => 'markup',
+        '#markup' => $accession,
+      );
+    }
+  }
+  /**
+   * @see TripalField::widget_form()
+   */
+  function widget_form(&$widget, $form, $form_state, $field, $instance,
+      $langcode, $items, $delta, $element) {
 
-  $record = $entity->chado_record;
+    $field_name = $field['field_name'];
 
-  foreach ($items as $delta => $item) {
+    // Get the field defaults.
+    $dbxref_id = '';
+    $db_id = '';
     $accession = '';
-    if ($item['value']) {
-      $dbxref = $record->dbxref_id;
-      $accession = $dbxref->db_id->name . ':' . $dbxref->accession;
-      if ($dbxref->db_id->urlprefix) {
-        $accession = l($accession, $dbxref->db_id->urlprefix . '/' . $dbxref->accession,
-            array('attributes' => array('target' => '_blank')));
-      }
+    $version = '';
+    $description = '';
+
+    // If the field already has a value then it will come through the $items
+    // array.  This happens when editing an existing record.
+    if (array_key_exists($delta, $items)) {
+      $dbxref_id = $items[$delta]['value'];
+      $db_id = $items[$delta]['dbxref__db_id'];
+      $accession = $items[$delta]['dbxref__accession'];
+      $version = $items[$delta]['dbxref__version'];
+      $description = $items[$delta]['dbxref__description'];
     }
-    $element[$delta] = array(
-      '#type' => 'markup',
-      '#markup' => $accession,
-    );
-  }
-}
-/**
- *
- * @param unknown $field_name
- * @param unknown $widget
- * @param unknown $form
- * @param unknown $form_state
- * @param unknown $field
- * @param unknown $instance
- * @param unknown $langcode
- * @param unknown $items
- * @param unknown $delta
- * @param unknown $element
- */
-function chado_base__dbxref_id_widget(&$widget, $form, $form_state, $field, $instance, $langcode, $items, $delta, $element) {
-  $field_name = $field['field_name'];
-
-  // Get the field defaults.
-  $dbxref_id = '';
-  $db_id = '';
-  $accession = '';
-  $version = '';
-  $description = '';
-
-  // If the field already has a value then it will come through the $items
-  // array.  This happens when editing an existing record.
-  if (array_key_exists($delta, $items)) {
-    $dbxref_id = $items[$delta]['value'];
-    $db_id = $items[$delta]['dbxref__db_id'];
-    $accession = $items[$delta]['dbxref__accession'];
-    $version = $items[$delta]['dbxref__version'];
-    $description = $items[$delta]['dbxref__description'];
-  }
 
-  // Check $form_state['values'] to see if an AJAX call set the values.
-  if (array_key_exists('values', $form_state)) {
-    $dbxref_id = tripal_chado_get_field_form_values($field_name, $form_state, 0, $field_name);
-    $db_id = tripal_chado_get_field_form_values($field_name, $form_state, 0, "dbxref__db_id");
-    $accession = tripal_chado_get_field_form_values($field_name, $form_state, 0, "dbxref__accession");
-    $version = tripal_chado_get_field_form_values($field_name, $form_state, 0, "dbxref__version");
-    $description = tripal_chado_get_field_form_values($field_name, $form_state, 0, "dbxref__description");
-  }
+    // Check $form_state['values'] to see if an AJAX call set the values.
+    if (array_key_exists('values', $form_state)) {
+      $dbxref_id = tripal_chado_get_field_form_values($field_name, $form_state, 0, $field_name);
+      $db_id = tripal_chado_get_field_form_values($field_name, $form_state, 0, "dbxref__db_id");
+      $accession = tripal_chado_get_field_form_values($field_name, $form_state, 0, "dbxref__accession");
+      $version = tripal_chado_get_field_form_values($field_name, $form_state, 0, "dbxref__version");
+      $description = tripal_chado_get_field_form_values($field_name, $form_state, 0, "dbxref__description");
+    }
 
-  // If we are here because our parent was triggered in a form submit
-  // then that means an ajax call was made and we don't want the fieldset to
-  // be closed when it returns from the ajax call.
-//   $collapsed = TRUE;
-//   if (array_key_exists('triggering_element', $form_state) and
-//       $form_state['triggering_element']['#parents'][0] == $field_name) {
-//     $collapsed = FALSE;
-//   }
-//   if ($dbxref_id) {
-//     $collapsed = FALSE;
-//   }
-
-  $schema = chado_get_schema('dbxref');
-  $options = tripal_get_db_select_options();
-
-  $widget['#element_validate'] = array('chado_base__dbxref_id_widget_validate');
-  $widget['#theme'] = 'chado_base__dbxref_id_widget';
-  $widget['#prefix'] =  "<span id='$field_name-dbxref--db-id'>";
-  $widget['#suffix'] =  "</span>";
-
-  // A temporary element used for theming the fieldset.
-  $widget['#theme_settings'] = array(
-    '#title' => $element['#title'],
-    '#description' =>  $element['#description'],
-    '#weight' => isset($element['#weight']) ? $element['#weight'] : 0,
-    '#theme' => 'chado_base__dbxref_id_widget',
-    //'#collapsible' => TRUE,
-    //'#collapsed' => $collapsed,
-  );
+    // If we are here because our parent was triggered in a form submit
+    // then that means an ajax call was made and we don't want the fieldset to
+    // be closed when it returns from the ajax call.
+  //   $collapsed = TRUE;
+  //   if (array_key_exists('triggering_element', $form_state) and
+  //       $form_state['triggering_element']['#parents'][0] == $field_name) {
+  //     $collapsed = FALSE;
+  //   }
+  //   if ($dbxref_id) {
+  //     $collapsed = FALSE;
+  //   }
+
+    $schema = chado_get_schema('dbxref');
+    $options = tripal_get_db_select_options();
+
+    $widget['#element_validate'] = array('chado_base__dbxref_id_widget_validate');
+    $widget['#theme'] = 'chado_base__dbxref_id_widget';
+    $widget['#prefix'] =  "<span id='$field_name-dbxref--db-id'>";
+    $widget['#suffix'] =  "</span>";
+
+    // A temporary element used for theming the fieldset.
+    $widget['#theme_settings'] = array(
+      '#title' => $element['#title'],
+      '#description' =>  $element['#description'],
+      '#weight' => isset($element['#weight']) ? $element['#weight'] : 0,
+      '#theme' => 'chado_base__dbxref_id_widget',
+      //'#collapsible' => TRUE,
+      //'#collapsed' => $collapsed,
+    );
 
-  $widget['value'] = array(
-    '#type' => 'value',
-    '#default_value' => $dbxref_id,
-  );
+    $widget['value'] = array(
+      '#type' => 'value',
+      '#default_value' => $dbxref_id,
+    );
 
-  $widget['dbxref__db_id'] = array(
-    '#type' => 'select',
-    '#title' => t('Database'),
-    '#options' => $options,
-    '#required' => $element['#required'],
-    '#default_value' => $db_id,
-    '#ajax' => array(
-      'callback' => "chado_base__dbxref_id_widget_form_ajax_callback",
-      'wrapper' => "$field_name-dbxref--db-id",
-      'effect' => 'fade',
-      'method' => 'replace'
-    ),
-  );
-  $widget['dbxref__accession'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Accession'),
-    '#default_value' => $accession,
-    '#required' => $element['#required'],
-    '#maxlength' => array_key_exists('length', $schema['fields']['accession']) ? $schema['fields']['accession']['length'] : 255,
-    '#size' => 15,
-    '#autocomplete_path' => 'admin/tripal/storage/chado/auto_name/dbxref/' . $db_id,
-    '#ajax' => array(
-      'callback' => "tripal_chado_dbxref_widget_form_ajax_callback",
-      'wrapper' => "$field_name-dbxref--db-id",
-      'effect' => 'fade',
-      'method' => 'replace'
-    ),
-    '#disabled' => $db_id ? FALSE : TRUE,
-  );
-  $widget['dbxref__version'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Version'),
-    '#default_value' => $version,
-    '#maxlength' => array_key_exists('length', $schema['fields']['version']) ? $schema['fields']['version']['length'] : 255,
-    '#size' => 5,
-    '#disabled' => $db_id ? FALSE : TRUE,
-  );
-  $widget['dbxref__description'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Description'),
-    '#default_value' => $description,
-    '#size' => 20,
-    '#disabled' => $db_id ? FALSE : TRUE,
-  );
-  $widget['links'] = array(
-    '#type' => 'item',
-    '#markup' => l('Add a new database', 'admin/tripal/chado/tripal_db/add', array('attributes' => array('target' => '_blank')))
-  );
-}
-/**
- * An Ajax callback for the tripal_chado_admin_publish_form..
- */
-function chado_base__dbxref_id_widget_form_ajax_callback($form, $form_state) {
-  $field_name = $form_state['triggering_element']['#parents'][0];
-  $db_id = tripal_chado_get_field_form_values($field_name, $form_state, 0, 'dbxref__db_id');
-  $accession = tripal_chado_get_field_form_values($field_name, $form_state, 0, 'dbxref__accession');
-  if ($db_id and $accession) {
-    $values = array(
-      'db_id' => $db_id,
-      'accession' => $accession,
+    $widget['dbxref__db_id'] = array(
+      '#type' => 'select',
+      '#title' => t('Database'),
+      '#options' => $options,
+      '#required' => $element['#required'],
+      '#default_value' => $db_id,
+      '#ajax' => array(
+        'callback' => "chado_base__dbxref_id_widget_form_ajax_callback",
+        'wrapper' => "$field_name-dbxref--db-id",
+        'effect' => 'fade',
+        'method' => 'replace'
+      ),
     );
-    $options = array('is_duplicate' => TRUE);
-    $has_duplicate = chado_select_record('dbxref', array('*'), $values, $options);
-    if (!$has_duplicate) {
-      drupal_set_message('The selected cross reference is new and will be added for future auto completions.');
+    $widget['dbxref__accession'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Accession'),
+      '#default_value' => $accession,
+      '#required' => $element['#required'],
+      '#maxlength' => array_key_exists('length', $schema['fields']['accession']) ? $schema['fields']['accession']['length'] : 255,
+      '#size' => 15,
+      '#autocomplete_path' => 'admin/tripal/storage/chado/auto_name/dbxref/' . $db_id,
+      '#ajax' => array(
+        'callback' => "tripal_chado_dbxref_widget_form_ajax_callback",
+        'wrapper' => "$field_name-dbxref--db-id",
+        'effect' => 'fade',
+        'method' => 'replace'
+      ),
+      '#disabled' => $db_id ? FALSE : TRUE,
+    );
+    $widget['dbxref__version'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Version'),
+      '#default_value' => $version,
+      '#maxlength' => array_key_exists('length', $schema['fields']['version']) ? $schema['fields']['version']['length'] : 255,
+      '#size' => 5,
+      '#disabled' => $db_id ? FALSE : TRUE,
+    );
+    $widget['dbxref__description'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Description'),
+      '#default_value' => $description,
+      '#size' => 20,
+      '#disabled' => $db_id ? FALSE : TRUE,
+    );
+    $widget['links'] = array(
+      '#type' => 'item',
+      '#markup' => l('Add a new database', 'admin/tripal/chado/tripal_db/add', array('attributes' => array('target' => '_blank')))
+    );
+  }
+
+  /**
+   * @see TripalField::load()
+   */
+  function load($field, $entity, $details) {
+
+    $record = $details['record'];
+
+    $field_name = $field['field_name'];
+    $field_type = $field['type'];
+    $field_table = $field['settings']['chado_table'];
+    $field_column = $field['settings']['chado_column'];
+
+    // Set some defauls for the empty record
+    $entity->{$field_name}['und'][0] = array(
+      'value' => '',
+      'dbxref__db_id' => '',
+      'dbxref__accession' => '',
+      'dbxref__version' => '',
+      'dbxref__description' => '',
+    );
+    // Get the primary dbxref record (if it's not NULL).  Because we have a
+    // dbxref_id passed in by the base record, we will only have one record.
+    if ($record->$field_column) {
+      $columns = array('*');
+      $match = array('dbxref_id' => $record->$field_column->$field_column);
+      $options = array('return_array' => TRUE);
+      $dbxrefs = chado_select_record('dbxref', $columns, $match, $options);
+      if (count($dbxrefs) > 0) {
+        $dbxref = $dbxrefs[0];
+        $entity->{$field_name}['und'][0] = array(
+          'value' => $dbxref->dbxref_id,
+          'dbxref__db_id' => $dbxref->db_id,
+          'dbxref__accession' => $dbxref->accession,
+          'dbxref__version' => $dbxref->version,
+          'dbxref__description' => $dbxref->description,
+        );
+      }
     }
   }
 
-  return $form[$field_name];
+
+  /**
+   * @see TripalField::ws_formatter()
+   */
+  function ws_formatter($entity_type, $entity, $field, $instance, $items) {
+
+    $dbxref = $entity->chado_record->dbxref_id;
+
+    unset($dbxref->tablename);
+    unset($dbxref->db_id->tablename);
+    return $dbxref;
+  }
 }
 
 /**
@@ -344,108 +343,63 @@ function chado_base__dbxref_id_widget_validate($element, &$form_state) {
     }
   }
 }
+
 /**
- * Theme function for the dbxref_id_widget.
- *
- * @param $variables
+ * An Ajax callback for the tripal_chado_admin_publish_form..
  */
+function chado_base__dbxref_id_widget_form_ajax_callback($form, $form_state) {
+  $field_name = $form_state['triggering_element']['#parents'][0];
+  $db_id = tripal_chado_get_field_form_values($field_name, $form_state, 0, 'dbxref__db_id');
+  $accession = tripal_chado_get_field_form_values($field_name, $form_state, 0, 'dbxref__accession');
+  if ($db_id and $accession) {
+    $values = array(
+      'db_id' => $db_id,
+      'accession' => $accession,
+    );
+    $options = array('is_duplicate' => TRUE);
+    $has_duplicate = chado_select_record('dbxref', array('*'), $values, $options);
+    if (!$has_duplicate) {
+      drupal_set_message('The selected cross reference is new and will be added for future auto completions.');
+    }
+  }
+
+  return $form[$field_name];
+}
+
 function theme_chado_base__dbxref_id_widget($variables) {
   $element = $variables['element'];
 
   $layout = "
-    <div class=\"primary-dbxref-widget\">
-      <div class=\"primary-dbxref-widget-item\">" .
+      <div class=\"primary-dbxref-widget\">
+        <div class=\"primary-dbxref-widget-item\">" .
         drupal_render($element['dbxref__db_id']) . "
-      </div>
-      <div class=\"primary-dbxref-widget-item\">" .
+        </div>
+        <div class=\"primary-dbxref-widget-item\">" .
         drupal_render($element['dbxref__accession']) . "
-      </div>
-      <div class=\"primary-dbxref-widget-item\">" .
+        </div>
+        <div class=\"primary-dbxref-widget-item\">" .
         drupal_render($element['dbxref__version']) . "
-      </div>
-      <div class=\"primary-dbxref-widget-item\">" .
+        </div>
+        <div class=\"primary-dbxref-widget-item\">" .
         drupal_render($element['dbxref__description']) . "
+        </div>
+        <div class=\"primary-dbxref-widget-links\">" . drupal_render($element['links']) . "</div>
       </div>
-      <div class=\"primary-dbxref-widget-links\">" . drupal_render($element['links']) . "</div>
-    </div>
-  ";
-
-//   $classes = array();
-//   $classes[] = 'collapsible';
-//   $theme_settings = $element['#theme_settings'];
-//   if ($theme_settings['#collapsed'] == FALSE) {
-//     $classes[] = 'collapsed';
-//   }
+    ";
+
+  //   $classes = array();
+  //   $classes[] = 'collapsible';
+  //   $theme_settings = $element['#theme_settings'];
+  //   if ($theme_settings['#collapsed'] == FALSE) {
+  //     $classes[] = 'collapsed';
+  //   }
   $fieldset = array(
     '#title' => $element['#title'],
     '#value' => '',
     '#description' => $element['#description'],
     '#children' => $layout,
-//    '#attributes' => array('class' => $classes),
+    //    '#attributes' => array('class' => $classes),
   );
 
   return theme('fieldset', array('element' => $fieldset));
 }
-
-/**
- * Loads the field values with appropriate data.
- *
- * This function is called by the tripal_chado_field_storage_load() for
- * each property managed by the field_chado_storage storage type.  This is
- * an optional hook function that is only needed if the field has
- * multiple form elements.
- *
- * @param $field
- * @param $entity
- * @param $base_table
- * @param $record
- */
-function chado_base__dbxref_id_load($field, $entity, $base_table, $record) {
-
-  $field_name = $field['field_name'];
-  $field_type = $field['type'];
-  $field_table = $field['settings']['chado_table'];
-  $field_column = $field['settings']['chado_column'];
-
-  // Set some defauls for the empty record
-  $entity->{$field_name}['und'][0] = array(
-    'value' => '',
-    'dbxref__db_id' => '',
-    'dbxref__accession' => '',
-    'dbxref__version' => '',
-    'dbxref__description' => '',
-  );
-  // Get the primary dbxref record (if it's not NULL).  Because we have a
-  // dbxref_id passed in by the base record, we will only have one record.
-  if ($record->$field_column) {
-    $columns = array('*');
-    $match = array('dbxref_id' => $record->$field_column->$field_column);
-    $options = array('return_array' => TRUE);
-    $dbxrefs = chado_select_record('dbxref', $columns, $match, $options);
-    if (count($dbxrefs) > 0) {
-      $dbxref = $dbxrefs[0];
-      $entity->{$field_name}['und'][0] = array(
-        'value' => $dbxref->dbxref_id,
-        'dbxref__db_id' => $dbxref->db_id,
-        'dbxref__accession' => $dbxref->accession,
-        'dbxref__version' => $dbxref->version,
-        'dbxref__description' => $dbxref->description,
-      );
-    }
-  }
-}
-
-
-/**
- * Implements hook_ws_formatter().
- */
-function chado_base__dbxref_id_ws_formatter($entity_type, $entity,
-    $field, $instance, $items) {
-
-  $dbxref = $entity->chado_record->dbxref_id;
-
-  unset($dbxref->tablename);
-  unset($dbxref->db_id->tablename);
-  return $dbxref;
-}
-

+ 1 - 2
tripal_chado/includes/fields/chado_base__organism_id.inc

@@ -249,8 +249,7 @@ class chado_base__organism_id extends TripalField {
   /**
    * @see TripalField::ws_formatter()
    */
-  public function ws_formatter(&$element, $entity_type, $entity,
-      $field, $instance, $items) {
+  public function ws_formatter($entity_type, $entity, $field, $instance, $items) {
 
     $organism = (array) $entity->chado_record->organism_id;
     unset($organism->tablename);

+ 12 - 0
tripal_chado/includes/tripal_chado.field_storage.inc

@@ -329,6 +329,12 @@ function tripal_chado_field_storage_load($entity_type, $entities, $age,
         // that need populationg besides the value which was set above.
         $load_function = $field_type . '_load';
         module_load_include('inc', $field_module, 'includes/fields/' . $field_type);
+
+        if (preg_match('/^chado/', $field_type) and class_exists($field_type)) {
+          $field_obj = new $field_type();
+          $field_obj->load($field, $entity, array('record' => $record));
+        }
+
         if (function_exists($load_function)) {
           $load_function($field, $entity, $base_table, $record);
         }
@@ -343,6 +349,12 @@ function tripal_chado_field_storage_load($entity_type, $entities, $age,
         $entity->{$field_name}['und'][0]['value'] = '';
         $load_function = $field_type . '_load';
         module_load_include('inc', $field_module, 'includes/fields/' . $field_type);
+
+        if (preg_match('/^chado/', $field_type) and class_exists($field_type)) {
+          $field_obj = new $field_type();
+          $field_obj->load($field, $entity, array('record' => $record));
+        }
+
         if (function_exists($load_function)) {
           $load_function($field, $entity, $base_table, $record);
         }