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 = mymodule_defaultview__(); * $view = tripal_make_view_compatible_with_external($view); * $views[$view->name] = $view;* * * // * $view = mymodule_defaultview__(); * $view = tripal_make_view_compatible_with_external($view); * $views[$view->name] = $view; * * return $views; * } * * function mymodule_defaultview__() { * // PASTE VIEWS EXPORT CODE HERE * return $view; * } * * function mymodule_defaultview__() { * // 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//views//disable'] = array( * 'title' => 'Disable ', * 'page callback' => 'tripal_disable_view', * 'page arguments' => array('', ''), * 'access arguments' => array(''), * '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 = ''; * 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_chado_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//views//enable'] = array( * 'title' => 'Enable ', * 'page callback' => 'tripal_enable_view', * 'page arguments' => array('', ''), * 'access arguments' => array(''), * '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 = ''; * 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_chado_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); } }