ContentModerationRouteSubscriber.php in Drupal 9
File
core/modules/content_moderation/src/Routing/ContentModerationRouteSubscriber.php
View source
<?php
namespace Drupal\content_moderation\Routing;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Routing\RouteSubscriberBase;
use Drupal\Core\Routing\RoutingEvents;
use Drupal\workflows\Entity\Workflow;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;
class ContentModerationRouteSubscriber extends RouteSubscriberBase {
protected $entityTypeManager;
protected $moderatedEntityTypes;
public function __construct(EntityTypeManagerInterface $entity_type_manager) {
$this->entityTypeManager = $entity_type_manager;
}
protected function alterRoutes(RouteCollection $collection) {
foreach ($collection as $route) {
$this
->setLatestRevisionFlag($route);
}
}
protected function setLatestRevisionFlag(Route $route) {
if (!($entity_form = $route
->getDefault('_entity_form'))) {
return;
}
list($entity_type) = explode('.', $entity_form, 2);
if (!isset($this
->getModeratedEntityTypes()[$entity_type]) || !$this
->getModeratedEntityTypes()[$entity_type]
->isRevisionable()) {
return;
}
$parameters = $route
->getOption('parameters') ?: [];
foreach ($parameters as &$parameter) {
if (isset($parameter['type']) && $parameter['type'] === 'entity:' . $entity_type && !isset($parameter['load_latest_revision'])) {
$parameter['load_latest_revision'] = TRUE;
}
}
$route
->setOption('parameters', $parameters);
}
protected function getModeratedEntityTypes() {
if (!isset($this->moderatedEntityTypes)) {
$entity_types = $this->entityTypeManager
->getDefinitions();
foreach (Workflow::loadMultipleByType('content_moderation') as $workflow) {
$plugin = $workflow
->getTypePlugin();
foreach ($plugin
->getEntityTypes() as $entity_type_id) {
$this->moderatedEntityTypes[$entity_type_id] = $entity_types[$entity_type_id];
}
}
}
return $this->moderatedEntityTypes;
}
public static function getSubscribedEvents() {
$events = parent::getSubscribedEvents();
$events[RoutingEvents::ALTER] = [
'onAlterRoutes',
-200,
];
return $events;
}
}