diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php index abe1a4b..0267879 100644 --- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php +++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php @@ -10,7 +10,6 @@ use Drupal\Component\Utility\String; use Drupal\Component\Utility\Unicode; use Drupal\Core\Cache\Cache; -use Drupal\Core\Config\Entity\ThirdPartySettingsTrait; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Session\AccountInterface; @@ -51,8 +50,6 @@ */ abstract class DisplayPluginBase extends PluginBase { - use ThirdPartySettingsTrait; - /** * The top object of a view. * @@ -161,22 +158,27 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition public function initDisplay(ViewExecutable $view, array &$display, array &$options = NULL) { $this->view = $view; - $this->setOptionDefaults($this->options, $this->defineOptions()); - $this->display = &$display; // Load extenders as soon as possible. + $display['display_options'] += ['display_extenders' => []]; $this->extender = array(); if ($extenders = Views::getEnabledDisplayExtenders()) { $manager = Views::pluginManager('display_extender'); + $display_extender_options = $display['display_options']['display_extenders']; foreach ($extenders as $extender) { /** @var \Drupal\views\Plugin\views\display_extender\DisplayExtenderPluginBase $plugin */ if ($plugin = $manager->createInstance($extender)) { - $plugin->init($this->view, $this); + $extender_options = isset($display_extender_options[$plugin->getPluginId()]) ? $display_extender_options[$plugin->getPluginId()] : []; + $plugin->init($this->view, $this, $extender_options); $this->extender[$extender] = $plugin; } } } + + $this->setOptionDefaults($this->options, $this->defineOptions()); + $this->display = &$display; + // Track changes that the user should know about. $changed = FALSE; @@ -226,23 +228,6 @@ public function initDisplay(ViewExecutable $view, array &$display, array &$optio if ($changed) { $this->view->changed = TRUE; } - - $this->third_party_settings = $this->getOption('display_extenders'); - } - - /** - * {@inheritdoc} - */ - public function setThirdPartySetting($module, $key, $value) { - $display_extenders = $this->getOption('display_extenders'); - $display_extenders[$module][$key] = $value; - $this->setOption('display_extenders', $display_extenders); - } - - public function unsetThirdPartySetting($module, $key) { - $display_extenders = $this->getOption('display_extenders'); - unset($display_extenders[$module][$key]); - $this->setOption('display_extenders', $display_extenders); } public function destroy() { @@ -724,11 +709,10 @@ protected function defineOptions() { unset($options['defaults']); } - $options['display_extenders'] = ['default' => []]; - + $options['display_extenders'] = ['default' => [], ]; // First allow display extenders to provide new options. foreach ($this->extender as $extender_id => $extender) { - $options['display_extenders']['contains'][$extender_id] = $extender->defineOptions(); + $options['display_extenders']['contains'][$extender_id]['contains'] = $extender->defineOptions(); } // Then allow display extenders to alter existing default values. @@ -2043,9 +2027,14 @@ public function submitOptionsForm(&$form, FormStateInterface $form_state) { break; } + $extender_options = $this->getOption('display_extenders'); foreach ($this->extender as $extender) { $extender->submitOptionsForm($form, $form_state); + + $plugin_id = $extender->getPluginId(); + $extender_options[$plugin_id] = $extender->options; } + $this->setOption('display_extenders', $extender_options); } /** diff --git a/core/modules/views/tests/modules/views_test_data/src/Plugin/views/display_extender/DisplayExtenderTest.php b/core/modules/views/tests/modules/views_test_data/src/Plugin/views/display_extender/DisplayExtenderTest.php index cf201a4..ce5afb0 100644 --- a/core/modules/views/tests/modules/views_test_data/src/Plugin/views/display_extender/DisplayExtenderTest.php +++ b/core/modules/views/tests/modules/views_test_data/src/Plugin/views/display_extender/DisplayExtenderTest.php @@ -33,7 +33,7 @@ class DisplayExtenderTest extends DisplayExtenderPluginBase { protected function defineOptions() { $options = parent::defineOptions(); - $options['test_extender_test_option'] = ['default' => '']; + $options['test_extender_test_option'] = ['default' => 'Empty']; return $options; } @@ -52,12 +52,10 @@ public function optionsSummary(&$categories, &$options) { ), ); - $test_option = $this->displayHandler->getThirdPartySetting('display_extender_test', 'test_extender_test_option') ?: $this->t('Empty'); - $options['test_extender_test_option'] = array( 'category' => 'display_extender_test', 'title' => $this->t('Test option'), - 'value' => views_ui_truncate($test_option, 24), + 'value' => views_ui_truncate($this->options['test_extender_test_option'], 24), ); } @@ -72,7 +70,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) { '#title' => $this->t('Test option'), '#type' => 'textfield', '#description' => $this->t('This is a textfield for test_option.'), - '#default_value' => $this->displayHandler->getThirdPartySetting('display_extender_test', 'test_extender_test_option'), + '#default_value' => $this->options['test_extender_test_option'], ); } } @@ -84,7 +82,7 @@ public function submitOptionsForm(&$form, FormStateInterface $form_state) { parent::submitOptionsForm($form, $form_state); switch ($form_state->get('section')) { case 'test_extender_test_option': - $this->displayHandler->setThirdPartySetting('display_extender_test', 'test_extender_test_option', $form_state->getValue('test_extender_test_option')); + $this->options['test_extender_test_option'] = $form_state->getValue('test_extender_test_option'); break; } } diff --git a/core/modules/views_ui/src/Tests/DisplayExtenderUITest.php b/core/modules/views_ui/src/Tests/DisplayExtenderUITest.php index c0753f1..d5e00fa 100644 --- a/core/modules/views_ui/src/Tests/DisplayExtenderUITest.php +++ b/core/modules/views_ui/src/Tests/DisplayExtenderUITest.php @@ -54,7 +54,6 @@ public function testDisplayExtenderUI() { $view = Views::getView($view->storage->id()); $view->initDisplay(); $display_extender_options = $view->display_handler->getOption('display_extenders'); - debug($display_extender_options); $this->assertEqual($display_extender_options['display_extender_test']['test_extender_test_option'], $random_text, 'Make sure that the display extender option got saved.'); }