瀏覽代碼

Removed foreign key definitions from feature API file

spficklin 12 年之前
父節點
當前提交
885433ded8

+ 1 - 1
tripal_bulk_loader/tripal_bulk_loader.admin.templates.inc

@@ -848,7 +848,7 @@ function tripal_bulk_loader_add_template_field_form(&$form_state = NULL) {
   $chado_fields = array();
   $fk_options = array();
   $fk_options['NULL'] = 'None';
-  $table_description = tripal_core_get_chado_table_schema($table)
+  $table_description = tripal_core_get_chado_table_schema($table);
   //dpm($table_description, 'table description for |'.$table.'|');
   if ($field_type == 'foreign key') {
     $foreign_field2table = array();

+ 3 - 3
tripal_cv/tripal_cv.views.inc

@@ -47,7 +47,7 @@ function tripal_cv_views_data() {
         // add specialty handlers
         if ($tablename == 'cvterm') {
           $table_integration_array['fields']['name']['handlers']['filter']['name'] = 'views_handler_filter_chado_select_cvterm_name';
-        }
+        }  
 
         // add integration
         tripal_views_integration_add_entry($table_integration_array);
@@ -109,7 +109,7 @@ function tripal_cv_views_default_views() {
   // List all cvterms based on cv
   $view = new view;
   $view->name = 'all_cvterms';
-  $view->description = 'A listing of all controlled vocabulary terms filtered by controlled vocabulary';
+  $view->description = 'A listing of all controlled vocabulary terms';
   $view->tag = 'chado';
   $view->view_php = '';
   $view->base_table = 'cvterm';
@@ -396,4 +396,4 @@ function tripal_cv_views_default_views() {
   $views[$view->name] = $view;
 
   return $views;
-}
+}

+ 4 - 168
tripal_feature/tripal_feature.api.inc

@@ -6,7 +6,7 @@
 
 /**
  * Implements hook_chado_feature_schema()
- * Purpose: To add descriptions and foreign keys to default table description
+ * Purpose: To add descriptions to default table description
  * Note: This array will be merged with the array from all other implementations
  *
  * @return
@@ -17,29 +17,6 @@
 function tripal_feature_chado_schema_v1_11_feature() {
   $description = array();
 
-  // Default table description in tripal_core.schema.api.inc: tripal_core_chado_schema_v1_11_feature()
-
-  $description['foreign keys']['organism'] = array(
-        'table' => 'organism',
-        'columns' => array(
-          'organism_id' => 'organism_id',
-        ),
-  );
-
-  $description['foreign keys']['dbxref'] = array(
-        'table' => 'dbxref',
-        'columns' => array(
-          'dbxref_id' => 'dbxref_id',
-        ),
-  );
-
-  $description['foreign keys']['cvterm'] = array(
-        'table' => 'cvterm',
-        'columns' => array(
-          'type_id' => 'cvterm_id',
-        ),
-  );
-
   $referring_tables = array('analysisfeature',
     'element',
     'feature_cvterm',
@@ -65,7 +42,7 @@ function tripal_feature_chado_schema_v1_11_feature() {
 
 /**
  * Implements hook_chado_featureprop_schema()
- * Purpose: To add descriptions and foreign keys to default table description
+ * Purpose: To add descriptions to default table description
  * Note: This array will be merged with the array from all other implementations
  *
  * @return
@@ -76,22 +53,6 @@ function tripal_feature_chado_schema_v1_11_feature() {
 function tripal_feature_chado_schema_v1_11_featureprop() {
   $description = array();
 
-  // Default table description in tripal_core.schema.api.inc: tripal_core_chado_schema_v1_11_featureprop()
-
-  $description['foreign keys']['feature'] = array(
-        'table' => 'feature',
-        'columns' => array(
-          'feature_id' => 'feature_id',
-        ),
-  );
-
-  $description['foreign keys']['cvterm'] = array(
-        'table' => 'cvterm',
-        'columns' => array(
-          'type_id' => 'cvterm_id',
-        ),
-  );
-
   $referring_tables = array('analysisfeature',
     'featureprop_pub',
   );
@@ -102,7 +63,7 @@ function tripal_feature_chado_schema_v1_11_featureprop() {
 
 /**
  * Implements hook_chado_schema_v1_11_table()
- * Purpose: To add descriptions and foreign keys to default table description
+ * Purpose: To add descriptions to default table description
  * Note: This array will be merged with the array from all other implementations
  *
  * @return
@@ -122,7 +83,7 @@ function tripal_feature_chado_schema_v1_11_featureloc() {
 }
 /**
  * Implements hook_chado_schema_v1_2_table()
- * Purpose: To add descriptions and foreign keys to default table description
+ * Purpose: To add descriptions and to default table description
  * Note: This array will be merged with the array from all other implementations
  *
  * @return
@@ -141,133 +102,8 @@ function tripal_feature_chado_schema_v1_2_featureloc() {
   return $description;
 }
 
-/**
- * Implements hook_chado_feature_dbxref_schema()
- * Purpose: To add descriptions and foreign keys to default table description
- * Note: This array will be merged with the array from all other implementations
- *
- * @return
- *    Array describing the feature_dbxref table
- *
- * @ingroup tripal_schema_api
- */
-function tripal_feature_chado_schema_v1_11_feature_dbxref() {
-  $description = array();
-
-  // Default table description in tripal_core.schema.api.inc: tripal_core_chado_schema_v1_11_feature_dbxref()
-
-  $description['foreign keys']['feature'] = array(
-        'table' => 'feature',
-        'columns' => array(
-          'feature_id' => 'feature_id',
-        ),
-  );
 
-  $description['foreign keys']['dbxref'] = array(
-        'table' => 'dbxref',
-        'columns' => array(
-          'dbxref_id' => 'dbxref_id',
-        ),
-  );
-
-  return $description;
-}
-/**
- * Implements hook_chado_feature_relationship_schema()
- * Purpose: To add descriptions and foreign keys to default table description
- * Note: This array will be merged with the array from all other implementations
- *
- * @return
- *    Array describing the feature_dbxref table
- *
- * @ingroup tripal_schema_api
- */
-function tripal_feature_chado_schema_v1_11_feature_relationship() {
-  $description = array();
 
-  // Default table description in tripal_core.schema.api.inc: tripal_core_chado_schema_v1_11_feature_dbxref()
-
-  $description['foreign keys']['feature'] = array(
-        'table' => 'feature',
-        'columns' => array(
-          'object_id' => 'feature_id',
-          'subject_id' => 'feature_id',
-        ),
-  );
-  $description['foreign keys']['cvterm'] = array(
-        'table' => 'cvterm',
-        'columns' => array(
-          'type_id' => 'cvterm_id',
-        ),
-  );
-  return $description;
-}
-/**
- * Implements hook_chado_feature_relationship_schema()
- * Purpose: To add descriptions and foreign keys to default table description
- * Note: This array will be merged with the array from all other implementations
- *
- * @return
- *    Array describing the feature_dbxref table
- *
- * @ingroup tripal_schema_api
- */
-function tripal_feature_chado_schema_v1_11_feature_cvterm() {
-  $description = array();
-
-  // Default table description in tripal_core.schema.api.inc: tripal_core_chado_schema_v1_11_feature_dbxref()
-
-  $description['foreign keys']['feature'] = array(
-        'table' => 'feature',
-        'columns' => array(
-          'feature_id' => 'feature_id',
-        ),
-  );
-  $description['foreign keys']['cvterm'] = array(
-        'table' => 'cvterm',
-        'columns' => array(
-          'cvterm_id' => 'cvterm_id',
-        ),
-  );
-  $description['foreign keys']['pub'] = array(
-        'table' => 'pub',
-        'columns' => array(
-          'pub_id' => 'pub_id',
-        ),
-  );
-
-  return $description;
-}
-/**
- *
- * @ingroup tripal_schema_api
- */
-function tripal_feature_chado_schema_v1_11_feature_synonym() {
-  $description = array();
-
-  // Default table description in tripal_core.schema.api.inc: tripal_core_chado_schema_v1_11_feature_dbxref()
-
-  $description['foreign keys']['feature'] = array(
-        'table' => 'feature',
-        'columns' => array(
-          'feature_id' => 'feature_id',
-        ),
-  );
-  $description['foreign keys']['synonym'] = array(
-        'table' => 'synonym',
-        'columns' => array(
-          'synonym_id' => 'synonym_id',
-        ),
-  );
-  $description['foreign keys']['pub'] = array(
-        'table' => 'pub',
-        'columns' => array(
-          'pub_id' => 'pub_id',
-        ),
-  );
-
-  return $description;
-}
 
 /**
  * Retrieve properties from the analysisfeatureprop table for a feature.

+ 11 - 2
tripal_views/tripal_views.install

@@ -18,6 +18,9 @@ function tripal_views_install() {
   // create the tables that manage materialized views and jobs
   drupal_install_schema('tripal_views');
 
+  // we want views to pick up our changes  
+  views_invalidate_cache();
+
 }
 
 /**
@@ -100,7 +103,7 @@ function tripal_views_update_6040() {
 function tripal_views_views_schema() {
   $schema = array();
   $schema['tripal_views'] = array(
-    'description' => 'contains the setupes, their materialized view id and base table name that was used.',
+    'description' => 'contains the setups, their materialized view id and base table name that was used.',
     'fields' => array(
       'setup_id' => array(
         'description' => 'the id of the setup',
@@ -113,8 +116,14 @@ function tripal_views_views_schema() {
         'type' => 'int',
         'unsigned' => TRUE,
       ),
+      'base_table' => array(
+         'description' => 'either TRUE (1) or FALSE (0) depending on whether the current table should be a bast table of a View',
+         'type' => 'int', 
+         'not null ' => TRUE,
+         'default' => 1
+      ),
       'table_name' => array(
-        'description' => 'the base table name to be used when using this setup. Use this field when not using a materialized view',
+        'description' => 'the table name being integrated.',
         'type' => 'varchar',
         'length' => 255,
         'not null' => TRUE,

+ 5 - 0
tripal_views/tripal_views.views.inc

@@ -66,9 +66,14 @@ function tripal_views_views_handlers() {
       'chado_views_handler_field_aggregate' => array(
         'parent' => 'chado_views_handler_field',
       ),
+      // the following is deprecated but left for backwards compatibility
       'views_handler_filter_chado_select_string' => array(
         'parent' => 'views_handler_filter_string',
       ),
+      'tripal_views_handler_filter_string_selectbox' => array(
+        'parent' => 'views_handler_filter_string',
+      ),
+
       'views_handler_filter_chado_select_cvterm_name' => array(
         'parent' => 'views_handler_filter_string',
       ),

+ 206 - 0
tripal_views/views/handlers/tripal_views_handler_filter_string_selectbox.inc

@@ -0,0 +1,206 @@
+<?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.
+ *
+ * @ingroup views_filter_handlers
+ * @ingroup tripal_core
+ */
+class tripal_views_handler_filter_string_selectbox extends views_handler_filter_string {
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['values_form_type'] = array(
+      '#type' => 'radios',
+      '#title' => t('Filter Type'),
+      '#options' => array(
+        'textfield' => 'Text Field',
+        'select' => 'Drop-Down Box',
+      ),
+      '#default_value' => ($this->options['values_form_type']) ? $this->options['values_form_type'] : 'select',
+    );
+
+    $form['multiple'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Select Multiple'),
+      '#description' => t('Allows more then one option to be selected.'),
+      '#default_value' => (isset($this->options['multiple'])) ? $this->options['multiple'] : FALSE,
+    );
+
+    $form['optional'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Optional'),
+      '#description' => t('Adds --Any-- to the available options.'),
+      '#default_value' => (isset($this->options['optional'])) ? $this->options['optional'] : TRUE,
+    );
+
+    $form['max_length'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Max Width'),
+      '#description' => t('Specify the maximum width of the select box'),
+      '#default_value' => (isset($this->options['max_length'])) ? $this->options['max_length'] : 40,
+
+    );
+    $form['max_length'] = array(
+      '#type' => 'markup',
+      '#value' => t('<strong><font color="red">Note:</font></strong> If another filter exists for the same table then '.
+                    'the values shown in the drop box will only include those from rows that are not filtered.'),
+
+    );
+
+  }
+
+ /**
+  * 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);
+
+    if (preg_match('/textfield/', $this->options['values_form_type'])) {
+      $form['value'] = array(
+        '#type' => 'textfield',
+        '#title' => t('%label', array('%label' => $this->options['label'])),
+        '#default_value' => $this->value,
+      );
+
+    }
+    else {
+
+      // build a where clause that will filter the list in the drop box
+      // using fields that are not exposed and that are for the table
+      // from whcih the values in the drop box will be slected and
+      // we only want to use non-exposed fields because these are not
+      // available to the user to edit--their fixed.
+      $where = '';
+      $filters = $this->view->filter;
+      foreach($filters as $filter_name => $details){
+         // we only want to inclue non-exposed filters 
+         if($details->options['exposed'] == FALSE){
+            // we only want to filter on the table we're getting the list from
+            if(strcmp($details->table,$this->table)==0){
+              $where .= "$details->field $details->operator ". $details->value['value'];
+              $where .= ' AND ';
+            }
+         }
+      } 
+      if($where){
+         $where = "WHERE $where";
+         $where = substr($where,0,-5); # remove the final ' AND '
+      }
+
+      // get the values from the table
+      $sql = "SELECT $this->real_field FROM $this->table $where ORDER BY $this->field ASC";
+      $previous_db = tripal_db_set_active('chado');  // use chado database
+      $results = db_query($sql);
+      tripal_db_set_active($previous_db);  // now use drupal database
+
+      // Build the select box options
+      $max_length = $this->options['max_length'];
+      if (!$max_length) {
+        $max_length = 40;
+      }
+      if ($this->options['optional']) {
+        //$options['<select '.$this->table.'>'] = '--None--';
+        $options['All'] = '--Any--';
+      }
+      while ($r = db_fetch_object($results)) {
+        if (drupal_strlen($r->{$this->field}) > $max_length) {
+          $options[$r->{$this->field}] = drupal_substr($r->{$this->field}, 0, $max_length) . '...';
+        }
+        else {
+          $options[$r->{$this->field}] = $r->{$this->field};
+        }
+      }
+
+      //Select List
+      $form['value'] = array(
+          '#type' => 'select',
+          '#title' => t('%label', array('%label' => $this->options['label'])),
+          '#options' => $options,
+          '#default_value' => $this->value,
+      );
+
+      if ($this->options['multiple']) {
+        $form['value']['#multiple'] = TRUE;
+      }
+    }
+  }
+
+ /**
+  * 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']);
+    }
+
+  }
+
+ /**
+  *
+  */
+  function query() {
+
+    $this->ensure_my_table();
+    $field = "$this->table_alias.$this->real_field";
+    $upper = $this->case_transform();
+
+    if ($this->options['multiple']) {
+      // Remove any if it's there
+      unset($this->value['All']);
+
+      if (sizeof($this->value)) {
+        $holders = array();
+        foreach ($this->value as $v) {
+          if (preg_match('/^[\d\.]+$/', $v)) {
+            $holders[] = '%d';
+          }
+          else {
+            $holders[] = "'%s'";
+          }
+        }
+        $where = "$field IN (" . implode(", ", $holders) . ")";
+        $this->query->add_where($this->options['group'], $where, $this->value);
+      }
+    }
+    else {
+
+      // Deal with All/Any as value
+      if (preg_match('/All/', $this->value)) {
+        // Don't do anything
+      }
+      else {
+        $info = $this->operators();
+        if (!empty($info[$this->operator]['method'])) {
+          $this->{$info[$this->operator]['method']}($field, $upper);
+        }
+      }
+    }
+  }
+}