entityTypeManager = $entity_type_manager; $this->stringTranslation = $string_translation; $this->basePluginId = $base_plugin_id; $this->moderationInfo = $moderation_information; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, $base_plugin_id) { return new static( $base_plugin_id, $container->get('entity_type.manager'), $container->get('string_translation'), $container->get('content_moderation.moderation_information') ); } /** * {@inheritdoc} */ public function getDerivativeDefinitions($base_plugin_definition) { $this->derivatives = []; foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $entity_type) { if ($this->moderationInfo->canModerateEntitiesOfEntityType($entity_type)) { $bundle_id = $entity_type->getBundleEntityType(); $this->derivatives["$bundle_id.moderation_tab"] = [ 'route_name' => "entity.$bundle_id.moderation", 'title' => $this->t('Manage moderation'), // @todo - are we sure they all have an edit_form? 'base_route' => "entity.$bundle_id.edit_form", 'weight' => 30, ] + $base_plugin_definition; } } $latest_version_entities = array_filter($this->entityTypeManager->getDefinitions(), function (EntityTypeInterface $type) { return $this->moderationInfo->canModerateEntitiesOfEntityType($type) && $type->hasLinkTemplate('latest-version'); }); foreach ($latest_version_entities as $entity_type_id => $entity_type) { $this->derivatives["$entity_type_id.latest_version_tab"] = [ 'route_name' => "entity.$entity_type_id.latest_version", 'title' => $this->t('Latest version'), 'base_route' => "entity.$entity_type_id.canonical", 'weight' => 1, ] + $base_plugin_definition; } return $this->derivatives; } }