From f562cc9b7f3f519424a2da9a9b10ce138f8e4347 Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Sun, 4 Jan 2015 18:15:28 +0000 Subject: [PATCH] Issue #2387983 by Garrett Albright, larowlan: PluginNotFoundException when enabling module that provides text filter --- core/modules/filter/filter.module | 10 ++++- .../filter/src/Tests/FilterFormTest.php | 6 +++ .../filter_test_plugin.info.yml | 6 +++ .../src/Plugin/Filter/FilterSparkles.php | 38 +++++++++++++++++++ 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 core/modules/filter/tests/filter_test_plugin/filter_test_plugin.info.yml create mode 100644 core/modules/filter/tests/filter_test_plugin/src/Plugin/Filter/FilterSparkles.php diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module index 269781c728dd..83e224ca47f5 100644 --- a/core/modules/filter/filter.module +++ b/core/modules/filter/filter.module @@ -100,8 +100,14 @@ function filter_system_info_alter(&$info, Extension $file, $type) { $used_in = []; // Find out if any filter formats have the plugin enabled. foreach (filter_formats() as $filter_format) { - foreach ($filter_plugins as $filter_plugin) { - if ($filter_format->filters($filter_plugin['id'])->status) { + $filters = $filter_format->filters(); + // Typically, all formats will contain settings for all filter plugins, + // even if they are disabled. However, if a module which provides filter + // plugins is being enabled right now, that won't be the case, so we + // still check to see if this format has this filter before we check + // the filter status. + foreach ($filter_plugins as $filter_plugin) { + if ($filters->has($filter_plugin['id']) && $filters->get($filter_plugin['id'])->status) { $used_in[] = $filter_format->label(); $info['required'] = TRUE; break; diff --git a/core/modules/filter/src/Tests/FilterFormTest.php b/core/modules/filter/src/Tests/FilterFormTest.php index 64ccaf970eab..7db7c0fcb734 100644 --- a/core/modules/filter/src/Tests/FilterFormTest.php +++ b/core/modules/filter/src/Tests/FilterFormTest.php @@ -71,6 +71,12 @@ class FilterFormTest extends WebTestBase { public function testFilterForm() { $this->doFilterFormTestAsAdmin(); $this->doFilterFormTestAsNonAdmin(); + // Ensure that enabling modules which provide filter plugins behaves + // correctly. + // @see https://www.drupal.org/node/2387983 + \Drupal::service('module_installer')->install(['filter_test_plugin']); + // Force rebuild module data. + _system_rebuild_module_data(); } /** diff --git a/core/modules/filter/tests/filter_test_plugin/filter_test_plugin.info.yml b/core/modules/filter/tests/filter_test_plugin/filter_test_plugin.info.yml new file mode 100644 index 000000000000..010c8f829f14 --- /dev/null +++ b/core/modules/filter/tests/filter_test_plugin/filter_test_plugin.info.yml @@ -0,0 +1,6 @@ +name: 'Filter test plugin' +type: module +description: 'Tests enabling of modules which provide filter plugins.' +package: Testing +version: VERSION +core: 8.x diff --git a/core/modules/filter/tests/filter_test_plugin/src/Plugin/Filter/FilterSparkles.php b/core/modules/filter/tests/filter_test_plugin/src/Plugin/Filter/FilterSparkles.php new file mode 100644 index 000000000000..5edd60790f34 --- /dev/null +++ b/core/modules/filter/tests/filter_test_plugin/src/Plugin/Filter/FilterSparkles.php @@ -0,0 +1,38 @@ +