Open Monograph Press  3.3.0
PKPVocabHandler.inc.php
1 <?php
2 
17 import('lib.pkp.classes.handler.APIHandler');
18 import('classes.core.Services');
19 
20 class PKPVocabHandler extends APIHandler {
21 
25  public function __construct() {
26  $this->_handlerPath = 'vocabs';
27  $this->_endpoints = [
28  'GET' => [
29  [
30  'pattern' => $this->getEndpointPattern(),
31  'handler' => [$this, 'getMany'],
32  'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR],
33  ],
34  ],
35  ];
36  parent::__construct();
37  }
38 
39  //
40  // Implement methods from PKPHandler
41  //
42  function authorize($request, &$args, $roleAssignments) {
43  import('lib.pkp.classes.security.authorization.ContextAccessPolicy');
44  $this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
45 
46  return parent::authorize($request, $args, $roleAssignments);
47  }
48 
57  public function getMany($slimRequest, $response, $args) {
58  $request = Application::get()->getRequest();
59  $context = $request->getContext();
60 
61  if (!$context) {
62  return $response->withStatus(404)->withJsonError('api.404.resourceNotFound');
63  }
64 
65  $requestParams = $slimRequest->getQueryParams();
66 
67  $vocab = !empty($requestParams['vocab']) ? $requestParams['vocab'] : '';
68  $locale = !empty($requestParams['locale']) ? $requestParams['locale'] : AppLocale::getLocale();
69 
70  if (!in_array($locale, $context->getData('supportedLocales'))) {
71  return $response->withStatus(400)->withJsonError('api.vocabs.400.localeNotSupported', ['locale' => $locale]);
72  }
73 
74  // Load constants
75  DAORegistry::getDAO('SubmissionKeywordDAO');
76  DAORegistry::getDAO('SubmissionSubjectDAO');
77  DAORegistry::getDAO('SubmissionDisciplineDAO');
78  DAORegistry::getDAO('SubmissionLanguageDAO');
79  DAORegistry::getDAO('SubmissionAgencyDAO');
80 
81  switch ($vocab) {
82  case CONTROLLED_VOCAB_SUBMISSION_KEYWORD:
83  $submissionKeywordEntryDao = DAORegistry::getDAO('SubmissionKeywordEntryDAO'); /* @var $submissionKeywordEntryDao SubmissionKeywordEntryDAO */
84  $entries = $submissionKeywordEntryDao->getByContextId($vocab, $context->getId(), $locale)->toArray();
85  break;
86  case CONTROLLED_VOCAB_SUBMISSION_SUBJECT:
87  $submissionSubjectEntryDao = DAORegistry::getDAO('SubmissionSubjectEntryDAO'); /* @var $submissionSubjectEntryDao SubmissionSubjectEntryDAO */
88  $entries = $submissionSubjectEntryDao->getByContextId($vocab, $context->getId(), $locale)->toArray();
89  break;
90  case CONTROLLED_VOCAB_SUBMISSION_DISCIPLINE:
91  $submissionDisciplineEntryDao = DAORegistry::getDAO('SubmissionDisciplineEntryDAO'); /* @var $submissionDisciplineEntryDao SubmissionDisciplineEntryDAO */
92  $entries = $submissionDisciplineEntryDao->getByContextId($vocab, $context->getId(), $locale)->toArray();
93  break;
94  case CONTROLLED_VOCAB_SUBMISSION_LANGUAGE:
95  $isoCodes = new \Sokil\IsoCodes\IsoCodesFactory(\Sokil\IsoCodes\IsoCodesFactory::OPTIMISATION_IO);
96  $languageNames = [];
97  foreach ($isoCodes->getLanguages() as $language) {
98  if (!$language->getAlpha2() || $language->getType() != 'L' || $language->getScope() != 'I') continue;
99  $languageNames[] = $language->getLocalName();
100  }
101  asort($languageNames);
102  return $response->withJson($languageNames, 200);
103  case CONTROLLED_VOCAB_SUBMISSION_AGENCY:
104  $submissionAgencyEntryDao = DAORegistry::getDAO('SubmissionAgencyEntryDAO'); /* @var $submissionAgencyEntryDao SubmissionAgencyEntryDAO */
105  $entries = $submissionAgencyEntryDao->getByContextId($vocab, $context->getId(), $locale)->toArray();
106  break;
107  default:
108  $entries = [];
109  \HookRegistry::call('API::vocabs::getMany', [$vocab, &$entries, $slimRequest, $response, $this->request]);
110  }
111 
112  $data = [];
113  foreach ($entries as $entry) {
114  $data[] = $entry->getData($vocab, $locale);
115  }
116 
117  $data = array_values(array_unique($data));
118 
119  return $response->withJson($data, 200);
120  }
121 }
ContextAccessPolicy
Class to control access to PKP applications' setup components.
Definition: ContextAccessPolicy.inc.php:17
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPVocabHandler\getMany
getMany($slimRequest, $response, $args)
Definition: PKPVocabHandler.inc.php:57
APIHandler
Base request API handler.
Definition: APIHandler.inc.php:22
PKPVocabHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: PKPVocabHandler.inc.php:42
PKPVocabHandler\__construct
__construct()
Definition: PKPVocabHandler.inc.php:25
PKPVocabHandler
Handle API requests for controlled vocab operations.
Definition: PKPVocabHandler.inc.php:20
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
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
AppLocale\getLocale
static getLocale()
Definition: env1/MockAppLocale.inc.php:40