From fd8e85a6f4cc223aaf3ec1ab465b436084d2fc36 Mon Sep 17 00:00:00 2001
From: Dieter Holvoet <dieter.holvoet@gmail.com>
Date: Tue, 14 Jan 2025 11:31:09 +0100
Subject: [PATCH] Add 3347301.patch

---
 entityqueue.routing.yml                    | 28 +++++++---------------
 src/Controller/EntityQueueUIController.php | 24 +++++++++++++++++++
 src/Entity/EntityQueue.php                 |  6 ++++-
 3 files changed, 37 insertions(+), 21 deletions(-)

diff --git a/entityqueue.routing.yml b/entityqueue.routing.yml
index 8d23d84..5936ca3 100644
--- a/entityqueue.routing.yml
+++ b/entityqueue.routing.yml
@@ -6,29 +6,17 @@ entity.entity_queue.collection:
   requirements:
     _permission: 'administer entityqueue+manipulate entityqueues+manipulate all entityqueues'
 
-entity.entity_queue.add_form:
-  path: '/admin/structure/entityqueue/add'
-  defaults:
-    _entity_form: 'entity_queue.add'
-    _title: 'Add Entity Queue'
-  requirements:
-    _permission: 'administer entityqueue'
-
-entity.entity_queue.edit_form:
+entity.entity_queue.canonical:
   path: '/admin/structure/entityqueue/{entity_queue}'
   defaults:
-    _entity_form: 'entity_queue.edit'
-    _title: 'Edit Entity Queue'
-  requirements:
-    _permission: 'administer entityqueue'
-
-entity.entity_queue.delete_form:
-  path: '/admin/structure/entityqueue/{entity_queue}/delete'
-  defaults:
-    _entity_form: 'entity_queue.delete'
-    _title: 'Delete Entity Queue'
+    _controller: '\Drupal\entityqueue\Controller\EntityQueueUIController::queueCanonicalRedirect'
+    _title_callback: '\Drupal\Core\Entity\Controller\EntityController::title'
+  options:
+    parameters:
+      entity_queue:
+        type: entity:entity_queue
   requirements:
-    _permission: 'administer entityqueue'
+    _entity_access: entity_queue.update
 
 entity.entity_queue.enable:
   path: '/admin/structure/entityqueue/{entity_queue}/enable'
diff --git a/src/Controller/EntityQueueUIController.php b/src/Controller/EntityQueueUIController.php
index 5fbedea..f9f7cc7 100644
--- a/src/Controller/EntityQueueUIController.php
+++ b/src/Controller/EntityQueueUIController.php
@@ -9,12 +9,14 @@ use Drupal\Core\Ajax\ReplaceCommand;
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Routing\RouteMatch;
+use Drupal\entityqueue\Entity\EntitySubqueue;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Url;
 use Drupal\entityqueue\EntityQueueInterface;
 use Drupal\entityqueue\EntityQueueRepositoryInterface;
 use Drupal\entityqueue\EntitySubqueueInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Request;
 
 /**
@@ -44,6 +46,28 @@ class EntityQueueUIController extends ControllerBase {
     );
   }
 
+  /**
+   * Redirects to the canonical URL of an entity queue.
+   *
+   * @param \Drupal\entityqueue\EntityQueueInterface $entity_queue
+   *   The entity queue.
+   *
+   * @return \Symfony\Component\HttpFoundation\RedirectResponse
+   *   A redirect response object.
+   */
+  public function queueCanonicalRedirect(EntityQueueInterface $entity_queue) {
+    $handler = $entity_queue->getHandlerPlugin();
+    if ($handler->supportsMultipleSubqueues()) {
+      $url = $entity_queue->toUrl('subqueue-list');
+    }
+    else {
+      $subqueue = EntitySubqueue::load($entity_queue->id());
+      $url = $subqueue->toUrl('edit-form');
+    }
+
+    return new RedirectResponse($url->toString());
+  }
+
   /**
    * Provides a list of all the subqueues of an entity queue.
    *
diff --git a/src/Entity/EntityQueue.php b/src/Entity/EntityQueue.php
index 7cb871d..5b7b22f 100644
--- a/src/Entity/EntityQueue.php
+++ b/src/Entity/EntityQueue.php
@@ -24,6 +24,9 @@ use Drupal\entityqueue\EntityQueueInterface;
  *       "delete" = "Drupal\Core\Entity\EntityDeleteForm"
  *     },
  *     "access" = "Drupal\entityqueue\EntityQueueAccessControlHandler",
+ *     "route_provider" = {
+ *       "html" = "\Drupal\Core\Entity\Routing\AdminHtmlRouteProvider",
+ *     },
  *   },
  *   admin_permission = "administer entityqueue",
  *   config_prefix = "entity_queue",
@@ -35,7 +38,8 @@ use Drupal\entityqueue\EntityQueueInterface;
  *     "status" = "status"
  *   },
  *   links = {
- *     "edit-form" = "/admin/structure/entityqueue/{entity_queue}",
+ *     "add-form" = "/admin/structure/entityqueue/add",
+ *     "edit-form" = "/admin/structure/entityqueue/{entity_queue}/edit",
  *     "delete-form" = "/admin/structure/entityqueue/{entity_queue}/delete",
  *     "collection" = "/admin/structure/entityqueue",
  *     "enable" = "/admin/structure/entityqueue/{entity_queue}/enable",
-- 
GitLab