From 163d8ead938535ceca926b4dc4280077a82f9f1e Mon Sep 17 00:00:00 2001
From: Daniel Karso <daniel@netbuffer.com>
Date: Thu, 21 Jul 2016 17:04:22 +0200
Subject: [PATCH] Issue #2770653 by dkarso, LaravZ: Add current
 language_interface context for language condition.

---
 page_manager.services.yml                        |  5 ++
 src/EventSubscriber/LanguageInterfaceContext.php | 62 ++++++++++++++++++++++++
 2 files changed, 67 insertions(+)
 create mode 100644 src/EventSubscriber/LanguageInterfaceContext.php

diff --git a/page_manager.services.yml b/page_manager.services.yml
index 43f99ab..200209c 100644
--- a/page_manager.services.yml
+++ b/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/src/EventSubscriber/LanguageInterfaceContext.php b/src/EventSubscriber/LanguageInterfaceContext.php
new file mode 100644
index 0000000..73e9cf0
--- /dev/null
+++ b/src/EventSubscriber/LanguageInterfaceContext.php
@@ -0,0 +1,62 @@
+<?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_interface as a context.
+ */
+class LanguageInterfaceContext implements EventSubscriberInterface {
+
+  use StringTranslationTrait;
+
+  /**
+   * @var \Drupal\Core\Plugin\Context\ContextRepositoryInterface
+   */
+  protected $context_repository;
+
+  /**
+   * LanguageInterfaceContext constructor.
+   *
+   * @param \Drupal\Core\Plugin\Context\ContextRepositoryInterface $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

