Neos\ContentRepository\Domain\Model\Node::createRecursiveCopy PHP Method

createRecursiveCopy() protected method

$detachedCopy only has an influence if we are copying from one dimension to the other, possibly creating a new node variant: - If $detachedCopy is TRUE, the whole (recursive) copy is done without connecting original and copied node, so NOT CREATING a new node variant. - If $detachedCopy is FALSE, and the node does not yet have a variant in the target dimension, we are CREATING a new node variant. As a caller of this method, $detachedCopy should be TRUE if $this->getNodeType()->isAggregate() is TRUE, and FALSE otherwise.
protected createRecursiveCopy ( Neos\ContentRepository\Domain\Model\NodeInterface $referenceNode, string $nodeName, boolean $detachedCopy ) : Neos\ContentRepository\Domain\Model\NodeInterface
$referenceNode Neos\ContentRepository\Domain\Model\NodeInterface
$nodeName string
$detachedCopy boolean
return Neos\ContentRepository\Domain\Model\NodeInterface
    protected function createRecursiveCopy(NodeInterface $referenceNode, $nodeName, $detachedCopy)
    {
        $identifier = null;
        $referenceNodeDimensions = $referenceNode->getDimensions();
        $referenceNodeDimensionsHash = Utility::sortDimensionValueArrayAndReturnDimensionsHash($referenceNodeDimensions);
        $thisDimensions = $this->getDimensions();
        $thisNodeDimensionsHash = Utility::sortDimensionValueArrayAndReturnDimensionsHash($thisDimensions);
        if ($detachedCopy === false && $referenceNodeDimensionsHash !== $thisNodeDimensionsHash && $referenceNode->getContext()->getNodeByIdentifier($this->getIdentifier()) === null) {
            // If the target dimensions are different than this one, and there is no node shadowing this one in the target dimension yet, we use the same
            // node identifier, effectively creating a new node variant.
            $identifier = $this->getIdentifier();
        }
        $copiedNode = $referenceNode->createSingleNode($nodeName, null, $identifier);
        $copiedNode->similarize($this, true);
        /** @var $childNode Node */
        foreach ($this->getChildNodes() as $childNode) {
            // Prevent recursive copy when copying into itself
            if ($childNode->getIdentifier() !== $copiedNode->getIdentifier()) {
                $childNode->copyIntoInternal($copiedNode, $childNode->getName(), $detachedCopy);
            }
        }
        return $copiedNode;
    }
Node