Skip to content

Commit

Permalink
Merge pull request #6948 from ProcessMaker/bugfix/FOUR-16632
Browse files Browse the repository at this point in the history
Add query-based pagination to tasks controller
  • Loading branch information
ryancooley authored Jun 17, 2024
2 parents 1d0240d + e9ca6aa commit f69e33b
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 60 deletions.
28 changes: 5 additions & 23 deletions ProcessMaker/Http/Controllers/Api/TaskController.php
Original file line number Diff line number Diff line change
Expand Up @@ -122,47 +122,29 @@ public function index(Request $request, $getTotal = false, User $user = null)

$this->applyForCurrentUser($query, $user);

try {
// Count up the total number of results, but
// watch for PMQL query exceptions and handle
// them if they occur
$totalResultCount = $query->count();
} catch (QueryException $e) {
return $this->handleQueryException($e);
}

// If only the total is being requested (by a Saved Search), send it now
if ($getTotal === true) {
return $totalResultCount;
}

// Apply filter overdue
$query->overdue($request->input('overdue'));

// If we should manually add pagination to the
// query in advance (also used by saved search)
if ($this->isPaginationEnabled()) {
$query->limit($request->input('per_page', 10));
// If only the total is being requested (by a Saved Search), send it now
if ($getTotal === true) {
return $query->count();
}

try {
$response = $query->get();
$response = $query->paginate($request->input('per_page', 10));
} catch (QueryException $e) {
return $this->handleQueryException($e);
}

$response = $this->applyUserFilter($response, $request, $user);

// Map each item through its resource
$response = $this->applyResource($response);

$inOverdueQuery = ProcessRequestToken::query()
->whereIn('id', $response->pluck('id'))
->where('due_at', '<', Carbon::now());

$response->inOverdue = $inOverdueQuery->count();

return new TaskCollection($response, $totalResultCount);
return new TaskCollection($response);
}

/**
Expand Down
37 changes: 0 additions & 37 deletions ProcessMaker/Traits/TaskControllerIndexMethods.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,6 @@

trait TaskControllerIndexMethods
{
/**
* Manually enable paginated results from the
* index method()
*
* @return void
*/
public function enableIndexPagination(): void
{
static::$paginate = true;
}

/**
* Determine if pagination was manually set for the
* index() method results
*
* @return bool
*/
public function isPaginationEnabled(): bool
{
return static::$paginate === true;
}

/**
* Used by saved search to paginate the results
* from the index() method
*
* @var bool
*/
protected static bool $paginate = false;

private function indexBaseQuery($request)
{
$query = ProcessRequestToken::with(['processRequest', 'user', 'draft']);
Expand Down Expand Up @@ -300,13 +270,6 @@ private function applyUserFilter($response, $request, $user)
return $response;
}

private function applyResource($response)
{
return $response->map(function ($processRequestToken) {
return new Resource($processRequestToken);
});
}

private function applyForCurrentUser($query, $user)
{
if ($user->is_administrator) {
Expand Down

0 comments on commit f69e33b

Please sign in to comment.