Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / layout_builder / src / LayoutEntityHelperTrait.php
diff --git a/web/core/modules/layout_builder/src/LayoutEntityHelperTrait.php b/web/core/modules/layout_builder/src/LayoutEntityHelperTrait.php
new file mode 100644 (file)
index 0000000..9124027
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+namespace Drupal\layout_builder;
+
+use Drupal\Component\Plugin\DerivativeInspectionInterface;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\layout_builder\Entity\LayoutEntityDisplayInterface;
+
+/**
+ * Methods to help with entities using the layout builder.
+ *
+ * @internal
+ */
+trait LayoutEntityHelperTrait {
+
+  /**
+   * Determines if an entity can have a layout.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity to check.
+   *
+   * @return bool
+   *   TRUE if the entity can have a layout otherwise FALSE.
+   */
+  protected function isLayoutCompatibleEntity(EntityInterface $entity) {
+    return $entity instanceof LayoutEntityDisplayInterface || $this->isEntityUsingFieldOverride($entity);
+  }
+
+  /**
+   * Gets revision IDs for layout sections.
+   *
+   * @param \Drupal\layout_builder\Section[] $sections
+   *   The layout sections.
+   *
+   * @return int[]
+   *   The revision IDs.
+   */
+  protected function getInlineBlockRevisionIdsInSections(array $sections) {
+    $revision_ids = [];
+    foreach ($this->getInlineBlockComponents($sections) as $component) {
+      $configuration = $component->getPlugin()->getConfiguration();
+      if (!empty($configuration['block_revision_id'])) {
+        $revision_ids[] = $configuration['block_revision_id'];
+      }
+    }
+    return $revision_ids;
+  }
+
+  /**
+   * Gets the sections for an entity if any.
+   *
+   * @todo Replace this method with calls to the SectionStorageManagerInterface
+   * method for getting sections from an entity in
+   * https://www.drupal.org/node/2986403.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity.
+   *
+   * @return \Drupal\layout_builder\Section[]|null
+   *   The entity layout sections if available.
+   */
+  protected function getEntitySections(EntityInterface $entity) {
+    if ($entity instanceof LayoutEntityDisplayInterface) {
+      return $entity->getSections();
+    }
+    elseif ($this->isEntityUsingFieldOverride($entity)) {
+      return $entity->get('layout_builder__layout')->getSections();
+    }
+    return NULL;
+  }
+
+  /**
+   * Gets components that have Inline Block plugins.
+   *
+   * @param \Drupal\layout_builder\Section[] $sections
+   *   The layout sections.
+   *
+   * @return \Drupal\layout_builder\SectionComponent[]
+   *   The components that contain Inline Block plugins.
+   */
+  protected function getInlineBlockComponents(array $sections) {
+    $inline_block_components = [];
+    foreach ($sections as $section) {
+      foreach ($section->getComponents() as $component) {
+        $plugin = $component->getPlugin();
+        if ($plugin instanceof DerivativeInspectionInterface && $plugin->getBaseId() === 'inline_block') {
+          $inline_block_components[] = $component;
+        }
+      }
+    }
+    return $inline_block_components;
+  }
+
+  /**
+   * Determines if an entity is using a field for the layout override.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity.
+   *
+   * @return bool
+   *   TRUE if the entity is using a field for a layout override.
+   */
+  protected function isEntityUsingFieldOverride(EntityInterface $entity) {
+    return $entity instanceof FieldableEntityInterface && $entity->hasField('layout_builder__layout');
+  }
+
+}