| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553 | 
							- <?php
 
- /**
 
-  * Main info hook that features uses to determine what components are provided
 
-  * by the implementing module.
 
-  *
 
-  * @return array
 
-  *   An array of components, keyed by the component name. Each component can
 
-  *   define several keys:
 
-  *
 
-  *   'file': Optional path to a file to include which contains the rest
 
-  *   of the features API hooks for this module.
 
-  *
 
-  *   'default_hook': The defaults hook for your component that is called
 
-  *   when the cache of default components is generated. Examples include
 
-  *   hook_views_default_views() or hook_context_default_contexts().
 
-  *
 
-  *   'default_file': The file-writing behavior to use when exporting this
 
-  *   component. May be one of 3 constant values:
 
-  *
 
-  *   FEATURES_DEFAULTS_INCLUDED_COMMON: write hooks/components to
 
-  *   `.features.inc` with other components. This is the default behavior
 
-  *   if this key is not defined.
 
-  *
 
-  *   FEATURES_DEFAULTS_INCLUDED: write hooks/components to a component-
 
-  *   specific include named automatically by features.
 
-  *
 
-  *   FEATURES_DEFAULTS_CUSTOM: write hooks/components to a component-
 
-  *   specific include with a custom name provided. If your module provides
 
-  *   large amounts of code that should not be parsed often (only on specific
 
-  *   cache clears/rebuilds, for example) you should use the 2nd or 3rd
 
-  *   options to split your component into its own include.
 
-  *
 
-  *   'default_filename': The filename to use when 'default_file' is set to
 
-  *   FEATURES_DEFAULTS_CUSTOM.
 
-  *
 
-  *   'feature_source': Boolean value for whether this component should be
 
-  *   offered as an option on the initial feature creation form.
 
-  *
 
-  *   'base': Optional. An alternative base key to use when calling features
 
-  *   hooks for this component. Can be used for features component types that
 
-  *   are declared "dynamically" or are part of a family of components.
 
-  *
 
-  *   'alter_type': What type of alter hook this hook uses. 'normal' is called
 
-  *   after the main hook is called. 'inline' is embedded within the default hook
 
-  *   and may not be implemented by some default hooks.
 
-  *   'none' is no alter hook exists. Defaults to 'normal'
 
-  *
 
-  *   'alter_hook': What the name of the alter hook for this component is.
 
-  *    Do not include the '_alter' part. Defaults to 'default_hook'.
 
-  */
 
- function hook_features_api() {
 
-   return array(
 
-     'mycomponent' => array(
 
-       'default_hook' => 'mycomponent_defaults',
 
-       'default_file' => FEATURES_DEFAULTS_INCLUDED,
 
-       'feature_source' => TRUE,
 
-       'file' => drupal_get_path('module', 'mycomponent') . '/mycomponent.features.inc',
 
-     ),
 
-   );
 
- }
 
- /**
 
-  * Component hook. The hook should be implemented using the name of the
 
-  * component, not the module, eg. [component]_features_export() rather than
 
-  * [module]_features_export().
 
-  *
 
-  * Process the export array for a given component. Implementations of this hook
 
-  * have three key tasks:
 
-  *
 
-  * 1. Determine module dependencies for any of the components passed to it
 
-  *   e.g. the views implementation iterates over each views' handlers and
 
-  *   plugins to determine which modules need to be added as dependencies.
 
-  *
 
-  * 2. Correctly add components to the export array. In general this is usually
 
-  *   adding all of the items in $data to $export['features']['my_key'], but
 
-  *   can become more complicated if components are shared between features
 
-  *   or modules.
 
-  *
 
-  * 3. Delegating further detection and export tasks to related or derivative
 
-  *   components.
 
-  *
 
-  * Each export processor can kickoff further export processors by returning a
 
-  * keyed array (aka the "pipe") where the key is the next export processor hook
 
-  * to call and the value is an array to be passed to that processor's $data
 
-  * argument. This allows an export process to start simply at a few objects:
 
-  *
 
-  * [context]
 
-  *
 
-  * And then branch out, delegating each component to its appropriate hook:
 
-  *
 
-  * [context]--------+------------+
 
-  *     |            |            |
 
-  *   [node]      [block]      [views]
 
-  *     |
 
-  *   [CCK]
 
-  *     |
 
-  * [imagecache]
 
-  *
 
-  * @param array $data
 
-  *   An array of machine names for the component in question to be exported.
 
-  * @param array &$export
 
-  *   By reference. An array of all components to be exported with a given
 
-  *   feature. Component objects that should be exported should be added to
 
-  *   this array.
 
-  * @param string $module_name
 
-  *   The name of the feature module to be generated.
 
-  * @return array
 
-  *   The pipe array of further processors that should be called.
 
-  */
 
- function hook_features_export($data, &$export, $module_name) {
 
-   // The following is the simplest implementation of a straight object export
 
-   // with no further export processors called.
 
-   foreach ($data as $component) {
 
-     $export['features']['mycomponent'][$component] = $component;
 
-   }
 
-   return array();
 
- }
 
- /**
 
-  * Component hook. The hook should be implemented using the name of the
 
-  * component, not the module, eg. [component]_features_export() rather than
 
-  * [module]_features_export().
 
-  *
 
-  * List all objects for a component that may be exported.
 
-  *
 
-  * @return array
 
-  *   A keyed array of items, suitable for use with a FormAPI select or
 
-  *   checkboxes element.
 
-  */
 
- function hook_features_export_options() {
 
-   $options = array();
 
-   foreach (mycomponent_load() as $mycomponent) {
 
-     $options[$mycomponent->name] = $mycomponent->title;
 
-   }
 
-   return $options;
 
- }
 
- /**
 
-  * Component hook. The hook should be implemented using the name of the
 
-  * component, not the module, eg. [component]_features_export() rather than
 
-  * [module]_features_export().
 
-  *
 
-  * Render one or more component objects to code.
 
-  *
 
-  * @param string $module_name
 
-  *   The name of the feature module to be exported.
 
-  * @param array $data
 
-  *   An array of machine name identifiers for the objects to be rendered.
 
-  * @param array $export
 
-  *   The full export array of the current feature being exported. This is only
 
-  *   passed when hook_features_export_render() is invoked for an actual feature
 
-  *   update or recreate, not during state checks or other operations.
 
-  * @return array
 
-  *   An associative array of rendered PHP code where the key is the name of the
 
-  *   hook that should wrap the PHP code. The hook should not include the name
 
-  *   of the module, e.g. the key for `hook_example` should simply be `example`
 
-  *   The values in the array can also be in the form of an associative array
 
-  *   with the required key of 'code' and optional key of 'args', if 'args' need
 
-  *   to be added to the hook. Alternate it can be an associative array in the
 
-  *   same style as hook_features_export_files() to add additional files.
 
-  */
 
- function hook_features_export_render($module_name, $data, $export = NULL) {
 
-   $code = array();
 
-   $code[] = '$mycomponents = array();';
 
-   foreach ($data as $name) {
 
-     $code[] = "  \$mycomponents['{$name}'] = " . features_var_export(mycomponent_load($name)) .";";
 
-   }
 
-   $code[] = "return \$mycomponents;";
 
-   $code = implode("\n", $code);
 
-   return array('mycomponent_defaults' => $code);
 
- }
 
- /**
 
-  * Component hook. The hook should be implemented using the name of the
 
-  * component, not the module, eg. [component]_features_export() rather than
 
-  * [module]_features_export().
 
-  *
 
-  * Revert all component objects for a given feature module.
 
-  *
 
-  * @param string $module_name
 
-  *   The name of the feature module whose components should be reverted.
 
-  * @return boolean
 
-  *   TRUE or FALSE for whether the components were successfully reverted.
 
-  *   NOTE: This return value is no longer used in the latest Features so
 
-  *   modules should no longer count on this value
 
-  */
 
- function hook_features_revert($module_name) {
 
-   $mycomponents = module_invoke($module_name, 'mycomponent_defaults');
 
-   if (!empty($mycomponents)) {
 
-     foreach ($mycomponents as $mycomponent) {
 
-       mycomponent_delete($mycomponent);
 
-     }
 
-   }
 
- }
 
- /**
 
-  * Component hook. The hook should be implemented using the name of the
 
-  * component, not the module, eg. [component]_features_export() rather than
 
-  * [module]_features_export().
 
-  *
 
-  * Rebuild all component objects for a given feature module. Should only be
 
-  * implemented for 'faux-exportable' components.
 
-  *
 
-  * This hook is called at points where Features determines that it is safe
 
-  * (ie. the feature is in state `FEATURES_REBUILDABLE`) for your module to
 
-  * replace objects in the database with defaults that you collect from your
 
-  * own defaults hook. See API.txt for how Features determines whether a
 
-  * rebuild of components is possible.
 
-  *
 
-  * @param string $module_name
 
-  *   The name of the feature module whose components should be rebuilt.
 
-  */
 
- function hook_features_rebuild($module_name) {
 
-   $mycomponents = module_invoke($module_name, 'mycomponent_defaults');
 
-   if (!empty($mycomponents)) {
 
-     foreach ($mycomponents as $mycomponent) {
 
-       mycomponent_save($mycomponent);
 
-     }
 
-   }
 
- }
 
- /**
 
-  * Invoked before a restore operation is run.
 
-  *
 
-  * This hook is called before any of the restore operations on the components is
 
-  * run.
 
-  *
 
-  * @param string $op
 
-  *   The operation that is triggered: revert, rebuild, disable, enable
 
-  * @param array $items
 
-  *   The items handled by the operation.
 
-  */
 
- function hook_features_pre_restore($op, $items) {
 
-   if ($op == 'rebuild') {
 
-     // Use features rebuild to rebuild the features independent exports too.
 
-     entity_defaults_rebuild();
 
-   }
 
- }
 
- /**
 
-  * Invoked after a restore operation is run.
 
-  *
 
-  * This hook is called after any of the restore operations on the components is
 
-  * run.
 
-  *
 
-  * @param string $op
 
-  *   The operation that is triggered: revert, rebuild, disable, enable
 
-  * @param array $items
 
-  *   The items handled by the operation.
 
-  */
 
- function hook_features_post_restore($op, $items) {
 
-   if ($op == 'rebuild') {
 
-     // Use features rebuild to rebuild the features independent exports too.
 
-     entity_defaults_rebuild();
 
-   }
 
- }
 
- /**
 
-  * Alter the final array of Component names to be exported, just prior to
 
-  * the rendering of defaults. Allows modules a final say in whether or not
 
-  * certain Components are exported (the Components' actual data, however,
 
-  * cannot be altered by this hook).
 
-  *
 
-  * @param array &$export
 
-  *   By reference. An array of all component names to be exported with a given
 
-  *   feature.
 
-  * @param array $module_name
 
-  *   The name of the feature module to be generated.
 
-  */
 
- function hook_features_export_alter(&$export, $module_name) {
 
-   // Example: do not allow the page content type to be exported, ever.
 
-   if (!empty($export['features']['node']['page'])) {
 
-     unset($export['features']['node']['page']);
 
-   }
 
- }
 
- /**
 
-  * Alter the pipe array for a given component. This hook should be implemented
 
-  * with the name of the component type in place of `component` in the function
 
-  * name, e.g. `features_pipe_views_alter()` will alter the pipe for the Views
 
-  * component.
 
-  *
 
-  * @param array &$pipe
 
-  *   By reference. The pipe array of further processors that should be called.
 
-  * @param array $data
 
-  *   An array of machine names for the component in question to be exported.
 
-  * @param array &$export
 
-  *   By reference. An array of all components to be exported with a given
 
-  *   feature.
 
-  */
 
- function hook_features_pipe_COMPONENT_alter(&$pipe, $data, $export) {
 
-   if (in_array($data, 'my-node-type')) {
 
-     $pipe['dependencies'][] = 'mymodule';
 
-   }
 
- }
 
- /**
 
-  * Alter the pipe array for a given component.
 
-  *
 
-  * @param array &$pipe
 
-  *   By reference. The pipe array of further processors that should be called.
 
-  * @param array $data
 
-  *   An array of machine names for the component in question to be exported.
 
-  * @param array &$export
 
-  *   By reference. An array of all components to be exported with a given
 
-  *   feature.
 
-  *
 
-  * The component being exported is contained in $export['component'].
 
-  * The module being exported contained in $export['module_name'].
 
-  */
 
- function hook_features_pipe_alter(&$pipe, $data, $export) {
 
-   if ($export['component'] == 'node' && in_array('my-node-type', $data)) {
 
-     $pipe['dependencies'][] = 'mymodule';
 
-   }
 
- }
 
- /**
 
-  * Add extra files to the exported file.
 
-  *
 
-  * @return array
 
-  *   An array of files, keyed by file name that will appear in feature and
 
-  *   with either file_path key to indicate where to copy the file from or
 
-  *   file_content key to indicate the contents of the file.
 
-  */
 
- function hook_features_export_files($module_name, $export) {
 
-   return array('css/main.css' => array('file_content' => 'body {background-color:blue;}'));
 
- }
 
- /**
 
-  * Alter the extra files added to the export.
 
-  */
 
- function hook_features_export_files_alter(&$files, $module_name, $export) {
 
-   $files['css/main.css']['file_content'] = 'body {background-color:black;}';
 
- }
 
- /**
 
-  * @defgroup features_component_alter_hooks Feature's component alter hooks
 
-  * @{
 
-  * Hooks to modify components defined by other features. These come in the form
 
-  * hook_COMPONENT_alter where COMPONENT is the default_hook declared by any of
 
-  * components within features.
 
-  *
 
-  * CTools also has a variety of hook_FOO_alters.
 
-  *
 
-  * Note: While views is a component of features, it declares it's own alter
 
-  * function which takes a similar form:
 
-  * hook_views_default_views_alter(&$views)
 
-  */
 
- /**
 
-  * Deprecated as of 7.x-2.0.
 
-  *
 
-  * Alter the default fields right before they are cached into the database.
 
-  *
 
-  * @param &$fields
 
-  *   By reference. The fields that have been declared by another feature.
 
-  */
 
- function hook_field_default_fields_alter(&$fields) {
 
- }
 
- /**
 
-  * Alter the base fields right before they are cached into the database.
 
-  *
 
-  * @param &$fields
 
-  *   By reference. The fields that have been declared by another feature.
 
-  */
 
- function hook_field_default_field_bases_alter(&$fields) {
 
- }
 
- /**
 
-  * Alter the field instances right before they are cached into the database.
 
-  *
 
-  * @param &$fields
 
-  *   By reference. The fields that have been declared by another feature.
 
-  */
 
- function hook_field_default_field_instances_alter(&$fields) {
 
- }
 
- /**
 
-  * Alter the default fieldgroup groups right before they are cached into the
 
-  * database.
 
-  *
 
-  * @param &$groups
 
-  *   By reference. The fieldgroup groups that have been declared by another
 
-  *   feature.
 
-  */
 
- function hook_fieldgroup_default_groups_alter(&$groups) {
 
- }
 
- /**
 
-  * Alter the default filter formats right before they are cached into the
 
-  * database.
 
-  *
 
-  * @param &$formats
 
-  *   By reference. The formats that have been declared by another feature.
 
-  */
 
- function hook_filter_default_formats_alter(&$formats) {
 
- }
 
- /**
 
-  * Alter the default menus right before they are cached into the database.
 
-  *
 
-  * @param &$menus
 
-  *   By reference. The menus that have been declared by another feature.
 
-  */
 
- function hook_menu_default_menu_custom_alter(&$menus) {
 
- }
 
- /**
 
-  * Alter the default menu links right before they are cached into the database.
 
-  *
 
-  * @param &$links
 
-  *   By reference. The menu links that have been declared by another feature.
 
-  */
 
- function hook_menu_default_menu_links_alter(&$links) {
 
- }
 
- /**
 
-  * Alter the default menu items right before they are cached into the database.
 
-  *
 
-  * @param &$items
 
-  *   By reference. The menu items that have been declared by another feature.
 
-  */
 
- function hook_menu_default_items_alter(&$items) {
 
- }
 
- /**
 
-  * Alter the default vocabularies right before they are cached into the
 
-  * database.
 
-  *
 
-  * @param &$vocabularies
 
-  *   By reference. The vocabularies that have been declared by another feature.
 
-  */
 
- function hook_taxonomy_default_vocabularies_alter(&$vocabularies) {
 
- }
 
- /**
 
-  * Alter the default permissions right before they are cached into the
 
-  * database.
 
-  *
 
-  * @param &$permissions
 
-  *   By reference. The permissions that have been declared by another feature.
 
-  */
 
- function hook_user_default_permissions_alter(&$permissions) {
 
- }
 
- /**
 
-  * Alter the default roles right before they are cached into the database.
 
-  *
 
-  * @param &$roles
 
-  *   By reference. The roles that have been declared by another feature.
 
-  */
 
- function hook_user_default_roles_alter(&$roles) {
 
- }
 
- /**
 
-  * @}
 
-  */
 
- /**
 
-  * @defgroup features_module_hooks Feature module hooks
 
-  * @{
 
-  * Hooks invoked on Feature modules when that module is enabled, disabled,
 
-  * rebuilt, or reverted. These are ONLY invoked on the Features module on
 
-  * which these actions are taken.
 
-  */
 
- /**
 
-  * Feature module hook. Invoked on a Feature module before that module is
 
-  * reverted.
 
-  *
 
-  * @param $component
 
-  *   String name of the component that is about to be reverted.
 
-  */
 
- function hook_pre_features_revert($component) {
 
- }
 
- /**
 
-  * Feature module hook. Invoked on a Feature module after that module is
 
-  * reverted.
 
-  *
 
-  * @param $component
 
-  *   String name of the component that has just been reverted.
 
-  */
 
- function hook_post_features_revert($component) {
 
- }
 
- /**
 
-  * Feature module hook. Invoked on a Feature module before that module is
 
-  * rebuilt.
 
-  *
 
-  * @param $component
 
-  *   String name of the component that is about to be rebuilt.
 
-  */
 
- function hook_pre_features_rebuild($component) {
 
- }
 
- /**
 
-  * Feature module hook. Invoked on a Feature module after that module is
 
-  * rebuilt.
 
-  *
 
-  * @param $component
 
-  *   String name of the component that has just been rebuilt.
 
-  */
 
- function hook_post_features_rebuild($component) {
 
- }
 
- /**
 
-  * Feature module hook. Invoked on a Feature module before that module is
 
-  * disabled.
 
-  *
 
-  * @param $component
 
-  *   String name of the component that is about to be disabled.
 
-  */
 
- function hook_pre_features_disable_feature($component) {
 
- }
 
- /**
 
-  * Feature module hook. Invoked on a Feature module after that module is
 
-  * disabled.
 
-  *
 
-  * @param $component
 
-  *   String name of the component that has just been disabled.
 
-  */
 
- function hook_post_features_disable_feature($component) {
 
- }
 
- /**
 
-  * Feature module hook. Invoked on a Feature module before that module is
 
-  * enabled.
 
-  *
 
-  * @param $component
 
-  *   String name of the component that is about to be enabled.
 
-  */
 
- function hook_pre_features_enable_feature($component) {
 
- }
 
- /**
 
-  * Feature module hook. Invoked on a Feature module after that module is
 
-  * enabled.
 
-  *
 
-  * @param $component
 
-  *   String name of the component that has just been enabled.
 
-  */
 
- function hook_post_features_enable_feature($component) {
 
- }
 
- /**
 
-  * @}
 
-  */
 
 
  |