123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- <?php
- /**
- * @file
- * This file contains all Drupal hooks for the module other than any node hooks
- * and block hooks. Those go in the [module name].chado_node.inc file and
- * [module_name].blocks.inc respectively
- *
- */
- // EXPLANATION: include any files needed for this module. That includes any API
- // file, the theme file, or files with functions for new node types. Try to
- // include other files only when needed so as to reduce the loading time
- // for the module.
- require('api/tripal_example.api.inc');
- require('theme/tripal_example.theme.inc');
- require('includes/tripal_example.chado_node.inc');
- /**
- * Implementation of hook_permissions()
- *
- * Set the permission types that this module uses.
- *
- * @ingroup tripal_example
- */
- function tripal_example_permission() {
- // EXPLANATION: here we want to setup any of the permission types that this
- // module needs. Our example module creates a new chado node type called
- // 'chado_example'. Therefore, we need permissions to view, edit, delete,
- // create our new node type. Additionally, we want to add a permission that
- // allows for administration of this module. These permissions will appear in
- // the 'People' -> 'Permissions' configuration page and allow the site admin
- // to specify which user roles are allowed to perform specific actions.
- return array(
- 'access chado_example content' => array(
- 'title' => t('View Examples'),
- 'description' => t('Allow users to view example pages.'),
- ),
- 'create chado_example content' => array(
- 'title' => t('Create Examples'),
- 'description' => t('Allow users to create new example pages.'),
- ),
- 'delete chado_example content' => array(
- 'title' => t('Delete Examples'),
- 'description' => t('Allow users to delete example pages.'),
- ),
- 'edit chado_example content' => array(
- 'title' => t('Edit Examples'),
- 'description' => t('Allow users to edit example pages.'),
- ),
- 'administer tripal example' => array(
- 'title' => t('Administer Examples'),
- 'description' => t('Allow users to administer all examples.'),
- ),
- );
- }
- /**
- * Implements hook_menu()
- *
- * Specifies menu items and URLs used by this module.
- *
- * @ingroup tripal_example
- */
- function tripal_example_menu() {
- $items = array();
- // EXPLANATION: the $items array should be populated to contain a list of
- // menu items or URL callbacks that our module needs.
- // all Tripal Extension modules should provide at least these menu items:
- // * A menu item for an administrative home page
- // * A menu item for 'Help' documentation
- // * A menu item for a module configuration page
- //
- // Additionally, if your module defines a custom node type that is linked
- // to a record in Chado:
- // * A menu item for syncing drupal nodes with Chado records.
- //
- // EXPLANATION: all extension modules should have an administrative menu item
- // with the path set to 'admin/tripal/extension/[module name]'. This will
- // place the menu item in the 'Tripal' -> 'Extension Modules' page. Because
- // this is an administrative menu item we must be sure to set the
- // 'access arguments' to be 'administer tripal example' which is a permission
- // type we created in the tripal_example_permissions() function above.
- $items['admin/tripal/extension/tripal_example'] = array(
- 'title' => 'Examples',
- 'description' => 'Example module for help with development of new extension modules.',
- 'page callback' => 'tripal_example_admin_examples_listing',
- 'access arguments' => array('administer tripal example'),
- 'type' => MENU_NORMAL_ITEM,
- // We include the file where the 'page callback' function
- // is located. This removes the need to include all of the
- // include files at the top of the module, and speeds
- // module loading time.
- 'file' => '/includes/tripal_example.admin.inc',
- );
- // EXPLANATION: all extension modules should provide help documentation to
- // describe the functionality of the module and any installation or setup
- // tasks that may be required. The menu 'type' is MENU_LOCAL_TASK so that the
- // link appears in a tab on the extension module's administrative page.
- // Here the 'page callback' specifies that we are using Drupal's theme
- // function and the 'page_arguments' indicate the name of the template file
- // Thus, all help documentation should be provided in the
- // [module name]/theme/tripal_example_help.tpl.php file.
- $items['admin/tripal/extension/tripal_example/help'] = array(
- 'title' => 'Help',
- 'description' => 'Basic Description of Tripal Library Module Functionality',
- 'page callback' => 'theme',
- 'page arguments' => array('tripal_example_help'),
- 'access arguments' => array('administer tripal example'),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 10,
- );
- // EXPLANATION: all extension modules should provide a configuration page.
- // Even if your module does not need configuration the menu item and page
- // should be created. This helps users recognize that the module is installed
- // and working. The configuration page can simply state that no configuration
- // settings are available. Typically a form is provided for the module's
- // configuration settings. Therefore the 'page callback' uses the
- // drupal_get_form() function and the 'page argument' indicates the form
- // to call is named 'tripal_eample_admin'. The function that describes
- // to form is in the includes/tripal_example.admin.inc file.
- $items['admin/tripal/extension/tripal_example/configuration'] = array(
- 'title' => 'Settings',
- 'description' => 'Configure the Tripal Library module',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('tripal_example_admin'),
- 'access arguments' => array('administer tripal example'),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 5,
- );
- // EXPLANATION: If your module defines a new chado node type and that node
- // type directly links to a record in Chado, then you can use the Tripal API
- // to quickly provide syncing functionality. See the API documentation here
- // for more information on how that is setup:
- // http://api.tripal.info/api/tripal/tripal_core%21api%21tripal_core.chado_nodes.api.inc/function/chado_node_sync_form/2.x
- $items['admin/tripal/extension/tripal_example/sync'] = array(
- 'title' => ' Sync',
- 'description' => 'Create pages on this site for examples stored in Chado',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('chado_node_sync_form', 'tripal_example', 'chado_example'),
- 'access arguments' => array('administer tripal example'),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 2,
- );
- // EXPLANATION: If your module defines a new node type that uses the default
- // table of contents (left-side bar of content panes on a page). Then a 'TOC'
- // link will automatically appear on the node page to allow for customization
- // of the TOC. However those customizations are only node specific. To provide
- // a tab in the module's administrative pages add the following menu item.
- // This menu will provide a form similar to the one found on the node that
- // allows the user to set global TOC settings for the content type. Be sure to
- // always use a menu path of the form:
- // admin/tripal/chado/[module name]/[content type name]_toc
- // this allows for a module to support TOC management when there are multiple
- // content types provided by the module, as the content type is specified
- // in the menu path.
- $items['admin/tripal/chado/tripal_example/chado_example_toc'] = array(
- 'title' => ' TOC',
- 'description' => 'Manage the table of contents for example nodes.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('tripal_core_content_type_toc_form', 'chado_example'),
- 'access arguments' => array('administer tripal example'),
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'includes/tripal_core.toc.inc',
- 'file path' => drupal_get_path('module', 'tripal_core'),
- 'weight' => 3
- );
- return $items;
- }
- /**
- * Implements hook_views_api()
- *
- * This hook tells Drupal that there is views support for this module which then
- * automatically includes the tripal_db.views.inc where all the views
- * integration code is found.
- *
- * @ingroup tripal_example
- */
- function tripal_example_views_api() {
- return array(
- 'api' => 3.0,
- );
- }
- /**
- * We need to let Drupal know about our theme functions and their arguments.
- * We create theme functions to allow users of the module to customize the look
- * and feel of the output generated in this module.
- *
- * @ingroup tripal_example
- */
- function tripal_example_theme($existing, $type, $theme, $path) {
- $core_path = drupal_get_path('module', 'tripal_core');
- // EXPLANATION: this function defines all of the functions and templates that
- // this module needs to provide content. These details are provided in the
- // form of an array the indicates which functions or templates provide
- // content. Please see the Drupal theming guide for an in-depth description
- // for how theming works in Drupal:
- // https://drupal.org/documentation/theme
- $items = array(
- // EXPLANATION: If this module defines a new node type that displays Chado
- // data then we should use Tripal's default node template. This template
- // ensures that all content provided by Tripal and Tripal extension modules
- // has the same look and feel. It is designed to be generic such that it
- // won't interfere with the look-and-feel of the default theme. This generic
- // template will organize the node into a table of contents found on the
- // left-side of the page and place the content in the center of the page.
- // User's will cycle through content on the page by clicking the links in
- // the table of contents. If you do not want to use the default Tripal
- // template you can change this array to your liking.
- 'node__chado_example' => array(
- 'template' => 'node--chado-generic',
- 'render element' => 'node',
- 'base hook' => 'node',
- 'path' => "$core_path/theme/templates",
- ),
- // EXPLANATION: the following defines all of the template files used for
- // this module. Templates are named with underscores separating words, and
- // correspond directly to a file with the extension '.tpl.php'. For example
- // the 'tripal_example_base' template will have a corresponding
- // tripal_example_base.tpl.php file where the display code is housed.
- // The only required templates are the 'base', 'help' and 'teaser'
- // templates. The base template provides the basic information about the
- // record in Chado. The 'help' template provides the administrative help
- // documentation, and the teaser provides a brief summary of the record that
- // can be used as short description of the record in aggregated lists.
- // the base template
- 'tripal_example_base' => array(
- 'variables' => array('node' => NULL),
- 'template' => 'tripal_example_base',
- 'path' => "$path/theme/templates",
- ),
- // the help template
- 'tripal_example_help' => array(
- 'template' => 'tripal_example_help',
- 'variables' => array(NULL),
- 'path' => "$path/theme/templates",
- ),
- // the teaser template.
- 'tripal_example_teaser' => array(
- 'variables' => array('node' => NULL),
- 'template' => 'tripal_example_teaser',
- 'path' => "$path/theme/templates",
- ),
- // EXPLANATION: Typically, a different template is created for each subset
- // of data.
- // For example, most Chado tables have a 'XXXXprop', 'XXXX_cvterm',
- // 'XXXX_dbxref', 'XXXX_synonyms', 'XXXX_relationships' tables. Therefore,
- // a template is created to display data from each of these tables.
- 'tripal_example_properties' => array(
- 'variables' => array('node' => NULL),
- 'template' => 'tripal_example_properties',
- 'path' => "$path/theme/templates",
- ),
- 'tripal_example_references' => array(
- 'variables' => array('node' => NULL),
- 'template' => 'tripal_example_references',
- 'path' => "$path/theme/templates",
- ),
- 'tripal_example_relationships' => array(
- 'variables' => array('node' => NULL),
- 'template' => 'tripal_example_relationships',
- 'path' => "$path/theme/templates",
- ),
- // EXPLANATION: sometimes a module may want to add content to another
- // modules' node types. For example, the feature module does this by
- // adding a 'feature summary' data to an organism. To add data to another
- // module's node, the templates belong to this module and are specified in
- // the same way as above. However, the naming of the template is changed to
- // include the name of the module that supplies the node type followed by
- // our record name:
- // tripal_organism templates
- 'tripal_organism_examples' => array(
- 'variables' => array('node' => NULL),
- 'template' => 'tripal_organism_examples',
- 'path' => "$path/theme/templates",
- ),
- );
- return $items;
- }
- /**
- * Implements hook_help()
- *
- * Adds a help page to the module list
- */
- function tripal_example_help ($path, $arg) {
- // EXPLANATION: in the tripal_example_menu() function above we created a menu
- // item for the help documentation. The menu item specified a function that
- // should be called when the menu item is clicked. This is that function. But,
- // rather than place HTML code in this function we want to have our help
- // documentation in a template file. We specified in the
- // tripal_example_theme() function that we have a template file so now we want
- // to use get the contents of that template file and return it.
- if ($path == 'admin/help#tripal_example') {
- return theme('tripal_example_help', array());
- }
- }
- /**
- * Implements hook_cron()
- *
- * @ingroup tripal_example
- */
- function tripal_example_cron() {
- // EXPLANATION: here we can add any code that needs to be executed when the
- // Drupal cron is run.
- }
- /**
- * Implementation of hook_form_alter()
- *
- * Allows a module to alter any form prior to it being rendered. For more
- * details about Drupal's Form API see this page:
- *
- * https://api.drupal.org/api/drupal/includes!form.inc/group/form_api/7
- *
- */
- function tripal_example_form_alter(&$form, &$form_state, $form_id) {
- if ($form_id == "chado_example_node_form") {
- // EXPLANATION: The hook_form_alter() Drupal hook is used to alter a form
- // before it is displayed. This allows any module to provide new form
- // elements or change the form that another module creates. We do not need
- // to alter a form created by another module, but we do want to alter the
- // form for our new node type. For example, all node types will
- // automatically have a 'Preview' button. For inserting or updating data
- // for Chado we don't really need a Preview button and it complicates the
- // form. So, we use the following code to disable the Preview button. If
- // you want to keep the preview button then remove this code. turn of
- // preview button for insert/updates
- $form['actions']['preview']['#access'] = FALSE;
- // EXPLANATION: Drupal always adds a 'body' field to all node types.
- // Our node type doesn't use the 'body' field so we remove it from the form.
- unset($form['body']);
- }
- }
|