public function publishNode(NodeInterface $node, Workspace $targetWorkspace)
{
if ($this->baseWorkspace === null) {
return;
}
if ($node->getWorkspace() !== $this) {
return;
}
// Might happen if a node which has been published during an earlier call of publishNode() is attempted to
// be published again:
if ($node->getWorkspace() === $targetWorkspace) {
return;
}
$this->verifyPublishingTargetWorkspace($targetWorkspace);
$this->emitBeforeNodePublishing($node, $targetWorkspace);
if ($node->getPath() === '/') {
return;
}
$targetNodeData = $this->findNodeDataInTargetWorkspace($node, $targetWorkspace);
$matchingNodeVariantExistsInTargetWorkspace = $targetNodeData !== null && $targetNodeData->getDimensionValues() === $node->getDimensions();
if ($matchingNodeVariantExistsInTargetWorkspace) {
$this->replaceNodeData($node, $targetNodeData);
} else {
$this->moveNodeVariantToTargetWorkspace($node, $targetWorkspace);
}
$this->emitAfterNodePublishing($node, $targetWorkspace);
}