diff --git a/ProcessMaker/Http/Controllers/Api/TaskController.php b/ProcessMaker/Http/Controllers/Api/TaskController.php index eef97a0ad2..a4653e6013 100644 --- a/ProcessMaker/Http/Controllers/Api/TaskController.php +++ b/ProcessMaker/Http/Controllers/Api/TaskController.php @@ -90,6 +90,15 @@ class TaskController extends Controller * type="integer", * ) * ), + * @OA\Parameter( + * description="Return all task types. Not just user tasks.", + * in="query", + * name="all_tasks", + * required=false, + * @OA\Schema( + * type="boolean", + * ) + * ), * @OA\Parameter(ref="#/components/parameters/filter"), * @OA\Parameter(ref="#/components/parameters/order_by"), * @OA\Parameter(ref="#/components/parameters/order_direction"), diff --git a/ProcessMaker/Traits/TaskControllerIndexMethods.php b/ProcessMaker/Traits/TaskControllerIndexMethods.php index 078843c950..540091431a 100644 --- a/ProcessMaker/Traits/TaskControllerIndexMethods.php +++ b/ProcessMaker/Traits/TaskControllerIndexMethods.php @@ -149,7 +149,8 @@ private function addTaskData($response) private function excludeNonVisibleTasks($query, $request) { $nonSystem = filter_var($request->input('non_system'), FILTER_VALIDATE_BOOLEAN); - $query->where(function ($query) { + $allTasks = filter_var($request->input('all_tasks'), FILTER_VALIDATE_BOOLEAN); + $query->when(!$allTasks, function ($query) { $query->where('element_type', '=', 'task'); $query->orWhere('element_type', '=', 'serviceTask'); $query->where('element_name', '=', 'AI Assistant'); diff --git a/storage/api-docs/api-docs.json b/storage/api-docs/api-docs.json index 731267f97e..3755004f8f 100644 --- a/storage/api-docs/api-docs.json +++ b/storage/api-docs/api-docs.json @@ -6139,6 +6139,15 @@ "type": "integer" } }, + { + "name": "all_tasks", + "in": "query", + "description": "Return all task types. Not just user tasks.", + "required": false, + "schema": { + "type": "boolean" + } + }, { "$ref": "#/components/parameters/filter" }, diff --git a/tests/Feature/Api/TasksTest.php b/tests/Feature/Api/TasksTest.php index f5de5e7539..0c3e727f1d 100644 --- a/tests/Feature/Api/TasksTest.php +++ b/tests/Feature/Api/TasksTest.php @@ -832,4 +832,43 @@ public function testGetScreenFields() $this->assertEquals($expectedFields, $jsonResponse); } + + public function testGetAllTaskTypes() + { + $request = ProcessRequest::factory()->create(); + + $taskAttributes = [ + 'process_request_id' => $request->id, + 'process_id' => $request->process_id, + 'element_type' => 'task', + 'user_id' => $this->user->id, + ]; + + $userTask = ProcessRequestToken::factory()->create($taskAttributes); + $scriptTask = ProcessRequestToken::factory()->create([...$taskAttributes, 'element_type' => 'scriptTask']); + $gatewayTask = ProcessRequestToken::factory()->create([...$taskAttributes, 'element_type' => 'gateway']); + + $queryString = http_build_query([ + 'pmql' => "process_request_id = {$request->id}", + ]); + $response = $this->apiCall('GET', '/tasks?' . $queryString); + + // Assert default behavior: only human tasks + $response = $response->json(); + $this->assertCount(1, $response['data']); + $this->assertEquals($userTask->id, $response['data'][0]['id']); + + $queryString = http_build_query([ + 'pmql' => "process_request_id = {$request->id}", + 'all_tasks' => 1, + ]); + $response = $this->apiCall('GET', '/tasks?' . $queryString); + + // Assert all tasks returned + $response = $response->json(); + $this->assertCount(3, $response['data']); + $this->assertEquals($userTask->id, $response['data'][0]['id']); + $this->assertEquals($scriptTask->id, $response['data'][1]['id']); + $this->assertEquals($gatewayTask->id, $response['data'][2]['id']); + } }