17 import(
'lib.pkp.api.v1.submissions.PKPSubmissionHandler');
18 import(
'lib.pkp.classes.handler.APIHandler');
19 import(
'classes.core.Services');
27 $this->_handlerPath =
'submissions';
32 'handler' => [$this,
'getMany'],
33 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR],
37 'handler' => [$this,
'get'],
38 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR],
42 'handler' => [$this,
'getParticipants'],
43 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR],
47 'handler' => [$this,
'getParticipants'],
48 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR],
52 'handler' => [$this,
'getPublications'],
53 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR],
56 'pattern' => $this->
getEndpointPattern() .
'/{submissionId}/publications/{publicationId}',
57 'handler' => [$this,
'getPublication'],
58 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR],
61 'pattern' => $this->
getEndpointPattern() .
'/{submissionId}/publications/{publicationId}/publish',
62 'handler' => [$this,
'publishPublication'],
63 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR],
69 'handler' => [$this,
'add'],
70 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR],
74 'handler' => [$this,
'addPublication'],
75 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR],
78 'pattern' => $this->
getEndpointPattern() .
'/{submissionId}/publications/{publicationId}/version',
79 'handler' => [$this,
'versionPublication'],
80 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR],
86 'handler' => [$this,
'edit'],
87 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR],
90 'pattern' => $this->
getEndpointPattern() .
'/{submissionId}/publications/{publicationId}',
91 'handler' => [$this,
'editPublication'],
92 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR],
95 'pattern' => $this->
getEndpointPattern() .
'/{submissionId}/publications/{publicationId}/publish',
96 'handler' => [$this,
'publishPublication'],
97 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR],
100 'pattern' => $this->
getEndpointPattern() .
'/{submissionId}/publications/{publicationId}/unpublish',
101 'handler' => [$this,
'unpublishPublication'],
102 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR],
105 'pattern' => $this->
getEndpointPattern() .
'/{submissionId}/publications/{publicationId}/relate',
106 'handler' => [$this,
'relatePublication'],
107 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR],
113 'handler' => [$this,
'delete'],
114 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR],
117 'pattern' => $this->
getEndpointPattern() .
'/{submissionId}/publications/{publicationId}',
118 'handler' => [$this,
'deletePublication'],
119 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT],
129 function authorize($request, &$args, $roleAssignments) {
130 $routeName = $this->
getSlimRequest()->getAttribute(
'route')->getName();
132 import(
'lib.pkp.classes.security.authorization.ContextAccessPolicy');
135 $requiresSubmissionAccess = [
144 'versionPublication',
146 'publishPublication',
147 'unpublishPublication',
151 if (in_array($routeName, $requiresSubmissionAccess)) {
152 import(
'lib.pkp.classes.security.authorization.SubmissionAccessPolicy');
156 $requiresPublicationWriteAccess = [
160 if (in_array($routeName, $requiresPublicationWriteAccess)) {
161 import(
'lib.pkp.classes.security.authorization.PublicationWritePolicy');
165 $requiresProductionStageAccess = [
166 'versionPublication',
167 'publishPublication',
168 'unpublishPublication',
172 if (in_array($routeName, $requiresProductionStageAccess)) {
174 import(
'lib.pkp.classes.security.authorization.internal.UserAccessibleWorkflowStageRequiredPolicy');
177 import(
'lib.pkp.classes.security.authorization.StageRolePolicy');
195 $publication =
Services::get(
'publication')->get((
int) $args[
'publicationId']);
198 return $response->withStatus(404)->withJsonError(
'api.404.resourceNotFound');
201 if ($submission->getId() !== $publication->getData(
'submissionId')) {
202 return $response->withStatus(403)->withJsonError(
'api.publications.403.submissionsDidNotMatch');
205 if (!
Services::get(
'publication')->canAuthorPublish($submission->getId())) {
206 return $response->withStatus(403)->withJsonError(
'api.publications.403.authorCantPublish');
209 $publication =
Services::get(
'publication')->relate($publication, $slimRequest->getParams());
211 $publicationProps =
Services::get(
'publication')->getFullProperties(
214 'request' => $request,
215 'userGroups' =>
DAORegistry::getDAO(
'UserGroupDAO')->getByContextId($submission->getData(
'contextId'))->toArray(),
219 return $response->withJson($publicationProps, 200);