Yaffs site version 1.1
[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\Entity\EntityTypeManagerInterface;
8 use Drupal\Core\Language\Language;
9 use Drupal\Core\Language\LanguageManagerInterface;
10 use Drupal\Core\Url;
11 use Drupal\metatag\MetatagManagerInterface;
12 use Symfony\Component\DependencyInjection\ContainerInterface;
13
14 class MetatagViewsTranslationController extends ControllerBase {
15
16
17   /** @var EntityStorageInterface  */
18   protected $viewStorage;
19
20   /** @var MetatagManagerInterface */
21   protected $metatagManager;
22
23   /**
24    * The language manager.
25    *
26    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
27    */
28   protected $languageManager;
29
30
31   /**
32    * MetatagViewsTranslationController constructor.
33    *
34    * @param EntityStorageInterface $viewStorage
35    * @param MetatagManagerInterface $metatagManager
36    * @param LanguageManagerInterface $languageManager
37    */
38   public function __construct(EntityStorageInterface $viewStorage, MetatagManagerInterface $metatagManager, LanguageManagerInterface $languageManager) {
39     $this->viewStorage = $viewStorage;
40     $this->metatagManager = $metatagManager;
41     $this->languageManager = $languageManager;
42   }
43
44   /**
45    * {@inheritdoc}
46    */
47   public static function create(ContainerInterface $container) {
48     return new static(
49       $container->get('entity_type.manager')->getStorage('view'),
50       $container->get('metatag.manager'),
51       $container->get('language_manager')
52     );
53   }
54
55   /**
56    * Language translations overview page for a views.
57    *
58    * @return array
59    *   Page render array.
60    */
61   public function itemPage() {
62     $view_id = \Drupal::request()->get('view_id');
63     $display_id = \Drupal::request()->get('display_id');
64
65     $view = $this->viewStorage->load($view_id);
66     $original_langcode = $view->language()->getId();
67
68     $config_name = $view->getConfigDependencyName();
69     $config_path = 'display.' . $display_id . '.display_options.display_extenders.metatag_display_extender.metatags';
70
71     $access_manager = \Drupal::service('access_manager');
72     $configuration = \Drupal::service('config.factory')->get($config_name);
73     $config_source = $configuration->getOriginal($config_path, FALSE);
74
75     $page['languages'] = [
76       '#type' => 'table',
77       '#header' => [$this->t('Language'), $this->t('Operations')],
78     ];
79
80     $languages = $this->languageManager->getLanguages();
81     foreach ($languages as $language) {
82       $langcode = $language->getId();
83       $language_name = $language->getName();
84       $operations = [];
85
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,
91         ]) . '</strong>';
92
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,
99           ]),
100         ];
101       }
102       else {
103         // Get the metatag translation for this language.
104         $config_translation = $this->languageManager
105           ->getLanguageConfigOverride($langcode, $config_name)
106           ->get($config_path);
107
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,
116             ]),
117           ];
118         }
119         else {
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,
127             ]),
128           ];
129           // @todo: operations delete.
130         }
131       }
132
133       $page['languages'][$langcode]['language'] = [
134         '#markup' => $language_name,
135       ];
136
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,
143       ];
144     }
145
146     return $page;
147   }
148 }