summaryrefslogtreecommitdiff
path: root/modules/field/field.module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/field/field.module')
-rw-r--r--modules/field/field.module53
1 files changed, 5 insertions, 48 deletions
diff --git a/modules/field/field.module b/modules/field/field.module
index a429499f7..7d9e55edb 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -399,7 +399,7 @@ function field_bundle_settings($entity_type, $bundle, $settings = NULL) {
$stored_settings[$entity_type][$bundle] = $settings;
variable_set('field_bundle_settings', $stored_settings);
drupal_static_reset('field_view_mode_settings');
- drupal_static_reset('field_extra_fields');
+ field_info_cache_clear();
}
else {
$settings = isset($stored_settings[$entity_type][$bundle]) ? $stored_settings[$entity_type][$bundle] : array();
@@ -501,54 +501,11 @@ function field_view_mode_settings($entity_type, $bundle) {
* The array of pseudo-field elements in the bundle.
*/
function field_extra_fields($entity_type, $bundle, $context) {
- $extra = &drupal_static(__FUNCTION__);
-
- if (!isset($extra)) {
- $info = (array) module_invoke_all('field_extra_fields');
- drupal_alter('field_extra_fields', $info);
-
- // Merge in saved settings, and make sure we have settings for all view
- // modes.
- foreach ($info as $entity_type_name => $bundles) {
- $entity_type_info = entity_get_info($entity_type_name);
- foreach ($bundles as $bundle_name => $extra_fields) {
- $bundle_settings = field_bundle_settings($entity_type_name, $bundle_name);
- $extra_fields += array('form' => array(), 'display' => array());
-
- // Extra fields in forms.
- $data = $extra_fields['form'];
- foreach ($data as $name => $field_data) {
- $settings = isset($bundle_settings['extra_fields']['form'][$name]) ? $bundle_settings['extra_fields']['form'][$name] : array();
- if (isset($settings['weight'])) {
- $data[$name]['weight'] = $settings['weight'];
- }
- }
- $extra[$entity_type_name][$bundle_name]['form'] = $data;
-
- // Extra fields in displayed entities.
- $data = $extra_fields['display'];
- foreach ($data as $name => $field_data) {
- $settings = isset($bundle_settings['extra_fields']['display'][$name]) ? $bundle_settings['extra_fields']['display'][$name] : array();
- $view_modes = array_merge(array('default'), array_keys($entity_type_info['view modes']));
- foreach ($view_modes as $view_mode) {
- if (isset($settings[$view_mode])) {
- $data[$name]['display'][$view_mode] = $settings[$view_mode];
- }
- else {
- $data[$name]['display'][$view_mode] = array(
- 'weight' => $field_data['weight'],
- 'visible' => TRUE,
- );
- }
- unset($data[$name]['weight']);
- }
- }
- $extra[$entity_type_name][$bundle_name]['display'] = $data;
- }
- }
+ $info = _field_info_collate_fields();
+ if (isset($info['extra_fields'][$entity_type][$bundle][$context])) {
+ return $info['extra_fields'][$entity_type][$bundle][$context];
}
-
- return isset($extra[$entity_type][$bundle][$context]) ? $extra[$entity_type][$bundle][$context] : array();
+ return array();
}