diff --git a/ProcessMaker/Http/Controllers/Api/ProcessLaunchpadController.php b/ProcessMaker/Http/Controllers/Api/ProcessLaunchpadController.php index 367b353b88..1095d6c62c 100644 --- a/ProcessMaker/Http/Controllers/Api/ProcessLaunchpadController.php +++ b/ProcessMaker/Http/Controllers/Api/ProcessLaunchpadController.php @@ -4,6 +4,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; use ProcessMaker\Http\Controllers\Controller; use ProcessMaker\Http\Resources\ApiResource; use ProcessMaker\Http\Resources\ProcessCollection; @@ -47,8 +48,8 @@ public function getProcesses(Request $request) // Get the processes $processes = $processes ->select('processes.*') - ->orderBy('processes.name', 'asc') - ->paginate($perPage); + ->orderBy('processes.name', 'asc') + ->paginate($perPage); foreach ($processes as $process) { // Get the id bookmark related @@ -174,4 +175,60 @@ public function deleteEmbed(Request $request, Process $process) $embedUrl->delete(); } } + + public function getProcessesMenu(Request $request) + { + // Get the user + $user = Auth::user(); + // Get the processes active + $processes = Process::nonSystem()->active(); + // Filter by category + $category = $request->input('category', null); + if ($category === 'recent') { + $processes->orderByRecentRequests(); + } elseif (!empty($category)) { + $processes->processCategory($category); + } + // Filter pmql + $pmql = $request->input('pmql', ''); + if (!empty($pmql)) { + try { + $processes->pmql($pmql); + } catch (\ProcessMaker\Query\SyntaxError $e) { + return response(['error' => 'PMQL error'], 400); + } + } + + // Get with bookmark + $bookmark = $request->input('bookmark', false); + // Get with launchpad + $launchpad = $request->input('launchpad', false); + + $userId = $user->id; + + $processes = Process::select('processes.*') + ->distinct() + ->whereHas('requests', function($query) use ($userId) { + $query->where('user_id', $userId) + ->orWhereHas('tokens', function($query) use ($userId) { + $query->where('user_id', $userId); + }); + }) + ->where('asset_type', NULL) + ->orderBy('processes.name', 'asc') + ->get(); + + foreach ($processes as $process) { + // Get the id bookmark related + $process->bookmark_id = Bookmark::getBookmarked($bookmark, $process->id, $user->id); + // Get the launchpad configuration + $process->launchpad = ProcessLaunchpad::getLaunchpad($launchpad, $process->id); + } + + $process = $processes->map(function ($process) { + $process->counts = $process->getCounts(); + }); + + return new ProcessCollection($processes); + } } diff --git a/resources/js/tasks/components/ProcessesDashboardsMenu.vue b/resources/js/tasks/components/ProcessesDashboardsMenu.vue index e99ff38fd0..9a936d48fa 100644 --- a/resources/js/tasks/components/ProcessesDashboardsMenu.vue +++ b/resources/js/tasks/components/ProcessesDashboardsMenu.vue @@ -148,7 +148,7 @@ export default { * Build URL for Process Cards */ buildURL() { - return `process_bookmarks/processes? + return `process_bookmarks/processes/menu? &pmql=${encodeURIComponent(this.pmql)} &bookmark=true &launchpad=true diff --git a/routes/api.php b/routes/api.php index 43f4a90208..1d48e244e3 100644 --- a/routes/api.php +++ b/routes/api.php @@ -163,6 +163,8 @@ )->name('processes.start.events')->middleware($middlewareCatalog); Route::get('process_bookmarks/processes', [ProcessLaunchpadController::class, 'getProcesses']) ->name('processes.launchpad.index')->middleware($middlewareCatalog); + Route::get('process_bookmarks/processes/menu', [ProcessLaunchpadController::class, 'getProcessesMenu']) + ->name('processes.launchpad.menu')->middleware($middlewareCatalog); Route::get('process_bookmarks/categories', [ProcessCategoryController::class, 'index']) ->name('bookmarks.categories.index')->middleware($middlewareCatalog); Route::get('process_bookmarks/{process_category}', [ProcessCategoryController::class, 'show'])