Forráskód Böngészése

Added Generic Chado Filter Handler that provides a select list to the user for an exposed view filter -see organism:genus or cvterm:name for an example

laceysanderson 14 éve
szülő
commit
36ea1ca6d8

+ 3 - 3
tripal_analysis/views/analysis.views.inc

@@ -153,7 +153,7 @@ function retrieve_analysis_views_data() {
       'handler' => 'views_handler_sort',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'handler' => 'views_handler_filter_chado_select_string',
     ),
     'argument' => array(
       'handler' => 'views_handler_argument_string',
@@ -172,7 +172,7 @@ function retrieve_analysis_views_data() {
       'handler' => 'views_handler_sort',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'handler' => 'views_handler_filter_chado_select_string',
     ),
     'argument' => array(
       'handler' => 'views_handler_argument_string',
@@ -191,7 +191,7 @@ function retrieve_analysis_views_data() {
       'handler' => 'views_handler_sort',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'handler' => 'views_handler_filter_chado_select_string',
     ),
     'argument' => array(
       'handler' => 'views_handler_argument_string',

+ 3 - 0
tripal_core/tripal_core.views.inc

@@ -20,6 +20,9 @@ function tripal_core_views_handlers() {
      'views_handler_field_cvterm_name' => array(
        'parent' => 'views_handler_field',
      ),
+     'views_handler_filter_chado_select_string' => array(
+      'parent' => 'views_handler_filter_string',
+     ),
    ),
  );
 }

+ 86 - 0
tripal_core/views/handlers/views_handler_filter_chado_select_string.inc

@@ -0,0 +1,86 @@
+<?php
+
+/* @file
+ * Purpose: This Handler provides a generic select list for any chado field that is a string
+ *  The select list includes all distinct values for that field
+ */
+class views_handler_filter_chado_select_string extends views_handler_filter_string {
+
+ /**
+  * Defines the value field in both the views filter options form
+  *   and the exposed form
+  */
+  function value_form(&$form, &$form_state) {
+    parent::value_form(&$form, &$form_state);
+    
+    // Get Options
+    $options[''] = '<Any>';
+    $options['<select '.$this->table.'>'] = '<None>';
+    $results = tripal_core_chado_select(
+      $this->table,
+      array($this->field),
+      array()
+    );
+    $max_length = 40;
+    foreach ($results as $r) {
+      if (strlen($r->{$this->field}) > $max_length) {
+        $options[$r->{$this->field}] = substr($r->{$this->field},0,$max_length) . '...';
+      } else {
+        $options[$r->{$this->field}] = $r->{$this->field};    
+      }
+    }
+    
+    //Select List
+    $form['value'] = array(
+        '#type' => 'select',
+        '#title' => $this->options['label'],
+        '#options' => $options,
+        '#default_value' => $this->value,
+    );
+  }
+
+ /**
+  * Ensures the select list gets rendered when the filter is exposed
+  */
+  function exposed_form(&$form, &$form_state) {
+    if (empty($this->options['exposed'])) {
+      return;
+    }
+
+    $value = $this->options['expose']['identifier'];
+    $this->value_form($form, $form_state);
+    $form[$value] = $form['value'];
+
+    if (isset($form[$value]['#title']) && !empty($form[$value]['#type']) && $form[$value]['#type'] != 'checkbox') {
+      unset($form[$value]['#title']);
+    }
+
+    $this->exposed_translate($form[$value], 'value');
+
+    if (!empty($form['#type']) && ($form['#type'] == 'checkboxes' || ($form['#type'] == 'select' && !empty($form['#multiple'])))) {
+      unset($form[$value]['#default_value']);
+    }
+
+    if (!empty($form['#type']) && $form['#type'] == 'select' && empty($form['#multiple'])) {
+      $form[$value]['#default_value'] = 'All';
+    }
+
+    if ($value != 'value') {
+      unset($form['value']);
+    }
+
+  }
+
+
+  /**
+   * Handle the 'right' side fo the exposed options form.
+   * Removing the option to make this field Optional. Instead it is always optional.
+   * This was done because the optional field didn't allow you to select <Any> as the default
+   *   which was a needed feature.
+   */
+  function expose_form_right(&$form, &$form_state) {
+    parent::expose_form_right($form, $form_state);
+    
+    unset($form['expose']['optional']);
+  }
+}

+ 1 - 1
tripal_cv/views/cv.views.inc

@@ -64,7 +64,7 @@ function retrieve_cv_views_data() {
        'handler' => 'views_handler_sort',
      ),
      'filter' => array(
-       'handler' => 'views_handler_filter_string',
+       'handler' => 'views_handler_filter_chado_select_string',
      ),
      'argument' => array(
        'handler' => 'views_handler_argument_string',

+ 1 - 1
tripal_cv/views/cvterm.views.inc

@@ -86,7 +86,7 @@ function retrieve_cvterm_views_data() {
        'handler' => 'views_handler_sort',
      ),
      'filter' => array(
-       'handler' => 'views_handler_filter_string',
+       'handler' => 'views_handler_filter_chado_select_string',
      ),
      'argument' => array(
        'handler' => 'views_handler_argument_string',

+ 1 - 1
tripal_db/views/db.views.inc

@@ -80,7 +80,7 @@ function retrieve_db_views_data() {
       'handler' => 'views_handler_sort',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'handler' => 'views_handler_filter_chado_select_string',
     ),
     'argument' => array(
       'handler' => 'views_handler_argument_string',

+ 3 - 0
tripal_organism/tripal_organism.views.inc

@@ -46,6 +46,9 @@ function tripal_organism_views_handlers() {
      'views_handler_field_computed_organism_nid' => array(
        'parent' => 'views_handler_field_numeric',
      ),
+     'views_handler_filter_organism_common_name' => array(
+      'parent' => 'views_handler_filter_string',
+     ),
    ),
  );
 }

+ 61 - 0
tripal_organism/views/handlers/views_handler_filter_organism_common_name.inc

@@ -0,0 +1,61 @@
+<?php
+
+class views_handler_filter_organism_common_name extends views_handler_filter_string {
+
+  function value_form(&$form, &$form_state) {
+    parent::value_form(&$form, &$form_state);
+
+    // Get Options
+    $options['<select organism>'] = '<None>';
+    $results = tripal_core_chado_select(
+      'organism',
+      array('common_name','abbreviation'),
+      array()
+    );
+    foreach ($results as $r) {
+      $options[$r->common_name] = $r->common_name . ' ('.$r->abbreviation.')';    
+    }
+    
+    //Select List
+    $form['value'] = array(
+        '#type' => 'select',
+        '#title' => $this->options['label'],
+        '#options' => $options,
+        '#default_value' => $this->value,
+    );
+    
+
+  }
+
+ /**
+  * Render our chunk of the exposed filter form when selecting
+  */
+  function exposed_form(&$form, &$form_state) {
+    if (empty($this->options['exposed'])) {
+      return;
+    }
+
+    $value = $this->options['expose']['identifier'];
+    $this->value_form($form, $form_state);
+    $form[$value] = $form['value'];
+
+    if (isset($form[$value]['#title']) && !empty($form[$value]['#type']) && $form[$value]['#type'] != 'checkbox') {
+      unset($form[$value]['#title']);
+    }
+
+    $this->exposed_translate($form[$value], 'value');
+
+    if (!empty($form['#type']) && ($form['#type'] == 'checkboxes' || ($form['#type'] == 'select' && !empty($form['#multiple'])))) {
+      unset($form[$value]['#default_value']);
+    }
+
+    if (!empty($form['#type']) && $form['#type'] == 'select' && empty($form['#multiple'])) {
+      $form[$value]['#default_value'] = 'All';
+    }
+
+    if ($value != 'value') {
+      unset($form['value']);
+    }
+
+  }
+}

+ 4 - 4
tripal_organism/views/organism.views.inc

@@ -106,7 +106,7 @@ function retrieve_organism_views_data() {
        'handler' => 'views_handler_sort',
      ),
      'filter' => array(
-       'handler' => 'views_handler_filter_string',
+       'handler' => 'views_handler_filter_chado_select_string',
      ),
      'argument' => array(
        'handler' => 'views_handler_argument_string',
@@ -129,7 +129,7 @@ function retrieve_organism_views_data() {
        'handler' => 'views_handler_sort',
      ),
      'filter' => array(
-       'handler' => 'views_handler_filter_string',
+       'handler' => 'views_handler_filter_chado_select_string',
      ),
      'argument' => array(
        'handler' => 'views_handler_argument_string',
@@ -148,7 +148,7 @@ function retrieve_organism_views_data() {
        'handler' => 'views_handler_sort',
      ),
      'filter' => array(
-       'handler' => 'views_handler_filter_string',
+       'handler' => 'views_handler_filter_chado_select_string',
      ),
      'argument' => array(
        'handler' => 'views_handler_argument_string',
@@ -167,7 +167,7 @@ function retrieve_organism_views_data() {
        'handler' => 'views_handler_sort',
      ),
      'filter' => array(
-       'handler' => 'views_handler_filter_string',
+       'handler' => 'views_handler_filter_organism_common_name',
      ),
      'argument' => array(
        'handler' => 'views_handler_argument_string',