15 import(
'lib.pkp.classes.handler.APIHandler');
22 $this->_handlerPath =
'emailTemplates';
23 $roles = [ROLE_ID_SITE_ADMIN, ROLE_ID_MANAGER];
28 'handler' => [$this,
'getMany'],
33 'handler' => [$this,
'get'],
40 'handler' => [$this,
'add'],
47 'handler' => [$this,
'edit'],
54 'handler' => [$this,
'restoreDefaults'],
59 'handler' => [$this,
'delete'],
64 parent::__construct();
70 public function authorize($request, &$args, $roleAssignments) {
71 import(
'lib.pkp.classes.security.authorization.PolicySet');
72 $rolePolicy =
new PolicySet(COMBINING_PERMIT_OVERRIDES);
75 import(
'lib.pkp.classes.security.authorization.ContextRequiredPolicy');
78 import(
'lib.pkp.classes.security.authorization.RoleBasedHandlerOperationPolicy');
79 foreach ($roleAssignments as $role => $operations) {
84 return parent::authorize($request, $args, $roleAssignments);
95 public function getMany($slimRequest, $response, $args) {
101 foreach ($slimRequest->getQueryParams() as $param => $val) {
105 $allowedParams[$param] = (bool) $val;
111 if (is_string($val) && strpos($val,
',') > -1) {
112 $val = explode(
',', $val);
113 } elseif (!is_array($val)) {
116 $allowedParams[$param] = array_map(
'intval', $val);
119 $allowedParams[$param] = trim($val);
127 $allowedParams[
'contextId'] = $request->getContext()->getId();
130 $emailTemplatesIterator =
Services::get(
'emailTemplate')->getMany($allowedParams);
131 foreach ($emailTemplatesIterator as $emailTemplate) {
132 $items[] =
Services::get(
'emailTemplate')->getSummaryProperties($emailTemplate, [
133 'slimRequest' => $slimRequest,
134 'request' => $request,
135 'supportedLocales' => $request->getContext()->getData(
'supportedFormLocales'),
140 'itemsMax' =>
Services::get(
'emailTemplate')->getMax($allowedParams),
144 return $response->withJson($data, 200);
156 public function get($slimRequest, $response, $args) {
159 $emailTemplate =
Services::get(
'emailTemplate')->getByKey($request->getContext()->getId(), $args[
'key']);
161 if (!$emailTemplate) {
162 return $response->withStatus(404)->withJsonError(
'api.emailTemplates.404.templateNotFound');
165 $data =
Services::get(
'emailTemplate')->getFullProperties($emailTemplate, [
166 'slimRequest' => $slimRequest,
167 'request' => $request,
168 'supportedLocales' => $request->getContext()->getData(
'supportedFormLocales'),
171 return $response->withJson($data, 200);
183 public function add($slimRequest, $response, $args) {
185 $requestContext = $request->getContext();
189 if (!isset($params[
'contexId'])) {
190 $params[
'contextId'] = $requestContext->getId();
193 $primaryLocale = $requestContext->getData(
'primaryLocale');
194 $allowedLocales = $requestContext->getData(
'supportedFormLocales');
195 $errors =
Services::get(
'emailTemplate')->validate(VALIDATE_ACTION_ADD, $params, $allowedLocales, $primaryLocale);
197 if (!empty($errors)) {
198 return $response->withStatus(400)->withJson($errors);
202 $emailTemplate->_data = $params;
203 $emailTemplate =
Services::get(
'emailTemplate')->add($emailTemplate, $request);
205 $data =
Services::get(
'emailTemplate')->getFullProperties($emailTemplate, [
206 'slimRequest' => $slimRequest,
207 'request' => $request,
208 'supportedLocales' => $requestContext->getData(
'supportedFormLocales'),
211 return $response->withJson($data, 200);
223 public function edit($slimRequest, $response, $args) {
225 $requestContext = $request->getContext();
227 $emailTemplate =
Services::get(
'emailTemplate')->getByKey($requestContext->getId(), $args[
'key']);
229 if (!$emailTemplate) {
230 return $response->withStatus(404)->withJsonError(
'api.emailTemplates.404.templateNotFound');
234 $params[
'key'] = $args[
'key'];
239 if (isset($params[
'contextId'])
240 && !in_array(ROLE_ID_SITE_ADMIN, $userRoles)
241 && $params[
'contextId'] !== $requestContext->getId()) {
242 return $response->withStatus(403)->withJsonError(
'api.emailTemplates.403.notAllowedChangeContext');
243 } elseif (!isset($params[
'contextId'])) {
244 $params[
'contextId'] = $requestContext->getId();
248 VALIDATE_ACTION_EDIT,
250 $requestContext->getData(
'supportedFormLocales'),
251 $requestContext->getData(
'primaryLocale')
254 if (!empty($errors)) {
255 return $response->withStatus(400)->withJson($errors);
258 $emailTemplate =
Services::get(
'emailTemplate')->edit($emailTemplate, $params, $request);
260 $data =
Services::get(
'emailTemplate')->getFullProperties($emailTemplate, [
261 'slimRequest' => $slimRequest,
262 'request' => $request,
263 'supportedLocales' => $requestContext->getData(
'supportedFormLocales'),
266 return $response->withJson($data, 200);
278 public function delete($slimRequest, $response, $args) {
280 $requestContext = $request->getContext();
282 $emailTemplate =
Services::get(
'emailTemplate')->getByKey($requestContext->getId(), $args[
'key']);
285 if (!$emailTemplate || !$emailTemplate->getData(
'id')) {
286 return $response->withStatus(404)->withJsonError(
'api.emailTemplates.404.templateNotFound');
289 $emailTemplateProps =
Services::get(
'emailTemplate')->getFullProperties($emailTemplate, [
290 'slimRequest' => $slimRequest,
291 'request' => $request,
292 'supportedLocales' => $requestContext->getData(
'supportedFormLocales'),
297 return $response->withJson($emailTemplateProps, 200);
310 $contextId = $this->
getRequest()->getContext()->getId();
311 $deletedKeys =
Services::get(
'emailTemplate')->restoreDefaults($contextId);
312 return $response->withJson($deletedKeys, 200);