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