17 import(
'lib.pkp.classes.handler.APIHandler');
18 import(
'lib.pkp.classes.submission.PKPSubmission');
19 import(
'classes.core.Services');
27 $rootPattern =
'/{contextPath}/api/{version}/_submissions';
28 $this->_endpoints = array_merge_recursive($this->_endpoints, array(
31 'pattern' =>
"{$rootPattern}",
32 'handler' => array($this,
'getMany'),
45 'pattern' =>
"{$rootPattern}/{submissionId}",
46 'handler' => array($this,
'delete'),
55 parent::__construct();
61 function authorize($request, &$args, $roleAssignments) {
62 import(
'lib.pkp.classes.security.authorization.ContextAccessPolicy');
64 return parent::authorize($request, $args, $roleAssignments);
75 public function getMany($slimRequest, $response, $args) {
78 $currentUser = $request->getUser();
79 $context = $request->getContext();
82 $defaultParams = array(
90 $canAccessUnassignedSubmission = !empty(array_intersect(array(ROLE_ID_SITE_ADMIN, ROLE_ID_MANAGER), $userRoles));
91 if (!$canAccessUnassignedSubmission) {
92 $defaultParams[
'assignedTo'] = [$currentUser->getId()];
95 $params = array_merge($defaultParams, $slimRequest->getQueryParams());
98 foreach ($params as $param => $val) {
105 if (is_string($val) && strpos($val,
',') > -1) {
106 $val = explode(
',', $val);
107 } elseif (!is_array($val)) {
110 $params[$param] = array_map(
'intval', $val);
115 $params[$param] = (int) $val;
121 $params[$param] = min(100, (
int) $val);
125 if (!in_array($val, array(
'dateSubmitted',
'dateLastActivity',
'lastModified',
'title'))) {
126 unset($params[$param]);
130 case 'orderDirection':
131 $params[$param] = $val ===
'ASC' ? $val :
'DESC';
136 $params[$param] =
true;
140 $params[
'contextId'] = $context->getId();
142 \HookRegistry::call(
'API::_submissions::params', array(&$params, $slimRequest, $response));
146 if (!$canAccessUnassignedSubmission && !in_array($currentUser->getId(), $params[
'assignedTo'])) {
147 return $response->withStatus(403)->withJsonError(
'api.submissions.403.requestedOthersUnpublishedSubmissions');
150 $submissionsIterator =
Services::get(
'submission')->getMany($params);
152 if (count($submissionsIterator)) {
153 $propertyArgs = array(
154 'request' => $request,
155 'slimRequest' => $slimRequest,
157 foreach ($submissionsIterator as $submission) {
158 $items[] =
Services::get(
'submission')->getBackendListProperties($submission, $propertyArgs);
166 return $response->withJson($data);
177 public function delete($slimRequest, $response, $args) {
179 $context = $request->getContext();
180 $submissionId = (int) $args[
'submissionId'];
182 $submission = $submissionDao->getById($submissionId);
185 return $response->withStatus(404)->withJsonError(
'api.404.resourceNotFound');
188 if ($context->getId() != $submission->getContextId()) {
189 return $response->withStatus(403)->withJsonError(
'api.submissions.403.deleteSubmissionOutOfContext');
192 import(
'classes.core.Services');
193 if (!
Services::get(
'submission')->canCurrentUserDelete($submission)) {
194 return $response->withStatus(403)->withJsonError(
'api.submissions.403.unauthorizedDeleteSubmission');
199 return $response->withJson(
true);