setType($plugin_definition['entity_type']); $this->entityTypeManager = $entity_type_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { // Note that we ignore the plugin $configuration because mappers have // nothing to configure in themselves. return new static( $plugin_id, $plugin_definition, $container->get('config.factory'), $container->get('config.typed'), $container->get('locale.config_manager'), $container->get('plugin.manager.config_translation.mapper'), $container->get('router.route_provider'), $container->get('string_translation'), $container->get('entity_type.manager'), $container->get('language_manager'), $container->get('event_dispatcher') ); } /** * {@inheritdoc} */ public function populateFromRouteMatch(RouteMatchInterface $route_match) { $entity = $route_match->getParameter($this->entityType); $this->setEntity($entity); parent::populateFromRouteMatch($route_match); } /** * {@inheritdoc} */ public function getEntity() { return $this->entity; } /** * {@inheritdoc} */ public function setEntity(ConfigEntityInterface $entity) { if (isset($this->entity)) { return FALSE; } $this->entity = $entity; // Add the list of configuration IDs belonging to this entity. We add on a // possibly existing list of names. This allows modules to alter the entity // page with more names if form altering added more configuration to an // entity. This is not a Drupal 8 best practice (ideally the configuration // would have pluggable components), but this may happen as well. /** @var \Drupal\Core\Config\Entity\ConfigEntityTypeInterface $entity_type_info */ $entity_type_info = $this->entityTypeManager->getDefinition($this->entityType); $this->addConfigName($entity_type_info->getConfigPrefix() . '.' . $entity->id()); return TRUE; } /** * {@inheritdoc} */ public function getTitle() { return $this->entity->label() . ' ' . $this->pluginDefinition['title']; } /** * {@inheritdoc} */ public function getBaseRouteParameters() { return [$this->entityType => $this->entity->id()]; } /** * {@inheritdoc} */ public function setType(string $entity_type_id): bool { if (isset($this->entityType)) { return FALSE; } $this->entityType = $entity_type_id; return TRUE; } /** * {@inheritdoc} */ public function getType(): string { return $this->entityType; } /** * {@inheritdoc} */ public function getTypeName() { $entity_type_info = $this->entityTypeManager->getDefinition($this->entityType); return $entity_type_info->getLabel(); } /** * {@inheritdoc} */ public function getTypeLabel() { $entityType = $this->entityTypeManager->getDefinition($this->entityType); return $entityType->getLabel(); } /** * {@inheritdoc} */ public function getOperations() { return [ 'list' => [ 'title' => $this->t('List'), 'url' => Url::fromRoute('config_translation.entity_list', [ 'mapper_id' => $this->getPluginId(), ]), ], ]; } /** * {@inheritdoc} */ public function getContextualLinkGroup() { // @todo Contextual groups do not map to entity types in a predictable // way. See https://www.drupal.org/node/2134841 to make them predictable. switch ($this->entityType) { case 'menu': case 'block': return $this->entityType; case 'view': return 'entity.view.edit_form'; default: return NULL; } } /** * {@inheritdoc} */ public function getOverviewRouteName() { return 'entity.' . $this->entityType . '.config_translation_overview'; } /** * {@inheritdoc} */ protected function processRoute(Route $route) { // Add entity upcasting information. $parameters = $route->getOption('parameters') ?: []; $parameters += [ $this->entityType => [ 'type' => 'entity:' . $this->entityType, ], ]; $route->setOption('parameters', $parameters); } }