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
|
* An associative array of filters assigned to the text format, keyed by the
|
||||||
* instance ID of each filter and using the properties:
|
* 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.
|
* - module: The name of the module providing the filter.
|
||||||
* - status: (optional) A Boolean indicating whether the filter is
|
* - status: (optional) A Boolean indicating whether the filter is
|
||||||
* enabled in the text format. Defaults to FALSE.
|
* enabled in the text format. Defaults to FALSE.
|
||||||
|
@ -193,9 +193,6 @@ class FilterFormat extends ConfigEntityBase implements FilterFormatInterface, En
|
||||||
parent::preSave($storage);
|
parent::preSave($storage);
|
||||||
|
|
||||||
$this->name = trim($this->label());
|
$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);
|
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}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function defaultConfiguration() {
|
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);
|
$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.
|
* Checks if an expected violation exists in the given violations.
|
||||||
*
|
*
|
||||||
|
|
|
@ -50,9 +50,9 @@ class MigrateFilterFormatTest extends MigrateDrupalTestBase {
|
||||||
$this->assertTrue($filters['filter_html']['status']);
|
$this->assertTrue($filters['filter_html']['status']);
|
||||||
|
|
||||||
// These should be false by default.
|
// These should be false by default.
|
||||||
$this->assertFalse($filters['filter_html_escape']['status']);
|
$this->assertFalse(isset($filters['filter_html_escape']));
|
||||||
$this->assertFalse($filters['filter_caption']['status']);
|
$this->assertFalse(isset($filters['filter_caption']));
|
||||||
$this->assertFalse($filters['filter_html_image_secure']['status']);
|
$this->assertFalse(isset($filters['filter_html_image_secure']));
|
||||||
|
|
||||||
// Check variables migrated into filter.
|
// Check variables migrated into filter.
|
||||||
$this->assertIdentical($filters['filter_html']['settings']['allowed_html'], '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>');
|
$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.
|
// Enable the admin theme.
|
||||||
\Drupal::config('node.settings')->set('use_admin_theme', '1')->save();
|
\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