diff --git a/core/modules/filter/config/filter.format.plain_text.yml b/core/modules/filter/config/filter.format.plain_text.yml index ceff5d2..5967ffe 100644 --- a/core/modules/filter/config/filter.format.plain_text.yml +++ b/core/modules/filter/config/filter.format.plain_text.yml @@ -1,13 +1,45 @@ format: plain_text -name: Plain text -weight: 10 +name: 'Plain text' +cache: '1' +status: '1' +weight: '10' +roles: + anonymous: anonymous + authenticated: authenticated + administrator: administrator filters: filter_html_escape: - weight: 0 - status: 1 + module: filter + settings: { } + status: '1' + weight: '0' filter_url: - weight: 1 - status: 1 + module: filter + settings: + filter_url_length: '72' + status: '1' + weight: '1' filter_autop: - weight: 2 - status: 1 + module: filter + settings: { } + status: '1' + weight: '2' + filter_html: + module: filter + settings: + allowed_html: '' + filter_html_help: '0' + filter_html_nofollow: '0' + status: '0' + weight: '0' + filter_html_image_secure: + module: filter + settings: { } + status: '0' + weight: '0' + filter_htmlcorrector: + module: filter + settings: { } + status: '0' + weight: '0' +langcode: und diff --git a/core/modules/filter/filter.install b/core/modules/filter/filter.install index 02b93fe..b847cea 100644 --- a/core/modules/filter/filter.install +++ b/core/modules/filter/filter.install @@ -63,13 +63,15 @@ function filter_update_8001() { } // Save the config object. - config('filter.format.' . $filter_format->format) - ->set('format', $filter_format->format) - ->set('name', $filter_format->name) - ->set('status', $filter_format->status) - ->set('weight', $filter_format->weight) - ->set('filters', $filters) - ->save(); + $config = array( + 'format' => $filter_format->format, + 'name' => $filter_format->name, + 'status' => $filter_format->status, + 'weight' => $filter_format->weight, + 'filters' => $filters + ); + $format = entity_create('filter_format', $config); + $format->save(); } } diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module index 45646d0..8118345 100644 --- a/core/modules/filter/filter.module +++ b/core/modules/filter/filter.module @@ -632,18 +632,22 @@ function _filter_list_cmp($a, $b) { } /** - * Sorts an array of filters by filter weight, module, name. + * Sorts an array of filters by filter status, weight, module, name. * - * Callback for uasort() within filter_list_format(). + * @see filter_list_format() + * @see Drupal\filter\Plugin\Core\Entity\FilterFormat::save() */ function _filter_format_filter_cmp($a, $b) { - if ($a->weight != $b->weight) { - return ($a->weight < $b->weight) ? -1 : 1; + if ($a['status'] != $b['status']) { + return !empty($a['status']) ? -1 : 1; + } + if ($a['weight'] != $b['weight']) { + return ($a['weight'] < $b['weight']) ? -1 : 1; } - elseif ($a->module != $b->module) { - return strcmp($a->module, $b->module); + elseif ($a['module'] != $b['module']) { + return strcmp($a['module'], $b['module']); } - return strcmp($a->name, $b->name); + return strcmp($a['name'], $b['name']); } /** @@ -721,9 +725,15 @@ function filter_list_format($format_id) { foreach ($filter_formats as $filter_format) { foreach ($filter_format->filters as $filter_name => $filter) { $filter['name'] = $filter_name; - $filters['all'][$filter_format->format][$filter_name] = (object)$filter; + $filters['all'][$filter_format->format][$filter_name] = $filter; } @uasort($filters['all'][$filter_format->format], '_filter_format_filter_cmp'); + foreach ($filters['all'][$filter_format->format] as $filter_name => $filter) { + // Before Conversion to CMI, filter were objects, now they are arrays. + // Convert filters back to objects to reduce the impact of changes. + // @todo Follow-up: filters should be arrays instead of objects. + $filters['all'][$filter_format->format][$filter_name] = (object)$filter; + } } cache()->set('filter_list_format', $filters['all']); } diff --git a/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php b/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php index 85f9d7d..01e3cc6 100644 --- a/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php +++ b/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php @@ -129,21 +129,17 @@ public function save() { else { $this->filters[$name]['settings'] = isset($filter['default settings']) ? $filter['default settings'] : array(); } + + // Sort filters properties by key, to minimize diff issues. + ksort($this->filters[$name]); } - $return = parent::save(); + // Sort filters by enabled/disabled first then by weight + @uasort($this->filters, '_filter_format_filter_cmp'); - if ($return == SAVED_NEW) { - module_invoke_all('filter_format_insert', $this); - } - else { - module_invoke_all('filter_format_update', $this); - // Explicitly indicate that the format was updated. We need to do this - // since if the filters were updated but the format object itself was not, - // the merge query above would not return an indication that anything had - // changed. - $return = SAVED_UPDATED; + $return = parent::save(); + if ($return == SAVED_UPDATED) { // Clear the filter cache whenever a text format is updated. cache('filter')->invalidateTags(array('filter_format' => $this->format)); } diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php index 893394b..0b9d30f 100644 --- a/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php +++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php @@ -152,14 +152,8 @@ function testFilterAdmin() { )); $this->assertTrue(!empty($elements), 'Reorder confirmed in admin interface.'); - $filter_format = filter_format_load($filtered); - - // The filter format is not saved in 'order', but the order is defined - // in the filter array. So, check if after ordering the filter, the - // expected order is correct. - $filter_format_filters = $filter_format->filters; - @uasort($filter_format_filters, '_filter_format_filter_cmp'); - foreach ($filter_format_filters as $filter_name => $filter) { + $filter_format = entity_load('filter_format', $filtered); + foreach ($filter_format->filters as $filter_name => $filter) { if ($filter_name == $second_filter || $filter_name == $first_filter) { $filters[] = $filter_name; } diff --git a/core/modules/rest/lib/Drupal/rest/Tests/DeleteTest.php b/core/modules/rest/lib/Drupal/rest/Tests/DeleteTest.php index 187c386..af707c7 100644 --- a/core/modules/rest/lib/Drupal/rest/Tests/DeleteTest.php +++ b/core/modules/rest/lib/Drupal/rest/Tests/DeleteTest.php @@ -112,6 +112,8 @@ protected function entityCreate($entity_type) { return entity_create('node', array('title' => $this->randomString())); case 'user': return entity_create('user', array('name' => $this->randomName())); + case 'filter_format': + return entity_create('filter_format', array('format' => $this->randomName())); default: return entity_create($entity_type, array()); } diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php new file mode 100644 index 0000000..d2ef4ac --- /dev/null +++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php @@ -0,0 +1,52 @@ + 'Filter Formats upgrade test', + 'description' => 'Upgrade tests with filter formats data.', + 'group' => 'Upgrade path', + ); + } + + public function setUp() { + $this->databaseDumpFiles = array( + drupal_get_path('module', 'system') . '/tests/upgrade/drupal-7.bare.standard_all.database.php.gz', + drupal_get_path('module', 'system') . '/tests/upgrade/drupal-7.filter_formats.database.php', + ); + parent::setUp(); + } + + /** + * Tests expected filter formats entities after a successful upgrade. + */ + public function testFilterFormatUpgrade() { + $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.'); + + // Checks that all the formats were upgraded + $one = filter_format_load('format_one'); + $this->assertTrue(!empty($one), 'Filter Format one was successfully upgraded'); + $two = filter_format_load('format_two'); + $this->assertTrue(!empty($two), 'Filter Format two was successfully upgraded'); + + $three_null = filter_format_load('format_three'); + $three_entity = entity_load('filter_format', 'format_three'); + $this->assertTrue(empty($three_null) && !empty($three_entity), 'Filter Format three was successfully upgraded and it is disabled'); + + + } +} diff --git a/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php b/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php new file mode 100644 index 0000000..d3d6c4e --- /dev/null +++ b/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php @@ -0,0 +1,135 @@ +fields(array( + 'format', + 'name', + 'cache', + 'status', + 'weight', +)) +// Adds some filters formats +->values(array( + 'format' => 'format_one', + 'name' => 'Format One', + 'cache' => '1', + 'weight' => '1', + 'status' => '1' +)) +->values(array( + 'format' => 'format_two', + 'name' => 'Format Two', + 'cache' => '1', + 'weight' => '2', + 'status' => '1' +)) +// Add a disabled filter format +->values(array( + 'format' => 'format_three', + 'name' => 'Format Three', + 'cache' => '1', + 'weight' => '3', + 'status' => '0' +)) +->execute(); + +// Adds filters to the crated filter formats +db_insert('filter')->fields(array( + 'format', + 'module', + 'name', + 'weight', + 'status', + 'settings', +)) +// Filters for: Format One +->values(array( + 'format' => 'filter_one', + 'module' => 'filter', + 'name' => 'filter_autop', + 'weight' => '2', + 'status' => '1', + 'settings' => 'a:0:{}', +)) +->values(array( + 'format' => 'filter_one', + 'module' => 'filter', + 'name' => 'filter_html', + 'weight' => '-10', + 'status' => '0', + 'settings' => 'a:3:{s:12:"allowed_html";s:74:"