diff options
author | webchick <webchick@24967.no-reply.drupal.org> | 2012-04-12 00:50:52 -0700 |
---|---|---|
committer | webchick <webchick@24967.no-reply.drupal.org> | 2012-04-12 00:50:52 -0700 |
commit | e22feb71235729868069fbe862e804d66369d335 (patch) | |
tree | 77d422740ad03bbb199bf1be83d27e3d62206dd8 | |
parent | 84194b38e368beec5acecee825d4ee3d01bf53a6 (diff) | |
download | brdo-e22feb71235729868069fbe862e804d66369d335.tar.gz brdo-e22feb71235729868069fbe862e804d66369d335.tar.bz2 |
Issue #1211008 by yched, tim.plunkett, DamienMcKenna: Split field_bundle_settings() out per bundle.
-rw-r--r-- | modules/field/field.attach.inc | 15 | ||||
-rw-r--r-- | modules/field/field.install | 24 | ||||
-rw-r--r-- | modules/field/field.module | 8 | ||||
-rw-r--r-- | modules/simpletest/simpletest.info | 1 | ||||
-rw-r--r-- | modules/simpletest/tests/upgrade/drupal-7.field.database.php | 16 | ||||
-rw-r--r-- | modules/simpletest/tests/upgrade/update.field.test | 61 |
6 files changed, 108 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(), diff --git a/modules/simpletest/simpletest.info b/modules/simpletest/simpletest.info index 0a43eb35b..f41080a98 100644 --- a/modules/simpletest/simpletest.info +++ b/modules/simpletest/simpletest.info @@ -40,6 +40,7 @@ files[] = tests/update.test files[] = tests/xmlrpc.test files[] = tests/upgrade/upgrade.test files[] = tests/upgrade/upgrade.comment.test +files[] = tests/upgrade/update.field.test files[] = tests/upgrade/upgrade.filter.test files[] = tests/upgrade/upgrade.forum.test files[] = tests/upgrade/upgrade.locale.test diff --git a/modules/simpletest/tests/upgrade/drupal-7.field.database.php b/modules/simpletest/tests/upgrade/drupal-7.field.database.php new file mode 100644 index 000000000..630476133 --- /dev/null +++ b/modules/simpletest/tests/upgrade/drupal-7.field.database.php @@ -0,0 +1,16 @@ +<?php + +/** + * @file + * Test content for the field update path. + */ + +db_insert('variable')->fields(array( + 'name', + 'value', +)) +->values(array( + 'name' => 'field_bundle_settings', + 'value' => 'a:1:{s:4:"node";a:1:{s:4:"poll";a:1:{s:12:"extra_fields";a:1:{s:7:"display";a:2:{s:16:"poll_view_voting";a:1:{s:7:"default";a:2:{s:6:"weight";s:1:"0";s:7:"visible";b:1;}}s:17:"poll_view_results";a:1:{s:7:"default";a:2:{s:6:"weight";s:1:"0";s:7:"visible";b:0;}}}}}}}', +)) +->execute(); diff --git a/modules/simpletest/tests/upgrade/update.field.test b/modules/simpletest/tests/upgrade/update.field.test new file mode 100644 index 000000000..60d6ae8d9 --- /dev/null +++ b/modules/simpletest/tests/upgrade/update.field.test @@ -0,0 +1,61 @@ +<?php + +/** + * @file + * Provides update path tests for the Field module. + */ + +/** + * Tests the Field 7.0 -> 7.x update path. + */ +class FieldUpdatePathTestCase extends UpdatePathTestCase { + public static function getInfo() { + return array( + 'name' => 'Field update path', + 'description' => 'Field update path tests.', + 'group' => 'Upgrade path', + ); + } + + public function setUp() { + // Use the filled update path and our field data. + $path = drupal_get_path('module', 'simpletest') . '/tests/upgrade'; + $this->databaseDumpFiles = array( + $path . '/drupal-7.filled.standard_all.database.php.gz', + $path . '/drupal-7.field.database.php', + ); + parent::setUp(); + + // Our test data includes poll extra field settings. + $this->uninstallModulesExcept(array('field', 'poll')); + } + + /** + * Tests that the update is successful. + */ + public function testFilledUpgrade() { + $this->assertTrue($this->performUpgrade(), t('The update was completed successfully.')); + $expected_settings = array( + 'extra_fields' => array( + 'display' => array( + 'poll_view_voting' => array( + 'default' => array( + 'weight' => '0', + 'visible' => TRUE, + ), + ), + 'poll_view_results' => array( + 'default' => array( + 'weight' => '0', + 'visible' => FALSE, + ), + ), + ), + 'form' => array(), + ), + 'view_modes' => array(), + ); + $actual_settings = field_bundle_settings('node', 'poll'); + $this->assertEqual($expected_settings, $actual_settings, 'Settings stored in field_bundle_settings were updated to per-bundle settings.'); + } +} |