diff options
Diffstat (limited to 'modules/field/field.module')
-rw-r--r-- | modules/field/field.module | 53 |
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(); } |