/** * Loads tree for a given namespace * * @param string $namespace Namespace to build tree for * @return Tx_PtExtbase_Tree_Tree Tree build for given namespace */ public function loadTreeByNamespace($namespace) { if ($this->treeContext->respectEnableFields()) { return $this->treeBuilder->buildTreeForNamespaceWithoutInaccessibleSubtrees($namespace); } else { return $this->treeBuilder->buildTreeForNamespace($namespace); } }
/** * @return void */ public function initFilter() { $this->objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); /** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */ $this->treeContext = $this->objectManager->get('Tx_PtExtbase_Tree_TreeContext'); $this->treeContext->setRespectEnableFields($this->treeRespectEnableFields); $this->buildTree(); }
/** * @todo If several tree widgets are needed on the same page, provide an identifier and select the right repo from session * * Restore the repository settings from namespace */ public function restoreTreeSettingsFromSession() { $settings = Tx_PtExtbase_State_Session_Storage_SessionAdapter::getInstance()->read('Tx_PtExtbase_Tree_Configuration'); $settings = array('repository' => 'Tx_PtCertification_Domain_Repository_CategoryRepository', 'namespace' => 'tx_ptcertification_domain_model_category', 'respectEnableFields' => $this->treeContext->respectEnableFields()); if (array_key_exists('repository', $settings)) { $nodeRepositoryClassName = $settings['repository']; if ($nodeRepositoryClassName && class_exists($nodeRepositoryClassName)) { $this->nodeRepositoryClassName = $nodeRepositoryClassName; } } if (array_key_exists('namespace', $settings)) { $this->treeNameSpace = $settings['namespace']; } }
/** * Helper method for doing a depth-first search on a node * * @param Tx_PtExtbase_Tree_NodeInterface $node * @param integer &$index Referenced value of visitation index. Will be increased with every node visitation. * @param integer &$level Current level of visit in the tree starting at 1 */ protected function dfs(Tx_PtExtbase_Tree_NodeInterface $node, &$index, &$level = 1) { if ($node->isAccessible() || $this->treeContext->isWritable()) { $this->doFirstVisit($node, $index, $level); $index = $index + 1; if ($node->getChildrenCount() > 0) { $level = $level + 1; if ($this->restrictedDepth === -1 || $level <= $this->restrictedDepth) { foreach ($node->getChildren() as $child) { /* @var $child Tx_PtExtbase_Tree_NodeInterface */ $this->dfs($child, $index, $level); } } $level = $level - 1; } $this->doLastVisit($node, $index, $level); $index = $index + 1; } }
/** * Get Tree nodes as JSON array * * @return string JSON array */ protected function getTreeNodes() { $treeRepositoryBuilder = Tx_PtExtbase_Tree_TreeRepositoryBuilder::getInstance(); $treeRepositoryBuilder->setNodeRepositoryClassName($this->arguments['repository']); $treeRepository = $treeRepositoryBuilder->buildTreeRepository(); if ($this->arguments['respectEnableFields']) { $this->treeContext->setRespectEnableFields(true); } else { $this->treeContext->setRespectEnableFields(false); } $tree = $treeRepository->loadTreeByNamespace($this->arguments['namespace']); if (isset($this->arguments['restrictedDepth'])) { $tree->setRestrictedDepth($this->arguments['restrictedDepth']); $tree->setRespectRestrictedDepth(true); } $arrayWriterVisitor = $this->objectManager->get('Tx_PtExtbase_Tree_ExtJsJsonWriterVisitor'); $arrayWriterVisitor->setMultipleSelect($this->arguments['multiple']); $arrayWriterVisitor->setSelection($this->getSelection()); $jsonTreeWriter = $this->objectManager->get('Tx_PtExtbase_Tree_JsonTreeWriter', array($arrayWriterVisitor), $arrayWriterVisitor); return $jsonTreeWriter->writeTree($tree); }