public function moveFolder(\TYPO3\CMS\Core\Resource\Folder $folderToMove, \TYPO3\CMS\Core\Resource\Folder $targetParentFolder, $newFolderName = NULL, $conflictMode = 'renameNewFolder') { $sourceStorage = $folderToMove->getStorage(); $returnObject = NULL; if (!$targetParentFolder->getStorage() == $this) { throw new \InvalidArgumentException('Cannot move a folder into a folder that does not belong to this storage.', 1325777289); } $newFolderName = $newFolderName ? $newFolderName : $folderToMove->getName(); // TODO check if folder already exists in $targetParentFolder, handle this conflict then $this->emitPreFolderMoveSignal($folderToMove, $targetParentFolder, $newFolderName); // Get all file objects now so we are able to update them after moving the folder $fileObjects = $this->getAllFileObjectsInFolder($folderToMove); try { if ($sourceStorage == $this) { $fileMappings = $this->driver->moveFolderWithinStorage($folderToMove, $targetParentFolder, $newFolderName); } else { $fileMappings = $this->moveFolderBetweenStorages($folderToMove, $targetParentFolder, $newFolderName); } // Update the identifier and storage of all file objects foreach ($fileObjects as $oldIdentifier => $fileObject) { $newIdentifier = $fileMappings[$oldIdentifier]; $fileObject->updateProperties(array('storage' => $this, 'identifier' => $newIdentifier)); } $returnObject = $this->getFolder($fileMappings[$folderToMove->getIdentifier()]); } catch (\TYPO3\CMS\Core\Exception $e) { throw $e; } $this->emitPostFolderMoveSignal($folderToMove, $targetParentFolder, $newFolderName); return $returnObject; }