17 import(
'lib.pkp.classes.handler.APIHandler');
18 import(
'classes.core.Services');
26 $this->_handlerPath =
'vocabs';
31 'handler' => [$this,
'getMany'],
32 'roles' => [ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_AUTHOR],
36 parent::__construct();
42 function authorize($request, &$args, $roleAssignments) {
43 import(
'lib.pkp.classes.security.authorization.ContextAccessPolicy');
46 return parent::authorize($request, $args, $roleAssignments);
57 public function getMany($slimRequest, $response, $args) {
59 $context = $request->getContext();
62 return $response->withStatus(404)->withJsonError(
'api.404.resourceNotFound');
65 $requestParams = $slimRequest->getQueryParams();
67 $vocab = !empty($requestParams[
'vocab']) ? $requestParams[
'vocab'] :
'';
70 if (!in_array($locale, $context->getData(
'supportedLocales'))) {
71 return $response->withStatus(400)->withJsonError(
'api.vocabs.400.localeNotSupported', [
'locale' => $locale]);
82 case CONTROLLED_VOCAB_SUBMISSION_KEYWORD:
84 $entries = $submissionKeywordEntryDao->getByContextId($vocab, $context->getId(), $locale)->toArray();
86 case CONTROLLED_VOCAB_SUBMISSION_SUBJECT:
88 $entries = $submissionSubjectEntryDao->getByContextId($vocab, $context->getId(), $locale)->toArray();
90 case CONTROLLED_VOCAB_SUBMISSION_DISCIPLINE:
92 $entries = $submissionDisciplineEntryDao->getByContextId($vocab, $context->getId(), $locale)->toArray();
94 case CONTROLLED_VOCAB_SUBMISSION_LANGUAGE:
95 $isoCodes = new \Sokil\IsoCodes\IsoCodesFactory(\Sokil\IsoCodes\IsoCodesFactory::OPTIMISATION_IO);
97 foreach ($isoCodes->getLanguages() as $language) {
98 if (!$language->getAlpha2() || $language->getType() !=
'L' || $language->getScope() !=
'I')
continue;
99 $languageNames[] = $language->getLocalName();
101 asort($languageNames);
102 return $response->withJson($languageNames, 200);
103 case CONTROLLED_VOCAB_SUBMISSION_AGENCY:
105 $entries = $submissionAgencyEntryDao->getByContextId($vocab, $context->getId(), $locale)->toArray();
109 \HookRegistry::call(
'API::vocabs::getMany', [$vocab, &$entries, $slimRequest, $response, $this->request]);
113 foreach ($entries as $entry) {
114 $data[] = $entry->getData($vocab, $locale);
117 $data = array_values(array_unique($data));
119 return $response->withJson($data, 200);