From 772849f0218c957b328a62920e6708b488364c9e Mon Sep 17 00:00:00 2001 From: Nathaniel Catchpole Date: Mon, 12 Aug 2013 03:40:21 +0100 Subject: [PATCH] Issue #2060003 by claudiu.cristea, yched: Fixed Wrong precedence in Field::getFieldSetting[s]() when setting appears in both field and instance. --- .../Drupal/field/Plugin/Core/Entity/Field.php | 12 ++++++------ .../Tests/ImageFieldDefaultImagesTest.php | 19 +++++++++++++++++-- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php index bccc64b9ace..e669900b20b 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php @@ -581,7 +581,7 @@ class Field extends ConfigEntityBase implements FieldInterface { // the default field and instance settings, within $this. $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type); - $settings = $field_type_info['instance_settings'] + $this->settings + $field_type_info['settings']; + $settings = $this->settings + $field_type_info['settings'] + $field_type_info['instance_settings']; return $settings; } @@ -594,15 +594,15 @@ class Field extends ConfigEntityBase implements FieldInterface { // We assume here that consecutive array_key_exists() is more efficient than // calling getFieldSettings() when all we need is a single setting. - if (array_key_exists($setting_name, $field_type_info['instance_settings'])) { - return $field_type_info['instance_settings'][$setting_name]; - } - elseif (array_key_exists($setting_name, $this->settings)) { + if (array_key_exists($setting_name, $this->settings)) { return $this->settings[$setting_name]; } - else { + elseif (array_key_exists($setting_name, $field_type_info['settings'])) { return $field_type_info['settings'][$setting_name]; } + else { + return $field_type_info['instance_settings'][$setting_name]; + } } /** diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php index 2c1ae39db3b..a0a746faa08 100644 --- a/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php +++ b/core/modules/image/lib/Drupal/image/Tests/ImageFieldDefaultImagesTest.php @@ -30,7 +30,7 @@ class ImageFieldDefaultImagesTest extends ImageFieldTestBase { /** * Tests CRUD for fields and fields instances with default images. */ - function testDefaultImages() { + public function testDefaultImages() { // Create files to use as the default images. $files = $this->drupalGetTestFiles('image'); $default_images = array(); @@ -52,7 +52,22 @@ class ImageFieldDefaultImagesTest extends ImageFieldTestBase { 'preview_image_style' => 'medium', ); $instance = $this->createImageField($field_name, 'article', $field_settings, $instance_settings, $widget_settings); - $field = field_info_field($field_name); + + // The instance default image id should be 2. + $this->assertEqual($instance->getFieldSetting('default_image'), $default_images['instance']->id()); + + // Also test \Drupal\field\Plugin\Core\Entity\FieldInstance::getFieldSetting(). + $instance_field_settings = $instance->getFieldSettings(); + $this->assertEqual($instance_field_settings['default_image'], $default_images['instance']->id()); + + $field = entity_load('field_entity', $field_name); + + // The field default image id should be 1. + $this->assertEqual($field->getFieldSetting('default_image'), $default_images['field']->id()); + + // Also test \Drupal\field\Plugin\Core\Entity\Field::getFieldSettings(). + $field_field_settings = $field->getFieldSettings(); + $this->assertEqual($field_field_settings['default_image'], $default_images['field']->id()); // Add another instance with another default image to the page content type. $instance2 = entity_create('field_instance', array(