Jelajahi Sumber

Added residues field

Stephen Ficklin 9 tahun lalu
induk
melakukan
608501f4fa

+ 15 - 13
tripal_entities/includes/tripal_entities.admin.inc

@@ -431,7 +431,8 @@ function tripal_entities_add_bundle_fields($entity_type_name, $bundle_name, $cvt
       $field_info = array(
         'field_type' => '',
         'widget_type' => '',
-        'settings' => array(),
+        'field_settings' => array(),
+        'widget_settings' => array('display_label' => 1),
         'description' => '',
         'label' => ucwords(preg_replace('/_/', ' ', $column_name)),
         'chado_table' => $tablename,
@@ -443,16 +444,17 @@ function tripal_entities_add_bundle_fields($entity_type_name, $bundle_name, $cvt
         case 'char':
           $field_info['field_type'] = 'text';
           $field_info['widget_type'] = 'text_textfield';
-          $field_info['settings']['max_length'] = $details['length'];
+          $field_info['field_settings']['max_length'] = $details['length'];
           break;
         case 'varchar':
           $field_info['field_type'] = 'text';
           $field_info['widget_type'] = 'text_textfield';
-          $field_info['settings']['max_length'] = $details['length'];
+          $field_info['field_settings']['max_length'] = $details['length'];
           break;
         case 'text':
           $field_info['field_type'] = 'text';
           $field_info['widget_type'] = 'text_textarea';
+          $field_info['field_settings']['max_length'] = 17179869184;
           break;
         case 'blob':
           // not sure how to support a blob field.
@@ -465,9 +467,9 @@ function tripal_entities_add_bundle_fields($entity_type_name, $bundle_name, $cvt
         case 'float':
           $field_info['field_type'] = 'number_float';
           $field_info['widget_type'] = 'number';
-          $field_info['settings']['precision'] = 10;
-          $field_info['settings']['scale'] = 2;
-          $field_info['settings']['decimal_separator'] = '.';
+          $field_info['field_settings']['precision'] = 10;
+          $field_info['field_settings']['scale'] = 2;
+          $field_info['field_settings']['decimal_separator'] = '.';
           break;
         case 'numeric':
           $field_info['field_type'] = 'number_decimal';
@@ -479,15 +481,15 @@ function tripal_entities_add_bundle_fields($entity_type_name, $bundle_name, $cvt
         case 'boolean':
           $field_info['field_type'] = 'list_boolean';
           $field_info['widget_type'] = 'options_onoff';
-          $field_info['settings']['allowed_values'] = array(0 => "No", 1 => "Yes");
+          $field_info['field_settings']['allowed_values'] = array(0 => "No", 1 => "Yes");
           break;
         case 'datetime':
           // Use the Drupal Date and Date API to create the field/widget
           $field_info['field_type'] = 'datetime';
           $field_info['widget_type'] = 'date_select';
-          $field_info['settings']['increment '] = 1;
-          $field_info['settings']['tz_handling'] = 'none';
-          
+          $field_info['widget_settings']['increment'] = 1;
+          $field_info['widget_settings']['tz_handling'] = 'none';
+
           // TODO: Add settings so that the minutes increment by 1.
           // And turn off the timezone, as the Chado field doesn't support it.
           break;
@@ -528,7 +530,7 @@ function tripal_entities_add_bundle_fields($entity_type_name, $bundle_name, $cvt
           'storage' => array(
             'type' => 'field_chado_storage'
           ),
-          'settings' => $field_info['settings'],
+          'settings' => $field_info['field_settings'],
         );
         field_create_field($field);
       }
@@ -540,11 +542,11 @@ function tripal_entities_add_bundle_fields($entity_type_name, $bundle_name, $cvt
         'description' => $field_info['description'],
         'widget' => array(
           'type' => $field_info['widget_type'],
-          'settings' => array('display_label' => 1)
+          'settings' => $field_info['widget_settings'],
         ),
         'entity_type' => $entity_type_name,
         'required' => $is_required,
-        'settings' => $field_info['settings'],
+        'settings' => $field_info['field_settings'],
         'bundle' => $bundle_name,
       );
       field_create_instance($field_instance);

+ 9 - 4
tripal_entities/includes/tripal_entities.chado_entity.inc

@@ -116,9 +116,14 @@ function tripal_entities_chado_field_alter(&$field) {
     $field['label'] = 'MD5 Checksum';
     $field['description'] = 'Generating MD5 checksum for the sequence.';
   }
-  else if ($field['chado_table'] == 'feature' and
-    $field['chado_column'] == 'seqlen') {
-      $field['field_type'] = 'seqlen';
-      $field['widget_type'] = 'tripal_fields_seqlen_hidden_widget';
+  else if ($field['chado_table'] == 'feature' and $field['chado_column'] == 'seqlen') {
+    $field['field_type'] = 'seqlen';
+    $field['widget_type'] = 'tripal_fields_seqlen_hidden_widget';
+  }
+  else if ($field['chado_table'] == 'feature' and $field['chado_column'] == 'residues') {
+    $field['field_type'] = 'residues';
+    $field['widget_type'] = 'tripal_fields_residues_textarea_widget';
+    $field['label'] = 'Residues';
+    $field['description'] = 'Please provide an IUPAC compatible residues for this feature. Spaces and new lines are allowed.';
   }
 }

+ 64 - 2
tripal_fields/includes/tripal_fields.fields.inc

@@ -29,6 +29,18 @@ function tripal_fields_field_info() {
         'active' => TRUE
       ),
     ),
+    'residues' => array(
+      'label' => t('Residues'),
+      'description' => t('A field for managing nucleotide and protein residues.'),
+      'default_widget' => 'tripal_fields_residue_textarea_widget',
+      'default_formatter' => 'tripal_fields_residues_formatter',
+      'settings' => array(),
+      'storage' => array(
+        'type' => 'field_chado_storage',
+        'module' => 'tripal_fields',
+        'active' => TRUE
+      ),
+    ),
     'md5checksum' => array(
       'label' => t('MD5 checksum'),
       'description' => t('A field for generating MD5 checksum for a sequence.'),
@@ -75,6 +87,10 @@ function tripal_fields_field_widget_info() {
       'label' => t('MD5 Checksum Checkbox'),
       'field types' => array('md5checksum')
     ),
+    'tripal_fields_residues_textarea_widget' => array(
+      'label' => t('Residues'),
+      'field types' => array('residues')
+    ),
     'tripal_fields_seqlen_hidden_widget' => array(
       'field types' => array('seqlen')
     ),
@@ -97,6 +113,10 @@ function tripal_fields_field_formatter_info() {
       'label' => t('MD5 checksum'),
       'field types' => array('md5checksum')
     ),
+    'tripal_fields_residues_formatter' => array(
+      'label' => t('Residues'),
+      'field types' => array('residues')
+    ),
     'tripal_fields_seqlen_formatter' => array(
       'label' => t('Sequence length'),
       'field types' => array('seqlen')
@@ -114,7 +134,8 @@ function tripal_fields_field_formatter_info() {
  *
  * @see field_example_field_formatter_info()
  */
-function tripal_fields_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
+function tripal_fields_field_formatter_view($entity_type, $entity, $field,
+    $instance, $langcode, $items, $display) {
   $element = array();
   switch ($display['type']) {
 
@@ -162,6 +183,18 @@ function tripal_fields_field_formatter_view($entity_type, $entity, $field, $inst
         );
       }
       break;
+    case 'tripal_fields_residues_formatter':
+      foreach ($items as $delta => $item) {
+        // TODO: add hook here to allow other modules to change this display
+        // if they want.
+        $residues = key_exists('value', $item) ? $item['value'] : '';
+        $element[$delta] = array(
+          // We create a render array to produce the desired markup,
+          '#type' => 'markup',
+          '#markup' =>  '<pre>' . $residues . '</pre>',
+        );
+      }
+      break;
     case 'tripal_fields_seqlen_formatter':
       foreach ($items as $delta => $item) {
         // TODO: add hook here to allow other modules to change this display
@@ -298,6 +331,18 @@ function tripal_fields_field_widget_form(&$form, &$form_state, $field,
       );
       $element['value'] = $widget;
       break;
+    case 'tripal_fields_residues_textarea_widget':
+        $widget += array(
+          '#type' => 'textarea',
+          '#title' => $element['#title'],
+          '#description' => $element['#description'],
+          '#weight' => isset($element['#weight']) ? $element['#weight'] : 0,
+          '#default_value' => count($items) > 0 ? $items[0]['value'] : 0,
+          '#delta' => $delta,
+          '#element_validate' => array('tripal_fields_residues_textarea_widget_validate'),
+        );
+        $element['value'] = $widget;
+        break;
     case 'tripal_fields_seqlen_hidden_widget':
       $widget += array(
         '#type' => 'hidden',
@@ -398,6 +443,20 @@ function tripal_fields_md5checksum_checkbox_widget_validate($element, &$form_sta
   }
 }
 
+/**
+ * Callback function for validating the tripal_fields_residues_textarea_widget.
+ */
+function tripal_fields_residues_textarea_widget_validate($element, &$form_state) {
+  $field_name = $element['#field_name'];
+
+  // Remove any white spaces.
+  $residues = tripal_fields_get_field_form_values('feature__residues', $form_state);
+  if (count($residues) > 0) {
+    $residues = preg_replace('/\s/', '', $residues[0]);
+    tripal_fields_set_field_form_values($field_name, $form_state, $residues);
+  }
+}
+
 /**
  * Callback function for validating the tripal_fields_seqlen_hidden_widget.
  */
@@ -406,8 +465,11 @@ function tripal_fields_seqlen_hidden_widget_validate($element, &$form_state) {
 
   // Calculate the md5 checksum for the sequence only if md5 box is checked and the residues exist
   $residues = tripal_fields_get_field_form_values('feature__residues', $form_state);
+
+  // Remove any white spaces.
   if (count($residues) > 0) {
-    tripal_fields_set_field_form_values ($field_name, $form_state, strlen($residues[0]));
+    $residues = preg_replace('/\s/', '', $residues[0]);
+    tripal_fields_set_field_form_values($field_name, $form_state, strlen($residues[0]));
   }
   else {
     // Otherwise, remove the md5 value