Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / modules / layout_builder / src / Context / LayoutBuilderContextTrait.php
diff --git a/web/core/modules/layout_builder/src/Context/LayoutBuilderContextTrait.php b/web/core/modules/layout_builder/src/Context/LayoutBuilderContextTrait.php
new file mode 100644 (file)
index 0000000..3c16332
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+namespace Drupal\layout_builder\Context;
+
+use Drupal\Core\Plugin\Context\ContextInterface;
+use Drupal\layout_builder\SectionStorageInterface;
+
+/**
+ * Provides a wrapper around getting contexts from a section storage object.
+ */
+trait LayoutBuilderContextTrait {
+
+  /**
+   * The context repository.
+   *
+   * @var \Drupal\Core\Plugin\Context\ContextRepositoryInterface
+   */
+  protected $contextRepository;
+
+  /**
+   * Gets the context repository service.
+   *
+   * @return \Drupal\Core\Plugin\Context\ContextRepositoryInterface
+   *   The context repository service.
+   */
+  protected function contextRepository() {
+    if (!$this->contextRepository) {
+      $this->contextRepository = \Drupal::service('context.repository');
+    }
+    return $this->contextRepository;
+  }
+
+  /**
+   * Provides all available contexts, both global and section_storage-specific.
+   *
+   * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
+   *   The section storage.
+   *
+   * @return \Drupal\Core\Plugin\Context\ContextInterface[]
+   *   The array of context objects.
+   */
+  protected function getAvailableContexts(SectionStorageInterface $section_storage) {
+    // Get all globally available contexts that have a defined value.
+    $contexts = array_filter($this->contextRepository()->getAvailableContexts(), function (ContextInterface $context) {
+      return $context->hasContextValue();
+    });
+
+    // Add in the per-section_storage contexts.
+    $contexts += $section_storage->getContexts();
+    return $contexts;
+  }
+
+}