/** * Gets and registers a new reference. * * @param \TYPO3\CMS\Version\Dependency\ElementEntity $element * @param string $field * @return \TYPO3\CMS\Version\Dependency\ReferenceEntity */ public function getReference(\TYPO3\CMS\Version\Dependency\ElementEntity $element, $field) { $referenceName = $element->__toString() . '.' . $field; if (!isset($this->references[$referenceName][$field])) { $this->references[$referenceName][$field] = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Version\\Dependency\\ReferenceEntity', $element, $field); } return $this->references[$referenceName][$field]; }
/** * Gets all nested elements (including the parent) of a particular outermost parent element. * * @throws \RuntimeException * @param \TYPO3\CMS\Version\Dependency\ElementEntity $outerMostParent * @return array */ public function getNestedElements(\TYPO3\CMS\Version\Dependency\ElementEntity $outerMostParent) { $outerMostParentName = $outerMostParent->__toString(); if (!isset($this->outerMostParents[$outerMostParentName])) { throw new \RuntimeException('Element "' . $outerMostParentName . '" was not detected as outermost parent.', 1289318609); } $nestedStructure = array_merge(array($outerMostParentName => $outerMostParent), $outerMostParent->getNestedChildren()); return $nestedStructure; }
/** * Resolves nested child dependencies. * * @param Dependency\ElementEntity $parent * @param int $collection * @param string $nextParentIdentifier * @param int $collectionLevel */ protected function resolveDataArrayChildDependencies(Dependency\ElementEntity $parent, $collection, $nextParentIdentifier = '', $collectionLevel = 0) { $parentIdentifier = $parent->__toString(); $parentIsSet = isset($this->dataArray[$parentIdentifier]); if ($parentIsSet) { $this->dataArray[$parentIdentifier][GridDataService::GridColumn_Collection] = $collection; $this->dataArray[$parentIdentifier][GridDataService::GridColumn_CollectionLevel] = $collectionLevel; $this->dataArray[$parentIdentifier][GridDataService::GridColumn_CollectionCurrent] = md5($parentIdentifier); $this->dataArray[$parentIdentifier][GridDataService::GridColumn_CollectionChildren] = count($parent->getChildren()); $nextParentIdentifier = $parentIdentifier; $collectionLevel++; } foreach ($parent->getChildren() as $child) { $this->resolveDataArrayChildDependencies($child->getElement(), $collection, $nextParentIdentifier, $collectionLevel); $childIdentifier = $child->getElement()->__toString(); if (!empty($nextParentIdentifier) && isset($this->dataArray[$childIdentifier])) { // Remove from dataArray, but collect to process later // and add it just next to the accordant parent element $this->dataArray[$childIdentifier][GridDataService::GridColumn_CollectionParent] = md5($nextParentIdentifier); $this->nestedDataArray[$nextParentIdentifier][] = $this->dataArray[$childIdentifier]; unset($this->dataArray[$childIdentifier]); } } }