‪TYPO3CMS  ‪main
DependencyResolver.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
21 
28 {
29  protected int ‪$workspace = 0;
31  protected array ‪$elements = [];
32  protected array ‪$eventCallbacks = [];
33  protected bool ‪$outerMostParentsRequireReferences = false;
34  protected ?array ‪$outerMostParents;
35 
39  public function ‪setWorkspace(int ‪$workspace): void
40  {
41  $this->workspace = ‪$workspace;
42  }
43 
47  public function ‪getWorkspace(): int
48  {
49  return ‪$this->workspace;
50  }
51 
55  public function ‪setEventCallback(string $eventName, ‪EventCallback $callback): self
56  {
57  $this->eventCallbacks[$eventName] = $callback;
58  return $this;
59  }
60 
64  public function ‪executeEventCallback(string $eventName, object $caller, array $callerArguments = []): mixed
65  {
66  if (isset($this->eventCallbacks[$eventName])) {
68  $callback = $this->eventCallbacks[$eventName];
69  return $callback->execute($callerArguments, $caller, $eventName);
70  }
71  return null;
72  }
73 
78  {
79  $this->outerMostParentsRequireReferences = (bool)‪$outerMostParentsRequireReferences;
80  return $this;
81  }
82 
86  public function ‪addElement(string $table, int $id, array $data = []): ‪ElementEntity
87  {
88  $element = $this->‪getFactory()->getElement($table, $id, $data, $this);
89  $elementName = $element->__toString();
90  $this->elements[$elementName] = $element;
91  return $element;
92  }
93 
99  public function ‪getOuterMostParents(): array
100  {
101  if (!isset($this->outerMostParents)) {
102  $this->outerMostParents = [];
104  foreach ($this->elements as $element) {
105  $this->‪processOuterMostParent($element);
106  }
107  }
109  }
110 
114  protected function ‪processOuterMostParent(‪ElementEntity $element): void
115  {
116  if ($this->outerMostParentsRequireReferences === false || $element->‪hasReferences()) {
117  $outerMostParent = $element->‪getOuterMostParent();
118  if ($outerMostParent !== false) {
119  $outerMostParentName = $outerMostParent->__toString();
120  if (!isset($this->outerMostParents[$outerMostParentName])) {
121  $this->outerMostParents[$outerMostParentName] = $outerMostParent;
122  }
123  }
124  }
125  }
126 
130  public function ‪getNestedElements(‪ElementEntity $outerMostParent): array
131  {
132  $outerMostParentName = $outerMostParent->‪__toString();
133  if (!isset($this->outerMostParents[$outerMostParentName])) {
134  throw new \RuntimeException('Element "' . $outerMostParentName . '" was not detected as outermost parent.', 1289318609);
135  }
136  $nestedStructure = array_merge([$outerMostParentName => $outerMostParent], $outerMostParent->‪getNestedChildren());
137  return $nestedStructure;
138  }
139 
143  public function ‪getElements(): array
144  {
145  return ‪$this->elements;
146  }
147 
152  {
153  if (!isset($this->factory)) {
154  $this->factory = GeneralUtility::makeInstance(DependencyEntityFactory::class);
155  }
156  return ‪$this->factory;
157  }
158 }
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\$eventCallbacks
‪array $eventCallbacks
Definition: DependencyResolver.php:32
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\$workspace
‪int $workspace
Definition: DependencyResolver.php:29
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\getFactory
‪getFactory()
Definition: DependencyResolver.php:151
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\addElement
‪addElement(string $table, int $id, array $data=[])
Definition: DependencyResolver.php:86
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\$outerMostParents
‪array $outerMostParents
Definition: DependencyResolver.php:34
‪TYPO3\CMS\Workspaces\Dependency\ElementEntity
Definition: ElementEntity.php:30
‪TYPO3\CMS\Workspaces\Dependency\ElementEntity\__toString
‪__toString()
Definition: ElementEntity.php:132
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\getWorkspace
‪getWorkspace()
Definition: DependencyResolver.php:47
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\getElements
‪getElements()
Definition: DependencyResolver.php:143
‪TYPO3\CMS\Workspaces\Dependency\ElementEntity\getNestedChildren
‪ReferenceEntity[] getNestedChildren()
Definition: ElementEntity.php:306
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\executeEventCallback
‪executeEventCallback(string $eventName, object $caller, array $callerArguments=[])
Definition: DependencyResolver.php:64
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver
Definition: DependencyResolver.php:28
‪TYPO3\CMS\Workspaces\Dependency\EventCallback
Definition: EventCallback.php:26
‪TYPO3\CMS\Workspaces\Dependency\ElementEntity\getOuterMostParent
‪getOuterMostParent()
Definition: ElementEntity.php:277
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\getOuterMostParents
‪ElementEntity[] getOuterMostParents()
Definition: DependencyResolver.php:99
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\$outerMostParentsRequireReferences
‪bool $outerMostParentsRequireReferences
Definition: DependencyResolver.php:33
‪TYPO3\CMS\Workspaces\Dependency
Definition: DependencyEntityFactory.php:18
‪TYPO3\CMS\Workspaces\Dependency\DependencyEntityFactory
Definition: DependencyEntityFactory.php:28
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\setWorkspace
‪setWorkspace(int $workspace)
Definition: DependencyResolver.php:39
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\$factory
‪DependencyEntityFactory $factory
Definition: DependencyResolver.php:30
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\$elements
‪array $elements
Definition: DependencyResolver.php:31
‪TYPO3\CMS\Workspaces\Dependency\ElementEntity\hasReferences
‪hasReferences()
Definition: ElementEntity.php:269
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\setOuterMostParentsRequireReferences
‪setOuterMostParentsRequireReferences(bool $outerMostParentsRequireReferences)
Definition: DependencyResolver.php:77
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\setEventCallback
‪setEventCallback(string $eventName, EventCallback $callback)
Definition: DependencyResolver.php:55
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\processOuterMostParent
‪processOuterMostParent(ElementEntity $element)
Definition: DependencyResolver.php:114
‪TYPO3\CMS\Workspaces\Dependency\DependencyResolver\getNestedElements
‪getNestedElements(ElementEntity $outerMostParent)
Definition: DependencyResolver.php:130