/** * 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->setFileStage($row['file_stage']); $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']); HookRegistry::call('ArticleFileDAO::_returnArticleFileFromRow', array(&$articleFile, &$row)); return $articleFile; }
/** * PRIVATE routine to copy an article file and add it to the database. * @param $url original filename/url of the file * @param $mimeType string the mime type of the file * @param $fileStage string identifying type * @param $fileId int ID of an existing file to update * @param $overwrite boolean overwrite all previous revisions of the file (revision number is still incremented) * @return int the file ID (false if upload failed) */ function handleCopy($url, $mimeType, $fileStage, $fileId = null, $overwrite = false) { if (HookRegistry::call('ArticleFileManager::handleCopy', array(&$url, &$mimeType, &$fileStage, &$fileId, &$overwrite, &$result))) { return $result; } $articleFileDao =& DAORegistry::getDAO('ArticleFileDAO'); $fileStagePath = $this->fileStageToPath($fileStage); $dir = $this->filesDir . $fileStagePath . '/'; if (!$fileId) { // Insert dummy file to generate file id FIXME? $dummyFile = true; $articleFile =& $this->generateDummyFile($this->article); } else { $dummyFile = false; $articleFile = new ArticleFile(); $articleFile->setRevision($articleFileDao->getRevisionNumber($fileId) + 1); $articleFile->setArticleId($this->articleId); $articleFile->setFileId($fileId); $articleFile->setDateUploaded(Core::getCurrentDate()); $articleFile->setDateModified(Core::getCurrentDate()); } $articleFile->setFileType($mimeType); $articleFile->setOriginalFileName(ArticleFileManager::truncateFileName(basename($url), 127)); $articleFile->setFileStage($fileStage); $articleFile->setRound($this->article->getCurrentRound()); $newFileName = $this->generateFilename($articleFile, $fileStage, $articleFile->getOriginalFileName()); if (!$this->copyFile($url, $dir . $newFileName)) { // Delete the dummy file we inserted $articleFileDao->deleteArticleFileById($articleFile->getFileId()); return false; } $articleFile->setFileSize(filesize($dir . $newFileName)); if ($dummyFile) { $articleFileDao->updateArticleFile($articleFile); } else { $articleFileDao->insertArticleFile($articleFile); } if ($overwrite) { $this->removePriorRevisions($articleFile->getFileId(), $articleFile->getRevision()); } return $articleFile->getFileId(); }