From 3a98570a6e07f0c100a62393951c45694a13c1b2 Mon Sep 17 00:00:00 2001
From: Daniel Karso <daniel@netbuffer.com>
Date: Tue, 19 Jul 2016 12:13:21 +0200
Subject: [PATCH] [MODULE] #SPY-122 Implemented language interface context for
 the page manager so we can select the language interface condition for page
 variants. https://www.drupal.org/node/2765587

---
 .../contrib/page_manager/page_manager.services.yml |  5 ++
 .../EventSubscriber/LanguageInterfaceContext.php   | 56 ++++++++++++++++++++++
 2 files changed, 61 insertions(+)
 create mode 100644 modules/contrib/page_manager/src/EventSubscriber/LanguageInterfaceContext.php

diff --git a/modules/contrib/page_manager/page_manager.services.yml b/modules/contrib/page_manager/page_manager.services.yml
index 43f99ab..200209c 100644
--- a/modules/contrib/page_manager/page_manager.services.yml
+++ b/modules/contrib/page_manager/page_manager.services.yml
@@ -9,6 +9,11 @@ services:
     arguments: ['@router.route_provider', '@request_stack']
     tags:
       - { name: 'event_subscriber' }
+  page_manager.language_interface_context:
+    class: Drupal\page_manager\EventSubscriber\LanguageInterfaceContext
+    arguments: ['@context.repository']
+    tags:
+      - { name: 'event_subscriber' }
   page_manager.context_mapper:
     class: Drupal\page_manager\ContextMapper
     arguments: ['@entity.repository']
diff --git a/modules/contrib/page_manager/src/EventSubscriber/LanguageInterfaceContext.php b/modules/contrib/page_manager/src/EventSubscriber/LanguageInterfaceContext.php
new file mode 100644
index 0000000..df800da
--- /dev/null
+++ b/modules/contrib/page_manager/src/EventSubscriber/LanguageInterfaceContext.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\page_manager\EventSubscriber\LanguageInterfaceContext.
+ */
+
+namespace Drupal\page_manager\EventSubscriber;
+
+use Drupal\Core\Cache\CacheableMetadata;
+use Drupal\Core\Plugin\Context\ContextRepositoryInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\page_manager\Event\PageManagerContextEvent;
+use Drupal\page_manager\Event\PageManagerEvents;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Sets the current language as a context.
+ */
+class LanguageInterfaceContext implements EventSubscriberInterface {
+
+  use StringTranslationTrait;
+
+  /**
+   * @var \Drupal\Core\Plugin\Context\ContextRepositoryInterface
+   */
+  protected $context_repository;
+
+  public function __construct(ContextRepositoryInterface $context_repository) {
+    $this->context_repository = $context_repository;
+  }
+
+  /**
+   * Add the language_interface context onPageContext event.
+   *
+   * @param \Drupal\page_manager\Event\PageManagerContextEvent $event
+   *   The page entity context event.
+   */
+  public function onPageContext(PageManagerContextEvent $event) {
+    $contexts = $this->context_repository->getRuntimeContexts(array('@language.current_language_context:language_interface'));
+    $context = reset($contexts);
+    $cacheability = new CacheableMetadata();
+    $cacheability->setCacheContexts(['languages:language_interface']);
+    $context->addCacheableDependency($cacheability);
+    $event->getPage()->addContext('language_interface', $context);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    $events[PageManagerEvents::PAGE_CONTEXT][] = 'onPageContext';
+    return $events;
+  }
+
+}
-- 
2.8.1

