From 95f0369c7f9a6a2bf01424cc308e2f5081b86f50 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 3 Aug 2023 16:26:15 -0400 Subject: [PATCH 1/2] FOUR-9666 --- .../Http/Middleware/GenerateMenus.php | 20 ++++++++-- ProcessMaker/Managers/MenuBuilder.php | 35 +++++++++++++++++ ProcessMaker/Managers/MenuManager.php | 39 +++++++++++++++++++ .../Providers/ProcessMakerServiceProvider.php | 10 ++++- resources/views/layouts/navbar.blade.php | 8 ++++ 5 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 ProcessMaker/Managers/MenuBuilder.php create mode 100644 ProcessMaker/Managers/MenuManager.php diff --git a/ProcessMaker/Http/Middleware/GenerateMenus.php b/ProcessMaker/Http/Middleware/GenerateMenus.php index 63182e0d0c..97d05caeb0 100644 --- a/ProcessMaker/Http/Middleware/GenerateMenus.php +++ b/ProcessMaker/Http/Middleware/GenerateMenus.php @@ -20,20 +20,32 @@ public function handle(Request $request, Closure $next) { Menu::make('topnav', function ($menu) { $menu->group(['prefix' => 'requests'], function ($request_items) { - $request_items->add(__('Requests'), ['route' => 'requests.index'])->active('requests/*'); + $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(__('Tasks'), ['route' => 'tasks.index'])->active('tasks/*'); + $request_items->add( + __('Tasks'), + ['route' => 'tasks.index', 'id' => 'tasks'] + )->active('tasks/*'); }); if (\Auth::check() && \Auth::user()->canAny('view-processes|view-process-categories|view-scripts|view-screens|view-environment_variables')) { $menu->group(['prefix' => 'processes'], function ($request_items) { - $request_items->add(__('Designer'), ['route' => 'processes.index'])->active('processes/*'); + $request_items->add( + __('Designer'), + ['route' => 'processes.index', 'id' => 'designer'] + )->active('processes/*'); }); } if (\Auth::check() && \Auth::user()->canAny('view-users|view-groups|view-auth_clients|view-settings')) { $menu->group(['prefix' => 'admin'], function ($admin_items) { - $admin_items->add(__('Admin'), ['route' => 'admin.index'])->active('admin/*'); + $admin_items->add( + __('Admin'), + ['route' => 'admin.index', 'id' => 'admin'] + )->active('admin/*'); }); } }); diff --git a/ProcessMaker/Managers/MenuBuilder.php b/ProcessMaker/Managers/MenuBuilder.php new file mode 100644 index 0000000000..52315ffee9 --- /dev/null +++ b/ProcessMaker/Managers/MenuBuilder.php @@ -0,0 +1,35 @@ +id(); + + $item = new Item($this, $id, $title, $options); + + if (!empty($options['beforeItem']) && !empty($options['index'])) { + $beforeItem = $this->items->where('id', $options['beforeItem'])->first(); + $this->items->splice($this->items->search($beforeItem) - $options['index'], 0, [$item]); + } elseif (!empty($options['afterItem']) && !empty($options['index'])) { + $afterItem = $this->items->where('id', $options['afterItem'])->first(); + $this->items->splice($this->items->search($afterItem) + $options['index'], 0, [$item]); + } else { + $this->items->push($item); + } + + return $item; + } +} diff --git a/ProcessMaker/Managers/MenuManager.php b/ProcessMaker/Managers/MenuManager.php new file mode 100644 index 0000000000..e281774bb0 --- /dev/null +++ b/ProcessMaker/Managers/MenuManager.php @@ -0,0 +1,39 @@ +menu)) { + $this->menu[$name] = new MenuBuilder($name, array_merge($this->loadConf($name), $options)); + } + + // Registering the items + call_user_func($callback, $this->menu[$name]); + + // Storing each menu instance in the collection + $this->collection->put($name, $this->menu[$name]); + + // Make the instance available in all views + View::share($name, $this->menu[$name]); + + return $this->menu[$name]; + } +} diff --git a/ProcessMaker/Providers/ProcessMakerServiceProvider.php b/ProcessMaker/Providers/ProcessMakerServiceProvider.php index 8582e5520c..bf0963d22d 100644 --- a/ProcessMaker/Providers/ProcessMakerServiceProvider.php +++ b/ProcessMaker/Providers/ProcessMakerServiceProvider.php @@ -8,6 +8,7 @@ use Illuminate\Notifications\Events\NotificationSent; use Illuminate\Support\Facades; use Illuminate\Support\Str; +use Lavary\Menu\Menu; use Laravel\Dusk\DuskServiceProvider; use Laravel\Horizon\Horizon; use Laravel\Passport\Passport; @@ -16,6 +17,7 @@ use ProcessMaker\ImportExport\Extension; use ProcessMaker\ImportExport\SignalHelper; use ProcessMaker\Managers; +use ProcessMaker\Managers\MenuManager; use ProcessMaker\Models; use ProcessMaker\Observers; use ProcessMaker\PolicyExtension; @@ -27,6 +29,10 @@ class ProcessMakerServiceProvider extends ServiceProvider { public function boot(): void { + $this->app->singleton(Menu::class, function ($app) { + return new MenuManager(); + }); + static::bootObservers(); static::extendValidators(); @@ -93,11 +99,11 @@ public function register(): void }); $this->app->singleton(PmHash::class, function () { - return new PmHash; + return new PmHash(); }); $this->app->singleton(Models\RequestDevice::class, function () { - return new Models\RequestDevice; + return new Models\RequestDevice(); }); /* diff --git a/resources/views/layouts/navbar.blade.php b/resources/views/layouts/navbar.blade.php index 52a0d64383..62e247c176 100644 --- a/resources/views/layouts/navbar.blade.php +++ b/resources/views/layouts/navbar.blade.php @@ -33,6 +33,8 @@ @php $menuItems = []; + // Add here the package to add in the topNav menu + $packagesList = ['package-analytics-reporting']; $existsMenuProvider = Menu::get('customtopnav') !== null; $items = $existsMenuProvider ? Menu::get('customtopnav')->items->all() : []; @@ -64,6 +66,12 @@ $newItem['isCustom'] = count($itemsInCustom) > 0; $menuItems[] = $newItem; } + // Add a menu in the topNav the Request is always highligth, for avoid this is necesary to register here + // @todo make a refactor in the topNav reviewing the active() function + if (in_array(Request::path(), $packagesList)) { + $menuItems[0]['isActive'] = false; + } + // If a menu provider is installed, remove menu items from ProcessMaker but preserve any other (from packages, for example) if ($existsMenuProvider) { $menuItems = array_filter($menuItems, function ($item) use($customNav) { From 9ad1cf5c550ae277b3c3a5775789098170d987e5 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 4 Aug 2023 17:20:30 -0400 Subject: [PATCH 2/2] Update comments --- resources/views/layouts/navbar.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/layouts/navbar.blade.php b/resources/views/layouts/navbar.blade.php index 62e247c176..d3ddfa875b 100644 --- a/resources/views/layouts/navbar.blade.php +++ b/resources/views/layouts/navbar.blade.php @@ -66,8 +66,8 @@ $newItem['isCustom'] = count($itemsInCustom) > 0; $menuItems[] = $newItem; } - // Add a menu in the topNav the Request is always highligth, for avoid this is necesary to register here // @todo make a refactor in the topNav reviewing the active() function + // The add a menu the Request is always highligth if (in_array(Request::path(), $packagesList)) { $menuItems[0]['isActive'] = false; }