17 import(
'lib.pkp.classes.handler.APIHandler');
18 import(
'classes.core.Services');
26 $this->_handlerPath =
'issues';
27 $roles = array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR);
28 $this->_endpoints = array(
32 'handler' => array($this,
'getMany'),
37 'handler' => array($this,
'getCurrent'),
42 'handler' => array($this,
'get'),
47 parent::__construct();
53 function authorize($request, &$args, $roleAssignments) {
57 if (!is_null($slimRequest) && ($route = $slimRequest->getAttribute(
'route'))) {
58 $routeName = $route->getName();
61 import(
'lib.pkp.classes.security.authorization.ContextRequiredPolicy');
64 import(
'lib.pkp.classes.security.authorization.ContextAccessPolicy');
67 import(
'classes.security.authorization.OjsJournalMustPublishPolicy');
70 if ($routeName ===
'get') {
71 import(
'classes.security.authorization.OjsIssueRequiredPolicy');
75 return parent::authorize($request, $args, $roleAssignments);
88 public function getMany($slimRequest, $response, $args) {
90 $currentUser = $request->getUser();
91 $context = $request->getContext();
94 return $response->withStatus(404)->withJsonError(
'api.404.resourceNotFound');
97 $defaultParams = array(
102 $requestParams = array_merge($defaultParams, $slimRequest->getQueryParams());
107 foreach ($requestParams as $param => $val) {
111 if (in_array($val, array(
'datePublished',
'lastModified',
'seq'))) {
112 $params[$param] = $val;
116 case 'orderDirection':
117 $params[$param] = $val ===
'ASC' ? $val :
'DESC';
123 $params[$param] = min(100, (
int) $val);
127 $params[$param] = (int) $val;
139 if (substr($param, -1) !==
's') {
143 if (is_string($val) && strpos($val,
',') > -1) {
144 $val = explode(
',', $val);
145 } elseif (!is_array($val)) {
148 $params[$param] = array_map(
'intval', $val);
152 $params[$param] = $val ? true :
false;
156 $params[$param] = $val;
161 $params[
'contextId'] = $context->getId();
166 $isAdmin = $currentUser->hasRole(array(ROLE_ID_MANAGER), $context->getId()) || $currentUser->hasRole(array(ROLE_ID_SITE_ADMIN), CONTEXT_SITE);
167 if (isset($params[
'isPublished']) && !$params[
'isPublished'] && !$isAdmin) {
168 return $response->withStatus(403)->withJsonError(
'api.submissions.403.unpublishedIssues');
169 } elseif (!$isAdmin) {
170 $params[
'isPublished'] =
true;
175 if (count($issuesIterator)) {
176 $propertyArgs = array(
177 'request' => $request,
178 'slimRequest' => $slimRequest,
180 foreach ($issuesIterator as $issue) {
181 $items[] =
Services::get(
'issue')->getSummaryProperties($issue, $propertyArgs);
190 return $response->withJson($data, 200);
205 $context = $request->getContext();
208 $issue = $issueDao->getCurrent($context->getId());
211 return $response->withStatus(404)->withJsonError(
'api.404.resourceNotFound');
214 $data =
Services::get(
'issue')->getFullProperties($issue, array(
215 'request' => $request,
216 'slimRequest' => $slimRequest,
219 return $response->withJson($data, 200);
231 public function get($slimRequest, $response, $args) {
236 return $response->withStatus(404)->withJsonError(
'api.404.resourceNotFound');
239 $data =
Services::get(
'issue')->getFullProperties($issue, array(
240 'request' => $request,
241 'slimRequest' => $slimRequest,
244 return $response->withJson($data, 200);