3 namespace Drupal\metatag_views\Controller;
5 use Drupal\Core\Controller\ControllerBase;
6 use Drupal\Core\Entity\EntityStorageInterface;
7 use Drupal\Core\Language\LanguageManagerInterface;
9 use Drupal\metatag\MetatagManagerInterface;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
13 * Translate Views meta tags.
15 class MetatagViewsTranslationController extends ControllerBase {
18 * The View storage interface.
20 * @var \Drupal\Core\Entity\EntityStorageInterface
22 protected $viewStorage;
25 * The Metatag manager.
27 * @var \Drupal\metatag\MetatagManagerInterface
29 protected $metatagManager;
32 * The language manager.
34 * @var \Drupal\Core\Language\LanguageManagerInterface
36 protected $languageManager;
41 public function __construct(EntityStorageInterface $viewStorage, MetatagManagerInterface $metatagManager, LanguageManagerInterface $languageManager) {
42 $this->viewStorage = $viewStorage;
43 $this->metatagManager = $metatagManager;
44 $this->languageManager = $languageManager;
50 public static function create(ContainerInterface $container) {
52 $container->get('entity_type.manager')->getStorage('view'),
53 $container->get('metatag.manager'),
54 $container->get('language_manager')
59 * Language translations overview page for a views.
64 public function itemPage() {
65 $view_id = \Drupal::request()->get('view_id');
66 $display_id = \Drupal::request()->get('display_id');
68 $view = $this->viewStorage->load($view_id);
69 $original_langcode = $view->language()->getId();
71 $config_name = $view->getConfigDependencyName();
72 $config_path = 'display.' . $display_id . '.display_options.display_extenders.metatag_display_extender.metatags';
74 $configuration = \Drupal::service('config.factory')->get($config_name);
75 $config_source = $configuration->getOriginal($config_path, FALSE);
77 $page['languages'] = [
79 '#header' => [$this->t('Language'), $this->t('Operations')],
82 $languages = $this->languageManager->getLanguages();
83 foreach ($languages as $language) {
84 $langcode = $language->getId();
85 $language_name = $language->getName();
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,
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,
105 // Get the metatag translation for this language.
106 $config_translation = $this->languageManager
107 ->getLanguageConfigOverride($langcode, $config_name)
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,
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,
131 // @todo Operations delete.
135 $page['languages'][$langcode]['language'] = [
136 '#markup' => $language_name,
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,