/**
  * 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;
 }