Mercurial > hg > cmmr2012-drupal-site
comparison core/modules/layout_builder/src/LayoutEntityHelperTrait.php @ 4:a9cd425dd02b
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:11:55 +0000 |
parents | |
children | 12f9dff5fda9 |
comparison
equal
deleted
inserted
replaced
3:307d7a7fd348 | 4:a9cd425dd02b |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\layout_builder; | |
4 | |
5 use Drupal\Component\Plugin\DerivativeInspectionInterface; | |
6 use Drupal\Core\Entity\EntityInterface; | |
7 use Drupal\Core\Entity\FieldableEntityInterface; | |
8 use Drupal\layout_builder\Entity\LayoutEntityDisplayInterface; | |
9 use Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage; | |
10 | |
11 /** | |
12 * Methods to help with entities using the layout builder. | |
13 * | |
14 * @internal | |
15 */ | |
16 trait LayoutEntityHelperTrait { | |
17 | |
18 /** | |
19 * Determines if an entity can have a layout. | |
20 * | |
21 * @param \Drupal\Core\Entity\EntityInterface $entity | |
22 * The entity to check. | |
23 * | |
24 * @return bool | |
25 * TRUE if the entity can have a layout otherwise FALSE. | |
26 */ | |
27 protected function isLayoutCompatibleEntity(EntityInterface $entity) { | |
28 return $entity instanceof LayoutEntityDisplayInterface || $this->isEntityUsingFieldOverride($entity); | |
29 } | |
30 | |
31 /** | |
32 * Gets revision IDs for layout sections. | |
33 * | |
34 * @param \Drupal\layout_builder\Section[] $sections | |
35 * The layout sections. | |
36 * | |
37 * @return int[] | |
38 * The revision IDs. | |
39 */ | |
40 protected function getInlineBlockRevisionIdsInSections(array $sections) { | |
41 $revision_ids = []; | |
42 foreach ($this->getInlineBlockComponents($sections) as $component) { | |
43 $configuration = $component->getPlugin()->getConfiguration(); | |
44 if (!empty($configuration['block_revision_id'])) { | |
45 $revision_ids[] = $configuration['block_revision_id']; | |
46 } | |
47 } | |
48 return $revision_ids; | |
49 } | |
50 | |
51 /** | |
52 * Gets the sections for an entity if any. | |
53 * | |
54 * @todo Replace this method with calls to the SectionStorageManagerInterface | |
55 * method for getting sections from an entity in | |
56 * https://www.drupal.org/node/2986403. | |
57 * | |
58 * @param \Drupal\Core\Entity\EntityInterface $entity | |
59 * The entity. | |
60 * | |
61 * @return \Drupal\layout_builder\Section[]|null | |
62 * The entity layout sections if available. | |
63 */ | |
64 protected function getEntitySections(EntityInterface $entity) { | |
65 if ($entity instanceof LayoutEntityDisplayInterface) { | |
66 return $entity->getSections(); | |
67 } | |
68 elseif ($this->isEntityUsingFieldOverride($entity)) { | |
69 return $entity->get(OverridesSectionStorage::FIELD_NAME)->getSections(); | |
70 } | |
71 return NULL; | |
72 } | |
73 | |
74 /** | |
75 * Gets components that have Inline Block plugins. | |
76 * | |
77 * @param \Drupal\layout_builder\Section[] $sections | |
78 * The layout sections. | |
79 * | |
80 * @return \Drupal\layout_builder\SectionComponent[] | |
81 * The components that contain Inline Block plugins. | |
82 */ | |
83 protected function getInlineBlockComponents(array $sections) { | |
84 $inline_block_components = []; | |
85 foreach ($sections as $section) { | |
86 foreach ($section->getComponents() as $component) { | |
87 $plugin = $component->getPlugin(); | |
88 if ($plugin instanceof DerivativeInspectionInterface && $plugin->getBaseId() === 'inline_block') { | |
89 $inline_block_components[] = $component; | |
90 } | |
91 } | |
92 } | |
93 return $inline_block_components; | |
94 } | |
95 | |
96 /** | |
97 * Determines if an entity is using a field for the layout override. | |
98 * | |
99 * @param \Drupal\Core\Entity\EntityInterface $entity | |
100 * The entity. | |
101 * | |
102 * @return bool | |
103 * TRUE if the entity is using a field for a layout override. | |
104 */ | |
105 protected function isEntityUsingFieldOverride(EntityInterface $entity) { | |
106 return $entity instanceof FieldableEntityInterface && $entity->hasField(OverridesSectionStorage::FIELD_NAME); | |
107 } | |
108 | |
109 } |