Issue #2295129 by alexpott, tim.plunkett: Fixed Filter formats should not save plugin data when the plugin configuration matches defaults.
parent
9b274e1a26
commit
2ecdf8ceaa
|
@ -97,7 +97,7 @@ class FilterFormat extends ConfigEntityBase implements FilterFormatInterface, En
|
|||
*
|
||||
* An associative array of filters assigned to the text format, keyed by the
|
||||
* instance ID of each filter and using the properties:
|
||||
* - plugin_id: The plugin ID of the filter plugin instance.
|
||||
* - id: The plugin ID of the filter plugin instance.
|
||||
* - module: The name of the module providing the filter.
|
||||
* - status: (optional) A Boolean indicating whether the filter is
|
||||
* enabled in the text format. Defaults to FALSE.
|
||||
|
@ -193,9 +193,6 @@ class FilterFormat extends ConfigEntityBase implements FilterFormatInterface, En
|
|||
parent::preSave($storage);
|
||||
|
||||
$this->name = trim($this->label());
|
||||
|
||||
// @todo Do not save disabled filters whose properties are identical to
|
||||
// all default properties.
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -107,4 +107,26 @@ class FilterBag extends DefaultPluginBag {
|
|||
return parent::sortHelper($aID, $bID);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getConfiguration() {
|
||||
$configuration = parent::getConfiguration();
|
||||
// Remove configuration if it matches the defaults. In self::getAll(), we
|
||||
// load all available filters, in addition to the enabled filters stored in
|
||||
// configuration. In order to prevent those from bleeding through to the
|
||||
// stored configuration, remove all filters that match the default values.
|
||||
// Because filters are disabled by default, this will never remove the
|
||||
// configuration of an enabled filter.
|
||||
foreach ($configuration as $instance_id => $instance_config) {
|
||||
$default_config = array();
|
||||
$default_config['id'] = $instance_id;
|
||||
$default_config += $this->get($instance_id)->defaultConfiguration();
|
||||
if ($default_config === $instance_config) {
|
||||
unset($configuration[$instance_id]);
|
||||
}
|
||||
}
|
||||
return $configuration;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -107,7 +107,12 @@ abstract class FilterBase extends PluginBase implements FilterInterface {
|
|||
* {@inheritdoc}
|
||||
*/
|
||||
public function defaultConfiguration() {
|
||||
return array();
|
||||
return array(
|
||||
'provider' => $this->pluginDefinition['provider'],
|
||||
'status' => FALSE,
|
||||
'weight' => $this->pluginDefinition['weight'] ?: 0,
|
||||
'settings' => $this->pluginDefinition['settings'],
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -328,6 +328,50 @@ class FilterAPITest extends EntityUnitTestBase {
|
|||
$this->assertEqual($allowed_options, $expected_allowed_options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that FilterFormat::preSave() only saves customized plugins.
|
||||
*/
|
||||
public function testFilterFormatPreSave() {
|
||||
/** @var \Drupal\filter\FilterFormatInterface $crazy_format */
|
||||
$crazy_format = entity_create('filter_format', array(
|
||||
'format' => 'crazy',
|
||||
'name' => 'Crazy',
|
||||
'weight' => 1,
|
||||
'filters' => array(
|
||||
'filter_html_escape' => array(
|
||||
'weight' => 10,
|
||||
'status' => 1,
|
||||
),
|
||||
'filter_html' => array(
|
||||
'weight' => -10,
|
||||
'status' => 1,
|
||||
'settings' => array(
|
||||
'allowed_html' => '<p>',
|
||||
),
|
||||
),
|
||||
)
|
||||
));
|
||||
$crazy_format->save();
|
||||
// Use config to directly load the configuration and check that only enabled
|
||||
// or customized plugins are saved to configuration.
|
||||
$filters = \Drupal::config('filter.format.crazy')->get('filters');
|
||||
$this->assertEqual(array('filter_html_escape', 'filter_html'), array_keys($filters));
|
||||
|
||||
// Disable a plugin to ensure that disabled plugins with custom settings are
|
||||
// stored in configuration.
|
||||
$crazy_format->setFilterConfig('filter_html_escape', array('status' => FALSE));
|
||||
$crazy_format->save();
|
||||
$filters = \Drupal::config('filter.format.crazy')->get('filters');
|
||||
$this->assertEqual(array('filter_html_escape', 'filter_html'), array_keys($filters));
|
||||
|
||||
// Set the settings as per default to ensure that disable plugins in this
|
||||
// state are not stored in configuration.
|
||||
$crazy_format->setFilterConfig('filter_html_escape', array('weight' => -10));
|
||||
$crazy_format->save();
|
||||
$filters = \Drupal::config('filter.format.crazy')->get('filters');
|
||||
$this->assertEqual(array('filter_html'), array_keys($filters));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if an expected violation exists in the given violations.
|
||||
*
|
||||
|
|
|
@ -50,9 +50,9 @@ class MigrateFilterFormatTest extends MigrateDrupalTestBase {
|
|||
$this->assertTrue($filters['filter_html']['status']);
|
||||
|
||||
// These should be false by default.
|
||||
$this->assertFalse($filters['filter_html_escape']['status']);
|
||||
$this->assertFalse($filters['filter_caption']['status']);
|
||||
$this->assertFalse($filters['filter_html_image_secure']['status']);
|
||||
$this->assertFalse(isset($filters['filter_html_escape']));
|
||||
$this->assertFalse(isset($filters['filter_caption']));
|
||||
$this->assertFalse(isset($filters['filter_html_image_secure']));
|
||||
|
||||
// Check variables migrated into filter.
|
||||
$this->assertIdentical($filters['filter_html']['settings']['allowed_html'], '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>');
|
||||
|
|
|
@ -78,11 +78,4 @@ function standard_install() {
|
|||
|
||||
// Enable the admin theme.
|
||||
\Drupal::config('node.settings')->set('use_admin_theme', '1')->save();
|
||||
|
||||
// @todo Remove in https://www.drupal.org/node/2295129.
|
||||
// Resave the plain_text formatter so that default filter plugins and
|
||||
// dependencies are calculated correctly. This resolves an issue caused by the
|
||||
// fact that filter is installed before editor but the standard profile also
|
||||
// enables the file module.
|
||||
entity_load('filter_format', 'plain_text')->save();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue