瀏覽代碼

Merge branch '6.x-0.4-dev' into 6.x-1611942-chado_insert_use_prepared_statement

Lacey Sanderson 12 年之前
父節點
當前提交
0624fa294e

+ 0 - 473
tripal_feature/tripal_feature.views.inc.orig

@@ -1,473 +0,0 @@
-<?php
-
-/**
- *  @file
- *  This file contains the basic functions for views integration of
- *  chado/tripal organism tables. Supplementary functions can be found in
- *  ./views/
- *
- *  Documentation on views integration can be found at
- *  http://views2.logrus.com/doc/html/index.html.
- */
-
-/**
- * @defgroup tripal_feature_views Feature Views Integration
- * @ingroup views
- * @ingroup tripal_feature
- */
-
-/**
- * Implements hook_views_data()
- *
- * Purpose: Describe chado/tripal tables & fields to views
- *
- * @return: a data array which follows the structure outlined in the
- *   views2 documentation for this hook. Essentially, it's an array of table
- *   definitions keyed by chado/tripal table name. Each table definition
- *   includes basic details about the table, fields in that table and
- *   relationships between that table and others (joins)
- *
- * @ingroup tripal_feature_views
- */
-function tripal_feature_views_data()  {
-  $data = array();
-
-<<<<<<< HEAD
-  if (module_exists('tripal_views')) {
-    $tables = array(
-      'feature',
-    );
-    foreach ($tables as $tablename) {
-      if (!tripal_views_is_integrated($tablename, 10)) {
-        $table_integration_array = tripal_views_get_integration_array_for_chado_table($tablename,TRUE);
-        tripal_views_integration_add_entry($table_integration_array);
-      }
-    }
-
-    $tables = array(
-      'feature_cvterm',
-      'feature_cvterm_dbxref',
-      'feature_cvterm_pub',
-      'feature_cvtermprop',
-      'feature_dbxref',
-      'feature_pub',
-      'feature_pubprop',
-      'feature_relationship',
-      'feature_relationship_pub',
-      'feature_relationshipprop',
-      'feature_relationshipprop_pub',
-      'feature_synonym',
-      'featureloc',
-      'featureloc_pub',
-      'featureprop',
-      'featureprop_pub',
-      'featuremap',
-      'featuremap_pub',
-      'featurepos',
-      'featurerange'
-    );
-    foreach ($tables as $tablename) {
-      if (!tripal_views_is_integrated($tablename, 10)) {
-        $table_integration_array = tripal_views_get_integration_array_for_chado_table($tablename,FALSE);
-        tripal_views_integration_add_entry($table_integration_array);
-      }
-    }
-  }
-=======
-  $data = array_merge($data, retrieve_feature_views_data());
-  $data = array_merge($data, retrieve_chado_feature_views_data());
-  $data = array_merge($data, retrieve_feature_misc_tables_views_data());
->>>>>>> 6.x-0.4-dev
-
-  return $data;
-}
-
-/**
- * Implements hook_views_handlers()
- *
- * Purpose: Register all custom handlers with views
- *   where a handler describes either "the type of field",
- *   "how a field should be filtered", "how a field should be sorted"
- *
- * @return: An array of handler definitions
- *
- * @ingroup tripal_feature_views
- */
-function tripal_feature_views_handlers() {
- return array(
-   'info' => array(
-     'path' => drupal_get_path('module', 'tripal_feature') . '/views_handlers',
-   ),
-   'handlers' => array(
-     'views_handler_field_residues' => array(
-       'parent' => 'views_handler_field',
-     ),
-   ),
- );
-}
-
-/**
- * Implementation of hook_views_data_alter().
- */
-function tripal_feature_views_data_alter(&$data) {
-
-  if ( !(is_array($db_url) and array_key_exists('chado', $db_url)) ) {
-
-    // Add featuer relationship to node
-    $data['node']['feature_chado_nid'] = array(
-      'group' => 'Feature',
-      'title' => 'Feature Node',
-      'help' => 'Links Chado Feature Fields/Data to the Nodes in the current View.',
-      'real field' => 'nid',
-      'relationship' => array(
-        'handler' => 'views_handler_relationship',
-        'title' => t('Node => Chado'),
-        'label' => t('Node => Chado'),
-        'real field' => 'nid',
-        'base' => 'chado_feature',
-        'base field' => 'nid'
-      ),
-    );
-  }
-
-}
-
-/**
- *
- * @ingroup tripal_feature_views
- */
-function tripal_feature_views_default_views() {
-  $views = array();
-
-  // Main default view
-  // List all cvterms based on cv
-  $view = new view;
-  $view->name = 'all_features';
-  $view->description = 'A listing of all Sequence FEatures';
-  $view->tag = 'chado';
-  $view->view_php = '';
-  $view->base_table = 'feature';
-  $view->is_cacheable = FALSE;
-  $view->api_version = 2;
-  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
-  $handler = $view->new_display('default', 'Defaults', 'default');
-  $handler->override_option('fields', array(
-    'uniquename' => array(
-      'label' => 'Unique Name',
-      'alter' => array(
-        'alter_text' => 0,
-        'text' => '',
-        'make_link' => 0,
-        'path' => '',
-        'link_class' => '',
-        'alt' => '',
-        'prefix' => '',
-        'suffix' => '',
-        'target' => '',
-        'help' => '',
-        'trim' => 0,
-        'max_length' => '',
-        'word_boundary' => 1,
-        'ellipsis' => 1,
-        'html' => 0,
-        'strip_tags' => 0,
-      ),
-      'empty' => '',
-      'hide_empty' => 0,
-      'empty_zero' => 0,
-      'link_to_node' => 1,
-      'exclude' => 0,
-      'id' => 'uniquename',
-      'table' => 'feature',
-      'field' => 'uniquename',
-      'relationship' => 'none',
-    ),
-    'name' => array(
-      'label' => 'Name',
-      'alter' => array(
-        'alter_text' => 0,
-        'text' => '',
-        'make_link' => 0,
-        'path' => '',
-        'link_class' => '',
-        'alt' => '',
-        'prefix' => '',
-        'suffix' => '',
-        'target' => '',
-        'help' => '',
-        'trim' => 0,
-        'max_length' => '',
-        'word_boundary' => 1,
-        'ellipsis' => 1,
-        'html' => 0,
-        'strip_tags' => 0,
-      ),
-      'empty' => '',
-      'hide_empty' => 0,
-      'empty_zero' => 0,
-      'link_to_node' => 1,
-      'exclude' => 0,
-      'id' => 'name',
-      'table' => 'feature',
-      'field' => 'name',
-      'relationship' => 'none',
-    ),
-    'common_name' => array(
-      'label' => 'Organism',
-      'alter' => array(
-        'alter_text' => 0,
-        'text' => '',
-        'make_link' => 0,
-        'path' => '',
-        'link_class' => '',
-        'alt' => '',
-        'prefix' => '',
-        'suffix' => '',
-        'target' => '',
-        'help' => '',
-        'trim' => 0,
-        'max_length' => '',
-        'word_boundary' => 1,
-        'ellipsis' => 1,
-        'html' => 0,
-        'strip_tags' => 0,
-      ),
-      'empty' => '',
-      'hide_empty' => 0,
-      'empty_zero' => 0,
-      'link_to_node' => 1,
-      'exclude' => 0,
-      'id' => 'common_name',
-      'table' => 'organism',
-      'field' => 'common_name',
-      'relationship' => 'none',
-    ),
-    'name_3' => array(
-      'label' => 'Type',
-      'alter' => array(
-        'alter_text' => 0,
-        'text' => '',
-        'make_link' => 0,
-        'path' => '',
-        'link_class' => '',
-        'alt' => '',
-        'prefix' => '',
-        'suffix' => '',
-        'target' => '',
-        'help' => '',
-        'trim' => 0,
-        'max_length' => '',
-        'word_boundary' => 1,
-        'ellipsis' => 1,
-        'html' => 0,
-        'strip_tags' => 0,
-      ),
-      'empty' => '',
-      'hide_empty' => 0,
-      'empty_zero' => 0,
-      'exclude' => 0,
-      'id' => 'name_3',
-      'table' => 'cvterm',
-      'field' => 'name',
-      'relationship' => 'none',
-    ),
-    'accession_link' => array(
-      'label' => 'External Reference',
-      'alter' => array(
-        'alter_text' => 0,
-        'text' => '',
-        'make_link' => 0,
-        'path' => '',
-        'link_class' => '',
-        'alt' => '',
-        'prefix' => '',
-        'suffix' => '',
-        'target' => '',
-        'help' => '',
-        'trim' => 0,
-        'max_length' => '',
-        'word_boundary' => 1,
-        'ellipsis' => 1,
-        'html' => 0,
-        'strip_tags' => 0,
-      ),
-      'empty' => '',
-      'hide_empty' => 0,
-      'empty_zero' => 0,
-      'exclude' => 0,
-      'id' => 'accession_link',
-      'table' => 'dbxref',
-      'field' => 'accession_link',
-      'relationship' => 'none',
-    ),
-    'name_1' => array(
-      'label' => 'Library',
-      'alter' => array(
-        'alter_text' => 0,
-        'text' => '',
-        'make_link' => 0,
-        'path' => '',
-        'link_class' => '',
-        'alt' => '',
-        'prefix' => '',
-        'suffix' => '',
-        'target' => '',
-        'help' => '',
-        'trim' => 0,
-        'max_length' => '',
-        'word_boundary' => 1,
-        'ellipsis' => 1,
-        'html' => 0,
-        'strip_tags' => 0,
-      ),
-      'empty' => '',
-      'hide_empty' => 0,
-      'empty_zero' => 0,
-      'link_to_node' => 1,
-      'exclude' => 0,
-      'id' => 'name_1',
-      'table' => 'library',
-      'field' => 'name',
-      'relationship' => 'none',
-    ),
-    'name_2' => array(
-      'label' => 'Analysis',
-      'alter' => array(
-        'alter_text' => 0,
-        'text' => '',
-        'make_link' => 0,
-        'path' => '',
-        'link_class' => '',
-        'alt' => '',
-        'prefix' => '',
-        'suffix' => '',
-        'target' => '',
-        'help' => '',
-        'trim' => 0,
-        'max_length' => '',
-        'word_boundary' => 1,
-        'ellipsis' => 1,
-        'html' => 0,
-        'strip_tags' => 0,
-      ),
-      'empty' => '',
-      'hide_empty' => 0,
-      'empty_zero' => 0,
-      'link_to_node' => 1,
-      'exclude' => 0,
-      'id' => 'name_2',
-      'table' => 'analysis',
-      'field' => 'name',
-      'relationship' => 'none',
-    ),
-  ));
-  $handler->override_option('filters', array(
-    'common_name' => array(
-      'operator' => '=',
-      'value' => '<select organism>',
-      'group' => '0',
-      'exposed' => TRUE,
-      'expose' => array(
-        'use_operator' => 0,
-        'operator' => 'common_name_op',
-        'identifier' => 'organism',
-        'label' => 'Organism',
-        'optional' => 1,
-        'remember' => 0,
-      ),
-      'case' => 1,
-      'id' => 'common_name',
-      'table' => 'organism',
-      'field' => 'common_name',
-      'relationship' => 'none',
-    ),
-    'name' => array(
-      'operator' => 'contains',
-      'value' => '',
-      'group' => '0',
-      'exposed' => TRUE,
-      'expose' => array(
-        'use_operator' => 0,
-        'operator' => 'name_op',
-        'identifier' => 'name',
-        'label' => 'Name Contains',
-        'optional' => 1,
-        'remember' => 0,
-      ),
-      'case' => 0,
-      'id' => 'name',
-      'table' => 'feature',
-      'field' => 'name',
-      'relationship' => 'none',
-    ),
-    'name_1' => array(
-      'operator' => 'contains',
-      'value' => '',
-      'group' => '0',
-      'exposed' => TRUE,
-      'expose' => array(
-        'use_operator' => 0,
-        'operator' => 'name_1_op',
-        'identifier' => 'library',
-        'label' => 'Library Name Contains',
-        'optional' => 1,
-        'remember' => 0,
-      ),
-      'case' => 0,
-      'id' => 'name_1',
-      'table' => 'library',
-      'field' => 'name',
-      'relationship' => 'none',
-    ),
-    'name_2' => array(
-      'operator' => 'contains',
-      'value' => '',
-      'group' => '0',
-      'exposed' => TRUE,
-      'expose' => array(
-        'use_operator' => 0,
-        'operator' => 'name_2_op',
-        'identifier' => 'analysis',
-        'label' => 'Analysis Name Contains',
-        'optional' => 1,
-        'remember' => 0,
-      ),
-      'case' => 0,
-      'id' => 'name_2',
-      'table' => 'analysis',
-      'field' => 'name',
-      'relationship' => 'none',
-    ),
-  ));
-  $handler->override_option('access', array(
-    'type' => 'perm',
-    'perm' => 'access chado_feature content',
-  ));
-  $handler->override_option('cache', array(
-    'type' => 'none',
-  ));
-  $handler->override_option('title', 'Sequence Features');
-  $handler->override_option('empty', 'There are no features matching that criteria. Please select a different organism above.');
-  $handler->override_option('empty_format', '1');
-  $handler->override_option('items_per_page', 50);
-  $handler->override_option('style_plugin', 'table');
-  $handler = $view->new_display('page', 'Page', 'page_1');
-  $handler->override_option('path', 'features');
-  $handler->override_option('menu', array(
-    'type' => 'normal',
-    'title' => 'Sequence Features',
-    'description' => '',
-    'weight' => '0',
-    'name' => 'primary-links',
-  ));
-  $handler->override_option('tab_options', array(
-    'type' => 'none',
-    'title' => '',
-    'description' => '',
-    'weight' => 0,
-    'name' => 'navigation',
-  ));
-  $views[$view->name] = $view;
-
-  return $views;
-}

+ 1 - 1
tripal_genetic/tripal_genetic.views.inc

@@ -38,7 +38,7 @@ function tripal_genetic_views_data()  {
 
     $tables = array(
       'environment_cvterm',
-      'feautre_genotype',
+      'feature_genotype',
       'phendesc',
       'phenotype_comparison'
     );

+ 11 - 1
tripal_views/tripal_views.api.inc

@@ -134,7 +134,7 @@ function tripal_views_integration_add_entry($defn_array) {
     'name' => $defn_array['name'],
     'comment' => $defn_array['description'],
     'priority' => $defn_array['priority'],
-    'base_table' => ($defn_array['base_table']) ? 1 : 0,
+    'base_table' => $defn_array['base_table'],
   );
   if ($defn_array['type'] == 'mview') {
       $mview = db_fetch_object(db_query("SELECT mview_id FROM {tripal_mviews} WHERE mv_table='%s'", $defn_array['table']));
@@ -153,6 +153,16 @@ function tripal_views_integration_add_entry($defn_array) {
 
   if ($status) {
 
+    // Need to update the tripal_views record so base_table can be false
+    // this is a fix because drupal_write_record() puts in defaults if !isset()
+    // and a variable is considered not set if its null!
+    db_query(
+      "UPDATE {tripal_views} SET base_table=%d WHERE table_name='%s' AND priority=%d",
+      $defn_array['base_table'],
+      $defn_array['table'],
+      $defn_array['priority']
+    );
+
     // Insert Field Definitions
     foreach ($defn_array['fields'] as $field) {
       $field_record = array(

+ 9 - 2
tripal_views/tripal_views.views.inc

@@ -4,6 +4,10 @@ include('views/handlers/views_handler_join_chado_through_linking.inc');
 include('views/handlers/views_handler_join_chado_aggregator.inc');
 include('tripal_views.api.inc');
 
+
+// TEMPORARY
+include('views/chado_linking.TMP.inc');
+
 /**
  * @file
  * Tripal Views Integration
@@ -204,7 +208,6 @@ function tripal_views_views_pre_render(&$view) {
   // custom form element which adds the file_path variable to the $_GET after the
   // view has populated the $view->exposed_input variable
   unset($view->exposed_input);
-  $query = $view->get_exposed_input();  // retrieves elements in $_GET array
 
   // we want to add to the bottom of the views the form for downloading
   // results in other formats (e.g. Excel, FASTA, CSV, etc.).  The Views Data
@@ -580,6 +583,10 @@ function tripal_views_views_data() {
     }
   }
 
+  // TEMPORARY: needed to join chado base tables to node linking tables
+  // currently done using old-style data arrays
+  $data = tripal_views_TEMPORARY_chado_linking_data($data);
+
   return $data;
 }
 
@@ -729,6 +736,7 @@ function tripal_views_data_export_download_form(&$form_state, $view, $display_id
       }
 
       $path = $display->display_options['path'];
+      $query = $view->get_exposed_input();  // retrieves elements in $_GET array
       $urls[$display->id]['path'] = $path;
       $urls[$display->id]['query'] = $query;
 
@@ -767,7 +775,6 @@ function tripal_views_data_export_download_form(&$form_state, $view, $display_id
       '#type' => 'submit',
     );
   }
-
   return $form;
 }
 

+ 9 - 4
tripal_views/tripal_views_integration.inc

@@ -90,7 +90,7 @@ function tripal_views_integration_setup_list() {
   $rows = array();
 
   // get the list of materialized views
-  $tviews = db_query('SELECT tv.name, tv.table_name, tc.table_id, tv.priority, tv.comment '
+  $tviews = db_query('SELECT tv.setup_id, tv.name, tv.table_name, tc.table_id, tv.priority, tv.comment '
                      .'FROM {tripal_views} tv '
                      .'LEFT JOIN {tripal_custom_tables} tc ON tc.table_name=tv.table_name '
                      .'WHERE tv.mview_id IS NOT NULL '
@@ -107,7 +107,12 @@ function tripal_views_integration_setup_list() {
     );
   }
 
-  $output .= theme('table', $header, $rows);
+  if ($rows) {
+    $output .= theme('table', $header, $rows);
+  }
+  else {
+    $output .= '<p>There are currently no Materialized Views defined.</p>';
+  }
 
   // Now list non-mview custom tables
   $output .= '<br /><h3>Custom Tables</h3>';
@@ -115,7 +120,7 @@ function tripal_views_integration_setup_list() {
   $rows = array();
 
   // get the list of chado tables
-  $tviews = db_query('SELECT tv.name, tv.table_name, tv.priority, tv.comment '
+  $tviews = db_query('SELECT tv.setup_id, tv.name, tv.table_name, tv.priority, tv.comment '
                      .'FROM {tripal_views} tv '
                      .'LEFT JOIN {tripal_custom_tables} tc ON tc.table_name=tv.table_name '
                      .'WHERE mview_id IS NULL AND tc.table_id IS NOT NULL '
@@ -144,7 +149,7 @@ function tripal_views_integration_setup_list() {
   $rows = array();
 
   // get the list of chado tables
-  $tviews = db_query('SELECT tv.name, tv.table_name, tv.priority, tv.comment '
+  $tviews = db_query('SELECT tv.setup_id, tv.name, tv.table_name, tv.priority, tv.comment '
                      .'FROM {tripal_views} tv '
                      .'LEFT JOIN {tripal_custom_tables} tc ON tc.table_name=tv.table_name '
                      .'WHERE mview_id IS NULL AND tc.table_id IS NULL '

+ 408 - 0
tripal_views/views/chado_linking.TMP.inc

@@ -0,0 +1,408 @@
+<?php
+
+/**
+ * This is a temporary function holding all the old-style views integration
+ * needed to link the base tables to their node. This will remain to keep things working
+ * until it has been best determined how to do this via the new tripal_views integration
+ *
+ * It's called att the bottom of tripal_views_views_data()
+ */
+function tripal_views_TEMPORARY_chado_linking_data($data) {
+  global $db_url;
+
+  // if the chado database is not local to the drupal database
+  // then we need to set the database name.  This should always
+  // be 'chado'.
+  if(is_array($db_url) and array_key_exists('chado',$db_url)){
+     // return empty data array b/c if chado is external then no join to the nodetable can be made
+     return $data;
+  }
+
+  // FEATURE ====================================
+  if (module_exists('tripal_feature')) {
+    // Basic table definition
+    $data['chado_feature']['table'] = array(
+      'field' => 'nid',
+      'group' => 'Chado Feature'
+    );
+
+    $data['chado_feature']['nid'] = array(
+      'title' => t('Feature Node ID'),
+      'help' => t('The node ID for this feature'),
+      'field' => array(
+        'handler' => 'views_handler_field_numeric',
+        'click sortable' => TRUE,
+      ),
+      'filter' => array(
+        'handler' => 'views_handler_filter_numeric',
+      ),
+      'sort' => array(
+        'handler' => 'views_handler_sort',
+      ),
+    );
+
+    // Note: No joins need to be made from $data['feature']['table']
+
+    // Join the chado feature table to feature
+    $data['chado_feature']['table']['join']['feature'] = array(
+      'left_field' => 'feature_id',
+      'field' => 'feature_id',
+    );
+
+    // Join the node table to chado feature
+    $data['node']['table']['join']['chado_feature'] = array(
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Join the node table to feature
+    $data['node']['table']['join']['feature'] = array(
+      'left_table' => 'chado_feature',
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Add relationship between chado_feature and feature
+    $data['chado_feature']['feature_nid'] = array(
+      'group' => 'Feature',
+      'title' => 'Feature Node',
+      'help' => 'Links Chado Feature Fields/Data to the Nodes in the current View.',
+      'real field' => 'feature_id',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Feature'),
+        'label' => t('Chado => Feature'),
+        'real field' => 'feature_id',
+        'base' => 'feature',
+        'base field' => 'feature_id'
+      ),
+    );
+
+    // Add node relationship to feature
+    $data['chado_feature']['feature_chado_nid'] = array(
+      'group' => 'Feature',
+      'title' => 'Feature Node',
+      'help' => 'Links Chado Feature Fields/Data to the Nodes in the current View.',
+      'real field' => 'nid',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Node'),
+        'label' => t('Chado => Node'),
+        'real field' => 'nid',
+        'base' => 'node',
+        'base field' => 'nid'
+      ),
+    );
+  }
+
+  // ANALYSIS ===================================
+  if (module_exists('tripal_analysis')) {
+    // Basic table definition
+    $data['chado_analysis']['table'] = array(
+      'field' => 'nid',
+      'group' => 'Chado Analysis'
+    );
+
+    $data['chado_analysis']['nid'] = array(
+      'title' => t('Analysis Node ID'),
+      'help' => t('The node ID for this analysis'),
+      'field' => array(
+        'handler' => 'views_handler_field_numeric',
+        'click sortable' => TRUE,
+      ),
+      'filter' => array(
+        'handler' => 'views_handler_filter_numeric',
+      ),
+      'sort' => array(
+        'handler' => 'views_handler_sort',
+      ),
+    );
+
+    // Note: No joins need to be made from $data['analysis']['table']
+
+    // Join the chado analysis table to analysis
+    $data['chado_analysis']['table']['join']['analysis'] = array(
+      'left_field' => 'analysis_id',
+      'field' => 'analysis_id',
+    );
+
+    // Join the node table to chado analysis
+    $data['node']['table']['join']['chado_analysis'] = array(
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Join the node table to analysis
+    $data['node']['table']['join']['analysis'] = array(
+      'left_table' => 'chado_analysis',
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Add relationship between chado_analysis and analysis
+    $data['chado_analysis']['analysis_nid'] = array(
+      'group' => 'Analysis',
+      'title' => 'Analysis Node',
+      'help' => 'Links Chado Analysis Fields/Data to the Nodes in the current View.',
+      'real field' => 'analysis_id',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Analysis'),
+        'label' => t('Chado => Analysis'),
+        'real field' => 'analysis_id',
+        'base' => 'analysis',
+        'base field' => 'analysis_id'
+      ),
+    );
+
+    // Add node relationship to analysis
+    $data['chado_analysis']['analysis_chado_nid'] = array(
+      'group' => 'Analysis',
+      'title' => 'Analysis Node',
+      'help' => 'Links Chado Analysis Fields/Data to the Nodes in the current View.',
+      'real field' => 'nid',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Node'),
+        'label' => t('Chado => Node'),
+        'real field' => 'nid',
+        'base' => 'node',
+        'base field' => 'nid'
+      ),
+    );
+  }
+
+  // ORGANISM ===================================
+  if (module_exists('tripal_organism')) {
+    // Basic table definition
+    $data['chado_organism']['table'] = array(
+      'field' => 'nid',
+      'group' => 'Chado Organism'
+    );
+
+    $data['chado_organism']['nid'] = array(
+      'title' => t('Organism Node ID'),
+      'help' => t('The node ID for this organism'),
+      'field' => array(
+        'handler' => 'views_handler_field_numeric',
+        'click sortable' => TRUE,
+      ),
+      'filter' => array(
+        'handler' => 'views_handler_filter_numeric',
+      ),
+      'sort' => array(
+        'handler' => 'views_handler_sort',
+      ),
+    );
+
+    // Note: No joins need to be made from $data['organism']['table']
+
+    // Join the chado organism table to organism
+    $data['chado_organism']['table']['join']['organism'] = array(
+      'left_field' => 'organism_id',
+      'field' => 'organism_id',
+    );
+
+    // Join the node table to chado organism
+    $data['node']['table']['join']['chado_organism'] = array(
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Join the node table to organism
+    $data['node']['table']['join']['organism'] = array(
+      'left_table' => 'chado_organism',
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Add relationship between chado_organism and organism
+    $data['chado_organism']['organism_id'] = array(
+      'group' => 'Organism',
+      'title' => 'Organism Node',
+      'help' => 'Links Chado Organism Fields/Data to the Nodes in the current View.',
+      'real field' => 'organism_id',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Organism'),
+        'label' => t('Chado => Organism'),
+        'real field' => 'organism_id',
+        'base' => 'organism',
+        'base field' => 'organism_id'
+      ),
+    );
+  /*
+    // Add node relationship to organism
+    $data['chado_organism']['nid'] = array(
+      'group' => 'Organism',
+      'title' => 'Organism Node',
+      'help' => 'Links Chado Organism Fields/Data to the Nodes in the current View.',
+      'real field' => 'nid',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Node'),
+        'label' => t('Chado => Node'),
+        'real field' => 'nid',
+        'base' => 'node',
+        'base field' => 'nid'
+      ),
+    );
+  */
+  }
+
+  // LIBRARY ====================================
+  if (module_exists('tripal_library')) {
+    // Basic table definition
+    $data['chado_library']['table'] = array(
+      'field' => 'nid',
+      'group' => 'Chado Library'
+    );
+
+    $data['chado_library']['nid'] = array(
+      'title' => t('Library Node ID'),
+      'help' => t('The node ID for this library'),
+      'field' => array(
+        'handler' => 'views_handler_field_numeric',
+        'click sortable' => TRUE,
+      ),
+      'filter' => array(
+        'handler' => 'views_handler_filter_numeric',
+      ),
+      'sort' => array(
+        'handler' => 'views_handler_sort',
+      ),
+    );
+
+    // Note: No joins need to be made from $data['library']['table']
+
+    // Join the chado library table to library
+    $data['chado_library']['table']['join']['library'] = array(
+      'left_field' => 'library_id',
+      'field' => 'library_id',
+    );
+
+    // Join the node table to chado library
+    $data['node']['table']['join']['chado_library'] = array(
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Join the node table to library
+    $data['node']['table']['join']['library'] = array(
+      'left_table' => 'chado_library',
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Add relationship between chado_library and library
+    $data['chado_library']['library_nid'] = array(
+      'group' => 'Library',
+      'title' => 'Library Node',
+      'help' => 'Links Chado Library Fields/Data to the Nodes in the current View.',
+      'real field' => 'library_id',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Library'),
+        'label' => t('Chado => Library'),
+        'real field' => 'library_id',
+        'base' => 'library',
+        'base field' => 'library_id'
+      ),
+    );
+
+    // Add node relationship to library
+    $data['chado_library']['library_chado_nid'] = array(
+      'group' => 'Library',
+      'title' => 'Library Node',
+      'help' => 'Links Chado Library Fields/Data to the Nodes in the current View.',
+      'real field' => 'nid',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Node'),
+        'label' => t('Chado => Node'),
+        'real field' => 'nid',
+        'base' => 'node',
+        'base field' => 'nid'
+      ),
+    );
+  }
+
+  // STOCK ======================================
+  if (module_exists('tripal_stock')) {
+    // Basic table definition
+    $data['chado_stock']['table'] = array(
+      'field' => 'stock_id',
+      'group' => 'Chado Stock',
+    );
+
+    $data['chado_stock']['nid'] = array(
+      'title' => t('Stock Node ID'),
+      'help' => t('The node ID for this analysis'),
+      'field' => array(
+        'handler' => 'views_handler_field_numeric',
+        'click sortable' => TRUE,
+      ),
+      'filter' => array(
+        'handler' => 'views_handler_filter_numeric',
+      ),
+      'sort' => array(
+        'handler' => 'views_handler_sort',
+      ),
+    );
+
+    // Note: No joins need to be made from $data['stock']['table']
+
+    // Join the chado stock table to stock
+    $data['chado_stock']['table']['join']['stock'] = array(
+      'left_field' => 'stock_id',
+      'field' => 'stock_id',
+    );
+
+    // Join the node table to chado stock
+    $data['node']['table']['join']['chado_stock'] = array(
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Join the node table to stock
+    $data['node']['table']['join']['stock'] = array(
+      'left_table' => 'chado_stock',
+      'left_field' => 'nid',
+      'field' => 'nid',
+    );
+
+    // Add relationship between chado_stock and stock
+    $data['chado_stock']['stock_nid'] = array(
+      'group' => 'Stock',
+      'title' => 'Stock Node',
+      'help' => 'Links Chado Stock Fields/Data to the Nodes in the current View.',
+      'real field' => 'stock_id',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Stock'),
+        'label' => t('Chado => Stock'),
+        'real field' => 'stock_id',
+        'base' => 'stock',
+        'base field' => 'stock_id'
+      ),
+    );
+
+    // Add node relationship to stock
+    $data['chado_stock']['stock_chado_nid'] = array(
+      'group' => 'Stock',
+      'title' => 'Stock Node',
+      'help' => 'Links Chado Stock Fields/Data to the Nodes in the current View.',
+      'real field' => 'nid',
+      'relationship' => array(
+        'handler' => 'views_handler_relationship',
+        'title' => t('Chado => Node'),
+        'label' => t('Chado => Node'),
+        'real field' => 'nid',
+        'base' => 'node',
+        'base field' => 'nid'
+      ),
+    );
+  }
+
+  return $data;
+}