From 5b17c1eb04fd09adcc9dc2b5d0fbd6aabe027252 Mon Sep 17 00:00:00 2001 From: Angie Byron Date: Tue, 30 Jun 2009 03:12:03 +0000 Subject: #502522 by yched: Allow drupal_alter() on various Field API meta-hooks. --- modules/field/field.api.php | 62 ++++++++++++++++++++++++++++++++++++++++++++ modules/field/field.info.inc | 4 +++ 2 files changed, 66 insertions(+) (limited to 'modules/field') diff --git a/modules/field/field.api.php b/modules/field/field.api.php index 27ae70543..48eb5005e 100644 --- a/modules/field/field.api.php +++ b/modules/field/field.api.php @@ -53,6 +53,19 @@ function hook_fieldable_info() { return $return; } +/** + * Perform alterations on fieldable types. + * + * @param $info + * Array of informations on fieldable types exposed by hook_fieldable_info() + * implementations. + */ +function hook_fieldable_info_alter(&$info) { + // A contributed module handling node-level caching would want to disable + // field cache for nodes. + $info['node']['cacheable'] = FALSE; +} + /** * @} End of "ingroup field_fieldable_type" */ @@ -114,6 +127,25 @@ function hook_field_info() { ); } +/** + * Perform alterations on Field API field types. + * + * @param $info + * Array of informations on widget types exposed by hook_field_info() + * implementations. + */ +function hook_field_info_alter(&$info) { + // Add a setting to all field types. + foreach ($info as $field_type => $field_type_info) { + $info[$field_type]['settings'][] = array('mymodule_additional_setting' => 'default value'); + } + + // Change the default widget for fields of type 'foo'. + if (isset($info['foo'])) { + $info['foo']['default widget'] = 'mymodule_widget'; + } +} + /** * Define the Field API schema for a field structure. * @@ -186,6 +218,21 @@ function hook_field_schema($field) { function hook_field_widget_info() { } +/** + * Perform alterations on Field API widget types. + * + * @param $info + * Array of informations on widget types exposed by hook_field_widget_info() + * implementations. + */ +function hook_field_widget_info_alter(&$info) { + // Add a setting to a widget type. + $info['text_textfield']['settings'][] = array('mymodule_additional_setting' => 'default value'); + + // Let a new field type re-use an existing widget. + $info['options_select']['field types'][] = 'my_field_type'; +} + /* * Define Field API formatter types. * @@ -200,6 +247,21 @@ function hook_field_widget_info() { function hook_field_formatter_info() { } +/** + * Perform alterations on Field API formatter types. + * + * @param $info + * Array of informations on widget types exposed by + * hook_field_field_formatter_info() implementations. + */ +function hook_field_formatter_info_alter(&$info) { + // Add a setting to a formatter type. + $info['text_default']['settings'][] = array('mymodule_additional_setting' => 'default value'); + + // Let a new field type re-use an existing formatter. + $info['text_default']['field types'][] = 'my_field_type'; +} + /** * Define custom load behavior for this module's field types. * diff --git a/modules/field/field.info.inc b/modules/field/field.info.inc index 97e18fd61..3eb1d2e33 100644 --- a/modules/field/field.info.inc +++ b/modules/field/field.info.inc @@ -98,6 +98,7 @@ function _field_info_collate_types($reset = FALSE) { $info['field types'][$name]['module'] = $module; } } + drupal_alter('field_info', $info['field types']); // Populate widget types. foreach (module_implements('field_widget_info') as $module) { @@ -107,6 +108,7 @@ function _field_info_collate_types($reset = FALSE) { $info['widget types'][$name]['module'] = $module; } } + drupal_alter('field_widget_info', $info['widget types']); // Populate formatters. foreach (module_implements('field_formatter_info') as $module) { @@ -116,6 +118,7 @@ function _field_info_collate_types($reset = FALSE) { $info['formatter types'][$name]['module'] = $module; } } + drupal_alter('field_formatter_info', $info['formatter types']); // Populate information about 'fieldable' entities. foreach (module_implements('fieldable_info') as $module) { @@ -138,6 +141,7 @@ function _field_info_collate_types($reset = FALSE) { $info['fieldable types'][$name]['module'] = $module; } } + drupal_alter('fieldable_info', $info['fieldable types']); cache_set('field_info_types', $info, 'cache_field'); } -- cgit v1.2.3