|
@@ -600,84 +600,97 @@ function tripal_chado_views_views_data_tripal_views_tables($data) {
|
|
|
*/
|
|
|
function tripal_chado_views_views_data_alter(&$data) {
|
|
|
|
|
|
- // ADD IN NODE JOINS & RELATIONSHIPS
|
|
|
- // D7 @todo: Create custom handler to allow join from Node => Base (ie: organism)
|
|
|
- // with the addition of a single relationship
|
|
|
- // D7 @todo: Create custom handler to allow join from Base (ie: organism)
|
|
|
- // with the addition of a single relationship
|
|
|
- // D7 @todo: Add support for Mview <-> Node joins and relationships
|
|
|
- $tvi_query = db_query('SELECT * FROM {tripal_views} WHERE base_table=1');
|
|
|
- foreach ($tvi_query as $tvi_row) {
|
|
|
-
|
|
|
- //ids we'll use for queries
|
|
|
- $setup_id = $tvi_row->setup_id;
|
|
|
- $base_table = $tvi_row->table_name;
|
|
|
- $linker_table = 'chado_' . $base_table;
|
|
|
- $base_title = ucwords(str_replace('_', ' ', $base_table));
|
|
|
-
|
|
|
- // add in joins to the node tables if the Chado schema is local
|
|
|
- $is_local = isset($GLOBALS["chado_is_local"]) && $GLOBALS["chado_is_local"];
|
|
|
- if ($is_local) {
|
|
|
- // if a node linking table exists then add in the joins
|
|
|
- if (db_table_exists($linker_table)) {
|
|
|
-
|
|
|
- // Adds content (node) fields to chado base table field lists automatically
|
|
|
- $data['node']['table']['join'][$linker_table] = array(
|
|
|
- 'left_field' => 'nid',
|
|
|
- 'field' => 'nid',
|
|
|
- );
|
|
|
- $data[$linker_table]['table']['join'][$base_table] = array(
|
|
|
- 'left_field' => $base_table . '_id',
|
|
|
- 'field' => $base_table . '_id',
|
|
|
- );
|
|
|
- $data['node']['table']['join'][$base_table] = array(
|
|
|
- 'left_table' => $linker_table,
|
|
|
- 'left_field' => 'nid',
|
|
|
- 'field' => 'nid',
|
|
|
- );
|
|
|
-
|
|
|
- // Adds in a chado base table => node relationship
|
|
|
- // This allows controlled joining to multiple nodes per line
|
|
|
- // Use Case: link to feature and organism nodes on a feature listing
|
|
|
- // D7 todo: a custom relationship handler to get from feature.organism_id => organism node
|
|
|
- // without 1st needing to add relationship to organism table
|
|
|
- $base_field = $base_table . '_id';
|
|
|
- $data[$linker_table][$base_field] = array(
|
|
|
- 'group' => $base_title,
|
|
|
- 'title' => $base_title . 'Node',
|
|
|
- 'help' => t("Links @base_title to it's node.", array('@base_title' => $base_title)),
|
|
|
- 'relationship' => array(
|
|
|
- 'handler' => 'views_handler_relationship',
|
|
|
- 'title' => t("@base_title => Node", array('@base_title' => $base_title)),
|
|
|
- 'label' => t("@base_title => Node", array('@base_title' => $base_title)),
|
|
|
- 'real field' => 'nid',
|
|
|
- 'base' => 'node',
|
|
|
- 'base field' => 'nid'
|
|
|
- ),
|
|
|
- );
|
|
|
-
|
|
|
- // Add Chado fields to a node-based view
|
|
|
- // This will only be done with relationships
|
|
|
- $base_field = $base_table . '_id';
|
|
|
- $data['node'][$base_field] = array(
|
|
|
- 'group' => $base_title,
|
|
|
- 'title' => $base_title,
|
|
|
- 'help' => t("Links node to chado @base_title.", array('@base_title' => $base_title)),
|
|
|
- 'relationship' => array(
|
|
|
- 'handler' => 'views_handler_relationship',
|
|
|
- 'title' => t("Node => @base_title", array('@base_title' => $base_title)),
|
|
|
- 'label' => t("Node => @base_title", array('@base_title' => $base_title)),
|
|
|
- 'real field' => 'nid',
|
|
|
- 'base' => $linker_table,
|
|
|
- 'base field' => 'nid'
|
|
|
- ),
|
|
|
- );
|
|
|
-
|
|
|
- }
|
|
|
+ // ADD IN ENTITIES JOINS & RELATIONSHIPS
|
|
|
+ // D7 @todo: Create custom handler to allow join from Entity => Base (ie: organism)
|
|
|
+ // with the addition of a single relationship
|
|
|
+ // D7 @todo: Create custom handler to allow join from Base (ie: organism)
|
|
|
+ // with the addition of a single relationship
|
|
|
+ // D7 @todo: Add support for Mview <-> Entity joins and relationships
|
|
|
+ $bundles = db_select('chado_bundle', 'CB')
|
|
|
+ ->fields('CB', array('bundle_id', 'data_table', 'type_column', 'type_id'))
|
|
|
+ ->execute();
|
|
|
+ // Look for the record ID in the appropriate chado table.
|
|
|
+ foreach ($bundles as $bundle) {
|
|
|
+ // Ids we'll use for queries.
|
|
|
+ $base_table = $bundle->data_table;
|
|
|
+ $linker_table = 'chado_bio_data_' . $bundle->bundle_id;
|
|
|
+ $base_title = ucwords(str_replace('_', ' ', $base_table));
|
|
|
+ $bundle_name = 'bio_data_' . $bundle->bundle_id;
|
|
|
+
|
|
|
+ // Add in joins to the tripal_entity tables if the Chado schema is local.
|
|
|
+ $is_local = isset($GLOBALS["chado_is_local"]) && $GLOBALS["chado_is_local"];
|
|
|
+ if ($is_local) {
|
|
|
+ if (db_table_exists($linker_table)) {
|
|
|
+ // Adds tripal_entity fields to chado base table field lists automatically.
|
|
|
+ $data['tripal_entity']['table']['join'][$linker_table] = array(
|
|
|
+ 'left_field' => 'entity_id',
|
|
|
+ 'field' => 'id',
|
|
|
+ );
|
|
|
+ $data['tripal_entity']['table']['join'][$base_table] = array(
|
|
|
+ 'left_table' => $linker_table,
|
|
|
+ 'left_field' => 'entity_id',
|
|
|
+ 'field' => 'id',
|
|
|
+ );
|
|
|
+ $data[$linker_table]['table']['join'][$base_table] = array(
|
|
|
+ 'left_field' => $base_table . '_id',
|
|
|
+ 'field' => 'record_id',
|
|
|
+ );
|
|
|
+ $data[$linker_table]['table']['join']['tripal_entity'] = array(
|
|
|
+ 'left_field' => 'id',
|
|
|
+ 'field' => 'entity_id',
|
|
|
+ );
|
|
|
+ $data[$base_table]['table']['join'][$linker_table] = array(
|
|
|
+ 'left_field' => 'record_id',
|
|
|
+ 'field' => $base_table . '_id',
|
|
|
+ );
|
|
|
+ $data[$base_table]['table']['join']['tripal_entity'] = array(
|
|
|
+ 'left_table' => $linker_table,
|
|
|
+ 'left_field' => 'record_id',
|
|
|
+ 'field' => $base_table . '_id',
|
|
|
+ );
|
|
|
+
|
|
|
+ // Adds in a chado base table => entity relationship.
|
|
|
+ // This allows controlled joining to multiple entities per line.
|
|
|
+ // Use Case: link to feature and organism entities on a feature listing.
|
|
|
+ // D7 todo: a custom relationship handler to get from feature.organism_id => organism node
|
|
|
+ // without 1st needing to add relationship to organism table.
|
|
|
+ $base_field = $base_table . '_id';
|
|
|
+ $data[$linker_table][$base_field] = array(
|
|
|
+ 'group' => $base_title,
|
|
|
+ 'title' => $base_title . 'Entity',
|
|
|
+ 'help' => t("Links @base_title to it's entity.", array('@base_title' => $base_title)),
|
|
|
+ 'relationship' => array(
|
|
|
+ 'handler' => 'views_handler_relationship',
|
|
|
+ 'title' => t("@base_title => Entity", array('@base_title' => $base_title)),
|
|
|
+ 'label' => t("@base_title => Entity", array('@base_title' => $base_title)),
|
|
|
+ 'real field' => 'entity_id',
|
|
|
+ 'base' => 'tripal_entity',
|
|
|
+ 'base field' => 'id'
|
|
|
+ ),
|
|
|
+ );
|
|
|
+
|
|
|
+ // Add Chado fields to a entity-based view
|
|
|
+ // This will only be done with relationships.
|
|
|
+ $base_field = $base_table . '_id';
|
|
|
+ $data['tripal_entity'][$base_field] = array(
|
|
|
+ 'group' => $base_title,
|
|
|
+ 'title' => $base_title,
|
|
|
+ 'help' => t("Links entity to chado @base_title.", array('@base_title' => $base_title)),
|
|
|
+ 'relationship' => array(
|
|
|
+ 'handler' => 'views_handler_relationship',
|
|
|
+ 'title' => t("Entity => @base_title", array('@base_title' => $base_title)),
|
|
|
+ 'label' => t("Entity => @base_title", array('@base_title' => $base_title)),
|
|
|
+ 'real field' => 'id',
|
|
|
+ 'base' => $linker_table,
|
|
|
+ 'base field' => 'entity_id'
|
|
|
+ ),
|
|
|
+ );
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- return $data;
|
|
|
+ return $data;
|
|
|
}
|
|
|
|
|
|
/**
|