Open Journal Systems  3.3.0
PKPStatsEditorialHandler.inc.php
1 <?php
2 
17 import('lib.pkp.classes.handler.APIHandler');
18 import('classes.core.Services');
19 
20 abstract class PKPStatsEditorialHandler extends APIHandler {
21 
25  public function __construct() {
26  $this->_handlerPath = 'stats/editorial';
27  $this->_endpoints = [
28  'GET' => [
29  [
30  'pattern' => $this->getEndpointPattern(),
31  'handler' => [$this, 'get'],
32  'roles' => [ROLE_ID_SITE_ADMIN, ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR],
33  ],
34  [
35  'pattern' => $this->getEndpointPattern() . '/averages',
36  'handler' => [$this, 'getAverages'],
37  'roles' => [ROLE_ID_SITE_ADMIN, ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR],
38  ],
39  ],
40  ];
41  parent::__construct();
42  }
43 
47  function authorize($request, &$args, $roleAssignments) {
48 
49  import('lib.pkp.classes.security.authorization.ContextAccessPolicy');
50  $this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
51 
52  import('lib.pkp.classes.security.authorization.PolicySet');
53  $rolePolicy = new PolicySet(COMBINING_PERMIT_OVERRIDES);
54  import('lib.pkp.classes.security.authorization.RoleBasedHandlerOperationPolicy');
55  foreach ($roleAssignments as $role => $operations) {
56  $rolePolicy->addPolicy(new RoleBasedHandlerOperationPolicy($request, $role, $operations));
57  }
58  $this->addPolicy($rolePolicy);
59 
60  return parent::authorize($request, $args, $roleAssignments);
61  }
62 
74  public function get($slimRequest, $response, $args) {
75  $request = $this->getRequest();
76 
77  if (!$request->getContext()) {
78  return $response->withStatus(404)->withJsonError('api.404.resourceNotFound');
79  }
80 
81  $params = [];
82  foreach ($slimRequest->getQueryParams() as $param => $value) {
83  switch ($param) {
84  case 'dateStart':
85  case 'dateEnd':
86  $params[$param] = $value;
87  break;
88 
89  case $this->sectionIdsQueryParam:
90  if (is_string($value) && strpos($value, ',') > -1) {
91  $value = explode(',', $value);
92  } elseif (!is_array($value)) {
93  $value = [$value];
94  }
95  $params[$param] = array_map('intval', $value);
96  break;
97  }
98  }
99 
100  \HookRegistry::call('API::stats::editorial::params', array(&$params, $slimRequest));
101 
102  $params['contextIds'] = [$request->getContext()->getId()];
103 
104  $result = $this->_validateStatDates($params);
105  if ($result !== true) {
106  return $response->withStatus(400)->withJsonError($result);
107  }
108 
109  return $response->withJson(array_map(
110  function ($item) {
111  $item['name'] = __($item['name']);
112  return $item;
113  },
114  Services::get('editorialStats')->getOverview($params)
115  ));
116  }
117 
129  public function getAverages($slimRequest, $response, $args) {
130  $request = $this->getRequest();
131 
132  if (!$request->getContext()) {
133  return $response->withStatus(404)->withJsonError('api.404.resourceNotFound');
134  }
135 
136  $params = [];
137  foreach ($slimRequest->getQueryParams() as $param => $value) {
138  switch ($param) {
139  case $this->sectionIdsQueryParam:
140  if (is_string($value) && strpos($value, ',') > -1) {
141  $value = explode(',', $value);
142  } elseif (!is_array($value)) {
143  $value = [$value];
144  }
145  $params[$param] = array_map('intval', $value);
146  break;
147  }
148  }
149 
150  \HookRegistry::call('API::stats::editorial::averages::params', array(&$params, $slimRequest));
151 
152  $params['contextIds'] = [$request->getContext()->getId()];
153 
154  return $response->withJson(Services::get('editorialStats')->getAverages($params));
155  }
156 }
PKPStatsEditorialHandler\__construct
__construct()
Definition: PKPStatsEditorialHandler.inc.php:25
ContextAccessPolicy
Class to control access to PKP applications' setup components.
Definition: ContextAccessPolicy.inc.php:17
APIHandler\_validateStatDates
_validateStatDates($params, $dateStartParam='dateStart', $dateEndParam='dateEnd')
Definition: APIHandler.inc.php:396
PKPStatsEditorialHandler\getAverages
getAverages($slimRequest, $response, $args)
Definition: PKPStatsEditorialHandler.inc.php:129
APIHandler
Base request API handler.
Definition: APIHandler.inc.php:22
PKPStatsEditorialHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: PKPStatsEditorialHandler.inc.php:47
PKPStatsEditorialHandler
Handle API requests for publication statistics.
Definition: PKPStatsEditorialHandler.inc.php:20
RoleBasedHandlerOperationPolicy
Class to control access to handler operations via role based access control.
Definition: RoleBasedHandlerOperationPolicy.inc.php:18
APIHandler\getRequest
getRequest()
Definition: APIHandler.inc.php:149
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
APIHandler\getEndpointPattern
getEndpointPattern()
Definition: APIHandler.inc.php:186
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
PolicySet
An ordered list of policies. Policy sets can be added to decision managers like policies....
Definition: PolicySet.inc.php:26
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49