From 0cf50d3edfa181ca80ffb60ea336a4dee885283e Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 18 Jul 2026 15:09:03 -0500 Subject: [PATCH 1/8] chore(gitignore): ignore .gemini/ and local wiki/docs per ecosystem standard Add the canonical Moko exclusions matching the Template repos: .gemini/ alongside .claude/, the AI client-instructions block, and the local wiki clone block (wiki/, docs/). Update CLAUDE.md never-commit rule if present. Authored-by: Moko Consulting --- .gitignore | 14 ++++++++++++++ CLAUDE.md | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 44a63a2..1f096a3 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ Icon? .idea/ .settings/ .claude/ +.gemini/ .vscode/* !.vscode/tasks.json !.vscode/settings.json.example @@ -204,3 +205,16 @@ hypothesis/ profile.ps1 .mcp.json + +# ============================================================ +# AI client instructions (not version controlled) +# ============================================================ +/GEMINI.md +/MOKOAI.md +.mokoai/ + +# ============================================================ +# Local wiki clone (not version controlled) +# ============================================================ +wiki/ +docs/ diff --git a/CLAUDE.md b/CLAUDE.md index 69e5867..372a878 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -39,7 +39,7 @@ Joomla **package** (`pkg_mokosuitesight`) — standalone module, auto-discovers ## Rules -- **Never commit** `.claude/`, `.mcp.json`, `TODO.md`, `*.min.css`/`*.min.js` +- **Never commit** `.claude/`, `.gemini/`, `.mcp.json`, `TODO.md`, `*.min.css`/`*.min.js` - **Attribution**: `Authored-by: Moko Consulting` - **Workflow directory**: `.mokogitea/` - **Wiki**: documentation lives in the Gitea wiki, not `docs/` files -- 2.52.0 From f76a5f5cbad2e0e8b9b631fa5911bbc0398b4125 Mon Sep 17 00:00:00 2001 From: "mokogit-actions[bot]" Date: Sat, 18 Jul 2026 20:13:37 +0000 Subject: [PATCH 2/8] chore(version): pre-release bump to 01.00.37-dev [skip ci] --- .mokogit/workflows/issue-branch.yml | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokosuitesight/mokosuitesight.xml | 2 +- source/packages/plg_system_mokosuitesight/mokosuitesight.xml | 2 +- .../packages/plg_webservices_mokosuitesight/mokosuitesight.xml | 2 +- source/pkg_mokosuitesight.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.mokogit/workflows/issue-branch.yml b/.mokogit/workflows/issue-branch.yml index e736ca8..b7dfef2 100644 --- a/.mokogit/workflows/issue-branch.yml +++ b/.mokogit/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGIT.Workflow # INGROUP: MokoCLI.Automation -# VERSION: 01.00.00 +# VERSION: 01.00.37 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 3cbe33d..a07fd97 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://github.com/mokoconsulting-tech/Template-Joomla/ - VERSION: 01.00.29 + VERSION: 01.00.37 PATH: ./CODE_OF_CONDUCT.md BRIEF: Community expectations and enforcement guidelines NOTE: Adapted with attribution from the Contributor Covenant v2.1 diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 63f0195..07ac850 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.Template-Joomla INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/Template-Joomla - VERSION: 01.00.29 + VERSION: 01.00.37 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/SECURITY.md b/SECURITY.md index a0c1ea7..de65260 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 01.00.29 +VERSION: 01.00.37 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokosuitesight/mokosuitesight.xml b/source/packages/com_mokosuitesight/mokosuitesight.xml index 7361a53..4748a20 100644 --- a/source/packages/com_mokosuitesight/mokosuitesight.xml +++ b/source/packages/com_mokosuitesight/mokosuitesight.xml @@ -5,7 +5,7 @@ 2026-06-23 Copyright (C) 2026 Moko Consulting. GPL-3.0-or-later - 01.00.29 + 01.00.37 Moko\Component\MokoSuiteSight servicessrctmpl diff --git a/source/packages/plg_system_mokosuitesight/mokosuitesight.xml b/source/packages/plg_system_mokosuitesight/mokosuitesight.xml index 6ae1f2d..54a935b 100644 --- a/source/packages/plg_system_mokosuitesight/mokosuitesight.xml +++ b/source/packages/plg_system_mokosuitesight/mokosuitesight.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 01.00.29 + 01.00.37 8.3 PLG_SYSTEM_MOKOSUITESIGHT_DESC Moko\Plugin\System\MokoSuiteSight diff --git a/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml b/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml index 12dd339..747f53f 100644 --- a/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml +++ b/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml @@ -3,7 +3,7 @@ Web Services - MokoSuite Insight mokosuitesight Moko Consulting - 01.00.29 + 01.00.37 GPL-3.0-or-later Moko\Plugin\WebServices\MokoSuiteInsight srcservices diff --git a/source/pkg_mokosuitesight.xml b/source/pkg_mokosuitesight.xml index 2947efd..d239248 100644 --- a/source/pkg_mokosuitesight.xml +++ b/source/pkg_mokosuitesight.xml @@ -2,7 +2,7 @@ Package - MokoSuite Insight mokosuitesight - 01.00.29 + 01.00.37 2026-06-21 Moko Consulting hello@mokoconsulting.tech -- 2.52.0 From 2fe9a9fd00af00c74ef3503fce6a2edf27a9d812 Mon Sep 17 00:00:00 2001 From: "mokogit-actions[bot]" Date: Sat, 18 Jul 2026 21:31:48 +0000 Subject: [PATCH 3/8] chore(version): pre-release bump to 01.00.38-dev [skip ci] --- .mokogit/workflows/issue-branch.yml | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokosuitesight/mokosuitesight.xml | 2 +- source/packages/plg_system_mokosuitesight/mokosuitesight.xml | 2 +- .../packages/plg_webservices_mokosuitesight/mokosuitesight.xml | 2 +- source/pkg_mokosuitesight.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.mokogit/workflows/issue-branch.yml b/.mokogit/workflows/issue-branch.yml index b7dfef2..f5e19e5 100644 --- a/.mokogit/workflows/issue-branch.yml +++ b/.mokogit/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGIT.Workflow # INGROUP: MokoCLI.Automation -# VERSION: 01.00.37 +# VERSION: 01.00.38 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index a07fd97..505af45 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://github.com/mokoconsulting-tech/Template-Joomla/ - VERSION: 01.00.37 + VERSION: 01.00.38 PATH: ./CODE_OF_CONDUCT.md BRIEF: Community expectations and enforcement guidelines NOTE: Adapted with attribution from the Contributor Covenant v2.1 diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 07ac850..69f9ad4 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.Template-Joomla INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/Template-Joomla - VERSION: 01.00.37 + VERSION: 01.00.38 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/SECURITY.md b/SECURITY.md index de65260..bd2fdcc 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 01.00.37 +VERSION: 01.00.38 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokosuitesight/mokosuitesight.xml b/source/packages/com_mokosuitesight/mokosuitesight.xml index 4748a20..cc96832 100644 --- a/source/packages/com_mokosuitesight/mokosuitesight.xml +++ b/source/packages/com_mokosuitesight/mokosuitesight.xml @@ -5,7 +5,7 @@ 2026-06-23 Copyright (C) 2026 Moko Consulting. GPL-3.0-or-later - 01.00.37 + 01.00.38 Moko\Component\MokoSuiteSight servicessrctmpl diff --git a/source/packages/plg_system_mokosuitesight/mokosuitesight.xml b/source/packages/plg_system_mokosuitesight/mokosuitesight.xml index 54a935b..a3b85cd 100644 --- a/source/packages/plg_system_mokosuitesight/mokosuitesight.xml +++ b/source/packages/plg_system_mokosuitesight/mokosuitesight.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 01.00.37 + 01.00.38 8.3 PLG_SYSTEM_MOKOSUITESIGHT_DESC Moko\Plugin\System\MokoSuiteSight diff --git a/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml b/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml index 747f53f..da583d4 100644 --- a/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml +++ b/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml @@ -3,7 +3,7 @@ Web Services - MokoSuite Insight mokosuitesight Moko Consulting - 01.00.37 + 01.00.38 GPL-3.0-or-later Moko\Plugin\WebServices\MokoSuiteInsight srcservices diff --git a/source/pkg_mokosuitesight.xml b/source/pkg_mokosuitesight.xml index d239248..8939946 100644 --- a/source/pkg_mokosuitesight.xml +++ b/source/pkg_mokosuitesight.xml @@ -2,7 +2,7 @@ Package - MokoSuite Insight mokosuitesight - 01.00.37 + 01.00.38 2026-06-21 Moko Consulting hello@mokoconsulting.tech -- 2.52.0 From 009cf08fde709e2ee28d19420d3fbcd348cff261 Mon Sep 17 00:00:00 2001 From: Moko Consulting Date: Mon, 20 Jul 2026 08:59:52 -0500 Subject: [PATCH 4/8] fix(installer): add MokoMenuRegistry for shared admin menu --- .../admin/src/Installer/MokoMenuRegistry.php | 179 ++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 source/packages/com_mokosuitesight/admin/src/Installer/MokoMenuRegistry.php diff --git a/source/packages/com_mokosuitesight/admin/src/Installer/MokoMenuRegistry.php b/source/packages/com_mokosuitesight/admin/src/Installer/MokoMenuRegistry.php new file mode 100644 index 0000000..f242b2f --- /dev/null +++ b/source/packages/com_mokosuitesight/admin/src/Installer/MokoMenuRegistry.php @@ -0,0 +1,179 @@ + + * @license GPL-3.0-or-later + */ + +declare(strict_types=1); + +namespace Moko\Component\MokoSuiteSight\Administrator\Installer; + +use Joomla\CMS\Factory; +use Joomla\CMS\Log\Log; +use Joomla\Database\DatabaseInterface; + +\defined('_JEXEC') or die; + +/** + * Self-contained MokoSuite admin-menu registry helper. + * + * Each MokoSuite extension calls register()/unregister() from its install script + * to publish its admin menu items into `#__mokosuite_menu`, which the + * mod_mokosuiteclient_menu module reads and renders. The helper is deliberately + * dependency-free and self-healing (it creates the table if missing) so an + * extension can install BEFORE the Client hub that owns the table. + * + * This file is the canonical contract: copy it verbatim into each MokoSuite + * extension, changing only the namespace to match that extension. Do NOT add + * cross-extension dependencies here. + * + * @since 02.59.07 + */ +final class MokoMenuRegistry +{ + /** + * Idempotently (re)register one extension's admin menu items. + * + * Each $items entry is an associative array: + * - title (string, required) language key or literal title + * - link (string) index.php?option=... route ('' for a bare group) + * - icon (string) a VERIFIED icon-* glyph (Atum renders many blank) + * - parent (string) owner element of the group this nests under; + * '' means this row IS a top-level group + * - element (string) component this item routes into (for active-state) + * - access (int) Joomla view access level (default 1) + * - ordering (int) sort within its level (default 0) + * - menu_group (string) reserved sidebar section (default 'suite') + * - params (string|null) reserved JSON + * + * @param string $owner Registering extension element, e.g. 'com_mokosuitehq'. + * @param array $items The menu rows to publish for this owner. + * + * @return void + */ + public static function register(string $owner, array $items): void + { + try { + $db = Factory::getContainer()->get(DatabaseInterface::class); + + if (!self::ensureTable($db)) { + return; + } + + // Delete-then-insert on owner = fully idempotent across reinstall/upgrade. + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__mokosuite_menu')) + ->where($db->quoteName('owner') . ' = ' . $db->quote($owner)) + )->execute(); + + foreach ($items as $item) { + $row = (object) [ + 'owner' => $owner, + 'element' => (string) ($item['element'] ?? ''), + 'parent' => (string) ($item['parent'] ?? ''), + 'title' => (string) ($item['title'] ?? ''), + 'link' => (string) ($item['link'] ?? ''), + 'icon' => (string) ($item['icon'] ?? 'icon-puzzle-piece'), + 'menu_group' => (string) ($item['menu_group'] ?? 'suite'), + 'access' => (int) ($item['access'] ?? 1), + 'ordering' => (int) ($item['ordering'] ?? 0), + 'published' => (int) ($item['published'] ?? 1), + 'params' => $item['params'] ?? null, + ]; + + $db->insertObject('#__mokosuite_menu', $row); + } + } catch (\Throwable $e) { + // Best-effort: a registry failure must never block the install. + Log::add( + 'MokoMenuRegistry::register(' . $owner . ') failed: ' . $e->getMessage(), + Log::ERROR, + 'com_mokosuitesight' + ); + } + } + + /** + * Remove all admin menu rows owned by an extension. Call on uninstall. + * + * @param string $owner The registering extension element. + * + * @return void + */ + public static function unregister(string $owner): void + { + try { + $db = Factory::getContainer()->get(DatabaseInterface::class); + + if (!self::tableExists($db)) { + return; + } + + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__mokosuite_menu')) + ->where($db->quoteName('owner') . ' = ' . $db->quote($owner)) + )->execute(); + } catch (\Throwable $e) { + Log::add( + 'MokoMenuRegistry::unregister(' . $owner . ') failed: ' . $e->getMessage(), + Log::ERROR, + 'com_mokosuitesight' + ); + } + } + + /** + * Create the registry table if it does not exist yet. This lets a sibling + * extension install before the Client hub that ships the table in its schema. + * + * @param DatabaseInterface $db The database driver. + * + * @return boolean True if the table exists (or was created). + */ + private static function ensureTable(DatabaseInterface $db): bool + { + if (self::tableExists($db)) { + return true; + } + + $db->setQuery( + 'CREATE TABLE IF NOT EXISTS ' . $db->quoteName('#__mokosuite_menu') . ' (' + . '`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,' + . "`owner` VARCHAR(75) NOT NULL DEFAULT ''," + . "`element` VARCHAR(75) NOT NULL DEFAULT ''," + . "`parent` VARCHAR(75) NOT NULL DEFAULT ''," + . "`title` VARCHAR(255) NOT NULL DEFAULT ''," + . "`link` VARCHAR(1024) NOT NULL DEFAULT ''," + . "`icon` VARCHAR(75) NOT NULL DEFAULT 'icon-puzzle-piece'," + . "`menu_group` VARCHAR(50) NOT NULL DEFAULT 'suite'," + . '`access` INT UNSIGNED NOT NULL DEFAULT 1,' + . '`ordering` INT NOT NULL DEFAULT 0,' + . '`published` TINYINT(1) NOT NULL DEFAULT 1,' + . '`params` TEXT NULL,' + . 'PRIMARY KEY (`id`),' + . 'UNIQUE KEY `idx_owner_link` (`owner`, `link`(191)),' + . 'KEY `idx_owner` (`owner`),' + . 'KEY `idx_parent` (`parent`),' + . 'KEY `idx_published_ordering` (`published`, `ordering`)' + . ') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' + )->execute(); + + return self::tableExists($db); + } + + /** + * Whether the #__mokosuite_menu table currently exists. + * + * @param DatabaseInterface $db The database driver. + * + * @return boolean + */ + private static function tableExists(DatabaseInterface $db): bool + { + return \in_array($db->replacePrefix('#__mokosuite_menu'), $db->getTableList(), true); + } +} -- 2.52.0 From 4932ea96b3fb4d3e6127f95dfa788a6a7e815179 Mon Sep 17 00:00:00 2001 From: "mokogit-actions[bot]" Date: Mon, 20 Jul 2026 14:00:20 +0000 Subject: [PATCH 5/8] chore(version): pre-release bump to 01.00.39-dev [skip ci] --- .mokogit/workflows/issue-branch.yml | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokosuitesight/mokosuitesight.xml | 2 +- source/packages/plg_system_mokosuitesight/mokosuitesight.xml | 2 +- .../packages/plg_webservices_mokosuitesight/mokosuitesight.xml | 2 +- source/pkg_mokosuitesight.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.mokogit/workflows/issue-branch.yml b/.mokogit/workflows/issue-branch.yml index f5e19e5..1a093d9 100644 --- a/.mokogit/workflows/issue-branch.yml +++ b/.mokogit/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGIT.Workflow # INGROUP: MokoCLI.Automation -# VERSION: 01.00.38 +# VERSION: 01.00.39 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 505af45..5955902 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://github.com/mokoconsulting-tech/Template-Joomla/ - VERSION: 01.00.38 + VERSION: 01.00.39 PATH: ./CODE_OF_CONDUCT.md BRIEF: Community expectations and enforcement guidelines NOTE: Adapted with attribution from the Contributor Covenant v2.1 diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 69f9ad4..428db12 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.Template-Joomla INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/Template-Joomla - VERSION: 01.00.38 + VERSION: 01.00.39 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/SECURITY.md b/SECURITY.md index bd2fdcc..334fc20 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 01.00.38 +VERSION: 01.00.39 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokosuitesight/mokosuitesight.xml b/source/packages/com_mokosuitesight/mokosuitesight.xml index cc96832..511e843 100644 --- a/source/packages/com_mokosuitesight/mokosuitesight.xml +++ b/source/packages/com_mokosuitesight/mokosuitesight.xml @@ -5,7 +5,7 @@ 2026-06-23 Copyright (C) 2026 Moko Consulting. GPL-3.0-or-later - 01.00.38 + 01.00.39 Moko\Component\MokoSuiteSight servicessrctmpl diff --git a/source/packages/plg_system_mokosuitesight/mokosuitesight.xml b/source/packages/plg_system_mokosuitesight/mokosuitesight.xml index a3b85cd..fac8bb1 100644 --- a/source/packages/plg_system_mokosuitesight/mokosuitesight.xml +++ b/source/packages/plg_system_mokosuitesight/mokosuitesight.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 01.00.38 + 01.00.39 8.3 PLG_SYSTEM_MOKOSUITESIGHT_DESC Moko\Plugin\System\MokoSuiteSight diff --git a/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml b/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml index da583d4..6437646 100644 --- a/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml +++ b/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml @@ -3,7 +3,7 @@ Web Services - MokoSuite Insight mokosuitesight Moko Consulting - 01.00.38 + 01.00.39 GPL-3.0-or-later Moko\Plugin\WebServices\MokoSuiteInsight srcservices diff --git a/source/pkg_mokosuitesight.xml b/source/pkg_mokosuitesight.xml index 8939946..8ec4f96 100644 --- a/source/pkg_mokosuitesight.xml +++ b/source/pkg_mokosuitesight.xml @@ -2,7 +2,7 @@ Package - MokoSuite Insight mokosuitesight - 01.00.38 + 01.00.39 2026-06-21 Moko Consulting hello@mokoconsulting.tech -- 2.52.0 From 20f93793c7658d6f8369819257ba8e99b9e5d36f Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 21 Jul 2026 16:30:38 -0500 Subject: [PATCH 6/8] feat: wire MokoMenuRegistry register() in component script.php Add component-level installer script that calls MokoMenuRegistry::register() on install/update and MokoMenuRegistry::unregister() on uninstall. Menu items use language keys so mod_mokosuiteclient_menu renders translated titles. Also adds declaration to the component manifest. Claude-Session: https://claude.ai/code/session_01CwLGvFJPjoPTp9BEnSjtJf --- .../com_mokosuitesight/mokosuitesight.xml | 1 + source/packages/com_mokosuitesight/script.php | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 source/packages/com_mokosuitesight/script.php diff --git a/source/packages/com_mokosuitesight/mokosuitesight.xml b/source/packages/com_mokosuitesight/mokosuitesight.xml index 511e843..eecc2e4 100644 --- a/source/packages/com_mokosuitesight/mokosuitesight.xml +++ b/source/packages/com_mokosuitesight/mokosuitesight.xml @@ -7,6 +7,7 @@ GPL-3.0-or-later 01.00.39 Moko\Component\MokoSuiteSight + script.php servicessrctmpl COM_MOKOSUITESIGHT diff --git a/source/packages/com_mokosuitesight/script.php b/source/packages/com_mokosuitesight/script.php new file mode 100644 index 0000000..9d4f964 --- /dev/null +++ b/source/packages/com_mokosuitesight/script.php @@ -0,0 +1,74 @@ +registerAdminMenu(); + } + } + + public function uninstall(InstallerAdapter $adapter): void + { + $this->unregisterAdminMenu(); + } + + private const MENU_OWNER = 'com_mokosuitesight'; + + private function registerAdminMenu(): void + { + $registry = $this->loadMenuRegistry(); + + if ($registry !== null) + { + $registry::register(self::MENU_OWNER, $this->getMenuItems()); + } + } + + private function unregisterAdminMenu(): void + { + $registry = $this->loadMenuRegistry(); + + if ($registry !== null) + { + $registry::unregister(self::MENU_OWNER); + } + } + + private function loadMenuRegistry(): ?string + { + $class = '\\Moko\\Component\\MokoSuiteSight\\Administrator\\Installer\\MokoMenuRegistry'; + + if (!class_exists($class)) + { + $path = JPATH_ADMINISTRATOR . '/components/com_mokosuitesight/src/Installer/MokoMenuRegistry.php'; + + if (is_file($path)) + { + require_once $path; + } + } + + return class_exists($class) ? $class : null; + } + + private function getMenuItems(): array + { + $owner = self::MENU_OWNER; + + return [ + ['element' => $owner, 'parent' => '', 'title' => 'COM_MOKOSUITESIGHT_SHORT', 'link' => 'index.php?option=com_mokosuitesight', 'icon' => 'icon-eye', 'ordering' => 91], + ]; + } +} -- 2.52.0 From fd8446cb1c87b9ad6f2747e578f30535aa5bfe3c Mon Sep 17 00:00:00 2001 From: "mokogit-actions[bot]" Date: Tue, 21 Jul 2026 21:44:58 +0000 Subject: [PATCH 7/8] chore(version): pre-release bump to 01.00.40-dev [skip ci] --- .mokogit/workflows/issue-branch.yml | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokosuitesight/mokosuitesight.xml | 2 +- source/packages/plg_system_mokosuitesight/mokosuitesight.xml | 2 +- .../packages/plg_webservices_mokosuitesight/mokosuitesight.xml | 2 +- source/pkg_mokosuitesight.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.mokogit/workflows/issue-branch.yml b/.mokogit/workflows/issue-branch.yml index 1a093d9..6da5955 100644 --- a/.mokogit/workflows/issue-branch.yml +++ b/.mokogit/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGIT.Workflow # INGROUP: MokoCLI.Automation -# VERSION: 01.00.39 +# VERSION: 01.00.40 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 5955902..f4ae23f 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://github.com/mokoconsulting-tech/Template-Joomla/ - VERSION: 01.00.39 + VERSION: 01.00.40 PATH: ./CODE_OF_CONDUCT.md BRIEF: Community expectations and enforcement guidelines NOTE: Adapted with attribution from the Contributor Covenant v2.1 diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 428db12..90502b8 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.Template-Joomla INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/Template-Joomla - VERSION: 01.00.39 + VERSION: 01.00.40 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 334fc20..bd502f4 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 01.00.39 +VERSION: 01.00.40 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokosuitesight/mokosuitesight.xml b/source/packages/com_mokosuitesight/mokosuitesight.xml index eecc2e4..f6d67d1 100644 --- a/source/packages/com_mokosuitesight/mokosuitesight.xml +++ b/source/packages/com_mokosuitesight/mokosuitesight.xml @@ -5,7 +5,7 @@ 2026-06-23 Copyright (C) 2026 Moko Consulting. GPL-3.0-or-later - 01.00.39 + 01.00.40 Moko\Component\MokoSuiteSight script.php diff --git a/source/packages/plg_system_mokosuitesight/mokosuitesight.xml b/source/packages/plg_system_mokosuitesight/mokosuitesight.xml index fac8bb1..ea84348 100644 --- a/source/packages/plg_system_mokosuitesight/mokosuitesight.xml +++ b/source/packages/plg_system_mokosuitesight/mokosuitesight.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 01.00.39 + 01.00.40 8.3 PLG_SYSTEM_MOKOSUITESIGHT_DESC Moko\Plugin\System\MokoSuiteSight diff --git a/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml b/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml index 6437646..741b553 100644 --- a/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml +++ b/source/packages/plg_webservices_mokosuitesight/mokosuitesight.xml @@ -3,7 +3,7 @@ Web Services - MokoSuite Insight mokosuitesight Moko Consulting - 01.00.39 + 01.00.40 GPL-3.0-or-later Moko\Plugin\WebServices\MokoSuiteInsight srcservices diff --git a/source/pkg_mokosuitesight.xml b/source/pkg_mokosuitesight.xml index 8ec4f96..7778183 100644 --- a/source/pkg_mokosuitesight.xml +++ b/source/pkg_mokosuitesight.xml @@ -2,7 +2,7 @@ Package - MokoSuite Insight mokosuitesight - 01.00.39 + 01.00.40 2026-06-21 Moko Consulting hello@mokoconsulting.tech -- 2.52.0 From 830af0f8170306754acc0e284410de0e03435a8a Mon Sep 17 00:00:00 2001 From: Moko Consulting Date: Tue, 21 Jul 2026 16:55:26 -0500 Subject: [PATCH 8/8] chore: anchor Composer vendor ignore to /vendor/ (allow nested vendored assets) Authored-by: Moko Consulting --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1f096a3..196cf57 100644 --- a/.gitignore +++ b/.gitignore @@ -154,7 +154,7 @@ package-lock.json # ============================================================ # PHP / Composer tooling # ============================================================ -vendor/ +/vendor/ !src/media/vendor/ composer.lock *.phar -- 2.52.0