From 69776d9b773320c9e021b75ff6c3b05b96b6ce67 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 07:05:27 -0500 Subject: [PATCH] feat: MokoWaaS admin sidebar menu module (like CB's mod_cbadmin) New module mod_mokowaas_menu renders a dedicated MokoWaaS section in the admin sidebar at position=menu, ordering=0 (before CB at 1 and Joomla's mod_menu at 2). Menu items: Dashboard, Helpdesk, Extensions, .htaccess Maker, Privacy Guard, WAF Log, Feature Plugins Active state highlighting on current view. Auto-created on package install with access=Special. Added to package manifest. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../language/en-GB/mod_mokowaas_menu.ini | 1 + .../language/en-GB/mod_mokowaas_menu.sys.ini | 2 + .../mod_mokowaas_menu/mod_mokowaas_menu.xml | 24 +++++++ .../mod_mokowaas_menu/services/provider.php | 18 +++++ .../src/Dispatcher/Dispatcher.php | 14 ++++ .../mod_mokowaas_menu/tmpl/default.php | 54 +++++++++++++++ src/pkg_mokowaas.xml | 1 + src/script.php | 66 +++++++++++++++++++ 8 files changed, 180 insertions(+) create mode 100644 src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.ini create mode 100644 src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.sys.ini create mode 100644 src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml create mode 100644 src/packages/mod_mokowaas_menu/services/provider.php create mode 100644 src/packages/mod_mokowaas_menu/src/Dispatcher/Dispatcher.php create mode 100644 src/packages/mod_mokowaas_menu/tmpl/default.php diff --git a/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.ini b/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.ini new file mode 100644 index 00000000..dff9f13a --- /dev/null +++ b/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.ini @@ -0,0 +1 @@ +MOD_MOKOWAAS_MENU="MokoWaaS Admin Menu" diff --git a/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.sys.ini b/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.sys.ini new file mode 100644 index 00000000..898a3832 --- /dev/null +++ b/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.sys.ini @@ -0,0 +1,2 @@ +MOD_MOKOWAAS_MENU="MokoWaaS Admin Menu" +MOD_MOKOWAAS_MENU_DESC="Dedicated MokoWaaS section in the admin sidebar menu." diff --git a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml new file mode 100644 index 00000000..59f480be --- /dev/null +++ b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml @@ -0,0 +1,24 @@ + + + mod_mokowaas_menu + Moko Consulting + 2026-06-04 + Copyright (C) 2026 Moko Consulting. All rights reserved. + GPL-3.0-or-later + hello@mokoconsulting.tech + https://mokoconsulting.tech + 02.32.00 + MokoWaaS admin sidebar menu — renders a dedicated MokoWaaS section in the admin menu before Joomla's default menu. + Moko\Module\MokoWaaSMenu + + + services + src + tmpl + + + + en-GB/mod_mokowaas_menu.ini + en-GB/mod_mokowaas_menu.sys.ini + + diff --git a/src/packages/mod_mokowaas_menu/services/provider.php b/src/packages/mod_mokowaas_menu/services/provider.php new file mode 100644 index 00000000..67feaece --- /dev/null +++ b/src/packages/mod_mokowaas_menu/services/provider.php @@ -0,0 +1,18 @@ +registerServiceProvider(new ModuleDispatcherFactory('\\Moko\\Module\\MokoWaaSMenu')); + $container->registerServiceProvider(new HelperFactory('\\Moko\\Module\\MokoWaaSMenu\\Administrator\\Helper')); + $container->registerServiceProvider(new Module()); + } +}; diff --git a/src/packages/mod_mokowaas_menu/src/Dispatcher/Dispatcher.php b/src/packages/mod_mokowaas_menu/src/Dispatcher/Dispatcher.php new file mode 100644 index 00000000..b5d4dcc2 --- /dev/null +++ b/src/packages/mod_mokowaas_menu/src/Dispatcher/Dispatcher.php @@ -0,0 +1,14 @@ + 'icon-cogs', 'title' => 'Dashboard', 'link' => 'index.php?option=com_mokowaas'], + ['icon' => 'icon-headphones', 'title' => 'Helpdesk', 'link' => 'index.php?option=com_mokowaas&view=tickets'], + ['icon' => 'icon-puzzle-piece','title' => 'Extensions', 'link' => 'index.php?option=com_mokowaas&view=extensions'], + ['icon' => 'icon-file-code', 'title' => '.htaccess Maker', 'link' => 'index.php?option=com_mokowaas&view=htaccess'], + ['icon' => 'icon-lock', 'title' => 'Privacy Guard', 'link' => 'index.php?option=com_mokowaas&view=privacy'], + ['icon' => 'icon-shield-alt', 'title' => 'WAF Log', 'link' => 'index.php?option=com_mokowaas&view=waflog'], + ['icon' => 'icon-power-off', 'title' => 'Feature Plugins', 'link' => 'index.php?option=com_plugins&filter[folder]=system&filter[search]=mokowaas'], +]; + +$currentOption = \Joomla\CMS\Factory::getApplication()->getInput()->get('option', ''); +$currentView = \Joomla\CMS\Factory::getApplication()->getInput()->get('view', ''); +?> + +
+ +
+
diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index a3ca35a8..2f0334fd 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -20,6 +20,7 @@ plg_system_mokowaas_offline.zip com_mokowaas.zip mod_mokowaas_cpanel.zip + mod_mokowaas_menu.zip plg_webservices_mokowaas.zip plg_webservices_perfectpublisher.zip plg_task_mokowaasdemo.zip diff --git a/src/script.php b/src/script.php index 882bcba5..9a2a541c 100644 --- a/src/script.php +++ b/src/script.php @@ -55,6 +55,9 @@ class Pkg_MokowaasInstallerScript // Set up cpanel module on the admin dashboard $this->setupCpanelModule(); + // Set up admin sidebar menu module + $this->setupAdminMenuModule(); + // Create Support portal menu item on frontend $this->setupSupportMenuItem(); @@ -704,6 +707,69 @@ class Pkg_MokowaasInstallerScript } } + /** + * Set up the MokoWaaS admin sidebar menu module at position 0. + */ + private function setupAdminMenuModule(): void + { + try + { + $db = Factory::getDbo(); + + // Enable the module extension + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('enabled') . ' = 1') + ->where($db->quoteName('type') . ' = ' . $db->quote('module')) + ->where($db->quoteName('element') . ' = ' . $db->quote('mod_mokowaas_menu')) + )->execute(); + + // Check if module instance exists + $db->setQuery( + $db->getQuery(true) + ->select('COUNT(*)') + ->from($db->quoteName('#__modules')) + ->where($db->quoteName('module') . ' = ' . $db->quote('mod_mokowaas_menu')) + ); + + if ((int) $db->loadResult() > 0) + { + return; + } + + $module = (object) [ + 'title' => 'MokoWaaS Menu', + 'note' => '', + 'content' => '', + 'ordering' => 0, + 'position' => 'menu', + 'checked_out' => null, + 'checked_out_time' => null, + 'publish_up' => null, + 'publish_down' => null, + 'published' => 1, + 'module' => 'mod_mokowaas_menu', + 'access' => 3, + 'showtitle' => 0, + 'params' => '{}', + 'client_id' => 1, + 'language' => '*', + ]; + + $db->insertObject('#__modules', $module, 'id'); + + if ((int) $module->id) + { + $db->insertObject('#__modules_menu', (object) ['moduleid' => (int) $module->id, 'menuid' => 0]); + } + } + catch (\Throwable $e) + { + Log::add('Admin menu module setup error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + /** * Create a "Support" menu item on the frontend main menu. */