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 @@ +