Skip to content

Commit 3e157ef

Browse files
committed
#11833 Refactor GET /editTaskTemplates to use Template scopes and camelCase params
1 parent 88a1590 commit 3e157ef

File tree

1 file changed

+64
-17
lines changed

1 file changed

+64
-17
lines changed

api/v1/editTaskTemplates/PKPEditTaskTemplateController.php

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
<<<<<<< HEAD
2-
=======
31
<?php
42

53
/**
@@ -21,8 +19,11 @@
2119
use Illuminate\Http\JsonResponse;
2220
use Illuminate\Http\Response;
2321
use Illuminate\Support\Facades\Route;
22+
use Illuminate\Support\Facades\DB;
2423
use PKP\core\PKPBaseController;
2524
use PKP\core\PKPRequest;
25+
use PKP\API\v1\editTaskTemplates\formRequests\AddTaskTemplate;
26+
use PKP\API\v1\editTaskTemplates\resources\TaskTemplateResource;
2627
use Illuminate\Http\Request;
2728
use PKP\security\authorization\CanAccessSettingsPolicy;
2829
use PKP\security\authorization\ContextAccessPolicy;
@@ -57,39 +58,85 @@ public function getGroupRoutes(): void
5758
Role::ROLE_ID_SITE_ADMIN,
5859
]),
5960
])->group(function () {
61+
Route::post('', $this->add(...));
6062
Route::get('', $this->getMany(...));
6163
});
6264
}
6365

66+
/**
67+
* POST /api/v1/editTaskTemplates
68+
*/
69+
public function add(AddTaskTemplate $illuminateRequest): JsonResponse
70+
{
71+
$context = $this->getRequest()->getContext();
72+
$validated = $illuminateRequest->validated();
73+
74+
$template = DB::transaction(function () use ($validated, $context) {
75+
$tpl = Template::create([
76+
'stage_id' => $validated['stageId'],
77+
'title' => $validated['title'],
78+
'context_id' => $context->getId(),
79+
'include' => $validated['include'] ?? false,
80+
'email_template_key' => $validated['emailTemplateKey'] ?? null,
81+
]);
82+
83+
$tpl->userGroups()->sync($validated['userGroupIds']);
84+
85+
return $tpl;
86+
});
87+
88+
// return via Resource
89+
return response()->json(
90+
(new TaskTemplateResource($template->refresh()->load('userGroups')))
91+
->toArray($illuminateRequest),
92+
Response::HTTP_OK
93+
);
94+
}
95+
6496
/**
6597
* GET /api/v1/editTaskTemplates
6698
*/
6799
public function getMany(Request $request): JsonResponse
68100
{
69101
$context = $this->getRequest()->getContext();
70102

71-
$q = Template::query()
72-
->byContextId((int) $context->getId())
103+
// Start with our standard collector/scopes
104+
$collector = Template::byContextId((int) $context->getId())
73105
->with('userGroups');
74106

75-
if ($request->filled('stageId')) {
76-
$q->where('stage_id', (int) $request->query('stageId'));
77-
}
107+
// Apply supported filters from query params via model scopes
108+
foreach ($request->query() as $param => $val) {
109+
switch ($param) {
110+
case 'stageId':
111+
if ($val !== null && $val !== '') {
112+
$collector = $collector->withStageId((int) $val);
113+
}
114+
break;
115+
116+
case 'include':
117+
// Accept "true"/"false", 1/0, etc.
118+
$bool = filter_var($val, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
119+
if ($bool !== null) {
120+
$collector = $collector->withInclude($bool);
121+
}
122+
break;
123+
124+
case 'emailTemplateKey':
125+
$key = trim((string) $val);
126+
if ($key !== '') {
127+
$collector = $collector->withEmailTemplateKey($key);
128+
}
129+
break;
78130

79-
if ($request->has('include')) {
80-
$include = filter_var($request->query('include'), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
81-
if ($include !== null) {
82-
$q->where('include', $include);
131+
// ignore unknown params
83132
}
84133
}
85134

86-
if ($request->filled('emailTemplateKey')) {
87-
$q->where('email_template_key', trim((string) $request->query('emailTemplateKey')));
88-
}
89-
$collection = $q->orderByPkDesc()->get();
135+
$collection = $collector->orderByPkDesc()->get();
136+
90137
return EditTaskTemplateResource::collection($collection)
91138
->response()
92139
->setStatusCode(Response::HTTP_OK);
93-
}
140+
}
141+
94142
}
95-
>>>>>>> 3036c1a2c0... pkp/pkp-lib#11833 Rename to getMany, drop validation, use scope, return collection

0 commit comments

Comments
 (0)