diff --git a/core/lib/Drupal/Core/Entity/Field/FieldTypePluginManager.php b/core/lib/Drupal/Core/Entity/Field/FieldTypePluginManager.php index a8c1ef5..96a16d0 100644 --- a/core/lib/Drupal/Core/Entity/Field/FieldTypePluginManager.php +++ b/core/lib/Drupal/Core/Entity/Field/FieldTypePluginManager.php @@ -54,4 +54,34 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac $this->discovery = new LegacyFieldTypeDiscoveryDecorator($this->discovery, $module_handler); } + /** + * Returns the default settings of a field widget. + * + * @param string $type + * A field type name. + * + * @return array + * The type's default settings, as provided by the plugin + * definition, or an empty array if type or settings are undefined. + */ + public function getDefaultSettings($type) { + $info = $this->getDefinition($type); + return isset($info['settings']) ? $info['settings'] : array(); + } + + /** + * Returns the default settings of a field widget. + * + * @param string $type + * A field instance name. + * + * @return array + * The instance's default settings, as provided by the plugin + * definition, or an empty array if type or settings are undefined. + */ + public function getDefaultInstanceSettings($type) { + $info = $this->getDefinition($type); + return isset($info['instance_settings']) ? $info['instance_settings'] : array(); + } + } diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc index 10aecf5..aeef691 100644 --- a/core/modules/field/field.info.inc +++ b/core/modules/field/field.info.inc @@ -503,13 +503,11 @@ function field_info_extra_fields($entity_type, $bundle, $context) { * The field type's default settings, or an empty array if type or settings * are not defined. * - * @deprecated as of Drupal 8.0. Use the 'settings' property in the definition - * array returned by - * Drupal::service('plugin.manager.entity.field.field_type')->getDefinition() + * @deprecated as of Drupal 8.0. Use + * Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings() */ function field_info_field_settings($type) { - $info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($type); - return isset($info['settings']) ? $info['settings'] : array(); + return \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings($type); } /** @@ -522,13 +520,11 @@ function field_info_field_settings($type) { * The field type's default instance settings, or an empty array if type or * settings are not defined. * - * @deprecated as of Drupal 8.0. Use the 'instance_settings' property in the - * definition array returned by - * Drupal::service('plugin.manager.entity.field.field_type')->getDefinition() + * @deprecated as of Drupal 8.0. Use + * Drupal::service('plugin.manager.entity.field.field_type')->getDefaultInstanceSettings() */ function field_info_instance_settings($type) { - $info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($type); - return isset($info['instance_settings']) ? $info['instance_settings'] : array(); + return \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultInstanceSettings($type); } /** @@ -542,13 +538,11 @@ function field_info_instance_settings($type) { * hook_field_widget_info(), or an empty array if type or settings are * undefined. * - * @deprecated as of Drupal 8.0. Use the 'settings' property in the definition - * array returned by - * Drupal::service('plugin.manager.field.formatter')->getDefinition() + * @deprecated as of Drupal 8.0. Use + * Drupal::service('plugin.manager.field.widget')->getDefaultSettings() */ function field_info_widget_settings($type) { - $info = \Drupal::service('plugin.manager.field.widget')->getDefinition($type); - return isset($info['settings']) ? $info['settings'] : array(); + return \Drupal::service('plugin.manager.field.widget')->getDefaultSettings($type); } /** @@ -562,13 +556,11 @@ function field_info_widget_settings($type) { * hook_field_formatter_info(), or an empty array if type or settings are * undefined. * - * @deprecated as of Drupal 8.0. Use the 'settings' property in the definition - * array returned by - * Drupal::service('plugin.manager.field.widget')->getDefinition() + * @deprecated as of Drupal 8.0. Use + * Drupal::service('plugin.manager.field.formatter')->getDefaultSettings() */ function field_info_formatter_settings($type) { - $info = \Drupal::service('plugin.manager.field.formatter')->getDefinition($type); - return isset($info['settings']) ? $info['settings'] : array(); + return \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings($type); } /** diff --git a/core/modules/field/lib/Drupal/field/FieldInfo.php b/core/modules/field/lib/Drupal/field/FieldInfo.php index cb28aa1..bba6678 100644 --- a/core/modules/field/lib/Drupal/field/FieldInfo.php +++ b/core/modules/field/lib/Drupal/field/FieldInfo.php @@ -553,8 +553,7 @@ public function getBundleExtraFields($entity_type, $bundle) { */ public function prepareField($field) { // Make sure all expected field settings are present. - $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field['type']); - $field['settings'] += $field_type['settings']; + $field['settings'] += \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings($field['type']); $field['storage']['settings'] += field_info_storage_settings($field['storage']['type']); return $field; @@ -573,8 +572,7 @@ public function prepareField($field) { */ public function prepareInstance($instance, $field_type) { // Make sure all expected instance settings are present. - $field = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field_type); - $instance['settings'] += $field['instance_settings']; + $instance['settings'] += \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultInstanceSettings($field_type); // Set a default value for the instance. if (field_behaviors_widget('default value', $instance) == FIELD_BEHAVIOR_DEFAULT && !isset($instance['default_value'])) { diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php index a50c51a..d0db597 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php +++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php @@ -146,8 +146,7 @@ public function prepareConfiguration($field_type, array $configuration) { $configuration['type'] = $field_type['default_formatter']; } // Fill in default settings values for the formatter. - $formatter = \Drupal::service('plugin.manager.field.formatter')->getDefinition($configuration['type']); - $configuration['settings'] += $formatter['settings']; + $configuration['settings'] += $this->getDefaultSettings($configuration['type']); return $configuration; } 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 d95e088..588cc67 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 @@ -137,14 +137,11 @@ public function prepareConfiguration($field_type, array $configuration) { ); // If no widget is specified, use the default widget. if (!isset($configuration['type'])) { - $field = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field_type); - $configuration['type'] = $field['default_widget']; + $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field_type); + $configuration['type'] = $field_type['default_widget']; } // Fill in default settings values for the widget. - $widget = \Drupal::service('plugin.manager.field.widget')->getDefinition($configuration['type']); - if (isset($widget['settings'])) { - $configuration['settings'] += $widget['settings']; - } + $configuration['settings'] += $this->getDefaultSettings($configuration['type']); return $configuration; } diff --git a/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php b/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php index 4fbd588..fdfea10 100644 --- a/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php +++ b/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php @@ -423,8 +423,8 @@ public function buildOptionsForm(&$form, &$form_state) { // Get the currently selected formatter. $format = $this->options['type']; - $formatter = \Drupal::service('plugin.manager.field.formatter')->getDefinition($format); - $settings = $this->options['settings'] + $formatter['settings']; + + $settings = $this->options['settings'] + \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings($format); $options = array( 'field_definition' => $field, diff --git a/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php b/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php index 06b996d..e2fb2f9 100644 --- a/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php @@ -121,8 +121,7 @@ function testFieldViewField() { // No display settings: check that default display settings are used. $output = field_view_field($this->entity, $this->field_name); $this->content = drupal_render($output); - $formatter = \Drupal::service('plugin.manager.field.formatter')->getDefinition('field_test_default'); - $settings = $formatter['settings']; + $settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings('field_test_default'); $setting = $settings['test_formatter_setting']; $this->assertText($this->label, 'Label was displayed.'); foreach ($this->values as $delta => $value) { @@ -194,8 +193,7 @@ function testFieldViewField() { */ function testFieldViewValue() { // No display settings: check that default display settings are used. - $formatter = \Drupal::service('plugin.manager.field.formatter')->getDefinition('field_test_default'); - $settings = $formatter['settings']; + $settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings('field_test_default'); $setting = $settings['test_formatter_setting']; foreach ($this->values as $delta => $value) { $item = $this->entity->{$this->field_name}[$delta]->getValue(); diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php index 0affffe..ca5ce68 100644 --- a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php @@ -279,9 +279,8 @@ function testFieldMap() { function testSettingsInfo() { $info = field_test_field_info(); foreach ($info as $type => $data) { - $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($type); - $this->assertIdentical($field_type['settings'], $data['settings'], format_string("plugin.manager.entity.field.field_type service returns %type's field settings", array('%type' => $type))); - $this->assertIdentical($field_type['instance_settings'], $data['instance_settings'], format_string("plugin.manager.entity.field.field_type service returns %type's field instance settings", array('%type' => $type))); + $this->assertIdentical(\Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings($type), $data['settings'], format_string("field settings service returns %type's field settings", array('%type' => $type))); + $this->assertIdentical(\Drupal::service('plugin.manager.entity.field.field_type')->getDefaultInstanceSettings($type), $data['instance_settings'], format_string("field instance settings service returns %type's field instance settings", array('%type' => $type))); } } diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php index f44e3e6..d1edd6d 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php @@ -47,8 +47,7 @@ function testFormatterUI() { $display = entity_get_display('node', $this->type, 'default'); $display_options = $display->getComponent('field_test'); $format = $display_options['type']; - $formatter = \Drupal::service('plugin.manager.field.formatter')->getDefinition($format); - $default_settings = $formatter['settings']; + $default_settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings($format); $setting_name = key($default_settings); $setting_value = $display_options['settings'][$setting_name]; @@ -62,8 +61,7 @@ function testFormatterUI() { $edit = array('fields[field_test][type]' => 'field_test_multiple', 'refresh_rows' => 'field_test'); $this->drupalPostAJAX(NULL, $edit, array('op' => t('Refresh'))); $format = 'field_test_multiple'; - $formatter = \Drupal::service('plugin.manager.field.formatter')->getDefinition($format); - $default_settings = $formatter['settings']; + $default_settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings($format); $setting_name = key($default_settings); $setting_value = $default_settings[$setting_name]; $this->assertFieldByName('fields[field_test][type]', $format, 'The expected formatter is selected.'); @@ -115,8 +113,7 @@ public function testWidgetUI() { $display = entity_get_form_display('node', $this->type, 'default'); $display_options = $display->getComponent('field_test'); $widget_type = $display_options['type']; - $widget = \Drupal::service('plugin.manager.field.widget')->getDefinition($widget_type); - $default_settings = $widget['settings']; + $default_settings = \Drupal::service('plugin.manager.field.widget')->getDefaultSettings($widget_type); $setting_name = key($default_settings); $setting_value = $display_options['settings'][$setting_name]; @@ -130,8 +127,7 @@ public function testWidgetUI() { $edit = array('fields[field_test][type]' => 'test_field_widget_multiple', 'refresh_rows' => 'field_test'); $this->drupalPostAJAX(NULL, $edit, array('op' => t('Refresh'))); $widget_type = 'test_field_widget_multiple'; - $widget = \Drupal::service('plugin.manager.field.widget')->getDefinition($widget_type); - $default_settings = $widget['settings']; + $default_settings = \Drupal::service('plugin.manager.field.widget')->getDefaultSettings($widget_type); $setting_name = key($default_settings); $setting_value = $default_settings[$setting_name]; $this->assertFieldByName('fields[field_test][type]', $widget_type, 'The expected widget is selected.'); diff --git a/core/modules/file/file.field.inc b/core/modules/file/file.field.inc index d61e0f6..bb7d601 100644 --- a/core/modules/file/file.field.inc +++ b/core/modules/file/file.field.inc @@ -38,8 +38,7 @@ function file_field_info() { * Implements hook_field_settings_form(). */ function file_field_settings_form($field, $instance) { - $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field['type']); - $defaults = $field_type['settings']; + $defaults = \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings($field['type']); $settings = array_merge($defaults, $field['settings']); $form['#attached']['library'][] = array('file', 'drupal.file'); diff --git a/core/modules/image/image.field.inc b/core/modules/image/image.field.inc index baa2e51..250f905 100644 --- a/core/modules/image/image.field.inc +++ b/core/modules/image/image.field.inc @@ -57,8 +57,7 @@ function image_field_info() { * Implements hook_field_settings_form(). */ function image_field_settings_form($field, $instance) { - $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field['type']); - $defaults = $field_type['settings']; + $defaults = \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings($field['type']); $settings = array_merge($defaults, $field['settings']); $scheme_options = array(); diff --git a/core/modules/node/node.tokens.inc b/core/modules/node/node.tokens.inc index ec44d0d..da149f0 100644 --- a/core/modules/node/node.tokens.inc +++ b/core/modules/node/node.tokens.inc @@ -159,8 +159,7 @@ function node_tokens($type, $tokens, array $data = array(), array $options = arr $length = $display_options['settings']['trim_length']; } else { - $formatter = \Drupal::service('plugin.manager.field.formatter')->getDefinition('text_summary_or_trimmed'); - $settings = $formatter['settings']; + $settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings('text_summary_or_trimmed'); $length = $settings['trim_length']; }