123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501 |
- <?php
- /**
- * @file
- * Integrates many of the core database tables with drupal views
- */
- /**
- * Describe various Tripal Core systems to Views for the creation of
- * administrative views.
- *
- * @ingroup tripal
- */
- function tripal_chado_views_data() {
- $data = array();
- // Custom Tables Management
- $data = tripal_chado_views_data_custom_tables($data);
- // Materialized Views Management
- $data = tripal_chado_views_data_mviews($data);
- return $data;
- }
- // /**
- // * Implements hook_views_data_alter().
- // */
- // function tripal_chado_views_data_alter(&$data) {
- // // Adds integration for chado-based fields.
- // tripal_chado_add_field_views_data($data);
- // return $data;
- // }
- // /**
- // * Adds integration for chado-based fields.
- // *
- // * We can't use hook_field_view_data since this only works when the
- // * storage engine is of type 'field_sql_storage' and of course,
- // * ours is not. Thus we create our own implementation of field_views_data()
- // * for our storage engine.
- // */
- // function tripal_chado_add_field_views_data(&$data) {
- // foreach (field_info_fields() as $field) {
- // if ($field['storage']['type'] != 'field_chado_storage') {
- // continue;
- // }
- // $field_name = $field['field_name'];
- // $field_type = $field['type'];
- // // Currently, we only handle integration of chado fields with TripalEntity.
- // // @todo: extend this to work with other entities in the future.
- // if (isset($field['bundles']['TripalEntity']) AND isset($field['settings']['chado_column'])) {
- // // We currently don't support prop tables for views integration due
- // // in part to the multiple values but also b/c we can't indicate which
- // // type of property to show. Thus, instead of warning the user,
- // // we just won't integrate it at this time.
- // // @todo: Handle property fields.
- // if (preg_match('/prop$/', $field['settings']['chado_table'])) {
- // continue;
- // }
- // // Get some information about the chado table in order to make good
- // // default choices for handlers.
- // $table_desc = chado_get_schema($field['settings']['chado_table']);
- // $field_defn = $table_desc['fields'][ $field['settings']['chado_column'] ];
- // // We also need to know if this field is a foreign key.
- // $fk_defn = FALSE;
- // foreach ($table_desc['foreign keys'] as $details) {
- // foreach ($details['columns'] as $left_field => $right_field) {
- // if ($left_field == $field['settings']['chado_column']) {
- // $fk_defn = array(
- // 'left_table' => $field['settings']['chado_table'],
- // 'left_field' => $left_field,
- // 'right_table' => $details['table'],
- // 'right_field' => $right_field,
- // );
- // }
- // }
- // }
- // // Unfortunatly we can't use the field label since that is set at the
- // // instance level and fields are integrated at the field level (independant of bundle).
- // // Thus we will simply make the most readable and informative field name we can.
- // $data['tripal_entity'][$field_name]['title'] = ucfirst(str_replace('_',' ',$field['settings']['chado_table']))
- // . ': ' .ucfirst(str_replace('_',' ',$field['settings']['chado_column']));
- // // The help should be 'Appears in: TripalEntity: gene, organism'
- // // so that users know where they can use it. This requires a little extra work since all
- // // we have access to at this point is bio_data_2, bio_data_4 but since that's not very
- // // informative, extra work is worth it ;-).
- // $entity_info = entity_get_info('TripalEntity');
- // $bundle_labels = array();
- // foreach ($field['bundles']['TripalEntity'] as $bundle_id) {
- // $bundle_labels[] = $entity_info['bundles'][$bundle_id]['label'];
- // }
- // $data['tripal_entity'][$field_name]['help'] = 'Appears in: TripalEntity:' . implode(', ', $bundle_labels);
- // // Define the field.
- // $data['tripal_entity'][$field_name]['field']['chado_field'] = $field['settings']['chado_column'];
- // $data['tripal_entity'][$field_name]['field']['chado_table'] = $field['settings']['chado_table'];
- // $data['tripal_entity'][$field_name]['field']['field_name'] = $field['field_name'];
- // $data['tripal_entity'][$field_name]['field']['entity_table'] = 'tripal_entity';
- // $data['tripal_entity'][$field_name]['field']['entity_type'] = 'TripalEntity';
- // $data['tripal_entity'][$field_name]['field']['bundles'] = $field['bundles']['TripalEntity'];
- // $data['tripal_entity'][$field_name]['field']['handler'] = 'chado_views_handler_field';
- // $data['tripal_entity'][$field_name]['field']['click sortable'] = FALSE;
- // // Define the Filter.
- // $data['tripal_entity'][$field_name]['filter']['chado_field'] = $field['settings']['chado_column'];
- // $data['tripal_entity'][$field_name]['filter']['chado_table'] = $field['settings']['chado_table'];
- // $data['tripal_entity'][$field_name]['filter']['field_name'] = $field['field_name'];
- // $data['tripal_entity'][$field_name]['filter']['entity_table'] = 'tripal_entity';
- // $data['tripal_entity'][$field_name]['filter']['entity_type'] = 'TripalEntity';
- // $data['tripal_entity'][$field_name]['filter']['bundles'] = $field['bundles']['TripalEntity'];
- // $data['tripal_entity'][$field_name]['filter']['handler'] = 'chado_views_handler_filter_string';
- // // Define sorting.
- // $data['tripal_entity'][$field_name]['sort']['chado_field'] = $field['settings']['chado_column'];
- // $data['tripal_entity'][$field_name]['sort']['chado_table'] = $field['settings']['chado_table'];
- // $data['tripal_entity'][$field_name]['sort']['field_name'] = $field['field_name'];
- // $data['tripal_entity'][$field_name]['sort']['entity_table'] = 'tripal_entity';
- // $data['tripal_entity'][$field_name]['sort']['entity_type'] = 'TripalEntity';
- // $data['tripal_entity'][$field_name]['sort']['bundles'] = $field['bundles']['TripalEntity'];
- // $data['tripal_entity'][$field_name]['sort']['handler'] = 'chado_views_handler_sort';
- // // Specify special handlers.
- // if ($fk_defn) {
- // $data['tripal_entity'][$field_name]['filter']['handler'] = 'chado_views_handler_filter_fk';
- // $data['tripal_entity'][$field_name]['filter']['foreign_key'] = $fk_defn;
- // }
- // if ($field_defn['type'] == 'boolean') {
- // $data['tripal_entity'][$field_name]['filter']['handler'] = 'chado_views_handler_filter_boolean';
- // $data['tripal_entity'][$field_name]['filter']['label'] = $field['settings']['chado_column'];
- // $data['tripal_entity'][$field_name]['filter']['type'] = 'yes-no';
- // }
- // elseif ($field_defn['type'] == 'datetime') {
- // $data['tripal_entity'][$field_name]['filter']['handler'] = 'chado_views_handler_filter_date';
- // }
- // // Allow the fields to alter the default selections from above.
- // tripal_load_include_field_type($field_type);
- // if (preg_match('/^chado/', $field_type) and class_exists($field_type)) {
- // $field_obj = new $field_type($field);
- // $field_obj->views_data_alter($data['tripal_entity'][$field_name], $field, $entity_info);
- // }
- // }
- // }
- // }
- /**
- * Provides the data array for the tripal custom tables management
- *
- * @param $data
- * Previously generated tripal views data array
- * return
- * $data array with custom tables management described
- *
- * @ingroup tripal
- */
- function tripal_chado_views_data_custom_tables($data) {
- $data['tripal_custom_tables']['table']['group'] = t('Tripal Custom Tables');
- $data['tripal_custom_tables']['table']['base'] = array(
- 'field' => 'table_id', // This is the identifier field for the view.
- 'title' => t('Tripal Custom Tables'),
- 'help' => t('Custom Tables in Chado created by this Tripal Installation.'),
- 'weight' => 10,
- );
- // Table ID
- $data['tripal_custom_tables']['table_id'] = array(
- 'title' => t('Custom Table ID'),
- 'help' => t('Custom table primary key.'),
- 'field' => array(
- 'handler' => 'views_handler_field_numeric',
- 'click sortable' => TRUE,
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_numeric',
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- );
- // Table Name
- $data['tripal_custom_tables']['table_name'] = array(
- 'title' => t('Table Name'),
- 'help' => t('The name of the table in the database.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // Schema
- $data['tripal_custom_tables']['schema'] = array(
- 'title' => t('Table Schema'),
- 'help' => t('The schema definition of the table.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // Table ID
- $data['tripal_custom_tables']['mview_id'] = array(
- 'title' => t('Materialized View ID'),
- 'help' => t('Foreign key to tripal_mviews table for the materialized view.'),
- 'field' => array(
- 'handler' => 'views_handler_field_numeric',
- 'click sortable' => TRUE,
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_numeric',
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- );
- return $data;
- }
- /**
- * Provides the data array for the tripal custom tables management
- *
- * @param $data
- * Previously generated tripal views data array
- * return
- * $data array with custom tables management described
- *
- * @ingroup tripal
- */
- function tripal_chado_views_data_mviews($data) {
- $data['tripal_mviews']['table']['group'] = t('Tripal Materialized Views');
- $data['tripal_mviews']['table']['base'] = array(
- 'field' => 'mview_id', // This is the identifier field for the view.
- 'title' => t('Tripal Materialized Views'),
- 'help' => t('Materialized Views in Chado created by this Tripal Installation.'),
- 'weight' => 10,
- );
- // Implicit Join to Tripal Views
- $data['tripal_mviews']['table']['join'] = array(
- 'tripal_views' => array(
- 'left_field' => 'mview_id',
- 'field' => 'mview_id',
- ),
- );
- // Mview ID
- $data['tripal_mviews']['mview_id'] = array(
- 'title' => t('Materialized View ID'),
- 'help' => t('The primary key.'),
- 'field' => array(
- 'handler' => 'views_handler_field_numeric',
- 'click sortable' => TRUE,
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_numeric',
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- );
- // name
- $data['tripal_mviews']['name'] = array(
- 'title' => t('Name'),
- 'help' => t('Human-readable name of the materialized view.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // modulename
- $data['tripal_mviews']['modulename'] = array(
- 'title' => t('Module Name'),
- 'help' => t('The module that created the materialized view.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // mv_table
- $data['tripal_mviews']['mv_table'] = array(
- 'title' => t('Table'),
- 'help' => t('The database table the materialized view is stored in.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // mv_specs
- $data['tripal_mviews']['mv_specs'] = array(
- 'title' => t('Specification'),
- 'help' => t('Materialized View Specification.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // mv_schema
- $data['tripal_mviews']['mv_schema'] = array(
- 'title' => t('Schema'),
- 'help' => t('Schema definition for the materialized view table.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // indexed
- $data['tripal_mviews']['indexed'] = array(
- 'title' => t('Indices'),
- 'help' => t('Any indices for this materialized view.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // query
- $data['tripal_mviews']['query'] = array(
- 'title' => t('Query'),
- 'help' => t('The query used to populate the materialized view.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // special_index
- $data['tripal_mviews']['special_index'] = array(
- 'title' => t('Special Index'),
- 'help' => t('Any special indices for the materialized view.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // last_update
- $data['tripal_mviews']['last_update'] = array(
- 'title' => t('Updated'),
- 'help' => t('Date Last Updated.'),
- 'field' => array(
- 'handler' => 'views_handler_field_date',
- 'click sortable' => TRUE,
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort_date',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_date',
- ),
- );
- // status
- $data['tripal_mviews']['status'] = array(
- 'title' => t('Status'),
- 'help' => t('The status of the materialized view.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- // comment
- $data['tripal_mviews']['comment'] = array(
- 'title' => t('Description'),
- 'help' => t('Human-Readable Admin Description.'),
- 'field' => array(
- 'handler' => 'views_handler_field',
- 'click sortable' => TRUE, // This is use by the table display plugin.
- ),
- 'sort' => array(
- 'handler' => 'views_handler_sort',
- ),
- 'filter' => array(
- 'handler' => 'views_handler_filter_string',
- ),
- 'argument' => array(
- 'handler' => 'views_handler_argument_string',
- ),
- );
- return $data;
- }
|