3 namespace Drupal\metatag_views\Controller;
5 use Drupal\Core\Controller\ControllerBase;
6 use Drupal\Core\Entity\EntityStorageInterface;
7 use Drupal\Core\Entity\EntityTypeManagerInterface;
8 use Drupal\Core\Language\Language;
9 use Drupal\Core\Language\LanguageManagerInterface;
11 use Drupal\metatag\MetatagManagerInterface;
12 use Symfony\Component\DependencyInjection\ContainerInterface;
14 class MetatagViewsTranslationController extends ControllerBase {
17 /** @var EntityStorageInterface */
18 protected $viewStorage;
20 /** @var MetatagManagerInterface */
21 protected $metatagManager;
24 * The language manager.
26 * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
28 protected $languageManager;
32 * MetatagViewsTranslationController constructor.
34 * @param EntityStorageInterface $viewStorage
35 * @param MetatagManagerInterface $metatagManager
36 * @param LanguageManagerInterface $languageManager
38 public function __construct(EntityStorageInterface $viewStorage, MetatagManagerInterface $metatagManager, LanguageManagerInterface $languageManager) {
39 $this->viewStorage = $viewStorage;
40 $this->metatagManager = $metatagManager;
41 $this->languageManager = $languageManager;
47 public static function create(ContainerInterface $container) {
49 $container->get('entity_type.manager')->getStorage('view'),
50 $container->get('metatag.manager'),
51 $container->get('language_manager')
56 * Language translations overview page for a views.
61 public function itemPage() {
62 $view_id = \Drupal::request()->get('view_id');
63 $display_id = \Drupal::request()->get('display_id');
65 $view = $this->viewStorage->load($view_id);
66 $original_langcode = $view->language()->getId();
68 $config_name = $view->getConfigDependencyName();
69 $config_path = 'display.' . $display_id . '.display_options.display_extenders.metatag_display_extender.metatags';
71 $access_manager = \Drupal::service('access_manager');
72 $configuration = \Drupal::service('config.factory')->get($config_name);
73 $config_source = $configuration->getOriginal($config_path, FALSE);
75 $page['languages'] = [
77 '#header' => [$this->t('Language'), $this->t('Operations')],
80 $languages = $this->languageManager->getLanguages();
81 foreach ($languages as $language) {
82 $langcode = $language->getId();
83 $language_name = $language->getName();
86 // Prepare the language name and the operations depending on whether this
87 // is the original language or not.
88 if ($langcode == $original_langcode) {
89 $language_name = '<strong>' . $this->t('@language (original)', [
90 '@language' => $language_name,
93 // Default language can only be edited, no add/delete.
94 $operations['edit'] = [
95 'title' => $this->t('Edit'),
96 'url' => Url::fromRoute('metatag_views.metatags.edit', [
97 'view_id' => $view_id,
98 'display_id' => $display_id,
103 // Get the metatag translation for this language.
104 $config_translation = $this->languageManager
105 ->getLanguageConfigOverride($langcode, $config_name)
108 // If no translation exists for this language, link to add one.
109 if (!$config_translation || $config_translation == $config_source) {
110 $operations['add'] = [
111 'title' => $this->t('Add'),
112 'url' => Url::fromRoute('metatag_views.metatags.translate', [
113 'view_id' => $view_id,
114 'display_id' => $display_id,
115 'langcode' => $langcode,
120 // Otherwise, link to edit the existing translation.
121 $operations['edit'] = [
122 'title' => $this->t('Edit'),
123 'url' => Url::fromRoute('metatag_views.metatags.translate', [
124 'view_id' => $view_id,
125 'display_id' => $display_id,
126 'langcode' => $langcode,
129 // @todo: operations delete.
133 $page['languages'][$langcode]['language'] = [
134 '#markup' => $language_name,
137 $page['languages'][$langcode]['operations'] = [
138 '#type' => 'operations',
139 '#links' => $operations,
140 // Even if the mapper contains multiple language codes, the source
141 // configuration can still be edited.
142 // '#access' => ($langcode == $original_langcode) || $operations_access,