7ff1fa5da5787043aa96f0616fc7af6c0dd49f05
[yaffs-website] / web / core / modules / content_moderation / src / Plugin / Derivative / DynamicLocalTasks.php
1 <?php
2
3 namespace Drupal\content_moderation\Plugin\Derivative;
4
5 use Drupal\Component\Plugin\Derivative\DeriverBase;
6 use Drupal\content_moderation\ModerationInformationInterface;
7 use Drupal\Core\Entity\EntityTypeInterface;
8 use Drupal\Core\Entity\EntityTypeManagerInterface;
9 use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
10 use Drupal\Core\StringTranslation\StringTranslationTrait;
11 use Drupal\Core\StringTranslation\TranslationInterface;
12 use Symfony\Component\DependencyInjection\ContainerInterface;
13
14 /**
15  * Generates moderation-related local tasks.
16  */
17 class DynamicLocalTasks extends DeriverBase implements ContainerDeriverInterface {
18
19   use StringTranslationTrait;
20
21   /**
22    * The base plugin ID.
23    *
24    * @var string
25    */
26   protected $basePluginId;
27
28   /**
29    * The entity type manager.
30    *
31    * @var \Drupal\Core\Entity\EntityTypeManagerInterface
32    */
33   protected $entityTypeManager;
34
35   /**
36    * The moderation information service.
37    *
38    * @var \Drupal\content_moderation\ModerationInformationInterface
39    */
40   protected $moderationInfo;
41
42   /**
43    * Creates an FieldUiLocalTask object.
44    *
45    * @param string $base_plugin_id
46    *   The base plugin ID.
47    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
48    *   The entity type manager.
49    * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
50    *   The translation manager.
51    * @param \Drupal\content_moderation\ModerationInformationInterface $moderation_information
52    *   The moderation information service.
53    */
54   public function __construct($base_plugin_id, EntityTypeManagerInterface $entity_type_manager, TranslationInterface $string_translation, ModerationInformationInterface $moderation_information) {
55     $this->entityTypeManager = $entity_type_manager;
56     $this->stringTranslation = $string_translation;
57     $this->basePluginId = $base_plugin_id;
58     $this->moderationInfo = $moderation_information;
59   }
60
61   /**
62    * {@inheritdoc}
63    */
64   public static function create(ContainerInterface $container, $base_plugin_id) {
65     return new static(
66       $base_plugin_id,
67       $container->get('entity_type.manager'),
68       $container->get('string_translation'),
69       $container->get('content_moderation.moderation_information')
70     );
71   }
72
73   /**
74    * {@inheritdoc}
75    */
76   public function getDerivativeDefinitions($base_plugin_definition) {
77     $this->derivatives = [];
78
79     foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $entity_type) {
80       if ($this->moderationInfo->canModerateEntitiesOfEntityType($entity_type)) {
81         $bundle_id = $entity_type->getBundleEntityType();
82         $this->derivatives["$bundle_id.moderation_tab"] = [
83           'route_name' => "entity.$bundle_id.moderation",
84           'title' => $this->t('Manage moderation'),
85           // @todo - are we sure they all have an edit_form?
86           'base_route' => "entity.$bundle_id.edit_form",
87           'weight' => 30,
88         ] + $base_plugin_definition;
89       }
90     }
91
92     $latest_version_entities = array_filter($this->entityTypeManager->getDefinitions(), function (EntityTypeInterface $type) {
93       return $this->moderationInfo->canModerateEntitiesOfEntityType($type) && $type->hasLinkTemplate('latest-version');
94     });
95
96     foreach ($latest_version_entities as $entity_type_id => $entity_type) {
97       $this->derivatives["$entity_type_id.latest_version_tab"] = [
98         'route_name' => "entity.$entity_type_id.latest_version",
99         'title' => $this->t('Latest version'),
100         'base_route' => "entity.$entity_type_id.canonical",
101         'weight' => 1,
102       ] + $base_plugin_definition;
103     }
104
105     return $this->derivatives;
106   }
107
108 }