14 import(
'lib.pkp.classes.handler.APIHandler');
21 $this->_handlerPath =
'temporaryFiles';
22 $roles = array(ROLE_ID_SITE_ADMIN, ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR, ROLE_ID_ASSISTANT);
23 $this->_endpoints = array(
27 'handler' => array($this,
'getOptions'),
34 'handler' => array($this,
'uploadFile'),
40 parent::__construct();
46 public function authorize($request, &$args, $roleAssignments) {
47 import(
'lib.pkp.classes.security.authorization.PolicySet');
48 $rolePolicy =
new PolicySet(COMBINING_PERMIT_OVERRIDES);
50 import(
'lib.pkp.classes.security.authorization.RoleBasedHandlerOperationPolicy');
51 foreach($roleAssignments as $role => $operations) {
56 return parent::authorize($request, $args, $roleAssignments);
66 private function getResponse($response) {
67 return $response->withHeader(
'Access-Control-Allow-Headers',
'Content-Type, X-Requested-With, X-PINGOTHER, X-File-Name, Cache-Control');
78 public function uploadFile($slimRequest, $response, $args) {
82 return $response->withStatus(400)->withJsonError(
'api.temporaryFiles.400.noUpload');
85 import(
'lib.pkp.classes.file.TemporaryFileManager');
87 $fileName = $temporaryFileManager->getFirstUploadedPostName();
88 $uploadedFile = $temporaryFileManager->handleUpload($fileName, $request->getUser()->getId());
90 if ($uploadedFile ===
false) {
91 if ($temporaryFileManager->uploadError($fileName)) {
92 switch ($temporaryFileManager->getUploadErrorCode($fileName)) {
93 case UPLOAD_ERR_INI_SIZE:
94 case UPLOAD_ERR_FORM_SIZE:
96 case UPLOAD_ERR_PARTIAL:
97 return $response->withStatus(400)->withJsonError(
'api.temporaryFiles.409.uploadFailed');
98 case UPLOAD_ERR_NO_FILE:
99 return $response->withStatus(400)->withJsonError(
'api.temporaryFiles.400.noUpload');
100 case UPLOAD_ERR_NO_TMP_DIR:
101 case UPLOAD_ERR_CANT_WRITE:
102 case UPLOAD_ERR_EXTENSION:
103 return $response->withStatus(400)->withJsonError(
'api.temporaryFiles.400.config');
106 return $response->withStatus(400)->withJsonError(
'api.temporaryFiles.409.uploadFailed');
109 return $this->getResponse($response->withJson([
'id' => $uploadedFile->getId()]));
122 return $this->getResponse($response);