/** * This aspect will block loadNodeTypes from being called and will instead * call overrideNodeTypes with a modified configuration. * * @Flow\Around("method(TYPO3\TYPO3CR\Domain\Service\NodeTypeManager->loadNodeTypes())") * @param JoinPointInterface $joinPoint The current join point * @return void */ public function addDynamicNodeConfiguration(JoinPointInterface $joinPoint) { $completeNodeTypeConfiguration = $this->configurationManager->getConfiguration('NodeTypes'); $dynamicNodeTypes = $this->dynamicNodeTypeRepository->findAll(); /* @var $dynamicNodeType DynamicNodeType */ foreach ($dynamicNodeTypes as $dynamicNodeType) { $dynamicNodeName = $dynamicNodeType->getValidNodeTypeName($this->settings['nodeNamespace']); if (!array_key_exists($dynamicNodeName, $completeNodeTypeConfiguration)) { $dynamicProperties = array(); /* @var $dynamicProperty DynamicProperty */ foreach ($dynamicNodeType->getDynamicProperties() as $dynamicProperty) { $dynamicPropertyName = $dynamicProperty->getValidPropertyName($this->settings['propertyPrefix']); $dynamicProperties[$dynamicPropertyName] = array('type' => 'string', 'defaultValue' => $dynamicProperty->getDefaultValue(), 'ui' => array('label' => $dynamicProperty->getLabel(), 'reloadIfChanged' => TRUE, 'inlineEditable' => TRUE, 'aloha' => array('placeholder' => $dynamicProperty->getPlaceholder()), 'inspector' => array('group' => 'dynamicProperties', 'editorOptions' => array('placeholder' => $dynamicProperty->getPlaceholder())))); } $newNodeConfiguration = array('superTypes' => $this->settings['superTypes'], 'abstract' => FALSE, 'ui' => array('label' => $dynamicNodeType->getLabel())); // Only set properties if there are any. // If properties is set to an empty array a bug in Neos will break the node configuration. // This leads to an empty inspector and strange error messages. if (count($dynamicProperties)) { $newNodeConfiguration['properties'] = $dynamicProperties; } $completeNodeTypeConfiguration[$dynamicNodeName] = $newNodeConfiguration; } } /* @var $nodeTypeManager NodeTypeManager */ $nodeTypeManager = $joinPoint->getProxy(); $nodeTypeManager->overrideNodeTypes($completeNodeTypeConfiguration); }
/** * Returns the processed Configuration * * @param \TYPO3\TYPO3CR\Domain\Model\NodeType $nodeType (uninitialized) The node type to process * @param array $configuration input configuration * @param array $options The processor options * @return void */ public function process(NodeType $nodeType, array &$configuration, array $options) { $dynamicNodeTypes = $this->dynamicNodeTypeRepository->findAll(); $typesList = array(); /** @var DynamicNodeType $dynamicNodeType */ foreach ($dynamicNodeTypes as $dynamicNodeType) { $typesList[$dynamicNodeType->getValidNodeTypeName($this->settings['nodeNamespace'])] = array('label' => $dynamicNodeType->getLabel()); } $configuration['properties']['selectedNodeTypes']['ui']['inspector']['editorOptions']['values'] = $typesList; }
/** * @param DynamicNodeType $dynamicNodeType * @param string $label * @param string $placeholder * @param string $defaultValue * @throws \TYPO3\Flow\Persistence\Exception\IllegalObjectTypeException */ public function createDynamicPropertyAction(DynamicNodeType $dynamicNodeType, $label, $placeholder = '', $defaultValue = '') { $dynamicProperties = $dynamicNodeType->getDynamicProperties(); $dynamicProperties[] = new DynamicProperty($label, $dynamicNodeType, $placeholder, $defaultValue); $this->dynamicNodeTypeRepository->update($dynamicNodeType); $this->redirect('edit', 'DynamicNodeType', 'Shel.DynamicNodes', array('dynamicNodeType' => $dynamicNodeType)); }