/** * Copies a folder. * * @param FolderInterface $folderToCopy The folder to copy * @param FolderInterface $targetParentFolder The target folder * @param string $newFolderName * @param string $conflictMode "overrideExistingFolder", "renameNewFolder", "cancel * @return Folder The new (copied) folder object */ public function copyFolder(FolderInterface $folderToCopy, FolderInterface $targetParentFolder, $newFolderName = NULL, $conflictMode = 'renameNewFolder') { // TODO implement the $conflictMode handling $this->assureFolderCopyPermissions($folderToCopy, $targetParentFolder); $returnObject = NULL; $sanitizedNewFolderName = $this->driver->sanitizeFileName($newFolderName ?: $folderToCopy->getName()); if ($folderToCopy instanceof Folder && $targetParentFolder instanceof Folder) { $this->emitPreFolderCopySignal($folderToCopy, $targetParentFolder, $sanitizedNewFolderName); } $sourceStorage = $folderToCopy->getStorage(); // call driver method to move the file // that also updates the file object properties try { if ($sourceStorage === $this) { $this->driver->copyFolderWithinStorage($folderToCopy->getIdentifier(), $targetParentFolder->getIdentifier(), $sanitizedNewFolderName); $returnObject = $this->getFolder($targetParentFolder->getSubfolder($sanitizedNewFolderName)->getIdentifier()); } else { $this->copyFolderBetweenStorages($folderToCopy, $targetParentFolder, $sanitizedNewFolderName); } } catch (\TYPO3\CMS\Core\Exception $e) { echo $e->getMessage(); } $this->emitPostFolderCopySignal($folderToCopy, $targetParentFolder, $returnObject->getName()); return $returnObject; }
/** * Copies a folder. * * @param FolderInterface $folderToCopy The folder to copy * @param FolderInterface $targetParentFolder The target folder * @param string $newFolderName * @param string $conflictMode a value of the DuplicationBehavior enumeration * @return Folder The new (copied) folder object * @throws InvalidTargetFolderException */ public function copyFolder(FolderInterface $folderToCopy, FolderInterface $targetParentFolder, $newFolderName = null, $conflictMode = DuplicationBehavior::RENAME) { // @todo implement the $conflictMode handling $this->assureFolderCopyPermissions($folderToCopy, $targetParentFolder); $returnObject = null; $sanitizedNewFolderName = $this->driver->sanitizeFileName($newFolderName ?: $folderToCopy->getName()); if ($folderToCopy instanceof Folder && $targetParentFolder instanceof Folder) { $this->emitPreFolderCopySignal($folderToCopy, $targetParentFolder, $sanitizedNewFolderName); } $sourceStorage = $folderToCopy->getStorage(); // call driver method to move the file // that also updates the file object properties if ($sourceStorage === $this) { if ($this->isWithinFolder($folderToCopy, $targetParentFolder)) { throw new InvalidTargetFolderException(sprintf('Cannot copy folder "%s" into target folder "%s", because the target folder is already within the folder to be copied!', $folderToCopy->getName(), $targetParentFolder->getName()), 1422723059); } $this->driver->copyFolderWithinStorage($folderToCopy->getIdentifier(), $targetParentFolder->getIdentifier(), $sanitizedNewFolderName); $returnObject = $this->getFolder($targetParentFolder->getSubfolder($sanitizedNewFolderName)->getIdentifier()); } else { $this->copyFolderBetweenStorages($folderToCopy, $targetParentFolder, $sanitizedNewFolderName); } $this->emitPostFolderCopySignal($folderToCopy, $targetParentFolder, $returnObject->getName()); return $returnObject; }