/** * Internal function to return an ArticleFile object from a row. * @param $row array * @return ArticleFile */ function &_returnArticleFileFromRow(&$row) { $articleFile = new ArticleFile(); $articleFile->setFileId($row['file_id']); $articleFile->setSourceFileId($row['source_file_id']); $articleFile->setSourceRevision($row['source_revision']); $articleFile->setRevision($row['revision']); $articleFile->setArticleId($row['article_id']); $articleFile->setFileName($row['file_name']); $articleFile->setFileType($row['file_type']); $articleFile->setFileSize($row['file_size']); $articleFile->setOriginalFileName($row['original_file_name']); $articleFile->setType($row['type']); $articleFile->setAssocId($row['assoc_id']); $articleFile->setDateUploaded($this->datetimeFromDB($row['date_uploaded'])); $articleFile->setDateModified($this->datetimeFromDB($row['date_modified'])); $articleFile->setRound($row['round']); $articleFile->setViewable($row['viewable']); //%LP% set fedora information $articleFile->setFedoraNamespace($row['fedora_namespace']); $articleFile->setFedoraPid($row['fedora_pid']); $articleFile->setFedoraDsid($row['fedora_dsid']); HookRegistry::call('ArticleFileDAO::_returnArticleFileFromRow', array(&$articleFile, &$row)); return $articleFile; }
/** * Copies an existing ArticleFile and renames it. * @param $sourceFileId int * @param $sourceRevision int * @param $destType string * @param $destFileId int (optional) */ function copyAndRenameFile($sourceFileId, $sourceRevision, $destType, $destFileId = null) { if (HookRegistry::call('ArticleFileManager::copyAndRenameFile', array(&$sourceFileId, &$sourceRevision, &$destType, &$destFileId, &$result))) { return $result; } $articleFileDao =& DAORegistry::getDAO('ArticleFileDAO'); $articleFile = new ArticleFile(); $destTypePath = $this->typeToPath($destType); $destDir = $this->filesDir . $destTypePath . '/'; if ($destFileId != null) { $currentRevision = $articleFileDao->getRevisionNumber($destFileId); $revision = $currentRevision + 1; } else { $revision = 1; } $sourceArticleFile = $articleFileDao->getArticleFile($sourceFileId, $sourceRevision, $this->articleId); if (!isset($sourceArticleFile)) { return false; } $sourceDir = $this->filesDir . $sourceArticleFile->getType() . '/'; if ($destFileId != null) { $articleFile->setFileId($destFileId); } $articleFile->setArticleId($this->articleId); $articleFile->setSourceFileId($sourceFileId); $articleFile->setSourceRevision($sourceRevision); $articleFile->setFileName($sourceArticleFile->getFileName()); $articleFile->setFileType($sourceArticleFile->getFileType()); $articleFile->setFileSize($sourceArticleFile->getFileSize()); $articleFile->setOriginalFileName($sourceArticleFile->getFileName()); $articleFile->setType($destTypePath); $articleFile->setDateUploaded(Core::getCurrentDate()); $articleFile->setDateModified(Core::getCurrentDate()); $articleFile->setRound($this->article->getCurrentRound()); // FIXME This field is only applicable for review files? $articleFile->setRevision($revision); //%CBP% set fedora/repository information $articleFile->setFedoraNamespace($sourceArticleFile->getFedoraNamespace()); $articleFile->setFedoraPid($sourceArticleFile->getFedoraPid()); $articleFile->setFedoraDsid($sourceArticleFile->getFedoraDsid()); $fileId = $articleFileDao->insertArticleFile($articleFile); // Rename the file. $fileExtension = $this->parseFileExtension($sourceArticleFile->getFileName()); $newFileName = $this->articleId . '-' . $fileId . '-' . $revision . '-' . $destType . '.' . $fileExtension; if (!$this->fileExists($destDir, 'dir')) { // Try to create destination directory $this->mkdirtree($destDir); } copy($sourceDir . $sourceArticleFile->getFileName(), $destDir . $newFileName); $articleFile->setFileName($newFileName); $articleFileDao->updateArticleFile($articleFile); return $fileId; }