From cd2719948a9a24b4035207789c6f99470ddd6565 Mon Sep 17 00:00:00 2001 From: Ted Cooper <12728-elc@users.noreply.drupalcode.org> Date: Sat, 20 Jan 2024 15:28:20 +0000 Subject: [PATCH] Issue #3412310 by ELC, zengenuity: Setting symfony_mailer_lite.settings.default_transport not guaranteed to be set --- src/Entity/Transport.php | 3 ++- src/TransportAccessControlHandler.php | 28 +++++++++++++++++++++++++++ src/TransportListBuilder.php | 7 ++----- 3 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 src/TransportAccessControlHandler.php diff --git a/src/Entity/Transport.php b/src/Entity/Transport.php index c1d176c..c41e647 100644 --- a/src/Entity/Transport.php +++ b/src/Entity/Transport.php @@ -19,7 +19,8 @@ use Drupal\symfony_mailer_lite\TransportInterface; * "edit" = "Drupal\symfony_mailer_lite\Form\TransportForm", * "add" = "Drupal\symfony_mailer_lite\Form\TransportAddForm", * "delete" = "Drupal\Core\Entity\EntityDeleteForm" - * } + * }, + * "access" = "Drupal\symfony_mailer_lite\TransportAccessControlHandler", * }, * admin_permission = "administer symfony_mailer_lite configuration", * entity_keys = { diff --git a/src/TransportAccessControlHandler.php b/src/TransportAccessControlHandler.php new file mode 100644 index 0000000..a8b32a3 --- /dev/null +++ b/src/TransportAccessControlHandler.php @@ -0,0 +1,28 @@ +<?php + +namespace Drupal\symfony_mailer_lite; + +use Drupal\Core\Access\AccessResult; +use Drupal\Core\Entity\EntityAccessControlHandler; +use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Session\AccountInterface; + +class TransportAccessControlHandler extends EntityAccessControlHandler { + + /** + * {@inheritdoc} + */ + protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { + $parentAccess = parent::checkAccess($entity, $operation, $account); + + switch ($operation) { + case 'delete': + return AccessResult::allowedIfHasPermission($account, 'administer symfony_mailer_lite configuration') + ->andIf(AccessResult::allowedIf(!$entity->isDefault())) + ->andIf($parentAccess); + } + + return $parentAccess; + } + +} diff --git a/src/TransportListBuilder.php b/src/TransportListBuilder.php index fc09af6..9058f01 100644 --- a/src/TransportListBuilder.php +++ b/src/TransportListBuilder.php @@ -77,11 +77,8 @@ class TransportListBuilder extends ConfigEntityListBuilder { public function getDefaultOperations(EntityInterface $entity) { $operations = parent::getDefaultOperations($entity); - // Prevent the default transport being deleted. - if ($entity->isDefault()) { - unset($operations['delete']); - } - else { + // Add op to set default to all non-default transports. + if (!$entity->isDefault()) { $operations['default'] = [ 'title' => $this->t('Set as default'), 'url' => Url::fromRoute('entity.symfony_mailer_lite_transport.set_default', [ -- GitLab