From 6e3814833635f8de404f66ac8a8621f30a9d84a5 Mon Sep 17 00:00:00 2001 From: webchick <webchick@24967.no-reply.drupal.org> Date: Fri, 5 Oct 2012 21:45:15 -0700 Subject: [PATCH] Issue #1798104 by zuuperman: Fixed Default value widget settings broken by WidgetPlugins. --- core/modules/field/field.info.inc | 2 +- .../Plugin/Type/LegacyDiscoveryDecorator.php | 5 +++- .../Type/Widget/WidgetPluginManager.php | 1 + .../lib/Drupal/field/Tests/FieldInfoTest.php | 1 + .../field/widget/TestFieldWidgetNoDefault.php | 30 +++++++++++++++++++ core/modules/field_ui/field_ui.admin.inc | 4 +-- .../field_ui/Tests/ManageFieldsTest.php | 7 +++++ 7 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/field/widget/TestFieldWidgetNoDefault.php diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc index 99160e338ec9..62bf171c65a7 100644 --- a/core/modules/field/field.info.inc +++ b/core/modules/field/field.info.inc @@ -194,7 +194,7 @@ function _field_info_collate_types_reset() { */ function field_behaviors_widget($op, $instance) { $info = field_info_widget_types($instance['widget']['type']); - return isset($info['behaviors'][$op]) ? $info['behaviors'][$op] : FIELD_BEHAVIOR_DEFAULT; + return isset($info[$op]) ? $info[$op] : FIELD_BEHAVIOR_DEFAULT; } /** diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/LegacyDiscoveryDecorator.php b/core/modules/field/lib/Drupal/field/Plugin/Type/LegacyDiscoveryDecorator.php index d23d932f9254..4ef023e8e8d5 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Type/LegacyDiscoveryDecorator.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Type/LegacyDiscoveryDecorator.php @@ -66,7 +66,10 @@ public function getDefinitions() { $definition['multiple_values'] = $definition['behaviors']['multiple values']; unset($definition['behaviors']['multiple values']); } - + if (isset($definition['behaviors']['default value'])) { + $definition['default_value'] = $definition['behaviors']['default value']; + unset($definition['behaviors']['default value']); + } $definitions[$plugin_id] = $definition; } } diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetPluginManager.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetPluginManager.php index 562140cd8349..de82360040dc 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetPluginManager.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetPluginManager.php @@ -23,6 +23,7 @@ class WidgetPluginManager extends PluginManagerBase { protected $defaults = array( 'settings' => array(), 'multiple_values' => FALSE, + 'default_value' => TRUE, ); /** diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php index b9c63c25f656..d5e35692debf 100644 --- a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php @@ -209,6 +209,7 @@ function testInstancePrepare() { $this->assertIdentical($display['type'], $field_type['default_formatter'], t("Formatter is set for the 'default' view mode")); $formatter_type = field_info_formatter_types($display['type']); $this->assertIdentical($display['settings'], $formatter_type['settings'] , t("Formatter settings are set for the 'default' view mode")); + } /** diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/field/widget/TestFieldWidgetNoDefault.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/field/widget/TestFieldWidgetNoDefault.php new file mode 100644 index 000000000000..3ac1987fe681 --- /dev/null +++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/field/widget/TestFieldWidgetNoDefault.php @@ -0,0 +1,30 @@ +<?php + +/** + * @file + * Definition of Drupal\field_test\Plugin\field\widget\TestFieldWidgetNoDefault. + */ + +namespace Drupal\field_test\Plugin\field\widget; + +use Drupal\Core\Annotation\Plugin; +use Drupal\Core\Annotation\Translation; +use Drupal\field\Plugin\Type\Widget\WidgetBase; + +/** + * Plugin implementation of the 'test_field_widget_no_default' widget. + * + * @Plugin( + * id = "test_field_widget_no_default", + * module = "field_test", + * label = @Translation("Test widget - no default"), + * field_types = { + * "test_field" + * }, + * settings = { + * "test_widget_setting_multiple" = "dummy test string" + * }, + * default_value = FALSE + * ) + */ +class TestFieldWidgetNoDefault extends TestFieldWidget {} diff --git a/core/modules/field_ui/field_ui.admin.inc b/core/modules/field_ui/field_ui.admin.inc index 924a85baf887..7b22a0b5ddf7 100644 --- a/core/modules/field_ui/field_ui.admin.inc +++ b/core/modules/field_ui/field_ui.admin.inc @@ -1944,7 +1944,7 @@ function field_ui_field_edit_form($form, &$form_state, $instance) { $form['instance']['widget']['settings'] = $additions ? $additions : array('#type' => 'value', '#value' => array()); // Add handling for default value if not provided by any other module. - if (field_behaviors_widget('default value', $instance) == FIELD_BEHAVIOR_DEFAULT && empty($instance['default_value_function'])) { + if (field_behaviors_widget('default_value', $instance) == FIELD_BEHAVIOR_DEFAULT && empty($instance['default_value_function'])) { $form['instance']['default_value_widget'] = field_ui_default_value_widget($field, $instance, $form, $form_state); } @@ -1968,7 +1968,7 @@ function field_ui_field_edit_form($form, &$form_state, $instance) { // Build the configurable field values. $description = t('Maximum number of values users can enter for this field.'); - if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_DEFAULT) { + if (field_behaviors_widget('multiple_values', $instance) == FIELD_BEHAVIOR_DEFAULT) { $description .= '<br/>' . t("'Unlimited' will provide an 'Add more' button so the users can add as many values as they like."); } $form['field']['cardinality'] = array( diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php index b5f37142fea4..17d4bd7d1db6 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php @@ -231,6 +231,13 @@ function testDefaultValue() { field_info_cache_clear(); $instance = field_info_instance('node', $field_name, $this->type); $this->assertEqual($instance['default_value'], NULL, 'The default value was correctly saved.'); + + // Change the widget to TestFieldWidgetNoDefault. + $instance['widget']['type'] = 'test_field_widget_no_default'; + field_update_instance($instance); + + $this->drupalGet($admin_path); + $this->assertNoFieldById($element_id, '', t('No default value was possible for widget that disables default value.')); } /** -- GitLab