/** * Converts the specified node path into a Node. * * The node path must be an absolute context node path and can be specified as a string or as an array item with the * key "__contextNodePath". The latter case is for updating existing nodes. * * This conversion method supports creation of new nodes because new nodes * * Also note that the context's "current node" is not affected by this object converter, you will need to set it to * whatever node your "current" node is, if any. * * All elements in the source array which start with two underscores (like __contextNodePath) are specially treated * by this converter. * * All elements in the source array which start with a *single underscore (like _hidden) are *directly* set on the Node * object. * * All other elements, not being prefixed with underscore, are properties of the node. * * * @param string|array $source Either a string or array containing the absolute context node path which identifies the node. For example "/sites/mysitecom/homepage/about@user-admin" * @param string $targetType not used * @param array $subProperties not used * @param PropertyMappingConfigurationInterface $configuration not used * @return mixed An object or \Neos\Error\Messages\Error if the input format is not supported or could not be converted for other reasons * @throws \Exception */ public function convertFrom($source, $targetType, array $subProperties = array(), PropertyMappingConfigurationInterface $configuration = null) { $nodeTemplate = new NodeTemplate(); $nodeType = $this->extractNodeType($targetType, $source); $nodeTemplate->setNodeType($nodeType); // we don't need a context or workspace for creating NodeTemplate objects, but in order to satisfy the method // signature of setNodeProperties(), we do need one: $context = $this->contextFactory->create($this->prepareContextProperties('live')); $this->setNodeProperties($nodeTemplate, $nodeTemplate->getNodeType(), $source, $context); return $nodeTemplate; }
/** * Creates and persists a node from the given $nodeTemplate as child node * * @param NodeTemplate $nodeTemplate * @param string $nodeName name of the new node. If not specified the name of the nodeTemplate will be used. * @param Workspace $workspace * @param array $dimensions * @return NodeData the freshly generated node */ public function createNodeDataFromTemplate(NodeTemplate $nodeTemplate, $nodeName = null, Workspace $workspace = null, array $dimensions = null) { $newNodeName = $nodeName !== null ? $nodeName : $nodeTemplate->getName(); $possibleNodeName = $this->nodeService->generateUniqueNodeName($this->getPath(), $newNodeName); $newNodeData = $this->createNodeData($possibleNodeName, $nodeTemplate->getNodeType(), $nodeTemplate->getIdentifier(), $workspace, $dimensions); $newNodeData->similarize($nodeTemplate); return $newNodeData; }
/** * @test */ public function nodeWithRelatedEntitiesWillTakeCareOfAddingToPersistence() { $identifier = Algorithms::generateUUID(); $template = new NodeTemplate(); $template->setName('new-node'); $template->setIdentifier($identifier); $newEntity = new Fixtures\RelatedEntity(); $newEntity->setFavoritePlace('Reykjavik'); $anotherNewEntity = new Fixtures\RelatedEntity(); $anotherNewEntity->setFavoritePlace('Japan'); $template->setProperty('entity', array($newEntity, $anotherNewEntity)); $rootNode = $this->context->getRootNode(); $newNode = $rootNode->createNodeFromTemplate($template); $this->persistenceManager->persistAll(); $this->persistenceManager->clearState(); $this->inject($this->contextFactory, 'contextInstances', array()); $newLiveContext = $this->contextFactory->create(array('workspaceName' => 'live')); $newNodeAgain = $newLiveContext->getNode('/new-node'); $entityArray = $newNodeAgain->getProperty('entity'); $this->assertCount(2, $entityArray); $this->assertEquals('Japan', $entityArray[1]->getFavoritePlace()); }
/** * @test * @expectedException \InvalidArgumentException */ public function setNameWithInvalidNameThrowsException() { $nodeTemplate = new NodeTemplate(); $nodeTemplate->setName(',?/invalid-node-name'); }