summaryrefslogtreecommitdiff
path: root/modules/field
diff options
context:
space:
mode:
Diffstat (limited to 'modules/field')
-rw-r--r--modules/field/field.attach.inc15
-rw-r--r--modules/field/field.install24
-rw-r--r--modules/field/field.module8
3 files changed, 30 insertions, 17 deletions
diff --git a/modules/field/field.attach.inc b/modules/field/field.attach.inc
index a5a1e8e89..36117eb7a 100644
--- a/modules/field/field.attach.inc
+++ b/modules/field/field.attach.inc
@@ -1321,12 +1321,9 @@ function field_attach_rename_bundle($entity_type, $bundle_old, $bundle_new) {
field_cache_clear();
// Update bundle settings.
- $settings = variable_get('field_bundle_settings', array());
- if (isset($settings[$entity_type][$bundle_old])) {
- $settings[$entity_type][$bundle_new] = $settings[$entity_type][$bundle_old];
- unset($settings[$entity_type][$bundle_old]);
- variable_set('field_bundle_settings', $settings);
- }
+ $settings = variable_get('field_bundle_settings_' . $entity_type . '__' . $bundle_old, array());
+ variable_set('field_bundle_settings_' . $entity_type . '__' . $bundle_new, $settings);
+ variable_del('field_bundle_settings_' . $entity_type . '__' . $bundle_old);
// Let other modules act on renaming the bundle.
module_invoke_all('field_attach_rename_bundle', $entity_type, $bundle_old, $bundle_new);
@@ -1360,11 +1357,7 @@ function field_attach_delete_bundle($entity_type, $bundle) {
field_cache_clear();
// Clear bundle display settings.
- $settings = variable_get('field_bundle_settings', array());
- if (isset($settings[$entity_type][$bundle])) {
- unset($settings[$entity_type][$bundle]);
- variable_set('field_bundle_settings', $settings);
- }
+ variable_del('field_bundle_settings_' . $entity_type . '__' . $bundle);
// Let other modules act on deleting the bundle.
module_invoke_all('field_attach_delete_bundle', $entity_type, $bundle, $instances);
diff --git a/modules/field/field.install b/modules/field/field.install
index 407b5faff..dff3949fb 100644
--- a/modules/field/field.install
+++ b/modules/field/field.install
@@ -436,3 +436,27 @@ function field_update_7001() {
/**
* @} End of "addtogroup updates-6.x-to-7.x"
*/
+
+/**
+ * @addtogroup updates-7.x-extra
+ * @{
+ */
+
+/**
+ * Split the all-inclusive field_bundle_settings variable per bundle.
+ */
+function field_update_7002() {
+ $settings = variable_get('field_bundle_settings', array());
+ if ($settings) {
+ foreach ($settings as $entity_type => $entity_type_settings) {
+ foreach ($entity_type_settings as $bundle => $bundle_settings) {
+ variable_set('field_bundle_settings_' . $entity_type . '__' . $bundle, $bundle_settings);
+ }
+ }
+ variable_del('field_bundle_settings');
+ }
+}
+
+/**
+ * @} End of "addtogroup updates-7.x-extra"
+ */
diff --git a/modules/field/field.module b/modules/field/field.module
index 984459c91..dedf8470c 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -603,16 +603,12 @@ function _field_sort_items_value_helper($a, $b) {
* If no $settings are passed, the current settings are returned.
*/
function field_bundle_settings($entity_type, $bundle, $settings = NULL) {
- $stored_settings = variable_get('field_bundle_settings', array());
-
if (isset($settings)) {
- $stored_settings[$entity_type][$bundle] = $settings;
-
- variable_set('field_bundle_settings', $stored_settings);
+ variable_set('field_bundle_settings_' . $entity_type . '__' . $bundle, $settings);
field_info_cache_clear();
}
else {
- $settings = isset($stored_settings[$entity_type][$bundle]) ? $stored_settings[$entity_type][$bundle] : array();
+ $settings = variable_get('field_bundle_settings_' . $entity_type . '__' . $bundle, array());
$settings += array(
'view_modes' => array(),
'extra_fields' => array(),