diff --git a/core/modules/filter/filter.admin.inc b/core/modules/filter/filter.admin.inc index d8393d2..aa5bf4a 100644 --- a/core/modules/filter/filter.admin.inc +++ b/core/modules/filter/filter.admin.inc @@ -367,13 +367,6 @@ function filter_admin_format_form_submit($form, &$form_state) { } $status = $format->save(); - // Save user permissions. - if ($permission = filter_permission_name($format)) { - foreach ($format->roles as $rid => $enabled) { - user_role_change_permissions($rid, array($permission => $enabled)); - } - } - switch ($status) { case SAVED_NEW: drupal_set_message(t('Added text format %format.', array('%format' => $format->name))); diff --git a/core/modules/filter/filter.install b/core/modules/filter/filter.install index b847cea..2e71901 100644 --- a/core/modules/filter/filter.install +++ b/core/modules/filter/filter.install @@ -62,10 +62,20 @@ function filter_update_8001() { ); } + // Find Roles that can use each text format. + $roles = db_query('SELECT rid, 1 + FROM {role_permission} + WHERE module = :module AND :permission = :permission', + array( + ':module' => 'filter', + ':permission' => 'use text format ' . $filter_format->format, + ))->fetchAllKeyed(); + // Save the config object. $config = array( 'format' => $filter_format->format, 'name' => $filter_format->name, + 'roles' => $roles, 'status' => $filter_format->status, 'weight' => $filter_format->weight, 'filters' => $filters 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 d2b0c1a..b497797 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 @@ -139,6 +139,13 @@ public function save() { $return = parent::save(); + // Save user permissions. + if ($permission = filter_permission_name($this)) { + foreach ($this->roles as $rid => $enabled) { + user_role_change_permissions($rid, array($permission => $enabled)); + } + } + if ($return == SAVED_UPDATED) { // Clear the filter cache whenever a text format is updated. cache('filter')->deleteTags(array('filter_format' => $format->format)); diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php index d2ef4ac..19040fc 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php @@ -26,6 +26,7 @@ public static function getInfo() { 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.roles.database.php', drupal_get_path('module', 'system') . '/tests/upgrade/drupal-7.filter_formats.database.php', ); parent::setUp(); @@ -43,10 +44,39 @@ public function testFilterFormatUpgrade() { $two = filter_format_load('format_two'); $this->assertTrue(!empty($two), 'Filter Format two was successfully upgraded'); - $three_null = filter_format_load('format_three'); + // Filter format 'Three' is disabled, and filter_format_load should return + // FALSE. However the entity should be accessible using entity_load. + $three_disabled = 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'); + $this->assertTrue(empty($three_disabled) && !empty($three_entity), 'Filter Format three was successfully upgraded and it is disabled'); + // Check the access to the text formats. + // Check that the anonymous user role ID has been converted from "1" to + // "anonymous" and text formats permissions were updated. + $this->drupalGet('admin/people/permissions/' . DRUPAL_ANONYMOUS_RID); + $this->assertFieldChecked('edit-anonymous-use-text-format-filter-one', 'Use text format filter_one permission for "gärtner" is set correctly.'); + $this->assertNoFieldChecked('edit-anonymous-use-text-format-filter-two', 'Use text format filter_two permission for "gärtner" is set correctly.'); + $this->assertNoFieldChecked('edit-anonymous-use-text-format-filter-three', 'Use text format filter_three permission for "gärtner" is set correctly.'); + + // Check that the anonymous user role ID has been converted from "2" to + // "authenticated" and text formats permissions were updated. + $this->drupalGet('admin/people/permissions/' . DRUPAL_AUTHENTICATED_RID); + $this->assertNoFieldChecked('edit-authenticated-use-text-format-filter-one', 'Use text format filter_one permission for "gärtner" is set correctly.'); + $this->assertFieldChecked('edit-authenticated-use-text-format-filter-two', 'Use text format filter_two permission for "gärtner" is set correctly.'); + $this->assertNoFieldChecked('edit-authenticated-use-text-format-filter-three', 'Use text format filter_three permission for "gärtner" is set correctly.'); + + // Check that the permission for "gärtner" still exists and text formats + // permissions were updated. + $this->drupalGet('admin/people/permissions/4'); + $this->assertFieldChecked('edit-4-use-text-format-filter-one', 'Use text format filter_one permission for "gärtner" is set correctly.'); + $this->assertNoFieldChecked('edit-4-use-text-format-filter-two', 'Use text format filter_two permission for "gärtner" is set correctly.'); + $this->assertNoFieldChecked('edit-4-use-text-format-filter-three', 'Use text format filter_three permission for "gärtner" is set correctly.'); + + // Check that role 5 cannot access to the defined text formats + $this->drupalGet('admin/people/permissions/5'); + $this->assertNoFieldChecked('edit-5-use-text-format-filter-one', 'Use text format filter_one permission for "gärtner" is set correctly.'); + $this->assertNoFieldChecked('edit-5-use-text-format-filter-two', 'Use text format filter_two permission for "gärtner" is set correctly.'); + $this->assertNoFieldChecked('edit-5-use-text-format-filter-three', 'Use text format filter_three permission for "gärtner" is set correctly.'); } } 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 index d3d6c4e..79f47b5 100644 --- a/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php +++ b/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php @@ -133,3 +133,32 @@ 'settings' => 'a:1:{s:17:"filter_url_length";s:2:"72";}', )) ->execute(); + +// Define which roles can use the text formats. +db_insert('role_permissions')->fields(array( + 'rid', + 'permission', + 'module', +)) +// Adds some filters formats +->values(array( + 'rid' => 1, + 'permission' => 'use text format filter_one', + 'module' => 'filter', +)) +->values(array( + 'rid' => 4, + 'permission' => 'use text format filter_one', + 'module' => 'filter', +)) +->values(array( + 'rid' => 2, + 'permission' => 'use text format filter_two', + 'module' => 'filter', +)) +->values(array( + 'rid' => 4, + 'permission' => 'use text format filter_three', + 'module' => 'filter', +)) +->execute();