diff --git a/ProcessMaker/Http/Controllers/Api/ProcessController.php b/ProcessMaker/Http/Controllers/Api/ProcessController.php index 6a834fef74..8ea9f56958 100644 --- a/ProcessMaker/Http/Controllers/Api/ProcessController.php +++ b/ProcessMaker/Http/Controllers/Api/ProcessController.php @@ -107,6 +107,11 @@ public function index(Request $request) if (!empty($filter)) { $processes->filter($filter); } + // Filter by category + $category = $request->input('category', null); + if (!empty($category)) { + $processes->processCategory($category); + } if (!empty($pmql)) { try { diff --git a/ProcessMaker/Http/Controllers/ProcessesCatalogueController.php b/ProcessMaker/Http/Controllers/ProcessesCatalogueController.php index c7f30e0dc0..b5a6f7ea11 100644 --- a/ProcessMaker/Http/Controllers/ProcessesCatalogueController.php +++ b/ProcessMaker/Http/Controllers/ProcessesCatalogueController.php @@ -20,11 +20,9 @@ public function index(Request $request) * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ - public function open(Process $process, $id) + public function open(Process $process, Request $request) { - return view('processes-catalogue.open', [ - 'process' => $process, - 'processId' => $id, - ]); + $category = $request->input('category') ?? 0; + return view('processes-catalogue.open', compact('process', 'category')); } } diff --git a/ProcessMaker/Http/Middleware/GenerateMenus.php b/ProcessMaker/Http/Middleware/GenerateMenus.php index d2d0368fd8..cebb3afd04 100644 --- a/ProcessMaker/Http/Middleware/GenerateMenus.php +++ b/ProcessMaker/Http/Middleware/GenerateMenus.php @@ -29,18 +29,18 @@ public function handle(Request $request, Closure $next) )->active('home/*'); }); } - $menu->group(['prefix' => 'requests'], function ($request_items) { - $request_items->add( - __('Requests'), - ['route' => 'requests.index', 'id' => 'requests'] - )->active('requests/*'); - }); $menu->group(['prefix' => 'processes'], function ($request_items) { $request_items->add( __('Processes'), ['route' => 'processes.catalogue.index', 'id' => 'processes-catalogue'] )->active('processes-catalogue/*'); }); + $menu->group(['prefix' => 'requests'], function ($request_items) { + $request_items->add( + __('Requests'), + ['route' => 'requests.index', 'id' => 'requests'] + )->active('requests/*'); + }); //@TODO change the index to the correct blade $menu->group(['prefix' => 'tasks'], function ($request_items) { $request_items->add( diff --git a/ProcessMaker/Models/Bookmark.php b/ProcessMaker/Models/Bookmark.php new file mode 100644 index 0000000000..67e3f64af7 --- /dev/null +++ b/ProcessMaker/Models/Bookmark.php @@ -0,0 +1,25 @@ +where('processes.status', 'ARCHIVED'); } + /** + * Scope a query to include a specific category + */ + public function scopeProcessCategory($query, int $id) + { + return $query->where('processes.process_category_id', $id); + } + public function getCollaborations() { $this->bpmnDefinitions = app(BpmnDocumentInterface::class, ['process' => $this]); diff --git a/database/migrations/2023_11_30_165723_add_launchpad_properties_at_processes.php b/database/migrations/2023_11_30_165723_add_launchpad_properties_at_processes.php new file mode 100644 index 0000000000..dcf410fb19 --- /dev/null +++ b/database/migrations/2023_11_30_165723_add_launchpad_properties_at_processes.php @@ -0,0 +1,34 @@ +json('launchpad_properties')->nullable(); + }); + Schema::table('process_versions', function (Blueprint $table) { + $table->json('launchpad_properties')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('processes', function (Blueprint $table) { + $table->dropColumn(['launchpad_properties']); + }); + Schema::table('process_versions', function (Blueprint $table) { + $table->dropColumn(['launchpad_properties']); + }); + } +}; diff --git a/database/migrations/2023_11_30_170839_create_user_process_bookmarks_table.php b/database/migrations/2023_11_30_170839_create_user_process_bookmarks_table.php new file mode 100644 index 0000000000..3c113edd96 --- /dev/null +++ b/database/migrations/2023_11_30_170839_create_user_process_bookmarks_table.php @@ -0,0 +1,32 @@ +bigIncrements('id'); + $table->unsignedBigInteger('user_id'); + $table->unsignedInteger('process_id'); + $table->timestamps(); + + // Foreign keys + $table->foreign('process_id')->references('id')->on('processes')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('user_process_bookmarks'); + } +}; diff --git a/resources/img/default-process.svg b/resources/img/default-process.svg new file mode 100644 index 0000000000..c5ee87ced4 --- /dev/null +++ b/resources/img/default-process.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/img/launchpad-images/imageDefault.png b/resources/img/launchpad-images/imageDefault.png new file mode 100644 index 0000000000..9f080fa014 Binary files /dev/null and b/resources/img/launchpad-images/imageDefault.png differ diff --git a/resources/img/launchpad-images/noImage.svg b/resources/img/launchpad-images/noImage.svg new file mode 100644 index 0000000000..c8279da677 --- /dev/null +++ b/resources/img/launchpad-images/noImage.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/js/components/shared/EllipsisMenu.vue b/resources/js/components/shared/EllipsisMenu.vue index b23084d926..2fbd635897 100644 --- a/resources/js/components/shared/EllipsisMenu.vue +++ b/resources/js/components/shared/EllipsisMenu.vue @@ -1,5 +1,6 @@