diff --git a/core/modules/filter/src/Entity/FilterFormat.php b/core/modules/filter/src/Entity/FilterFormat.php index efd0e73..f9aca9d 100644 --- a/core/modules/filter/src/Entity/FilterFormat.php +++ b/core/modules/filter/src/Entity/FilterFormat.php @@ -7,7 +7,6 @@ namespace Drupal\filter\Entity; -use Drupal\Component\Utility\DiffArray; use Drupal\Core\Config\Entity\ConfigEntityBase; use Drupal\Core\Entity\EntityWithPluginBagsInterface; use Drupal\Core\Entity\EntityStorageInterface; @@ -200,9 +199,10 @@ public function preSave(EntityStorageInterface $storage) { if (!$filter['status']) { // Compare the current settings to the default settings. If there are // any customisations save them to configuration. - $default = \Drupal::service('plugin.manager.filter')->getDefinition($filter['id']); - $diff = DiffArray::diffAssocRecursive($filter, $default); - return !empty($diff); + $default_config = array(); + $default_config['id'] = $filter['id']; + $default_config += $this->filters($filter['id'])->defaultConfiguration(); + return !($default_config === $filter); } return TRUE; }); diff --git a/core/modules/filter/src/Plugin/FilterBase.php b/core/modules/filter/src/Plugin/FilterBase.php index cfed8ac..5314ad7 100644 --- a/core/modules/filter/src/Plugin/FilterBase.php +++ b/core/modules/filter/src/Plugin/FilterBase.php @@ -107,7 +107,12 @@ public function getConfiguration() { * {@inheritdoc} */ public function defaultConfiguration() { - return array(); + return array( + 'provider' => $this->pluginDefinition['provider'], + 'status' => FALSE, + 'weight' => $this->pluginDefinition['weight'] ?: 0, + 'settings' => $this->pluginDefinition['settings'], + ); } /** diff --git a/core/modules/system/src/Tests/Entity/ConfigEntityImportTest.php b/core/modules/system/src/Tests/Entity/ConfigEntityImportTest.php index 96d7197..1f0fbb3 100644 --- a/core/modules/system/src/Tests/Entity/ConfigEntityImportTest.php +++ b/core/modules/system/src/Tests/Entity/ConfigEntityImportTest.php @@ -7,8 +7,8 @@ namespace Drupal\system\Tests\Entity; -use Drupal\Component\Utility\DiffArray; use Drupal\Core\Entity\EntityWithPluginBagsInterface; +use Drupal\filter\FilterBag; use Drupal\simpletest\WebTestBase; /** @@ -102,13 +102,13 @@ protected function doFilterFormatUpdate() { $entity->set('filters', $filters); $entity->save(); $this->assertIdentical($filters, $entity->get('filters')); - $this->assertIdentical($filters, $this->filterFilters($plugin_bag->getConfiguration())); + $this->assertIdentical($filters, $this->filterFilters($plugin_bag)); $filters['filter_url']['settings']['filter_url_length'] = -100; $entity->getPluginBags()['filters']->setConfiguration($filters); $entity->save(); $this->assertIdentical($filters, $entity->get('filters')); - $this->assertIdentical($filters, $this->filterFilters($plugin_bag->getConfiguration())); + $this->assertIdentical($filters, $this->filterFilters($plugin_bag)); // Read the existing data, and prepare an altered version in staging. $custom_data = $original_data = $this->container->get('config.storage')->read($name); @@ -117,20 +117,22 @@ protected function doFilterFormatUpdate() { } /** - * Filters an array of filters to only include customized filters. + * Returns only customized filters from a filter plugin bag. * - * @param array $filters - * An array of filter plugin configurations keyed by plugin ID. + * @param \Drupal\filter\FilterBag $filter_bag + * The plugin bag of filter plugins. * * @return array * The filtered array of filters. */ - protected function filterFilters(array $filters) { - return array_filter($filters, function($filter) { - $default = \Drupal::service('plugin.manager.filter')->getDefinition($filter['id']); + protected function filterFilters(FilterBag $filter_bag) { + $filters = $filter_bag->getConfiguration(); + return array_filter($filters, function($filter) use ($filter_bag) { if (!$filter['status']) { - $diff = DiffArray::diffAssocRecursive($filter, $default); - return !empty($diff); + $default_config = array(); + $default_config['id'] = $filter['id']; + $default_config += $filter_bag->get($filter['id'])->defaultConfiguration(); + return !($default_config === $filter); } return TRUE; });