Browse Source

Merge pull request #532 from tripal/seqcoord-formatter

Alternate Tripal2-like Sequence Coordinate Formatter
Lacey-Anne Sanderson 6 years ago
parent
commit
23c8d3f669

+ 4 - 1
tripal_chado/includes/TripalFields/data__sequence_coordinates/data__sequence_coordinates.inc

@@ -243,9 +243,12 @@ class data__sequence_coordinates extends ChadoField {
         if ($featureloc->strand == 1) {
           $strand = '+';
         }
-        else {
+        elseif ($featureloc->strand == -1) {
           $strand = '-';
         }
+        else {
+          $strand = '';
+        }
         $fmin = $featureloc->fmin + 1;
         $fmax = $featureloc->fmax;
         $entity->{$field_name}['und'][$index] = array(

+ 1 - 1
tripal_chado/includes/TripalFields/data__sequence_coordinates/data__sequence_coordinates_formatter.inc

@@ -2,7 +2,7 @@
 
 class data__sequence_coordinates_formatter extends ChadoFieldFormatter {
   // The default lable for this field.
-  public static $default_label = 'Sequence Coordinates';
+  public static $default_label = 'Sequence Coordinate List';
 
   // The list of field types for which this formatter is appropriate.
   public static $field_types = array('data__sequence_coordinates');

+ 133 - 0
tripal_chado/includes/TripalFields/data__sequence_coordinates_table/data__sequence_coordinates_table_formatter.inc

@@ -0,0 +1,133 @@
+<?php
+
+class data__sequence_coordinates_table_formatter extends ChadoFieldFormatter {
+  // The default lable for this field.
+  public static $default_label = 'Sequence Coordinate Table';
+
+  // The list of field types for which this formatter is appropriate.
+  public static $field_types = array('data__sequence_coordinates');
+
+  public static $default_settings = array(
+    'caption' => 'This @content_type has the following sequence coordinates:',
+    'expand_strand' => TRUE,
+  );
+
+  /**
+   *
+   * @see TripalFieldFormatter::settingsForm()
+   */
+  public function settingsForm($view_mode, $form, &$form_state) {
+
+    $display = $this->instance['display'][$view_mode];
+    $settings = $display['settings'];
+
+    // Ensure the default are set if the value is not configured.
+    foreach ($this::$default_settings as $key => $value) {
+      if (!isset($settings[$key])) { $settings[$key] = $value; }
+    }
+
+    $element = array();
+
+    $element['expand_strand'] = array(
+      '#type' => 'textfield',
+      '#title' => 'Expand Strand',
+      '#description' => 'Expands the strand to full words versus "+" or "-".',
+      '#default_value' => $settings['expand_strand'],
+    );
+
+    $element['caption'] = array(
+      '#type' => 'textfield',
+      '#title' => 'Caption',
+      '#description' => 'Provides a caption for the table describing the purpose to the user.',
+      '#default_value' => $settings['caption'],
+    );
+
+    $element['tokens'] = array(
+      '#type' => 'item',
+      '#title' => 'Tokens',
+      '#markup' => 'The following tokens should be used in <strong>both the above captions</strong>:</p>
+                     <ul>
+                       <li>@content_type: the human-readable name of the content type for the current entity.</li>
+                     </ul>',
+    );
+
+    return $element;
+  }
+  /**
+   * @see TripalFieldFormatter::settingsSummary()
+   */
+  public function settingsSummary($view_mode) {
+
+    $display = $this->instance['display'][$view_mode];
+    $settings = $display['settings'];
+
+    // Ensure the default are set if the value is not configured.
+    foreach ($this::$default_settings as $key => $value) {
+      if (!isset($settings[$key])) { $settings[$key] = $value; }
+    }
+
+    $summary = t('<strong>Caption:</strong> ' . $settings['caption']);
+
+    return $summary;
+  }
+
+  /**
+   *
+   * @see TripalFieldFormatter::view()
+   */
+  public function view(&$element, $entity_type, $entity, $langcode, $items, $display) {
+
+    // Get the settings and set defaults.
+    $settings = $display['settings'];
+    foreach ($this::$default_settings as $key => $value) {
+      if (!isset($settings[$key])) { $settings[$key] = $value; }
+    }
+
+    // Replace tokens in the caption.
+    $settings['caption'] = t($settings['caption'],
+      array('@content_type' => $entity->rdfs__type['und'][0]['value']));
+
+    // Determine the terms for each column.
+    $reference_term = 'data:3002';
+    $fmin_term = chado_get_semweb_term('featureloc', 'fmin');
+    $fmax_term = chado_get_semweb_term('featureloc', 'fmax');
+    $strand_term = chado_get_semweb_term('featureloc', 'strand');
+    $phase_term = chado_get_semweb_term('featureloc', 'phase');
+
+    // For each location, add it to the table.
+    $header = array('Name','Location','Strand');
+    $rows = array();
+    foreach ($items as $item) {
+      if (!empty($item['value'])) {
+
+        $strand = $item['value'][$strand_term];
+        if ($settings['expand_strand']) {
+          if ($item['value'][$strand_term] == '+') {
+            $strand = 'positive';
+          }
+          elseif ($item['value'][$strand_term] == '-') {
+            $strand = 'negative';
+          }
+          else {
+            $strand = '<span style="color:#B3B3B3">unknown</span>';
+          }
+        }
+
+        $rows[] = array(
+          $item['value'][$reference_term],
+          $item['value'][$fmin_term] . '..' . $fmax = $item['value'][$fmax_term],
+          $strand
+        );
+      }
+    }
+
+    // Add the markup for the table.
+    $element[0] = array(
+      '#type' => 'markup',
+      '#theme' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+      '#caption' => $settings['caption'],
+    );
+  }
+}