diff --git a/core/modules/filter/lib/Drupal/filter/FilterFormatAccessController.php b/core/modules/filter/lib/Drupal/filter/FilterFormatAccessController.php new file mode 100644 index 00000000000..133c309201d --- /dev/null +++ b/core/modules/filter/lib/Drupal/filter/FilterFormatAccessController.php @@ -0,0 +1,39 @@ +isFallbackFormat()) { + return TRUE; + } + + if (user_access('administer filters', $account)) { + return TRUE; + } + + // Check the permission if one exists; otherwise, we have a non-existent + // format so we return FALSE. + $permission = filter_permission_name($entity); + return !empty($permission) && user_access($permission, $account); + } + +} diff --git a/core/modules/filter/lib/Drupal/filter/FilterFormatListController.php b/core/modules/filter/lib/Drupal/filter/FilterFormatListController.php index 8c6571f51f7..164a9eae75f 100644 --- a/core/modules/filter/lib/Drupal/filter/FilterFormatListController.php +++ b/core/modules/filter/lib/Drupal/filter/FilterFormatListController.php @@ -143,7 +143,9 @@ class FilterFormatListController extends ConfigEntityListController implements F public function getOperations(EntityInterface $entity) { $operations = parent::getOperations($entity); - $operations['edit']['title'] = t('Configure'); + if (isset($operations['edit'])) { + $operations['edit']['title'] = t('Configure'); + } // The fallback format may not be disabled. if ($entity->isFallbackFormat()) { 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 3effab31e0a..a853bb6c582 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 @@ -28,6 +28,7 @@ use Drupal\filter\FilterBag; * "disable" = "Drupal\filter\Form\FilterDisableForm" * }, * "list" = "Drupal\filter\FilterFormatListController", + * "access" = "Drupal\filter\FilterFormatAccessController", * "storage" = "Drupal\Core\Config\Entity\ConfigStorageController" * }, * config_prefix = "filter.format", diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php index 35af5e11627..c2bcd47d99b 100644 --- a/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php +++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php @@ -76,7 +76,16 @@ class FilterAdminTest extends WebTestBase { // Edit text format. $this->drupalGet('admin/config/content/formats'); - $this->assertLinkByHref('admin/config/content/formats/manage/' . $format_id); + // Cannot use the assertNoLinkByHref method as it does partial url matching + // and 'admin/config/content/formats/manage/' . $format_id . '/disable' + // exists. + // @todo: See https://drupal.org/node/2031223 for the above + $edit_link = $this->xpath('//a[@href=:href]', array( + ':href' => url('admin/config/content/formats/manage/' . $format_id) + )); + $this->assertTrue($edit_link, format_string('Link href %href found.', + array('%href' => 'admin/config/content/formats/manage/' . $format_id) + )); $this->drupalGet('admin/config/content/formats/manage/' . $format_id); $this->drupalPost(NULL, array(), t('Save configuration'));