Updated all the contrib modules to their latest versions.
[yaffs-website] / web / modules / contrib / metatag / metatag_views / src / Controller / MetatagViewsTranslationController.php
1 <?php
2
3 namespace Drupal\metatag_views\Controller;
4
5 use Drupal\Core\Controller\ControllerBase;
6 use Drupal\Core\Entity\EntityStorageInterface;
7 use Drupal\Core\Language\LanguageManagerInterface;
8 use Drupal\Core\Url;
9 use Drupal\metatag\MetatagManagerInterface;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
11
12 /**
13  * Translate Views meta tags.
14  */
15 class MetatagViewsTranslationController extends ControllerBase {
16
17   /**
18    * The View storage interface.
19    *
20    * @var \Drupal\Core\Entity\EntityStorageInterface
21    */
22   protected $viewStorage;
23
24   /**
25    * The Metatag manager.
26    *
27    * @var \Drupal\metatag\MetatagManagerInterface
28    */
29   protected $metatagManager;
30
31   /**
32    * The language manager.
33    *
34    * @var \Drupal\Core\Language\LanguageManagerInterface
35    */
36   protected $languageManager;
37
38   /**
39    * {@inheritdoc}
40    */
41   public function __construct(EntityStorageInterface $viewStorage, MetatagManagerInterface $metatagManager, LanguageManagerInterface $languageManager) {
42     $this->viewStorage = $viewStorage;
43     $this->metatagManager = $metatagManager;
44     $this->languageManager = $languageManager;
45   }
46
47   /**
48    * {@inheritdoc}
49    */
50   public static function create(ContainerInterface $container) {
51     return new static(
52       $container->get('entity_type.manager')->getStorage('view'),
53       $container->get('metatag.manager'),
54       $container->get('language_manager')
55     );
56   }
57
58   /**
59    * Language translations overview page for a views.
60    *
61    * @return array
62    *   Page render array.
63    */
64   public function itemPage() {
65     $view_id = \Drupal::request()->get('view_id');
66     $display_id = \Drupal::request()->get('display_id');
67
68     $view = $this->viewStorage->load($view_id);
69     $original_langcode = $view->language()->getId();
70
71     $config_name = $view->getConfigDependencyName();
72     $config_path = 'display.' . $display_id . '.display_options.display_extenders.metatag_display_extender.metatags';
73
74     $configuration = \Drupal::service('config.factory')->get($config_name);
75     $config_source = $configuration->getOriginal($config_path, FALSE);
76
77     $page['languages'] = [
78       '#type' => 'table',
79       '#header' => [$this->t('Language'), $this->t('Operations')],
80     ];
81
82     $languages = $this->languageManager->getLanguages();
83     foreach ($languages as $language) {
84       $langcode = $language->getId();
85       $language_name = $language->getName();
86       $operations = [];
87
88       // Prepare the language name and the operations depending on whether this
89       // is the original language or not.
90       if ($langcode == $original_langcode) {
91         $language_name = '<strong>' . $this->t('@language (original)', [
92           '@language' => $language_name,
93         ]) . '</strong>';
94
95         // Default language can only be edited, no add/delete.
96         $operations['edit'] = [
97           'title' => $this->t('Edit'),
98           'url' => Url::fromRoute('metatag_views.metatags.edit', [
99             'view_id' => $view_id,
100             'display_id' => $display_id,
101           ]),
102         ];
103       }
104       else {
105         // Get the metatag translation for this language.
106         $config_translation = $this->languageManager
107           ->getLanguageConfigOverride($langcode, $config_name)
108           ->get($config_path);
109
110         // If no translation exists for this language, link to add one.
111         if (!$config_translation || $config_translation == $config_source) {
112           $operations['add'] = [
113             'title' => $this->t('Add'),
114             'url' => Url::fromRoute('metatag_views.metatags.translate', [
115               'view_id' => $view_id,
116               'display_id' => $display_id,
117               'langcode' => $langcode,
118             ]),
119           ];
120         }
121         else {
122           // Otherwise, link to edit the existing translation.
123           $operations['edit'] = [
124             'title' => $this->t('Edit'),
125             'url' => Url::fromRoute('metatag_views.metatags.translate', [
126               'view_id' => $view_id,
127               'display_id' => $display_id,
128               'langcode' => $langcode,
129             ]),
130           ];
131           // @todo Operations delete.
132         }
133       }
134
135       $page['languages'][$langcode]['language'] = [
136         '#markup' => $language_name,
137       ];
138
139       $page['languages'][$langcode]['operations'] = [
140         '#type' => 'operations',
141         '#links' => $operations,
142         // Even if the mapper contains multiple language codes, the source
143         // configuration can still be edited.
144         // '#access' => ($langcode == $original_langcode) || $operations_access,
145       ];
146     }
147
148     return $page;
149   }
150
151 }