20 import(
'classes.handler.Handler');
21 import(
'lib.pkp.classes.core.JSONMessage');
22 import(
'lib.pkp.classes.file.SubmissionFileManager');
23 import(
'lib.pkp.classes.security.authorization.SubmissionFileAccessPolicy');
31 parent::__construct();
33 array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR),
34 array(
'downloadFile',
'downloadLibraryFile',
'downloadAllFiles',
'recordDownload',
'enableLinkAction')
41 function authorize($request, &$args, $roleAssignments) {
42 $fileIds = $request->getUserVar(
'filesIdsAndRevisions');
43 $libraryFileId = $request->getUserVar(
'libraryFileId');
45 if (is_string($fileIds)) {
46 $fileIdsArray = explode(
';', $fileIds);
48 $fileIdsArray = array_filter($fileIdsArray,
function($a) {
52 if (!empty($fileIdsArray)) {
53 $multipleSubmissionFileAccessPolicy =
new PolicySet(COMBINING_DENY_OVERRIDES);
54 foreach ($fileIdsArray as $fileIdAndRevision) {
55 $multipleSubmissionFileAccessPolicy->addPolicy($this->
_getAccessPolicy($request, $args, $roleAssignments, $fileIdAndRevision));
57 $this->
addPolicy($multipleSubmissionFileAccessPolicy);
58 }
else if (is_numeric($libraryFileId)) {
59 import(
'lib.pkp.classes.security.authorization.ContextAccessPolicy');
66 return parent::authorize($request, $args, $roleAssignments);
79 assert(isset($submissionFile));
80 $context = $request->getContext();
81 $fileManager = $this->
_getFileManager($context->getId(), $submissionFile->getSubmissionId());
82 if (!$fileManager->downloadById($submissionFile->getFileId(), $submissionFile->getRevision(),
false, $submissionFile->getClientFileName())) {
83 error_log(
'FileApiHandler: File ' . $submissionFile->getFilePath() .
' does not exist or is not readable!');
84 header(
'HTTP/1.0 500 Internal Server Error');
95 import(
'lib.pkp.pages.libraryFiles.LibraryFileHandler');
97 return $libraryFileHandler->downloadLibraryFile($args, $request);
111 $context = $request->getContext();
112 $filePaths = array();
113 $fileManager = $this->
_getFileManager($context->getId(), $submission->getId());
114 $filesDir = $fileManager->getBasePath();
115 foreach ($submissionFiles as $submissionFile) {
117 $filePaths[str_replace($filesDir,
'', $submissionFile->getFilePath())] = $submissionFile->getClientFileName();
121 import(
'lib.pkp.classes.file.FileArchive');
123 $archivePath = $fileArchive->create($filePaths, $filesDir);
124 if (file_exists($archivePath)) {
126 if ($fileArchive->zipFunctional()) {
127 $fileManager->downloadByPath($archivePath,
'application/x-zip',
false,
'files.zip');
129 $fileManager->downloadByPath($archivePath,
'application/x-gtar',
false,
'files.tar.gz');
131 $fileManager->deleteByPath($archivePath);
133 fatalError(
'Creating archive with submission files failed!');
147 foreach ($submissionFiles as $submissionFile) {
148 $submissionFileManager =
new SubmissionFileManager($request->getContext()->getId(), $submissionFile->getSubmissionId());
149 $submissionFileManager->recordView($submissionFile);
150 $fileId = $submissionFile->getFileId();
151 unset($submissionFile);
154 if (count($submissionFiles) > 1) {