diff --git a/core/lib/Drupal/Core/Field/Annotation/FieldFormatter.php b/core/lib/Drupal/Core/Field/Annotation/FieldFormatter.php index 11f2246..37b9986 100644 --- a/core/lib/Drupal/Core/Field/Annotation/FieldFormatter.php +++ b/core/lib/Drupal/Core/Field/Annotation/FieldFormatter.php @@ -66,12 +66,4 @@ class FieldFormatter extends Plugin { */ public $field_types = array(); - /** - * An array whose keys are the names of the settings available to the - * formatter type, and whose values are the default values for those settings. - * - * @var array - */ - public $settings = array(); - } diff --git a/core/lib/Drupal/Core/Field/FormatterBase.php b/core/lib/Drupal/Core/Field/FormatterBase.php index 35bbf33..be9fe61 100644 --- a/core/lib/Drupal/Core/Field/FormatterBase.php +++ b/core/lib/Drupal/Core/Field/FormatterBase.php @@ -41,6 +41,13 @@ protected $viewMode; /** + * Denotes whether the plugin has an additional options form. + * + * @var bool + */ + protected $usesOptions = FALSE; + + /** * Constructs a FormatterBase object. * * @param string $plugin_id @@ -68,6 +75,19 @@ public function __construct($plugin_id, array $plugin_definition, FieldDefinitio /** * {@inheritdoc} */ + public static function defineOptions() { + return array(); + } + + /** + * Returns the usesOptions property. + */ + public function usesOptions() { + return $this->usesOptions; + } + /** + * {@inheritdoc} + */ public function view(FieldItemListInterface $items) { $addition = array(); diff --git a/core/lib/Drupal/Core/Field/FormatterInterface.php b/core/lib/Drupal/Core/Field/FormatterInterface.php index fa63372..afc5515 100644 --- a/core/lib/Drupal/Core/Field/FormatterInterface.php +++ b/core/lib/Drupal/Core/Field/FormatterInterface.php @@ -13,6 +13,14 @@ interface FormatterInterface extends PluginSettingsInterface { /** + * Information about options for all kinds of purposes will be held here. + * + * @return array + * The options of this formatter plugin. + */ + public static function defineOptions(); + + /** * Returns a form to configure settings for the formatter. * * Invoked from \Drupal\field_ui\Form\FieldInstanceEditForm to allow diff --git a/core/lib/Drupal/Core/Field/FormatterPluginManager.php b/core/lib/Drupal/Core/Field/FormatterPluginManager.php index c30ab0e..79e7d52 100644 --- a/core/lib/Drupal/Core/Field/FormatterPluginManager.php +++ b/core/lib/Drupal/Core/Field/FormatterPluginManager.php @@ -196,8 +196,9 @@ public function getOptions($field_type = NULL) { * 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(); + $plugin_definition = $this->getDefinition($type); + $plugin_class = DefaultFactory::getPluginClass($type, $plugin_definition); + return $plugin_class::defineOptions(); } } diff --git a/core/lib/Drupal/Core/Field/PluginSettingsBase.php b/core/lib/Drupal/Core/Field/PluginSettingsBase.php index 895563a..7d30ae4 100644 --- a/core/lib/Drupal/Core/Field/PluginSettingsBase.php +++ b/core/lib/Drupal/Core/Field/PluginSettingsBase.php @@ -8,6 +8,7 @@ namespace Drupal\Core\Field; use Drupal\Core\Plugin\PluginBase; +use Drupal\Component\Plugin\Factory\DefaultFactory; /** * Base class for the Field API plugins. @@ -65,7 +66,8 @@ protected function mergeDefaults() { */ public function getDefaultSettings() { $definition = $this->getPluginDefinition(); - return $definition['settings']; + $plugin_class = DefaultFactory::getPluginClass($this->getPluginId(), $definition); + return $plugin_class::defineOptions(); } /** diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php b/core/modules/comment/lib/Drupal/comment/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php index 3250990..b69b9da 100644 --- a/core/modules/comment/lib/Drupal/comment/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php +++ b/core/modules/comment/lib/Drupal/comment/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php @@ -28,14 +28,22 @@ * }, * edit = { * "editor" = "disabled" - * }, - * settings = { - * "pager_id" = 0 * } * ) */ class CommentDefaultFormatter extends FormatterBase implements ContainerFactoryPluginInterface { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['pager_id'] = 0; + return $options; + } + /** * The comment storage controller. * diff --git a/core/modules/datetime/lib/Drupal/datetime/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php b/core/modules/datetime/lib/Drupal/datetime/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php index 1a235dc..2056313 100644 --- a/core/modules/datetime/lib/Drupal/datetime/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php +++ b/core/modules/datetime/lib/Drupal/datetime/Plugin/Field/FieldFormatter/DateTimeDefaultFormatter.php @@ -24,14 +24,22 @@ * label = @Translation("Default"), * field_types = { * "datetime" - * }, - * settings = { - * "format_type" = "medium", * } * ) */ class DateTimeDefaultFormatter extends FormatterBase implements ContainerFactoryPluginInterface { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['format_type'] = 'medium'; + return $options; + } + /** * The date service. * diff --git a/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php b/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php index 40e3c39..1ea7112 100644 --- a/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php +++ b/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php @@ -19,15 +19,23 @@ * description = @Translation("Display the referenced entities rendered by entity_view()."), * field_types = { * "entity_reference" - * }, - * settings = { - * "view_mode" = "default", - * "link" = FALSE * } * ) */ class EntityReferenceEntityFormatter extends EntityReferenceFormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['view_mode'] = 'default'; + $options['link'] = FALSE; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php b/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php index ea13e17..c088df5 100644 --- a/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php +++ b/core/modules/entity_reference/lib/Drupal/entity_reference/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php @@ -18,14 +18,22 @@ * description = @Translation("Display the label of the referenced entities."), * field_types = { * "entity_reference" - * }, - * settings = { - * "link" = TRUE * } * ) */ class EntityReferenceLabelFormatter extends EntityReferenceFormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['link'] = TRUE; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldDefaultFormatter.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldDefaultFormatter.php index 457c76f..77e6917 100644 --- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldDefaultFormatter.php +++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldDefaultFormatter.php @@ -19,14 +19,22 @@ * description = @Translation("Default formatter"), * field_types = { * "test_field" - * }, - * settings = { - * "test_formatter_setting" = "dummy test string" * } * ) */ class TestFieldDefaultFormatter extends FormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['test_formatter_setting'] = 'dummy test string'; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldEmptyFormatter.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldEmptyFormatter.php index 592a958..064797a 100644 --- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldEmptyFormatter.php +++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldEmptyFormatter.php @@ -18,14 +18,22 @@ * label = @Translation("Field empty test"), * field_types = { * "test_field", - * }, - * settings = { - * "test_empty_string" = "**EMPTY FIELD**" * } * ) */ class TestFieldEmptyFormatter extends FormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['test_empty_string'] = '**EMPTY FIELD**'; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldEmptySettingFormatter.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldEmptySettingFormatter.php index e825aa8..85218fc 100644 --- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldEmptySettingFormatter.php +++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldEmptySettingFormatter.php @@ -18,14 +18,22 @@ * label = @Translation("Field empty setting"), * field_types = { * "test_field", - * }, - * settings = { - * "field_empty_setting" = "" * } * ) */ class TestFieldEmptySettingFormatter extends FormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['field_empty_setting'] = ''; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldMultipleFormatter.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldMultipleFormatter.php index 588ad66..da8ba58 100644 --- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldMultipleFormatter.php +++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldMultipleFormatter.php @@ -19,14 +19,22 @@ * description = @Translation("Multiple formatter"), * field_types = { * "test_field" - * }, - * settings = { - * "test_formatter_setting_multiple" = "dummy test string" * } * ) */ class TestFieldMultipleFormatter extends FormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['test_formatter_setting_multiple'] = 'dummy test string'; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldPrepareViewFormatter.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldPrepareViewFormatter.php index a8ff2a9..529876d 100644 --- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldPrepareViewFormatter.php +++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Field/FieldFormatter/TestFieldPrepareViewFormatter.php @@ -19,14 +19,22 @@ * description = @Translation("Tests prepareView() method"), * field_types = { * "test_field" - * }, - * settings = { - * "test_formatter_setting_additional" = "dummy test string" * } * ) */ class TestFieldPrepareViewFormatter extends FormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['test_formatter_setting_additional'] = 'dummy test string'; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php index 2ed54e8..b855c0c 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php @@ -396,8 +396,7 @@ protected function buildFieldRow(FieldDefinitionInterface $field_definition, Ent } // Check selected plugin settings to display edit link or not. - $plugin_definition = $plugin->getPluginDefinition(); - if ($plugin_definition['settings']) { + if ($plugin->usesOptions()) { $field_row['settings_edit'] = $base_button + array( '#type' => 'image_button', '#name' => $field_name . '_settings_edit', diff --git a/core/modules/image/lib/Drupal/image/Plugin/Field/FieldFormatter/ImageFormatter.php b/core/modules/image/lib/Drupal/image/Plugin/Field/FieldFormatter/ImageFormatter.php index 6a9a44e..58294c2 100644 --- a/core/modules/image/lib/Drupal/image/Plugin/Field/FieldFormatter/ImageFormatter.php +++ b/core/modules/image/lib/Drupal/image/Plugin/Field/FieldFormatter/ImageFormatter.php @@ -17,15 +17,23 @@ * label = @Translation("Image"), * field_types = { * "image" - * }, - * settings = { - * "image_style" = "", - * "image_link" = "" * } * ) */ class ImageFormatter extends ImageFormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['image_style'] = ''; + $options['image_link'] = ''; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkFormatter.php b/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkFormatter.php index 111ce34..c266e05 100644 --- a/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkFormatter.php +++ b/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkFormatter.php @@ -20,18 +20,26 @@ * label = @Translation("Link"), * field_types = { * "link" - * }, - * settings = { - * "trim_length" = "80", - * "url_only" = "", - * "url_plain" = "", - * "rel" = "", - * "target" = "" * } * ) */ class LinkFormatter extends FormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['trim_length'] = '80'; + $options['url_only'] = ''; + $options['url_plain'] = ''; + $options['rel'] = ''; + $options['target'] = ''; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php b/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php index 4392123..84024ed 100644 --- a/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php +++ b/core/modules/link/lib/Drupal/link/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php @@ -22,16 +22,24 @@ * label = @Translation("Separate link text and URL"), * field_types = { * "link" - * }, - * settings = { - * "trim_length" = "80", - * "rel" = "", - * "target" = "" * } * ) */ class LinkSeparateFormatter extends LinkFormatter { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['trim_length'] = '80'; + $options['rel'] = ''; + $options['target'] = ''; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberDecimalFormatter.php b/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberDecimalFormatter.php index 1fe9c72..1c0b701 100644 --- a/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberDecimalFormatter.php +++ b/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberDecimalFormatter.php @@ -20,17 +20,25 @@ * field_types = { * "number_decimal", * "number_float" - * }, - * settings = { - * "thousand_separator" = "", - * "decimal_separator" = ".", - * "scale" = "2", - * "prefix_suffix" = "TRUE" * } * ) */ class NumberDecimalFormatter extends DefaultNumberFormatter { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['thousand_separator'] = ''; + $options['decimal_separator'] = '.'; + $options['scale'] = 2; + $options['prefix_suffix'] = TRUE; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberIntegerFormatter.php b/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberIntegerFormatter.php index 53ff874..b0902a9 100644 --- a/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberIntegerFormatter.php +++ b/core/modules/number/lib/Drupal/number/Plugin/Field/FieldFormatter/NumberIntegerFormatter.php @@ -19,15 +19,23 @@ * label = @Translation("Default"), * field_types = { * "number_integer" - * }, - * settings = { - * "thousand_separator" = "", - * "prefix_suffix" = "TRUE" * } * ) */ class NumberIntegerFormatter extends DefaultNumberFormatter { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['thousand_separator'] = ''; + $options['prefix_suffix'] = TRUE; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/telephone/lib/Drupal/telephone/Plugin/Field/FieldFormatter/TelephoneLinkFormatter.php b/core/modules/telephone/lib/Drupal/telephone/Plugin/Field/FieldFormatter/TelephoneLinkFormatter.php index 436a4fc..3b3a337 100644 --- a/core/modules/telephone/lib/Drupal/telephone/Plugin/Field/FieldFormatter/TelephoneLinkFormatter.php +++ b/core/modules/telephone/lib/Drupal/telephone/Plugin/Field/FieldFormatter/TelephoneLinkFormatter.php @@ -18,14 +18,22 @@ * label = @Translation("Telephone link"), * field_types = { * "telephone" - * }, - * settings = { - * "title" = "" * } * ) */ class TelephoneLinkFormatter extends FormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['title'] = ''; + return $options; + } + /** * {@inheritdoc} */ diff --git a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldFormatter/TextTrimmedFormatter.php b/core/modules/text/lib/Drupal/text/Plugin/Field/FieldFormatter/TextTrimmedFormatter.php index 8100e7b..88b7b13 100644 --- a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldFormatter/TextTrimmedFormatter.php +++ b/core/modules/text/lib/Drupal/text/Plugin/Field/FieldFormatter/TextTrimmedFormatter.php @@ -25,9 +25,6 @@ * "text_long", * "text_with_summary" * }, - * settings = { - * "trim_length" = "600" - * }, * edit = { * "editor" = "form" * } @@ -35,6 +32,17 @@ */ class TextTrimmedFormatter extends FormatterBase { + protected $usesOptions = TRUE; + + /** + * {@inheritdoc} + */ + public static function defineOptions() { + $options = parent::defineOptions(); + $options['trim_length'] = '600'; + return $options; + } + /** * {@inheritdoc} */