/** * Update folder permissions records when folder is moved * * @param Folder $folder * @param Folder $targetFolder * @param string $newName */ public function postFolderMove(Folder $folder, Folder $targetFolder, $newName) { $newFolder = $targetFolder->getSubfolder($newName); $oldStorageUid = $folder->getStorage()->getUid(); $newStorageUid = $newFolder->getStorage()->getUid(); $this->utilityService->updateFolderRecord($oldStorageUid, $folder->getHashedIdentifier(), $folder->getIdentifier(), array('storage' => $newStorageUid, 'folder_hash' => $newFolder->getHashedIdentifier(), 'folder' => $newFolder->getIdentifier())); if (!empty($this->folderMapping[$folder->getCombinedIdentifier()])) { $newMapping = $this->getSubFolderIdentifiers($newFolder); foreach ($this->folderMapping[$folder->getCombinedIdentifier()] as $key => $folderInfo) { $this->utilityService->updateFolderRecord($oldStorageUid, $folderInfo[0], $folderInfo[1], array('storage' => $newStorageUid, 'folder_hash' => $newMapping[$key][0], 'folder' => $newMapping[$key][1])); } } }
/** * Writes the file with the is $fileId to the legacy import folder. The file name will used from * argument $fileName and the file was successfully created or an identical file was already found, * $fileName will held the uid of the new created file record. * * @param string $fileName The file name for the new file. Value would be changed to the uid of the new created file record. * @param int $fileId The id of the file in data array * @return bool */ protected function writeSysFileResourceForLegacyImport(&$fileName, $fileId) { if ($this->legacyImportFolder === null) { return false; } if (!isset($this->dat['files'][$fileId])) { $this->error('ERROR: File ID "' . $fileId . '" could not be found'); return false; } $temporaryFile = $this->writeTemporaryFileFromData($fileId, 'files'); if ($temporaryFile === null) { // error on writing the file. Error message was already added return false; } $importFolder = $this->legacyImportFolder; if (isset($this->dat['files'][$fileId]['relFileName'])) { $relativeFilePath = PathUtility::dirname($this->dat['files'][$fileId]['relFileName']); if (!$this->legacyImportFolder->hasFolder($relativeFilePath)) { $this->legacyImportFolder->createFolder($relativeFilePath); } $importFolder = $this->legacyImportFolder->getSubfolder($relativeFilePath); } $fileObject = null; try { // check, if there is alreay the same file in the folder if ($importFolder->hasFile($fileName)) { $fileStorage = $importFolder->getStorage(); $file = $fileStorage->getFile($importFolder->getIdentifier() . $fileName); if ($file->getSha1() === sha1_file($temporaryFile)) { $fileObject = $file; } } } catch (Exception $e) { } if ($fileObject === null) { try { $fileObject = $importFolder->addFile($temporaryFile, $fileName, DuplicationBehavior::RENAME); } catch (Exception $e) { $this->error('Error: no file could be added to the storage for file name ' . $this->alternativeFileName[$temporaryFile]); } } if (md5_file(PATH_site . $fileObject->getPublicUrl()) == $this->dat['files'][$fileId]['content_md5']) { $fileName = $fileObject->getUid(); $this->fileIDMap[$fileId] = $fileName; $this->filePathMap[$fileId] = $fileObject->getPublicUrl(); return true; } else { $this->error('ERROR: File content "' . $this->dat['files'][$fileId]['relFileName'] . '" was corrupted'); } return false; }