123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?php
- /**
- * Removes Chado fields from a view, if Chado is external.
- *
- * Remove any drupal fields from a chado-based default view definition if
- * chado is external. This ensures compatibility with an external chado
- * database.
- *
- * You should be calling this function in your hook_views_default_views().
- * This function will only remove drupal tables if chado is external; thus you
- * do not need to worry about checking yourself. For example, the following is
- * a good hook_views_default_views():
- *
- * @code
- * function mymodule_views_default_views() {
- * $views = array();
- *
- * // NOTE: <VIEW-TYPE> describes the type of view:
- * // - 'admin' for views used for administration of your module
- * // - 'search' for views used to search data
- * // - 'list' for views used primarily as data listings
- *
- * // <VIEW-HUMAN-READABLE-NAME>
- * $view = mymodule_defaultview_<VIEW-TYPE>_<VIEW-MACHINE-NAME>();
- * $view = tripal_make_view_compatible_with_external($view);
- * $views[$view->name] = $view;*
- *
- * // <VIEW-HUMAN-READABLE-NAME>
- * $view = mymodule_defaultview_<VIEW-TYPE>_<VIEW-MACHINE-NAME>();
- * $view = tripal_make_view_compatible_with_external($view);
- * $views[$view->name] = $view;
- *
- * return $views;
- * }
- *
- * function mymodule_defaultview_<VIEW-TYPE>_<VIEW-MACHINE-NAME>() {
- * // PASTE VIEWS EXPORT CODE HERE
- * return $view;
- * }
- *
- * function mymodule_defaultview_<VIEW-TYPE>_<VIEW-MACHINE-NAME>() {
- * // PASTE VIEWS EXPORT CODE HERE
- * return $view;
- * }
- * @endcode
- *
- * Notice that the actual views export code is in a separate function. This
- * makes your hook_views_default_views() more readable.
- *
- * NOTE: Currently assumes all tables not in the tripal views integration
- * tables are Drupal tables.
- *
- * @param $view
- * The default view definition object
- * @return
- * The default view with all relationships, fields, filters, sorts,
- * arguements for Drupal tables removed.
- */
- function tripal_make_view_compatible_with_external($view) {
- $remove_table = array();
- // First check that the base table for the view is a chado table
- // If it's not then don't do any filtering
- $schema = chado_get_schema($view->base_table);
- if (!$schema) {
- return $view;
- }
- // $setup_id = tripal_is_table_integrated($view->base_table);
- // if (!$setup_id) {
- // return $view;
- // }
- // IF chado is external then remove all config relating to drupal tables
- if (!chado_is_local()) {
- // Iterate through all displays
- foreach ($view->display as $display_name => $display) {
- $display_options = $display->handler->display->display_options;
- $sections = array('fields', 'filters', 'sorts', 'relationships');
- foreach ($sections as $section) {
- $display_options[$section] = (isset($display_options[$section])) ? $display_options[$section] : array();
- foreach ($display_options[$section] as $key => $defn) {
- // If the table has not already been encountered; check if it's in tripal_views
- if (!isset($remove_table[ $defn['table'] ])) {
- // If the table is view then this is a general handler; thus keep
- if ($defn['table'] == 'views') {
- $remove_table[ $defn['table'] ] = FALSE;
- }
- // If this table is integrated then it is chado; thus keep
- //$setup_id = tripal_is_table_integrated($defn['table']);
- $schema = chado_get_schema($defn['table']);
- //if ($setup_id) {
- if ($schema) {
- $remove_table[ $defn['table'] ] = FALSE;
- }
- else {
- $remove_table[ $defn['table'] ] = TRUE;
- }
- }
- // Based on the $remove_table array, unset this field if its from a drupal table
- if ($remove_table[ $defn['table'] ]) {
- unset($view->display[$display_name]->handler->display->display_options[$section][$key]);
- }
- }
- }
- }
- }
- return $view;
- }
- /**
- * Programatically disable view.
- *
- * This should be used in a hook_menu definition as the callback to provide a link
- * to disable the view (first example). It can also be called directly if needed (second example).
- * @code
- * // Create a URL that when the user navigates there, a given view will be disabled.
- * // You will still need to provide a link to this menu item somewhere appropriate.
- * function mymodule_menu() {
- * $items = array();
- *
- * // Create one of these for each of your default views
- * $items['admin/tripal/<PATH-TO-YOUR-ADMIN-SECTION>/views/<VIEW-MACHINE-NAME>/disable'] = array(
- * 'title' => 'Disable <VIEW-HUMAN-READABLE-NAME>',
- * 'page callback' => 'tripal_disable_view',
- * 'page arguments' => array('<VIEW-MACHINE-NAME>', '<PATH-TO-REDIRECT-TO-AFTERWARDS>'),
- * 'access arguments' => array('<YOUR-PERMISSION-KEY>'),
- * 'type' => MENU_CALLBACK,
- * );
- *
- * return $items;
- * }
- *
- * // Call this function directly to disable a view
- * // The example shows disabling your own default view when your module is uninstalled
- * function mymodule_uninstall() {
- *
- * $view_name = '<VIEW-MACHINE-NAME>';
- * tripal_disable_view($view_name);
- *
- * }
- * @endcode
- *
- * @param $view_name
- * The machine-name of the view to be enabled
- * @param $redirect_link
- * The path to redirect to. FALSE if no redirect needed
- *
- * @ingroup tripal_views_api
- */
- function tripal_disable_view($view_name, $redirect_link = FALSE) {
- $status = variable_get('views_defaults', array());
- if (isset($status[$view_name])) {
- $status[$view_name] = TRUE;
- variable_set('views_defaults', $status);
- drupal_set_message("Disabled $view_name");
- }
- else {
- drupal_set_message("Unable to find a view by the name of '$view_name'. Unable to disable this view.",'error');
- }
- if ($redirect_link) {
- drupal_goto($redirect_link);
- }
- }
- /**
- * Programatically enable view
- *
- * This should be used in a hook_menu definition as the callback to provide a link
- * to enable the view (first example). It can also be called directly if needed (second example).
- * @code
- * // Create a URL that when the user navigates there, a given view will be enabled.
- * // You will still need to provide a link to this menu item somewhere appropriate (ie: an admin landing page).
- * function mymodule_menu() {
- * $items = array();
- *
- * // Create one of these for each of your default views
- * $items['admin/tripal/<PATH-TO-YOUR-ADMIN-SECTION>/views/<VIEW-MACHINE-NAME>/enable'] = array(
- * 'title' => 'Enable <VIEW-HUMAN-READABLE-NAME>',
- * 'page callback' => 'tripal_enable_view',
- * 'page arguments' => array('<VIEW-MACHINE-NAME>', '<PATH-TO-REDIRECT-TO-AFTERWARDS>'),
- * 'access arguments' => array('<YOUR-PERMISSION-KEY>'),
- * 'type' => MENU_CALLBACK,
- * );
- *
- * return $items;
- * }
- *
- * // Call this function directly to disable a view
- * // The example shows enabling your own default view when your module is enabled.
- * // This might be useful if you disable your view when your module is disabled.
- * function mymodule_enable() {
- * $view_name = '<VIEW-MACHINE-NAME>';
- * tripal_enable_view($view_name);
- * }
- * @endcode
- *
- * @param $view_name
- * The machine-name of the view to be enabled
- * @param $redirect_link
- * The path to redirect to. FALSE if no redirect needed
- *
- * @ingroup tripal_views_api
- */
- function tripal_enable_view($view_name, $redirect_link = FALSE) {
- $status = variable_get('views_defaults', array());
- if (isset($status[$view_name])) {
- $status[$view_name] = FALSE;
- variable_set('views_defaults', $status);
- drupal_set_message("Successfully Enabled $view_name");
- }
- else {
- drupal_set_message("Unable to find a view by the name of '$view_name'. Unable to enable this view.",'error');
- }
- if ($redirect_link) {
- drupal_goto($redirect_link);
- }
- }
|