From 7be52a964ece98ec2a9a0f0b54e8fac92c50dd6e Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Tue, 2 Jun 2026 18:53:37 +0000 Subject: [PATCH 001/142] chore: sync updates.xml 02.33.00 from main [skip ci] --- updates.xml | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/updates.xml b/updates.xml index 5d570e0..30614ca 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ @@ -13,33 +13,34 @@ site 02.32.21-dev 2026-06-02 - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.21-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.21-dev.zip 2330a2b3278587c66a4b43e4c6d5a330a7fb2d161c0df09cd266850aabb82d82 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting https://mokoconsulting.tech - + - Package - MokoWaaS - MokoWaaS site management suite - pkg_mokowaas - package - 02.32.00 - https://mokoconsulting.tech - - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/v02.32.00/pkg_mokowaas-02.32.00.zip - - - stable - - Moko Consulting - https://mokoconsulting.tech - - 8.1 - + Package - MokoWaaS + Package - MokoWaaS stable build. + pkg_mokowaas + package + site + 02.33.00 + 2026-06-02 + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/stable + + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/stable/pkg_mokowaas-02.33.00.zip + + 30e18531d9e453173c8945fdfaf690dacdcc3d584d827d146f0c86c851f49bb0 + stable + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md + Moko Consulting + https://mokoconsulting.tech + + -- 2.52.0 From 4f2aea75f5af641b8823c2a991798606d3cbd2c8 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 13:54:30 -0500 Subject: [PATCH 002/142] feat: add admin submenus under MokoWaaS sidebar menu Submenus: - Dashboard (control panel) - Moko Extensions (install packages) - Feature Plugins (filtered plugin manager) - Joomla Updates (com_installer update view) - Global Check-in (com_checkin) - Cache Management (com_cache) Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/language/en-GB/com_mokowaas.sys.ini | 6 ++++++ src/packages/com_mokowaas/mokowaas.xml | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini index ac058b5..5e40f5d 100644 --- a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini +++ b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini @@ -5,3 +5,9 @@ COM_MOKOWAAS="MokoWaaS" COM_MOKOWAAS_DESCRIPTION="MokoWaaS admin dashboard and REST API. Control panel for managing site features, health monitoring, and remote management." COM_MOKOWAAS_DASHBOARD_TITLE="MokoWaaS Control Panel" +COM_MOKOWAAS_MENU_DASHBOARD="Dashboard" +COM_MOKOWAAS_MENU_EXTENSIONS="Moko Extensions" +COM_MOKOWAAS_MENU_PLUGINS="Feature Plugins" +COM_MOKOWAAS_MENU_UPDATES="Joomla Updates" +COM_MOKOWAAS_MENU_CHECKIN="Global Check-in" +COM_MOKOWAAS_MENU_CACHE="Cache Management" diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index d3cca22..7149b44 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -27,6 +27,14 @@ MokoWaaS + + COM_MOKOWAAS_MENU_DASHBOARD + COM_MOKOWAAS_MENU_EXTENSIONS + COM_MOKOWAAS_MENU_PLUGINS + COM_MOKOWAAS_MENU_UPDATES + COM_MOKOWAAS_MENU_CHECKIN + COM_MOKOWAAS_MENU_CACHE + language services -- 2.52.0 From 3d3c9188485d5403df758b9668a115c7144fb284 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 18:54:53 +0000 Subject: [PATCH 003/142] chore(version): auto-bump 02.32.22 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 46 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index c8a9eb8..47acc77 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.21 + 02.32.22 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index f33f15c..a5c5111 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.21 +# VERSION: 02.32.22 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 10eff57..3635cf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.21 + VERSION: 02.32.22 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2c28193..070d3b0 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index e050316..5879fd5 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 42b9353..4871e33 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.21 + VERSION: 02.32.22 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index f52baae..ce469ee 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 9df1a2a..c23227c 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.21 +VERSION: 02.32.22 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 34cf61b..b6ff5ff 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.21) +# MokoWaaS Build Guide (VERSION: 02.32.22) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 9b1e097..3ea18bd 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.21) +# MokoWaaS Configuration Guide (VERSION: 02.32.22) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 526b98a..056ce53 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.21) +# MokoWaaS Installation Guide (VERSION: 02.32.22) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 025a822..082612f 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.21) +# MokoWaaS Operations Guide (VERSION: 02.32.22) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 55df494..4798473 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.21) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.22) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index f3ca57f..0e23183 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.21) +# MokoWaaS Testing Guide (VERSION: 02.32.22) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index f75fd42..67566ba 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.21) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.22) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 86ae2dd..d727437 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.21) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.22) ## Introduction diff --git a/docs/index.md b/docs/index.md index c930359..3d20bb4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.21 + VERSION: 02.32.22 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.21) +# MokoWaaS Documentation Index (VERSION: 02.32.22) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 6c36ff8..5872835 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.21 + VERSION: 02.32.22 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.21) +# MokoWaaS Plugin Overview (VERSION: 02.32.22) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 0059d11..474de51 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.21 +VERSION: 02.32.22 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 7149b44..842bae9 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 + 02.32.22 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 8e6ec27..f17381e 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 + 02.32.22 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index badd115..54a8106 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.21 + * VERSION: 02.32.22 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 2aa3e65..857529f 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.21 + * VERSION: 02.32.22 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 7ed749d..b970247 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.21 + * VERSION: 02.32.22 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index ea475f6..63083af 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.21 + * VERSION: 02.32.22 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 9b280b3..d15bf3e 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.21 + * VERSION: 02.32.22 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index f8dc2b2..9a19c58 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.21 + * VERSION: 02.32.22 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 4081b99..9e5d1a0 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.21 + * VERSION: 02.32.22 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 557bc54..1795121 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.21 + * VERSION: 02.32.22 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 099e905..41bb0da 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.21 + * VERSION: 02.32.22 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index f1865e4..7a840d6 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.21 + * VERSION: 02.32.22 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 61b33c0..c85131d 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 + 02.32.22 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 4be9dd0..00d2fe7 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.21 + * VERSION: 02.32.22 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 2ba926e..b03a91b 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.21 + * VERSION: 02.32.22 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 39ad950..385c933 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 + 02.32.22 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index ca98610..adfdbd8 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 + 02.32.22 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 8288308..911fdde 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 + 02.32.22 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index abe6efa..13322ac 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 + 02.32.22 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index bfb5545..7410b70 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 - 02.32.21 + 02.32.22 + 02.32.22 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index c5009f9..2d85801 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 + 02.32.22 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 9652639..1138733 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 - 02.32.21 + 02.32.22 + 02.32.22 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index fbbecc3..fd029e4 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.21 - 02.32.21 + 02.32.22 + 02.32.22 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 88a41a0..89e9f31 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.21 + * VERSION: 02.32.22 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 9b8f8b5..787f3c7 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.21 + * VERSION: 02.32.22 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 0404390..7aa72f9 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.21 + 02.32.22 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 30614ca..662892e 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 5d94419d9f410143c918090b9ae402369f60d01c Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 18:54:54 +0000 Subject: [PATCH 004/142] chore: update development channel 02.32.22 [skip ci] --- updates.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/updates.xml b/updates.xml index 662892e..eabcb02 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ @@ -11,18 +11,18 @@ pkg_mokowaas package site - 02.32.21-dev + 02.32.22-dev 2026-06-02 - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.21-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.22-dev.zip - 2330a2b3278587c66a4b43e4c6d5a330a7fb2d161c0df09cd266850aabb82d82 + d96e622418b04747079620c36d95e2d054a8652eaf22ae756cad6177d27ebdcf dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting https://mokoconsulting.tech - + Package - MokoWaaS @@ -32,15 +32,15 @@ site 02.33.00 2026-06-02 - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/stable + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/stable - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/stable/pkg_mokowaas-02.33.00.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/stable/pkg_mokowaas-02.33.00.zip 30e18531d9e453173c8945fdfaf690dacdcc3d584d827d146f0c86c851f49bb0 stable https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting https://mokoconsulting.tech - + -- 2.52.0 From 6a02a2b4e5bca5e4e154e8692d81e7aee4f62c6d Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 13:56:58 -0500 Subject: [PATCH 005/142] feat: add all quick action buttons to dashboard + Community Builder detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 8 action buttons in a 4-column grid: - Clear Cache, Check Updates, Moko Extensions (primary) - Global Check-in, View Logs, Scheduled Tasks, User Manager, Redirects (secondary) User Manager auto-detects Community Builder — links to com_comprofiler if installed, otherwise com_users. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/tmpl/dashboard/default.php | 52 ++++++++++++++++--- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php index c892288..6b879fa 100644 --- a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php +++ b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php @@ -68,24 +68,62 @@ $categoryOrder = ['core', 'security', 'monitoring', 'content', 'tools', 'api'];
-
+
-
+ - -- 2.52.0 From a013755ce45ae4b0201c070d4f76c75d85d5f451 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 18:57:17 +0000 Subject: [PATCH 006/142] chore(version): auto-bump 02.32.23 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 46 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 47acc77..30f1a9a 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.22 + 02.32.23 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index a5c5111..bf5f395 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.22 +# VERSION: 02.32.23 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 3635cf1..f9a7677 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.22 + VERSION: 02.32.23 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 070d3b0..855c752 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 5879fd5..335fdad 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 4871e33..f00a1a9 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.22 + VERSION: 02.32.23 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index ce469ee..0f4de26 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index c23227c..1ef6773 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.22 +VERSION: 02.32.23 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index b6ff5ff..f487040 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.22) +# MokoWaaS Build Guide (VERSION: 02.32.23) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 3ea18bd..0c41a28 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.22) +# MokoWaaS Configuration Guide (VERSION: 02.32.23) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 056ce53..2ab661a 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.22) +# MokoWaaS Installation Guide (VERSION: 02.32.23) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 082612f..1d859fa 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.22) +# MokoWaaS Operations Guide (VERSION: 02.32.23) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 4798473..d976a1f 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.22) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.23) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 0e23183..1e85ffd 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.22) +# MokoWaaS Testing Guide (VERSION: 02.32.23) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 67566ba..3021f70 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.22) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.23) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index d727437..0e0efed 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.22) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.23) ## Introduction diff --git a/docs/index.md b/docs/index.md index 3d20bb4..4b79c2e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.22 + VERSION: 02.32.23 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.22) +# MokoWaaS Documentation Index (VERSION: 02.32.23) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 5872835..59d9242 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.22 + VERSION: 02.32.23 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.22) +# MokoWaaS Plugin Overview (VERSION: 02.32.23) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 474de51..95f332c 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.22 +VERSION: 02.32.23 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 842bae9..e764248 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 + 02.32.23 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index f17381e..b3187da 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 + 02.32.23 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 54a8106..7f281cf 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.22 + * VERSION: 02.32.23 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 857529f..36d8c0c 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.22 + * VERSION: 02.32.23 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index b970247..733a52b 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.22 + * VERSION: 02.32.23 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 63083af..3c90e6d 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.22 + * VERSION: 02.32.23 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index d15bf3e..e560e8f 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.22 + * VERSION: 02.32.23 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 9a19c58..a1dcc0d 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.22 + * VERSION: 02.32.23 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 9e5d1a0..21fc160 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.22 + * VERSION: 02.32.23 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 1795121..110a187 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.22 + * VERSION: 02.32.23 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 41bb0da..d7ee246 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.22 + * VERSION: 02.32.23 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 7a840d6..5f0e52c 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.22 + * VERSION: 02.32.23 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index c85131d..443037b 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 + 02.32.23 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 00d2fe7..d059fcc 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.22 + * VERSION: 02.32.23 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index b03a91b..0657ee4 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.22 + * VERSION: 02.32.23 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 385c933..e1c038c 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 + 02.32.23 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index adfdbd8..8be67a2 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 + 02.32.23 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 911fdde..373fd21 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 + 02.32.23 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 13322ac..a5383f1 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 + 02.32.23 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 7410b70..94266b7 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 - 02.32.22 + 02.32.23 + 02.32.23 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 2d85801..b0f5bf9 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 + 02.32.23 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 1138733..637c44c 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 - 02.32.22 + 02.32.23 + 02.32.23 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index fd029e4..2fb307b 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.22 - 02.32.22 + 02.32.23 + 02.32.23 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 89e9f31..132f8da 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.22 + * VERSION: 02.32.23 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 787f3c7..254b153 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.22 + * VERSION: 02.32.23 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 7aa72f9..68ec3b5 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.22 + 02.32.23 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index eabcb02..d981bec 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 0632981d8895669116e2514ce444409847832d71 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:05:25 -0500 Subject: [PATCH 007/142] feat: .htaccess / NginX configuration maker (#123) GUI-based server config generator with toggle switches: Security: directory listing, sensitive files, PHP in uploads, server signature, clickjacking, MIME sniffing, XSS, TRACE/TRACK, referrer policy, HSTS, CSP, permissions policy Performance: GZip compression, browser caching with configurable expiry times, ETag control SEO: www/non-www redirect, index.php redirect, trailing slash Features: - Live preview updates as toggles change (AJAX) - Save to disk with automatic .htaccess.mokowaas.bak backup - Download generated config - NginX equivalent tab - Current file viewer tab - Options persist in component params - Added to sidebar submenu Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/language/en-GB/com_mokowaas.ini | 1 + .../admin/language/en-GB/com_mokowaas.sys.ini | 1 + .../src/Controller/DisplayController.php | 67 +++ .../admin/src/Model/HtaccessModel.php | 522 ++++++++++++++++++ .../admin/src/View/Htaccess/HtmlView.php | 47 ++ .../admin/tmpl/htaccess/default.php | 306 ++++++++++ src/packages/com_mokowaas/mokowaas.xml | 1 + 7 files changed, 945 insertions(+) create mode 100644 src/packages/com_mokowaas/admin/src/Model/HtaccessModel.php create mode 100644 src/packages/com_mokowaas/admin/src/View/Htaccess/HtmlView.php create mode 100644 src/packages/com_mokowaas/admin/tmpl/htaccess/default.php diff --git a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini index 2d7a1c7..e11af07 100644 --- a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini +++ b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini @@ -19,3 +19,4 @@ COM_MOKOWAAS_CACHE_CLEARED="Cache cleared successfully." COM_MOKOWAAS_EXTENSIONS_TITLE="Moko Extensions" COM_MOKOWAAS_EXTENSIONS_INFO="Install Moko Consulting Joomla packages from the official release server. Updates are handled through Joomla's native System > Update mechanism — each package registers its own update server." COM_MOKOWAAS_EXTENSIONS_LINK="Moko Extensions" +COM_MOKOWAAS_HTACCESS_TITLE=".htaccess Maker" diff --git a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini index 5e40f5d..4ec4189 100644 --- a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini +++ b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini @@ -10,4 +10,5 @@ COM_MOKOWAAS_MENU_EXTENSIONS="Moko Extensions" COM_MOKOWAAS_MENU_PLUGINS="Feature Plugins" COM_MOKOWAAS_MENU_UPDATES="Joomla Updates" COM_MOKOWAAS_MENU_CHECKIN="Global Check-in" +COM_MOKOWAAS_MENU_HTACCESS=".htaccess Maker" COM_MOKOWAAS_MENU_CACHE="Cache Management" diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index b6bdac5..6cfebbb 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -122,4 +122,71 @@ class DisplayController extends BaseController echo json_encode($result); $app->close(); } + + /** + * Save .htaccess to disk and persist options. + */ + public function saveHtaccess() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + $app = Factory::getApplication(); + $user = $app->getIdentity(); + + if (!$user->authorise('core.admin')) + { + $app->setHeader('Content-Type', 'application/json'); + echo json_encode(['success' => false, 'message' => Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')]); + $app->close(); + } + + $input = $app->getInput(); + $content = $input->getRaw('content', ''); + $model = $this->getModel('Htaccess'); + + // Save options from opt_ prefixed fields + $options = []; + + foreach ($input->getArray() as $key => $value) + { + if (str_starts_with($key, 'opt_')) + { + $options[substr($key, 4)] = $value; + } + } + + if (!empty($options)) + { + $model->saveOptions($options); + } + + $result = $model->saveHtaccess($content); + + $app->setHeader('Content-Type', 'application/json'); + echo json_encode($result); + $app->close(); + } + + /** + * Generate .htaccess preview from posted options (AJAX). + */ + public function generateHtaccess() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + $app = Factory::getApplication(); + $input = $app->getInput(); + $model = $this->getModel('Htaccess'); + $options = $input->getArray(); + + // Save options for persistence + $model->saveOptions($options); + + $app->setHeader('Content-Type', 'application/json'); + echo json_encode([ + 'htaccess' => $model->generateHtaccess($options), + 'nginx' => $model->generateNginx($options), + ]); + $app->close(); + } } diff --git a/src/packages/com_mokowaas/admin/src/Model/HtaccessModel.php b/src/packages/com_mokowaas/admin/src/Model/HtaccessModel.php new file mode 100644 index 0000000..5997b19 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/Model/HtaccessModel.php @@ -0,0 +1,522 @@ + 1, + 'block_sensitive_files' => 1, + 'block_php_in_uploads' => 1, + 'disable_server_signature' => 1, + 'prevent_clickjacking' => 1, + 'prevent_mime_sniffing' => 1, + 'xss_protection' => 1, + 'disable_trace_track' => 1, + 'referrer_policy' => 'strict-origin-when-cross-origin', + 'hsts_enabled' => 0, + 'hsts_max_age' => 31536000, + 'hsts_subdomains' => 0, + 'csp_enabled' => 0, + 'csp_value' => '', + 'permissions_policy' => 0, + 'permissions_value' => '', + // Performance + 'enable_gzip' => 1, + 'enable_expires' => 1, + 'expires_html' => 3600, + 'expires_css_js' => 2592000, + 'expires_images' => 31536000, + 'etag_control' => 0, + // SEO + 'www_redirect' => 'off', + 'redirect_index_php' => 1, + 'force_trailing_slash' => 0, + // Custom + 'custom_rules' => '', + ]; + + /** + * Get saved options or defaults. + */ + public function getOptions(): array + { + $db = $this->getDatabase(); + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')); + $db->setQuery($query); + $params = new Registry($db->loadResult() ?? '{}'); + + $htaccess = $params->get('htaccess', null); + + if ($htaccess) + { + return array_merge(self::DEFAULTS, (array) json_decode(json_encode($htaccess), true)); + } + + return self::DEFAULTS; + } + + /** + * Save options to component params. + */ + public function saveOptions(array $options): array + { + try + { + $db = $this->getDatabase(); + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')); + $db->setQuery($query); + $params = new Registry($db->loadResult() ?? '{}'); + + $clean = []; + + foreach (self::DEFAULTS as $key => $default) + { + $clean[$key] = $options[$key] ?? $default; + } + + $params->set('htaccess', $clean); + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote($params->toString())) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')) + )->execute(); + + return ['success' => true, 'message' => 'Options saved.']; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Save failed: ' . $e->getMessage()]; + } + } + + /** + * Read the current .htaccess file. + */ + public function readCurrentHtaccess(): string + { + $path = JPATH_ROOT . '/.htaccess'; + + return file_exists($path) ? file_get_contents($path) : ''; + } + + /** + * Write .htaccess to disk with backup. + */ + public function saveHtaccess(string $content): array + { + $path = JPATH_ROOT . '/.htaccess'; + $backup = JPATH_ROOT . '/.htaccess.mokowaas.bak'; + + try + { + // Backup existing + if (file_exists($path)) + { + copy($path, $backup); + } + + $result = file_put_contents($path, $content); + + if ($result === false) + { + // Restore backup + if (file_exists($backup)) + { + copy($backup, $path); + } + + return ['success' => false, 'message' => '.htaccess is not writable.']; + } + + return ['success' => true, 'message' => '.htaccess saved. Backup at .htaccess.mokowaas.bak']; + } + catch (\Throwable $e) + { + if (file_exists($backup)) + { + @copy($backup, $path); + } + + return ['success' => false, 'message' => 'Write failed: ' . $e->getMessage()]; + } + } + + /** + * Generate .htaccess content from options. + */ + public function generateHtaccess(array $opts): string + { + $lines = []; + $lines[] = '##'; + $lines[] = '## MokoWaaS Generated .htaccess'; + $lines[] = '## Generated: ' . gmdate('Y-m-d H:i:s') . ' UTC'; + $lines[] = '## DO NOT EDIT — regenerate from MokoWaaS > .htaccess Maker'; + $lines[] = '##'; + $lines[] = ''; + + // --- Security --- + if (!empty($opts['disable_directory_listing'])) + { + $lines[] = '## Disable directory listing'; + $lines[] = 'Options -Indexes'; + $lines[] = ''; + } + + if (!empty($opts['disable_server_signature'])) + { + $lines[] = '## Hide server signature'; + $lines[] = 'ServerSignature Off'; + $lines[] = ''; + $lines[] = ' Header unset X-Powered-By'; + $lines[] = ' Header unset Server'; + $lines[] = ''; + $lines[] = ''; + } + + if (!empty($opts['block_sensitive_files'])) + { + $lines[] = '## Block access to sensitive files'; + $lines[] = ''; + $lines[] = ' '; + $lines[] = ' Require all denied'; + $lines[] = ' '; + $lines[] = ''; + $lines[] = ''; + } + + if (!empty($opts['block_php_in_uploads'])) + { + $lines[] = '## Block PHP execution in upload directories'; + $dirs = ['images', 'media', 'tmp', 'cache', 'logs']; + + foreach ($dirs as $dir) + { + $lines[] = ''; + $lines[] = ' '; + $lines[] = ' '; + $lines[] = ' Require all denied'; + $lines[] = ' '; + $lines[] = ' '; + $lines[] = ''; + } + + $lines[] = ''; + } + + if (!empty($opts['disable_trace_track'])) + { + $lines[] = '## Disable TRACE and TRACK methods'; + $lines[] = ''; + $lines[] = ' RewriteEngine On'; + $lines[] = ' RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)'; + $lines[] = ' RewriteRule .* - [F]'; + $lines[] = ''; + $lines[] = ''; + } + + // Security headers + $headers = []; + + if (!empty($opts['prevent_clickjacking'])) + { + $headers[] = ' Header always set X-Frame-Options "SAMEORIGIN"'; + } + + if (!empty($opts['prevent_mime_sniffing'])) + { + $headers[] = ' Header always set X-Content-Type-Options "nosniff"'; + } + + if (!empty($opts['xss_protection'])) + { + $headers[] = ' Header always set X-XSS-Protection "1; mode=block"'; + } + + $referrer = $opts['referrer_policy'] ?? ''; + + if (!empty($referrer) && $referrer !== 'off') + { + $headers[] = ' Header always set Referrer-Policy "' . $referrer . '"'; + } + + if (!empty($opts['hsts_enabled'])) + { + $maxAge = (int) ($opts['hsts_max_age'] ?? 31536000); + $hsts = 'max-age=' . $maxAge; + + if (!empty($opts['hsts_subdomains'])) + { + $hsts .= '; includeSubDomains'; + } + + $headers[] = ' Header always set Strict-Transport-Security "' . $hsts . '"'; + } + + if (!empty($opts['csp_enabled']) && !empty($opts['csp_value'])) + { + $headers[] = ' Header always set Content-Security-Policy "' . str_replace('"', '', $opts['csp_value']) . '"'; + } + + if (!empty($opts['permissions_policy']) && !empty($opts['permissions_value'])) + { + $headers[] = ' Header always set Permissions-Policy "' . str_replace('"', '', $opts['permissions_value']) . '"'; + } + + if (!empty($headers)) + { + $lines[] = '## Security headers'; + $lines[] = ''; + $lines = array_merge($lines, $headers); + $lines[] = ''; + $lines[] = ''; + } + + // --- Performance --- + if (!empty($opts['enable_gzip'])) + { + $lines[] = '## GZip compression'; + $lines[] = ''; + $lines[] = ' AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css'; + $lines[] = ' AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript'; + $lines[] = ' AddOutputFilterByType DEFLATE application/json application/xml application/rss+xml'; + $lines[] = ' AddOutputFilterByType DEFLATE image/svg+xml application/font-woff application/font-woff2'; + $lines[] = ''; + $lines[] = ''; + } + + if (!empty($opts['enable_expires'])) + { + $html = (int) ($opts['expires_html'] ?? 3600); + $cssJs = (int) ($opts['expires_css_js'] ?? 2592000); + $images = (int) ($opts['expires_images'] ?? 31536000); + + $lines[] = '## Browser caching'; + $lines[] = ''; + $lines[] = ' ExpiresActive On'; + $lines[] = ' ExpiresDefault "access plus ' . $html . ' seconds"'; + $lines[] = ' ExpiresByType text/html "access plus ' . $html . ' seconds"'; + $lines[] = ' ExpiresByType text/css "access plus ' . $cssJs . ' seconds"'; + $lines[] = ' ExpiresByType text/javascript "access plus ' . $cssJs . ' seconds"'; + $lines[] = ' ExpiresByType application/javascript "access plus ' . $cssJs . ' seconds"'; + $lines[] = ' ExpiresByType image/jpeg "access plus ' . $images . ' seconds"'; + $lines[] = ' ExpiresByType image/png "access plus ' . $images . ' seconds"'; + $lines[] = ' ExpiresByType image/gif "access plus ' . $images . ' seconds"'; + $lines[] = ' ExpiresByType image/webp "access plus ' . $images . ' seconds"'; + $lines[] = ' ExpiresByType image/svg+xml "access plus ' . $images . ' seconds"'; + $lines[] = ' ExpiresByType font/woff2 "access plus ' . $images . ' seconds"'; + $lines[] = ''; + $lines[] = ''; + } + + if (!empty($opts['etag_control'])) + { + $lines[] = '## Disable ETags (for load-balanced environments)'; + $lines[] = ''; + $lines[] = ' Header unset ETag'; + $lines[] = ''; + $lines[] = 'FileETag None'; + $lines[] = ''; + } + + // --- SEO / Redirects --- + $wwwRedirect = $opts['www_redirect'] ?? 'off'; + + if ($wwwRedirect !== 'off' || !empty($opts['redirect_index_php']) || !empty($opts['force_trailing_slash'])) + { + $lines[] = '## SEO redirects'; + $lines[] = ''; + $lines[] = ' RewriteEngine On'; + + if ($wwwRedirect === 'www') + { + $lines[] = ''; + $lines[] = ' ## Force www'; + $lines[] = ' RewriteCond %{HTTP_HOST} !^www\. [NC]'; + $lines[] = ' RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]'; + } + elseif ($wwwRedirect === 'non-www') + { + $lines[] = ''; + $lines[] = ' ## Force non-www'; + $lines[] = ' RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]'; + $lines[] = ' RewriteRule ^(.*)$ https://%1/$1 [R=301,L]'; + } + + if (!empty($opts['redirect_index_php'])) + { + $lines[] = ''; + $lines[] = ' ## Redirect /index.php to root'; + $lines[] = ' RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\s [NC]'; + $lines[] = ' RewriteRule ^index\.php/?(.*)$ /$1 [R=301,L]'; + } + + if (!empty($opts['force_trailing_slash'])) + { + $lines[] = ''; + $lines[] = ' ## Force trailing slash'; + $lines[] = ' RewriteCond %{REQUEST_FILENAME} !-f'; + $lines[] = ' RewriteCond %{REQUEST_URI} !(.*)/$'; + $lines[] = ' RewriteRule ^(.*)$ /$1/ [R=301,L]'; + } + + $lines[] = ''; + $lines[] = ''; + } + + // --- Custom rules --- + $custom = trim($opts['custom_rules'] ?? ''); + + if (!empty($custom)) + { + $lines[] = '## Custom rules'; + $lines[] = $custom; + $lines[] = ''; + } + + return implode("\n", $lines); + } + + /** + * Generate equivalent NginX configuration snippet. + */ + public function generateNginx(array $opts): string + { + $lines = []; + $lines[] = '## MokoWaaS Generated NginX Configuration'; + $lines[] = '## Add these directives inside your server { } block'; + $lines[] = ''; + + if (!empty($opts['disable_directory_listing'])) + { + $lines[] = '# Disable directory listing'; + $lines[] = 'autoindex off;'; + $lines[] = ''; + } + + if (!empty($opts['disable_server_signature'])) + { + $lines[] = '# Hide server version'; + $lines[] = 'server_tokens off;'; + $lines[] = ''; + } + + if (!empty($opts['block_sensitive_files'])) + { + $lines[] = '# Block sensitive files'; + $lines[] = 'location ~* (htaccess\.txt|web\.config\.txt|configuration\.php-dist|README\.txt|LICENSE\.txt)$ {'; + $lines[] = ' deny all;'; + $lines[] = '}'; + $lines[] = ''; + } + + if (!empty($opts['block_php_in_uploads'])) + { + $lines[] = '# Block PHP in upload directories'; + $lines[] = 'location ~* ^/(images|media|tmp|cache|logs)/.*\.php$ {'; + $lines[] = ' deny all;'; + $lines[] = '}'; + $lines[] = ''; + } + + // Headers + $hdrs = []; + + if (!empty($opts['prevent_clickjacking'])) + { + $hdrs[] = 'add_header X-Frame-Options "SAMEORIGIN" always;'; + } + + if (!empty($opts['prevent_mime_sniffing'])) + { + $hdrs[] = 'add_header X-Content-Type-Options "nosniff" always;'; + } + + if (!empty($opts['xss_protection'])) + { + $hdrs[] = 'add_header X-XSS-Protection "1; mode=block" always;'; + } + + $referrer = $opts['referrer_policy'] ?? ''; + + if (!empty($referrer) && $referrer !== 'off') + { + $hdrs[] = 'add_header Referrer-Policy "' . $referrer . '" always;'; + } + + if (!empty($opts['hsts_enabled'])) + { + $maxAge = (int) ($opts['hsts_max_age'] ?? 31536000); + $hsts = 'max-age=' . $maxAge; + + if (!empty($opts['hsts_subdomains'])) + { + $hsts .= '; includeSubDomains'; + } + + $hdrs[] = 'add_header Strict-Transport-Security "' . $hsts . '" always;'; + } + + if (!empty($hdrs)) + { + $lines[] = '# Security headers'; + $lines = array_merge($lines, $hdrs); + $lines[] = ''; + } + + if (!empty($opts['enable_gzip'])) + { + $lines[] = '# GZip compression'; + $lines[] = 'gzip on;'; + $lines[] = 'gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;'; + $lines[] = 'gzip_min_length 256;'; + $lines[] = ''; + } + + if (!empty($opts['enable_expires'])) + { + $cssJs = (int) ($opts['expires_css_js'] ?? 2592000); + $images = (int) ($opts['expires_images'] ?? 31536000); + + $lines[] = '# Browser caching'; + $lines[] = 'location ~* \.(css|js)$ {'; + $lines[] = ' expires ' . round($cssJs / 86400) . 'd;'; + $lines[] = '}'; + $lines[] = 'location ~* \.(jpg|jpeg|png|gif|webp|svg|ico|woff2)$ {'; + $lines[] = ' expires ' . round($images / 86400) . 'd;'; + $lines[] = '}'; + $lines[] = ''; + } + + return implode("\n", $lines); + } +} diff --git a/src/packages/com_mokowaas/admin/src/View/Htaccess/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Htaccess/HtmlView.php new file mode 100644 index 0000000..1a7dc9d --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Htaccess/HtmlView.php @@ -0,0 +1,47 @@ +getModel(); + + $this->options = $model->getOptions(); + $this->preview = $model->generateHtaccess($this->options); + $this->nginxPreview = $model->generateNginx($this->options); + $this->currentHtaccess = $model->readCurrentHtaccess(); + + $this->addToolbar(); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } + + protected function addToolbar(): void + { + ToolbarHelper::title(Text::_('COM_MOKOWAAS_HTACCESS_TITLE'), 'file-code'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas'); + } +} diff --git a/src/packages/com_mokowaas/admin/tmpl/htaccess/default.php b/src/packages/com_mokowaas/admin/tmpl/htaccess/default.php new file mode 100644 index 0000000..7915523 --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/htaccess/default.php @@ -0,0 +1,306 @@ +options; +$preview = $this->preview; +$nginx = $this->nginxPreview; +$current = $this->currentHtaccess; +$token = Session::getFormToken(); +$saveUrl = Route::_('index.php?option=com_mokowaas&task=display.saveHtaccess&format=json'); +$genUrl = Route::_('index.php?option=com_mokowaas&task=display.generateHtaccess&format=json'); + +// Helper for toggle switch +$sw = function($name, $label, $desc = '') use ($opts) { + $checked = !empty($opts[$name]) ? 'checked' : ''; + echo '
'; + echo '
' . htmlspecialchars($label) . ''; + if ($desc) echo '
' . htmlspecialchars($desc) . ''; + echo '
'; + echo '
'; + echo ''; + echo '
'; +}; +?> + +
+ + +
+ +
+
+ +
+ +
+
Security
+
+ + + + + + + + + +
+ + +
+ + +
+
+
+ + +
+
+
+ > + +
+
+
+
+ + +
+ +
+ + +
+ +
+
+
+ +
+
Performance
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
+ +
+
SEO / Redirects
+
+
+ + +
+ + +
+
+ +
+
Custom Rules
+
+ +
+
+
+ + +
+
+
+ Preview + lines +
+
+ +
+ +
+
+
+
+ + +
+
+
NginX Configuration Snippet
+
+ +
+ +
+
+ + +
+
+
Current .htaccess on Disk
+
+ +
+
+
+
+
+ + diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 842bae9..f44f13a 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -30,6 +30,7 @@ COM_MOKOWAAS_MENU_DASHBOARD COM_MOKOWAAS_MENU_EXTENSIONS + COM_MOKOWAAS_MENU_HTACCESS COM_MOKOWAAS_MENU_PLUGINS COM_MOKOWAAS_MENU_UPDATES COM_MOKOWAAS_MENU_CHECKIN -- 2.52.0 From 12e9115a6a703c970392d72d92155b3404cd2938 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:05:56 +0000 Subject: [PATCH 008/142] chore(version): auto-bump 02.32.24 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 46 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 30f1a9a..2b44122 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.23 + 02.32.24 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index bf5f395..f67edf9 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.23 +# VERSION: 02.32.24 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index f9a7677..d142386 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.23 + VERSION: 02.32.24 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 855c752..322d99a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 335fdad..408f996 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index f00a1a9..d260d56 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.23 + VERSION: 02.32.24 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 0f4de26..11cf2ab 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 1ef6773..a4ab24d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.23 +VERSION: 02.32.24 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index f487040..b4a3f1d 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.23) +# MokoWaaS Build Guide (VERSION: 02.32.24) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 0c41a28..0f6c065 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.23) +# MokoWaaS Configuration Guide (VERSION: 02.32.24) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 2ab661a..faa2361 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.23) +# MokoWaaS Installation Guide (VERSION: 02.32.24) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 1d859fa..9a1511e 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.23) +# MokoWaaS Operations Guide (VERSION: 02.32.24) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index d976a1f..392edea 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.23) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.24) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 1e85ffd..769b08f 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.23) +# MokoWaaS Testing Guide (VERSION: 02.32.24) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 3021f70..2a97aff 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.23) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.24) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 0e0efed..91685bc 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.23) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.24) ## Introduction diff --git a/docs/index.md b/docs/index.md index 4b79c2e..d0e03fe 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.23 + VERSION: 02.32.24 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.23) +# MokoWaaS Documentation Index (VERSION: 02.32.24) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 59d9242..77df93d 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.23 + VERSION: 02.32.24 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.23) +# MokoWaaS Plugin Overview (VERSION: 02.32.24) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 95f332c..7a289ff 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.23 +VERSION: 02.32.24 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index d23581e..16f7641 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 + 02.32.24 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index b3187da..10a6d3e 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 + 02.32.24 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 7f281cf..8fa523c 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.23 + * VERSION: 02.32.24 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 36d8c0c..d1730f3 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.23 + * VERSION: 02.32.24 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 733a52b..ca4aff0 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.23 + * VERSION: 02.32.24 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 3c90e6d..3c3091d 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.23 + * VERSION: 02.32.24 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index e560e8f..6da008d 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.23 + * VERSION: 02.32.24 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index a1dcc0d..a812891 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.23 + * VERSION: 02.32.24 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 21fc160..e766458 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.23 + * VERSION: 02.32.24 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 110a187..56d567c 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.23 + * VERSION: 02.32.24 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index d7ee246..718e3dc 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.23 + * VERSION: 02.32.24 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 5f0e52c..f81988f 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.23 + * VERSION: 02.32.24 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 443037b..c2ec9d8 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 + 02.32.24 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index d059fcc..e51e181 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.23 + * VERSION: 02.32.24 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 0657ee4..f16d4ed 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.23 + * VERSION: 02.32.24 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index e1c038c..6a514b8 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 + 02.32.24 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 8be67a2..5f71a31 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 + 02.32.24 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 373fd21..3abf799 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 + 02.32.24 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index a5383f1..f5a87e1 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 + 02.32.24 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 94266b7..b9c7581 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 - 02.32.23 + 02.32.24 + 02.32.24 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index b0f5bf9..191fded 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 + 02.32.24 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 637c44c..87b8a7e 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 - 02.32.23 + 02.32.24 + 02.32.24 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 2fb307b..5d27e2b 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.23 - 02.32.23 + 02.32.24 + 02.32.24 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 132f8da..4b3c931 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.23 + * VERSION: 02.32.24 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 254b153..f5beba9 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.23 + * VERSION: 02.32.24 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 68ec3b5..6ba63f0 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.23 + 02.32.24 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index d981bec..22683fa 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 8ce3452125a8ea03ae932f78c9bf8022a20bc16a Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:05:59 +0000 Subject: [PATCH 009/142] chore: update development channel 02.32.24 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 22683fa..91b2b94 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.22-dev + 02.32.24-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.22-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.24-dev.zip - d96e622418b04747079620c36d95e2d054a8652eaf22ae756cad6177d27ebdcf + 789ea2778dd5b43440a596f9703d29efc93c70ac72c26a1348caff3583427b9a dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From af841ace1953d29287953757f8f2fe65b1aff3f4 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:09:01 -0500 Subject: [PATCH 010/142] fix: dashboard plugin cards - correct protected/enabled/configure-only states MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Task plugins (demo reset, content sync) show Enabled/Disabled badge instead of Protected — DB protected flag is for uninstall protection, not dashboard display - DevTools shows Enabled badge only (configure-only, no toggle) since features are controlled inside the plugin settings - Health Monitor marked as protected (cannot be disabled) - Added explicit metadata for task plugins instead of relying on guessPluginMeta Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/src/Model/DashboardModel.php | 94 ++++++++++++------- .../admin/tmpl/dashboard/default.php | 4 + 2 files changed, 62 insertions(+), 36 deletions(-) diff --git a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php index 8c9d383..7879cbf 100644 --- a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php @@ -22,39 +22,60 @@ class DashboardModel extends BaseDatabaseModel */ private const PLUGIN_META = [ 'mokowaas' => [ - 'icon' => 'icon-shield-alt', - 'category' => 'core', - 'label' => 'Core — Branding & Identity', - 'description' => 'White-label branding, master user enforcement, emergency access, and plugin protection.', - 'protected' => true, + 'icon' => 'icon-shield-alt', + 'category' => 'core', + 'label' => 'Core — Branding & Identity', + 'description' => 'White-label branding, master user enforcement, emergency access, and plugin protection.', + 'protected' => true, + 'configure_only' => false, ], 'mokowaas_firewall' => [ - 'icon' => 'icon-lock', - 'category' => 'security', - 'label' => 'Firewall', - 'description' => 'Web Application Firewall — SQLi, XSS, RFI, DFI shields, IP blocklist, admin secret URL, file protection.', - 'protected' => false, + 'icon' => 'icon-lock', + 'category' => 'security', + 'label' => 'Firewall', + 'description' => 'Web Application Firewall — SQLi, XSS, RFI, DFI shields, IP blocklist, admin secret URL, file protection.', + 'protected' => false, + 'configure_only' => false, ], 'mokowaas_tenant' => [ - 'icon' => 'icon-users', - 'category' => 'security', - 'label' => 'Tenant Restrictions', - 'description' => 'Installer, sysinfo, config, and template access restrictions for non-master users.', - 'protected' => false, + 'icon' => 'icon-users', + 'category' => 'security', + 'label' => 'Tenant Restrictions', + 'description' => 'Installer, sysinfo, config, and template access restrictions for non-master users.', + 'protected' => false, + 'configure_only' => false, ], 'mokowaas_devtools' => [ - 'icon' => 'icon-wrench', - 'category' => 'tools', - 'label' => 'Developer Tools', - 'description' => 'Dev mode, hit counter reset, content version cleanup.', - 'protected' => false, + 'icon' => 'icon-wrench', + 'category' => 'tools', + 'label' => 'Developer Tools', + 'description' => 'Dev mode, hit counter reset, content version cleanup. Features are controlled inside the plugin settings.', + 'protected' => false, + 'configure_only' => true, ], 'mokowaas_monitor' => [ - 'icon' => 'icon-heartbeat', - 'category' => 'monitoring', - 'label' => 'Health Monitor', - 'description' => 'Site health checks, Grafana heartbeat integration, and diagnostics.', - 'protected' => false, + 'icon' => 'icon-heartbeat', + 'category' => 'monitoring', + 'label' => 'Health Monitor', + 'description' => 'Site health checks, Grafana heartbeat integration, and diagnostics.', + 'protected' => true, + 'configure_only' => false, + ], + 'mokowaasdemo' => [ + 'icon' => 'icon-undo', + 'category' => 'content', + 'label' => 'Demo Reset Task', + 'description' => 'Scheduled demo site reset with content snapshots.', + 'protected' => false, + 'configure_only' => true, + ], + 'mokowaassync' => [ + 'icon' => 'icon-sync', + 'category' => 'content', + 'label' => 'Content Sync Task', + 'description' => 'Scheduled content synchronisation to remote MokoWaaS sites.', + 'protected' => false, + 'configure_only' => true, ], ]; @@ -135,19 +156,20 @@ class DashboardModel extends BaseDatabaseModel $categoryInfo = self::CATEGORIES[$categoryKey] ?? self::CATEGORIES['tools']; $plugins[] = (object) [ - 'extension_id' => (int) $row->extension_id, - 'name' => $meta['label'] ?? $row->name, - 'element' => $row->element, - 'folder' => $row->folder, - 'type' => $row->type, - 'enabled' => (int) $row->enabled, - 'protected' => (int) $row->protected || ($meta['protected'] ?? false), - 'version' => $version, - 'icon' => $meta['icon'] ?? 'icon-puzzle-piece', - 'category' => $categoryKey, + 'extension_id' => (int) $row->extension_id, + 'name' => $meta['label'] ?? $row->name, + 'element' => $row->element, + 'folder' => $row->folder, + 'type' => $row->type, + 'enabled' => (int) $row->enabled, + 'protected' => (bool) ($meta['protected'] ?? false), + 'configure_only' => (bool) ($meta['configure_only'] ?? false), + 'version' => $version, + 'icon' => $meta['icon'] ?? 'icon-puzzle-piece', + 'category' => $categoryKey, 'categoryLabel' => $categoryInfo['label'], 'categoryBadge' => $categoryInfo['badge'], - 'description' => $meta['description'] ?? '', + 'description' => $meta['description'] ?? '', ]; } diff --git a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php index 6b879fa..4728a39 100644 --- a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php +++ b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php @@ -160,6 +160,10 @@ $categoryOrder = ['core', 'security', 'monitoring', 'content', 'tools', 'api'];
protected): ?> + configure_only): ?> + + enabled ? Text::_('COM_MOKOWAAS_ENABLED') : Text::_('COM_MOKOWAAS_DISABLED'); ?> +
Date: Tue, 2 Jun 2026 19:09:22 +0000 Subject: [PATCH 011/142] chore(version): auto-bump 02.32.25 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 46 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 2b44122..1280d91 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.24 + 02.32.25 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index f67edf9..8296e7f 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.24 +# VERSION: 02.32.25 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index d142386..bef9db1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.24 + VERSION: 02.32.25 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 322d99a..58afdbe 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 408f996..f79d96f 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index d260d56..9af465f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.24 + VERSION: 02.32.25 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 11cf2ab..cc6c373 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index a4ab24d..4a408c1 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.24 +VERSION: 02.32.25 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index b4a3f1d..e00eb5b 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.24) +# MokoWaaS Build Guide (VERSION: 02.32.25) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 0f6c065..062348c 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.24) +# MokoWaaS Configuration Guide (VERSION: 02.32.25) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index faa2361..f5e6e63 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.24) +# MokoWaaS Installation Guide (VERSION: 02.32.25) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 9a1511e..60937c1 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.24) +# MokoWaaS Operations Guide (VERSION: 02.32.25) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 392edea..d617af4 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.24) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.25) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 769b08f..2344369 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.24) +# MokoWaaS Testing Guide (VERSION: 02.32.25) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 2a97aff..e1aec73 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.24) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.25) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 91685bc..3b8d488 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.24) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.25) ## Introduction diff --git a/docs/index.md b/docs/index.md index d0e03fe..95c50d7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.24 + VERSION: 02.32.25 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.24) +# MokoWaaS Documentation Index (VERSION: 02.32.25) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 77df93d..35d255a 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.24 + VERSION: 02.32.25 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.24) +# MokoWaaS Plugin Overview (VERSION: 02.32.25) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 7a289ff..c3eb5c8 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.24 +VERSION: 02.32.25 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 16f7641..40991fc 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 + 02.32.25 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 10a6d3e..5328d25 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 + 02.32.25 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 8fa523c..3460d45 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.24 + * VERSION: 02.32.25 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index d1730f3..bbc9cec 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.24 + * VERSION: 02.32.25 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index ca4aff0..4eb943f 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.24 + * VERSION: 02.32.25 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 3c3091d..dfac23c 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.24 + * VERSION: 02.32.25 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 6da008d..21b97a0 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.24 + * VERSION: 02.32.25 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index a812891..be66aa4 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.24 + * VERSION: 02.32.25 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index e766458..7d5af01 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.24 + * VERSION: 02.32.25 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 56d567c..05f0d7f 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.24 + * VERSION: 02.32.25 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 718e3dc..7b965b9 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.24 + * VERSION: 02.32.25 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index f81988f..2438406 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.24 + * VERSION: 02.32.25 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index c2ec9d8..4ba4104 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 + 02.32.25 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index e51e181..4666742 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.24 + * VERSION: 02.32.25 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index f16d4ed..174704a 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.24 + * VERSION: 02.32.25 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 6a514b8..01a7d3f 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 + 02.32.25 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 5f71a31..5f3342f 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 + 02.32.25 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 3abf799..6ec2b21 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 + 02.32.25 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index f5a87e1..e9d03f2 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 + 02.32.25 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index b9c7581..962c826 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 - 02.32.24 + 02.32.25 + 02.32.25 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 191fded..5109d4d 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 + 02.32.25 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 87b8a7e..fa657a9 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 - 02.32.24 + 02.32.25 + 02.32.25 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 5d27e2b..abfcefd 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.24 - 02.32.24 + 02.32.25 + 02.32.25 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 4b3c931..963c423 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.24 + * VERSION: 02.32.25 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index f5beba9..23cd9ad 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.24 + * VERSION: 02.32.25 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 6ba63f0..e93199e 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.24 + 02.32.25 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 91b2b94..0dabf47 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 5a1a2f98b03281402a5d73595748004a7ce38416 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:09:24 +0000 Subject: [PATCH 012/142] chore: update development channel 02.32.25 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 0dabf47..4a2a288 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.24-dev + 02.32.25-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.24-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.25-dev.zip - 789ea2778dd5b43440a596f9703d29efc93c70ac72c26a1348caff3583427b9a + 1fb2a04c8367972a9677d4760e42a6f10767970e8d58dfb1dfd3fd01aceebc3d dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 267beea8f94b2b0c2231dc21477efc8ba781906e Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:13:02 -0500 Subject: [PATCH 013/142] chore: update MokoOnyx submodule to 02.17.00 stable Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/packages/tpl_mokoonyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packages/tpl_mokoonyx b/src/packages/tpl_mokoonyx index 16a7090..f389749 160000 --- a/src/packages/tpl_mokoonyx +++ b/src/packages/tpl_mokoonyx @@ -1 +1 @@ -Subproject commit 16a7090f29e0d8622a8bc6a72a7858ebaf6fac64 +Subproject commit f3897495ad93eb9ea8be53bfe2e643c22fd09dec -- 2.52.0 From d563e2eac87ceb7914e62c8caa8ac5ea2fd3e38a Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:14:07 -0500 Subject: [PATCH 014/142] refactor: remove Health Monitor plugin - heartbeat built into core (#115) The health monitor/Grafana heartbeat is mandatory infrastructure that must always be active. The core system plugin (plg_system_mokowaas) already has handleGrafanaProvisioning() and sendHeartbeat(), making the separate monitor plugin redundant. - Removed plg_system_mokowaas_monitor from package manifest - Removed from script.php enable/protect lists - Removed from cascade enable/disable logic - Removed from dashboard plugin metadata - Excluded from dashboard plugin discovery query - Disabled on dev server (can be uninstalled manually) Health monitoring is now entirely handled by the core plugin which is protected and cannot be disabled. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com_mokowaas/admin/src/Model/DashboardModel.php | 11 ++--------- .../plg_system_mokowaas/Extension/MokoWaaS.php | 1 - src/pkg_mokowaas.xml | 1 - src/script.php | 2 -- 4 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php index 7879cbf..6e122ea 100644 --- a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php @@ -53,14 +53,6 @@ class DashboardModel extends BaseDatabaseModel 'protected' => false, 'configure_only' => true, ], - 'mokowaas_monitor' => [ - 'icon' => 'icon-heartbeat', - 'category' => 'monitoring', - 'label' => 'Health Monitor', - 'description' => 'Site health checks, Grafana heartbeat integration, and diagnostics.', - 'protected' => true, - 'configure_only' => false, - ], 'mokowaasdemo' => [ 'icon' => 'icon-undo', 'category' => 'content', @@ -118,7 +110,8 @@ class DashboardModel extends BaseDatabaseModel '(' . $db->quoteName('type') . ' = ' . $db->quote('plugin') . ' AND ' . $db->quoteName('folder') . ' = ' . $db->quote('system') . ' AND (' . $db->quoteName('element') . ' = ' . $db->quote('mokowaas') - . ' OR ' . $db->quoteName('element') . ' LIKE ' . $db->quote('mokowaas\_%') . '))' + . ' OR ' . $db->quoteName('element') . ' LIKE ' . $db->quote('mokowaas\_%') . ')' + . ' AND ' . $db->quoteName('element') . ' != ' . $db->quote('mokowaas_monitor') . ')' // Webservices plugins . ' OR (' . $db->quoteName('type') . ' = ' . $db->quote('plugin') . ' AND ' . $db->quoteName('folder') . ' = ' . $db->quote('webservices') diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 8fa523c..a9a213e 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -1509,7 +1509,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface $db->quote('mokowaas_firewall'), $db->quote('mokowaas_tenant'), $db->quote('mokowaas_devtools'), - $db->quote('mokowaas_monitor'), $db->quote('mod_mokowaas_cpanel'), ]; diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 6ba63f0..5ffbdfc 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -17,7 +17,6 @@ plg_system_mokowaas_firewall.zip plg_system_mokowaas_tenant.zip plg_system_mokowaas_devtools.zip - plg_system_mokowaas_monitor.zip com_mokowaas.zip mod_mokowaas_cpanel.zip plg_webservices_mokowaas.zip diff --git a/src/script.php b/src/script.php index eb04804..94e90b3 100644 --- a/src/script.php +++ b/src/script.php @@ -41,7 +41,6 @@ class Pkg_MokowaasInstallerScript $this->enablePlugin('system', 'mokowaas_firewall'); $this->enablePlugin('system', 'mokowaas_tenant'); $this->enablePlugin('system', 'mokowaas_devtools'); - $this->enablePlugin('system', 'mokowaas_monitor'); $this->enablePlugin('webservices', 'mokowaas'); $this->enablePlugin('task', 'mokowaasdemo'); $this->enablePlugin('task', 'mokowaassync'); @@ -211,7 +210,6 @@ class Pkg_MokowaasInstallerScript $db->quote('mokowaas_firewall'), $db->quote('mokowaas_tenant'), $db->quote('mokowaas_devtools'), - $db->quote('mokowaas_monitor'), $db->quote('com_mokowaas'), $db->quote('mod_mokowaas_cpanel'), $db->quote('mokowaasdemo'), -- 2.52.0 From dac5c6c05215f44614a7d387da417e01381a0c69 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:14:28 +0000 Subject: [PATCH 015/142] chore(version): auto-bump 02.32.26 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 46 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 1280d91..8962556 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.25 + 02.32.26 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 8296e7f..f0ade88 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.25 +# VERSION: 02.32.26 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index bef9db1..84f97dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.25 + VERSION: 02.32.26 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 58afdbe..3eb9ee6 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index f79d96f..bdb2abc 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 9af465f..37d199e 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.25 + VERSION: 02.32.26 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index cc6c373..5bf07f4 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 4a408c1..a6be540 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.25 +VERSION: 02.32.26 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index e00eb5b..c635d66 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.25) +# MokoWaaS Build Guide (VERSION: 02.32.26) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 062348c..9030b31 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.25) +# MokoWaaS Configuration Guide (VERSION: 02.32.26) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index f5e6e63..0d57c32 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.25) +# MokoWaaS Installation Guide (VERSION: 02.32.26) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 60937c1..8847c71 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.25) +# MokoWaaS Operations Guide (VERSION: 02.32.26) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index d617af4..694497c 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.25) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.26) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 2344369..34e87c1 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.25) +# MokoWaaS Testing Guide (VERSION: 02.32.26) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index e1aec73..ca10350 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.25) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.26) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 3b8d488..0b48586 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.25) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.26) ## Introduction diff --git a/docs/index.md b/docs/index.md index 95c50d7..9013b93 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.25 + VERSION: 02.32.26 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.25) +# MokoWaaS Documentation Index (VERSION: 02.32.26) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 35d255a..d70a0e6 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.25 + VERSION: 02.32.26 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.25) +# MokoWaaS Plugin Overview (VERSION: 02.32.26) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index c3eb5c8..988ffa5 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.25 +VERSION: 02.32.26 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 40991fc..a726760 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 + 02.32.26 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 5328d25..4721d06 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 + 02.32.26 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 4977fdf..3226584 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.25 + * VERSION: 02.32.26 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index bbc9cec..9720005 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.25 + * VERSION: 02.32.26 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 4eb943f..8bc797b 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.25 + * VERSION: 02.32.26 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index dfac23c..fc5fb35 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.25 + * VERSION: 02.32.26 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 21b97a0..b6294b9 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.25 + * VERSION: 02.32.26 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index be66aa4..44bc855 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.25 + * VERSION: 02.32.26 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 7d5af01..ae17170 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.25 + * VERSION: 02.32.26 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 05f0d7f..2a12735 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.25 + * VERSION: 02.32.26 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 7b965b9..8304111 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.25 + * VERSION: 02.32.26 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 2438406..0fe3ada 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.25 + * VERSION: 02.32.26 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 4ba4104..1d7ac03 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 + 02.32.26 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 4666742..2af18d3 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.25 + * VERSION: 02.32.26 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 174704a..91b0510 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.25 + * VERSION: 02.32.26 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 01a7d3f..de4e63a 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 + 02.32.26 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 5f3342f..dc7b9f7 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 + 02.32.26 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 6ec2b21..cff8d34 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 + 02.32.26 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index e9d03f2..3c96e30 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 + 02.32.26 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 962c826..a6babf3 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 - 02.32.25 + 02.32.26 + 02.32.26 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 5109d4d..6ae2913 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 + 02.32.26 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index fa657a9..69b4b62 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 - 02.32.25 + 02.32.26 + 02.32.26 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index abfcefd..c1785db 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.25 - 02.32.25 + 02.32.26 + 02.32.26 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 963c423..14d07b4 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.25 + * VERSION: 02.32.26 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 23cd9ad..cda5f88 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.25 + * VERSION: 02.32.26 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 39e3438..4758bcf 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.25 + 02.32.26 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 4a2a288..1d66794 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 79c3cfc1f00c62f1f431c79cb6b563a7afa0d705 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:14:30 +0000 Subject: [PATCH 016/142] chore: update development channel 02.32.26 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 1d66794..819fb21 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.25-dev + 02.32.26-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.25-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.26-dev.zip - 1fb2a04c8367972a9677d4760e42a6f10767970e8d58dfb1dfd3fd01aceebc3d + de5fe3c9660f551bfa83dda522a9a54df67f9683a7bd44db30125fd14a1ed69a dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From a78178b5dd948329aa4566c4edb195bbb06189d3 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:17:21 -0500 Subject: [PATCH 017/142] feat: auto-remove retired monitor plugin on package update Added removeRetiredExtensions() to package postflight script. On every install/update, it checks for retired extensions and removes them (DB record + files). Currently retires: - plg_system_mokowaas_monitor (merged into core in 02.32.00) Future retired extensions can be added to the $retired array. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/script.php | 81 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/src/script.php b/src/script.php index 94e90b3..481deb6 100644 --- a/src/script.php +++ b/src/script.php @@ -34,8 +34,9 @@ class Pkg_MokowaasInstallerScript */ public function postflight($type, $parent) { - // Remove legacy extensions from before the package rewrite + // Remove legacy and retired extensions $this->cleanupLegacyExtensions(); + $this->removeRetiredExtensions(); $this->enablePlugin('system', 'mokowaas'); $this->enablePlugin('system', 'mokowaas_firewall'); @@ -125,6 +126,84 @@ class Pkg_MokowaasInstallerScript } } + /** + * Remove extensions that have been retired and merged into core. + * + * plg_system_mokowaas_monitor was merged into the core plugin in 02.32.00. + * Health monitoring is now built into plg_system_mokowaas directly. + * + * @return void + * + * @since 02.32.00 + */ + private function removeRetiredExtensions(): void + { + $retired = [ + ['type' => 'plugin', 'folder' => 'system', 'element' => 'mokowaas_monitor'], + ]; + + try + { + $db = Factory::getDbo(); + + foreach ($retired as $ext) + { + // Check if installed + $query = $db->getQuery(true) + ->select($db->quoteName('extension_id')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('type') . ' = ' . $db->quote($ext['type'])) + ->where($db->quoteName('folder') . ' = ' . $db->quote($ext['folder'])) + ->where($db->quoteName('element') . ' = ' . $db->quote($ext['element'])); + $db->setQuery($query); + $extId = (int) $db->loadResult(); + + if (!$extId) + { + continue; + } + + // Unprotect so Joomla allows removal + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('protected') . ' = 0') + ->where($db->quoteName('extension_id') . ' = ' . $extId) + )->execute(); + + // Remove extension record + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__extensions')) + ->where($db->quoteName('extension_id') . ' = ' . $extId) + )->execute(); + + // Remove files + $dir = JPATH_PLUGINS . '/' . $ext['folder'] . '/' . $ext['element']; + + if (is_dir($dir)) + { + $this->rmdirRecursive($dir); + } + + Factory::getApplication()->enqueueMessage( + sprintf('Removed retired extension: %s/%s', $ext['folder'], $ext['element']), + 'message' + ); + + Log::add( + sprintf('Removed retired extension %s/%s (ID %d)', $ext['folder'], $ext['element'], $extId), + Log::INFO, + 'mokowaas' + ); + } + } + catch (\Throwable $e) + { + Log::add('Retired extension cleanup error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + /** * Recursively remove a directory. * -- 2.52.0 From 1e6a255fab3e2e0e9b398d9f1edb98c386628012 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:21:03 -0500 Subject: [PATCH 018/142] fix: duplicate Core card on dashboard - webservices plugin matching core metadata [skip ci] The webservices plugin (element=mokowaas, folder=webservices) was matching the PLUGIN_META entry for the core system plugin since the lookup key was just the element name. Fixed by only matching system and task plugins against PLUGIN_META; webservices/other folders use folder_element as the key and fall through to guessPluginMeta. Also includes auto-remove retired monitor plugin on package update. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com_mokowaas/admin/src/Model/DashboardModel.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php index 6e122ea..b0706f4 100644 --- a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php @@ -134,8 +134,10 @@ class DashboardModel extends BaseDatabaseModel $manifest = json_decode($row->manifest_cache ?? '{}'); $version = $manifest->version ?? ''; - // Build a lookup key: system plugins use element, others use folder_element - $metaKey = $row->element; + // Only system plugins and task plugins match PLUGIN_META by element + $metaKey = ($row->folder === 'system' || $row->folder === 'task') + ? $row->element + : $row->folder . '_' . $row->element; $meta = self::PLUGIN_META[$metaKey] ?? null; -- 2.52.0 From 1ad1f1c010fef73b8c2e3b60aac1b6a7fc8f15a6 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:31:42 -0500 Subject: [PATCH 019/142] refactor: remove duplicate features from core plugin Removed from onAfterInitialise: - enforceHttps (now in firewall plugin) - enforceDevMode (now in devtools plugin) - enforceAdminSessionTimeout (now in firewall plugin) - enforceUploadRestrictions (now in firewall plugin) Removed from onAfterRoute: - warnMissingLicenseKey (deferred - licensing not ready) - enforceAdminRestrictions (now in tenant plugin) Removed event handlers: - onPreprocessMenuItems (now in tenant plugin) - onUserBeforeSave (now in firewall plugin) Removed from onExtensionAfterSave: - resetAllHits / deleteAllVersions (now in devtools plugin) Removed param fieldsets from manifest: - tenant_restrictions (now in tenant plugin) - dev_mode, reset_hits, delete_versions (now in devtools plugin) - force_https, session_timeout, trusted_ips, password_*, upload_* (now in firewall plugin) Core plugin now only handles: branding, master user, emergency access, site aliases, Atum branding, language overrides, health API, Grafana heartbeat, demo banner, plugin protection, and content sync. Settings migration handled by migrateFeatureParams() in script.php. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Extension/MokoWaaS.php | 158 +----------------- src/packages/plg_system_mokowaas/mokowaas.xml | 136 +-------------- 2 files changed, 12 insertions(+), 282 deletions(-) diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 3226584..5737b75 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -189,12 +189,7 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface */ public function onAfterInitialise() { - // Security: HTTPS redirect (runs for all clients) - $this->enforceHttps(); - - // Site alias handling: offline page and backend redirect. - // Must run in onAfterInitialise (not onAfterRoute) so that - // Joomla's offline check in doExecute() sees the updated config. + // Site alias handling $this->handleSiteAlias(); // MokoWaaS API endpoints (run before routing) @@ -205,18 +200,15 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface $this->handleMokoApi($mokoAction); } - // Dev mode: disable caching - $this->enforceDevMode(); - - // Admin-only WaaS controls + // Admin-only core controls (branding, emergency access, master user) + // NOTE: enforceHttps, enforceDevMode, enforceAdminSessionTimeout, + // enforceUploadRestrictions are now in feature plugins if ($this->app->isClient('administrator')) { $this->handleEmergencyAccess(); $this->enforceMasterUser(); $this->enforceLoginSupportUrls(); $this->enforceAtumBranding(); - $this->enforceAdminSessionTimeout(); - $this->enforceUploadRestrictions(); } $this->loadLanguageOverrides(); @@ -883,41 +875,7 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface // Grafana auto-provisioning $this->handleGrafanaProvisioning($params, $app); - if ((int) $params->get('reset_hits', 0) === 1) - { - $count = $this->resetAllHits(); - $params->set('reset_hits', '0'); - $changed = true; - - $app->enqueueMessage( - sprintf('Reset hit counters on %d articles.', $count), - 'message' - ); - - Log::add( - sprintf('All article hits reset (%d rows) by MokoWaaS', $count), - Log::WARNING, - 'mokowaas' - ); - } - - if ((int) $params->get('delete_versions', 0) === 1) - { - $count = $this->deleteAllVersions(); - $params->set('delete_versions', '0'); - $changed = true; - - $app->enqueueMessage( - sprintf('Deleted %d version history records.', $count), - 'message' - ); - - Log::add( - sprintf('All content versions purged (%d rows) by MokoWaaS', $count), - Log::WARNING, - 'mokowaas' - ); - } + // NOTE: reset_hits and delete_versions now handled by devtools plugin // Content Sync: Push Now if ((int) $params->get('sync_push_now', 0) === 1) @@ -1036,8 +994,8 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface return; } - $this->warnMissingLicenseKey(); - $this->enforceAdminRestrictions(); + // NOTE: warnMissingLicenseKey and enforceAdminRestrictions + // are now handled by feature plugins (deferred / tenant) $this->protectPlugin(); } @@ -1552,106 +1510,8 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface } } - /** - * Filter admin menu items for non-master users. - * - * @param string $context Menu context - * @param array &$items Menu items (by reference) - * @param mixed $params Module params - * @param mixed $enabled Whether module is enabled - * - * @return void - * - * @since 02.01.08 - */ - public function onPreprocessMenuItems($context, &$items, $params, $enabled) - { - if (!$this->app->isClient('administrator')) - { - return; - } - - if ($this->isMasterUser()) - { - return; - } - - $hidden = $this->getHiddenMenuComponents(); - - if (empty($hidden)) - { - return; - } - - foreach ($items as $key => $item) - { - foreach ($hidden as $component) - { - if (isset($item->link) - && strpos($item->link, 'option=' . $component) !== false) - { - unset($items[$key]); - break; - } - } - } - } - - /** - * Enforce password policy before user save. - * - * @param array $oldUser Existing user data - * @param boolean $isNew Whether this is a new user - * @param array $newUser New user data being saved - * - * @return boolean True to allow save - * - * @since 02.01.08 - */ - public function onUserBeforeSave($oldUser, $isNew, $newUser) - { - if (empty($newUser['password_clear'])) - { - return true; - } - - $password = $newUser['password_clear']; - $errors = []; - - $minLen = (int) $this->params->get('password_min_length', 12); - - if (strlen($password) < $minLen) - { - $errors[] = sprintf( - 'Password must be at least %d characters.', $minLen - ); - } - - if ($this->params->get('password_require_uppercase', 1) - && !preg_match('/[A-Z]/', $password)) - { - $errors[] = 'Password must contain an uppercase letter.'; - } - - if ($this->params->get('password_require_number', 1) - && !preg_match('/\d/', $password)) - { - $errors[] = 'Password must contain a number.'; - } - - if ($this->params->get('password_require_special', 1) - && !preg_match('/[^A-Za-z0-9]/', $password)) - { - $errors[] = 'Password must contain a special character.'; - } - - if (!empty($errors)) - { - throw new \RuntimeException(implode(' ', $errors)); - } - - return true; - } + // onPreprocessMenuItems — REMOVED, now in plg_system_mokowaas_tenant + // onUserBeforeSave — REMOVED, now in plg_system_mokowaas_firewall // ------------------------------------------------------------------ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 1d7ac03..b7ec4b7 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -76,7 +76,9 @@ -
+
- - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - -
-- 2.52.0 From cf39c169d2061cf6ce7c83d377c84f2a3faae4e9 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:31:57 +0000 Subject: [PATCH 020/142] chore(version): auto-bump 02.32.27 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 46 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 8962556..ef712e3 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.26 + 02.32.27 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index f0ade88..dceb183 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.26 +# VERSION: 02.32.27 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 84f97dd..04ecefa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.26 + VERSION: 02.32.27 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 3eb9ee6..6a1a5ea 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index bdb2abc..73d1a48 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 37d199e..6c7ad33 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.26 + VERSION: 02.32.27 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 5bf07f4..11eadeb 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index a6be540..b166708 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.26 +VERSION: 02.32.27 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index c635d66..8d3c9dd 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.26) +# MokoWaaS Build Guide (VERSION: 02.32.27) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 9030b31..2fec27c 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.26) +# MokoWaaS Configuration Guide (VERSION: 02.32.27) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 0d57c32..5a66883 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.26) +# MokoWaaS Installation Guide (VERSION: 02.32.27) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 8847c71..031e15c 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.26) +# MokoWaaS Operations Guide (VERSION: 02.32.27) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 694497c..8207fab 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.26) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.27) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 34e87c1..b856242 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.26) +# MokoWaaS Testing Guide (VERSION: 02.32.27) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index ca10350..9f5eb47 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.26) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.27) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 0b48586..4959f77 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.26) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.27) ## Introduction diff --git a/docs/index.md b/docs/index.md index 9013b93..0307ee8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.26 + VERSION: 02.32.27 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.26) +# MokoWaaS Documentation Index (VERSION: 02.32.27) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index d70a0e6..4887b3b 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.26 + VERSION: 02.32.27 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.26) +# MokoWaaS Plugin Overview (VERSION: 02.32.27) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 988ffa5..c7f5982 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.26 +VERSION: 02.32.27 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index a726760..fd26056 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 + 02.32.27 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 4721d06..a38d649 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 + 02.32.27 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 5737b75..12a2418 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.26 + * VERSION: 02.32.27 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 9720005..cace402 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.26 + * VERSION: 02.32.27 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 8bc797b..35e0f22 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.26 + * VERSION: 02.32.27 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index fc5fb35..5dd96bf 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.26 + * VERSION: 02.32.27 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index b6294b9..8d7ea37 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.26 + * VERSION: 02.32.27 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 44bc855..ca48c87 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.26 + * VERSION: 02.32.27 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index ae17170..6512745 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.26 + * VERSION: 02.32.27 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 2a12735..03b0606 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.26 + * VERSION: 02.32.27 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 8304111..56244a6 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.26 + * VERSION: 02.32.27 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 0fe3ada..bcd87cc 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.26 + * VERSION: 02.32.27 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index b7ec4b7..b8bd35d 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 + 02.32.27 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 2af18d3..c076faf 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.26 + * VERSION: 02.32.27 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 91b0510..5c46747 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.26 + * VERSION: 02.32.27 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index de4e63a..193bf41 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 + 02.32.27 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index dc7b9f7..986d855 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 + 02.32.27 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index cff8d34..c505fb8 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 + 02.32.27 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 3c96e30..6fc57ca 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 + 02.32.27 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index a6babf3..9ae01ec 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 - 02.32.26 + 02.32.27 + 02.32.27 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 6ae2913..ab9cdb7 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 + 02.32.27 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 69b4b62..f7996fc 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 - 02.32.26 + 02.32.27 + 02.32.27 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index c1785db..8427339 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.26 - 02.32.26 + 02.32.27 + 02.32.27 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 14d07b4..fcc3bb8 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.26 + * VERSION: 02.32.27 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index cda5f88..a09e4f5 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.26 + * VERSION: 02.32.27 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 4758bcf..5e7f2cb 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.26 + 02.32.27 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 819fb21..fb45e2a 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From a89d5166239d1e6e4cb06ec32129954b7edc34c8 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:31:59 +0000 Subject: [PATCH 021/142] chore: update development channel 02.32.27 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index fb45e2a..c5348bc 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.26-dev + 02.32.27-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.26-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.27-dev.zip - de5fe3c9660f551bfa83dda522a9a54df67f9683a7bd44db30125fd14a1ed69a + bd6356adc7d195a59437462d89bf99bf7834e3802ef933bd0862169867eea0e1 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 9a375740b91d34834733a55abda5e7dfad36d578 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:33:57 -0500 Subject: [PATCH 022/142] refactor: remove 12 dead method bodies from core plugin (-607 lines) Removed: resetAllHits, deleteAllVersions, warnMissingLicenseKey, enforceDevMode, onDevModeDisabled, enforceHttps, enforceAdminSessionTimeout, ipIsTrusted, enforceUploadRestrictions, enforceAdminRestrictions, blockAccess, getHiddenMenuComponents These methods were already unreachable after the call sites were removed in the previous commit. The functionality lives in the firewall, tenant, and devtools feature plugins. Core plugin: 5366 -> 4759 lines Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Extension/MokoWaaS.php | 607 ------------------ 1 file changed, 607 deletions(-) diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 5737b75..f6c6413 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -807,7 +807,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface return $strings; } - /** * Event triggered after an extension's config is saved. * @@ -935,48 +934,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface } } - /** - * Reset all article hit counters to zero. - * - * @return int Number of rows affected - * - * @since 02.01.08 - */ - protected function resetAllHits() - { - $db = Factory::getDbo(); - - $db->setQuery( - $db->getQuery(true) - ->update($db->quoteName('#__content')) - ->set($db->quoteName('hits') . ' = 0') - ->where($db->quoteName('hits') . ' > 0') - ); - $db->execute(); - - return $db->getAffectedRows(); - } - - /** - * Delete all content version history records. - * - * @return int Number of rows deleted - * - * @since 02.01.08 - */ - protected function deleteAllVersions() - { - $db = Factory::getDbo(); - - $db->setQuery( - $db->getQuery(true) - ->delete($db->quoteName('#__history')) - ); - $db->execute(); - - return $db->getAffectedRows(); - } - /** * Event triggered after the route has been determined. * @@ -1513,7 +1470,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface // onPreprocessMenuItems — REMOVED, now in plg_system_mokowaas_tenant // onUserBeforeSave — REMOVED, now in plg_system_mokowaas_firewall - // ------------------------------------------------------------------ // Diagnostics / Health Endpoint (called from onAfterInitialise) // ------------------------------------------------------------------ @@ -4279,130 +4235,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface // License key check (called from onAfterRoute) // ------------------------------------------------------------------ - /** - * Show a persistent admin warning if no license key is set on the - * MokoWaaS update site. - * - * Checks the extra_query column in #__update_sites for a dlid value. - * Also validates the key against MokoGitea on a heartbeat interval - * (once per day) and warns if the key is invalid or expired. - * - * @return void - * - * @since 02.31.00 - */ - protected function warnMissingLicenseKey(): void - { - // Only show to master users - if (!$this->isMasterUser()) - { - return; - } - - // Only warn once per session - $session = Factory::getSession(); - - if ($session->get('mokowaas.license_warned', false)) - { - return; - } - - $session->set('mokowaas.license_warned', true); - - try - { - $db = Factory::getDbo(); - - $query = $db->getQuery(true) - ->select($db->quoteName('extra_query')) - ->from($db->quoteName('#__update_sites')) - ->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoWaaS%') - . ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoWaaS%') . ')') - ->setLimit(1); - $db->setQuery($query); - $extraQuery = (string) $db->loadResult(); - - if (empty($extraQuery) || strpos($extraQuery, 'dlid=') === false) - { - $this->app->enqueueMessage( - 'Moko Consulting License Key Required — ' - . 'No download key is configured. Updates will not be available until a valid license key is entered. ' - . 'Go to System → Update Sites ' - . 'and enter your license key in the Download Key field for the MokoWaaS update site.', - 'warning' - ); - - return; - } - - // Extract the key value from extra_query - parse_str($extraQuery, $parsed); - $licenseKey = $parsed['dlid'] ?? ''; - - if (empty($licenseKey)) - { - return; - } - - // Heartbeat validation — check once per day - $session = Factory::getSession(); - $lastCheck = (int) $session->get('mokowaas.license_check', 0); - $now = time(); - - if (($now - $lastCheck) < 86400) - { - // Show cached warning if key was invalid last check - if ($session->get('mokowaas.license_invalid', false)) - { - $this->app->enqueueMessage( - 'Moko Consulting License Key Invalid — ' - . 'Your license key could not be validated. Please verify your key in ' - . 'System → Update Sites.', - 'error' - ); - } - - return; - } - - // Validate against MokoGitea - $session->set('mokowaas.license_check', $now); - - $validateUrl = 'https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/updates.xml' - . '?dlid=' . urlencode($licenseKey) - . '&domain=' . urlencode(Uri::root()); - - $ch = curl_init($validateUrl); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_TIMEOUT, 10); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - $response = curl_exec($ch); - $httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE); - curl_close($ch); - - // Empty or non-200 means invalid key - $isValid = ($httpCode === 200 && $response && strpos($response, '') !== false); - - $session->set('mokowaas.license_invalid', !$isValid); - - if (!$isValid) - { - $this->app->enqueueMessage( - 'Moko Consulting License Key Invalid — ' - . 'Your license key could not be validated. Updates will not be available. ' - . 'Please verify your key in ' - . 'System → Update Sites.', - 'error' - ); - } - } - catch (\Throwable $e) - { - // Silent — license check is non-critical - } - } - // ------------------------------------------------------------------ /** @@ -4538,110 +4370,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface * * @since 02.01.08 */ - /** - * Enforce development mode settings. - * - * When dev mode is ON: - * - Disable Joomla caching - * - Enable Joomla debug mode (Global Config) - * - Enable MokoOnyx template debug - * - Disable article hit recording - * - * When dev mode is OFF (and was previously on): - * - Reset all content version history - * - Reset article published dates to now - * - * @return void - * - * @since 02.01.15 - */ - protected function enforceDevMode() - { - if (!$this->params->get('dev_mode', 0)) - { - return; - } - - // Disable caching - $config = Factory::getConfig(); - $config->set('caching', 0); - - // Enable Joomla debug - $config->set('debug', 1); - - // Enable MokoOnyx template debug - $this->setTemplateParam('mokoonyx', 'debug', 1); - - // Show offline page on primary domain only — site aliases - // and dev.* subdomains bypass offline mode for development - $currentHost = $_SERVER['HTTP_HOST'] ?? ''; - $primaryDomain = $this->params->get('primary_domain', ''); - - if (!empty($primaryDomain) && $currentHost === $primaryDomain) - { - $config->set('offline', 1); - } - - // Suppress hit recording - try - { - $db = Factory::getDbo(); - $db->setQuery( - $db->getQuery(true) - ->update($db->quoteName('#__content')) - ->set($db->quoteName('hits') . ' = 0') - ->where($db->quoteName('hits') . ' > 0') - )->execute(); - } - catch (\Throwable $e) - { - // Silent - } - } - - /** - * Actions to run when dev mode is turned off. - * - * Resets content versions and hits, disables debug. - * - * @return void - * - * @since 02.31.00 - */ - protected function onDevModeDisabled(): void - { - try - { - $db = Factory::getDbo(); - - // Delete all content version history - $db->setQuery( - $db->getQuery(true)->delete($db->quoteName('#__history')) - )->execute(); - - // Reset hits - $db->setQuery( - $db->getQuery(true) - ->update($db->quoteName('#__content')) - ->set($db->quoteName('hits') . ' = 0') - )->execute(); - - // Disable debug - $this->setTemplateParam('mokoonyx', 'debug', 0); - - // Take site back online - Factory::getConfig()->set('offline', 0); - - $this->app->enqueueMessage( - 'Development mode disabled — versions cleared, hits reset, debug off, site online.', - 'message' - ); - } - catch (\Throwable $e) - { - Log::add('Dev mode cleanup failed: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); - } - } /** * Set a parameter on a template style. @@ -4689,194 +4417,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface } } - protected function enforceHttps() - { - if (!$this->params->get('force_https', 0)) - { - return; - } - - if ($this->app->isClient('cli')) - { - return; - } - - $isHttps = (!empty($_SERVER['HTTPS']) - && $_SERVER['HTTPS'] !== 'off') - || ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '') === 'https'; - - if (!$isHttps) - { - $this->app->redirect( - 'https://' . $_SERVER['HTTP_HOST'] - . $_SERVER['REQUEST_URI'], 301 - ); - } - } - - /** - * Enforce admin session idle timeout. - * - * @return void - * - * @since 02.01.08 - */ - protected function enforceAdminSessionTimeout() - { - $timeout = (int) $this->params->get('admin_session_timeout', 0); - - if ($timeout <= 0) - { - return; - } - - // Don't timeout the master user - if ($this->isMasterUser()) - { - return; - } - - // Trusted IPs — session lifetime already extended in boot() - if ($this->ipIsTrusted()) - { - return; - } - - $session = Factory::getSession(); - $lastHit = $session->get('mokowaas.last_activity', 0); - $now = time(); - - if ($lastHit > 0 && ($now - $lastHit) > ($timeout * 60)) - { - $this->app->logout(); - $this->app->redirect( - Route::_('index.php', false) - ); - - return; - } - - $session->set('mokowaas.last_activity', $now); - } - - /** - * Check whether the current request IP matches any trusted IP entry. - * - * Supports exact IPs, CIDR notation (e.g. 10.0.0.0/8), and - * wildcard patterns (e.g. 192.168.1.*). - * - * @return bool True if the current IP is in the trusted list. - * - * @since 02.11.00 - */ - protected function ipIsTrusted(): bool - { - $entries = $this->params->get('trusted_ips', ''); - - if (empty($entries)) - { - return false; - } - - // Subform stores as JSON string or array - if (\is_string($entries)) - { - $entries = json_decode($entries, true); - } - - if (!\is_array($entries)) - { - return false; - } - - $ip = $this->app - ? $this->app->input->server->getString('REMOTE_ADDR', '') - : ($_SERVER['REMOTE_ADDR'] ?? ''); - $ipLong = ip2long($ip); - - if ($ipLong === false) - { - return false; - } - - foreach ($entries as $entry) - { - if (empty($entry['enabled']) || empty($entry['ip'])) - { - continue; - } - - $range = trim($entry['ip']); - - // Wildcard: 192.168.1.* - if (str_contains($range, '*')) - { - $pattern = '/^' . str_replace(['.', '*'], ['\\.', '\\d+'], $range) . '$/'; - - if (preg_match($pattern, $ip)) - { - return true; - } - - continue; - } - - // CIDR: 10.0.0.0/8 - if (str_contains($range, '/')) - { - [$subnet, $bits] = explode('/', $range, 2); - $subnetLong = ip2long($subnet); - $mask = -1 << (32 - (int) $bits); - - if ($subnetLong !== false && ($ipLong & $mask) === ($subnetLong & $mask)) - { - return true; - } - - continue; - } - - // Exact match - if ($ip === $range) - { - return true; - } - } - - return false; - } - - - /** - * Override Joomla upload restrictions at runtime. - * - * @return void - * - * @since 02.01.08 - */ - protected function enforceUploadRestrictions() - { - $types = $this->params->get('upload_allowed_types', ''); - $maxMb = (int) $this->params->get('upload_max_size_mb', 0); - - if (empty($types) && $maxMb <= 0) - { - return; - } - - $config = $this->app->getConfig(); - - if (!empty($types)) - { - $config->set('upload_extensions', $types); - } - - if ($maxMb > 0) - { - $config->set('upload_maxsize', $maxMb); - } - } - /** * Enforce login support module URLs on admin requests. * @@ -4945,121 +4485,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface // Tenant Restrictions (called from onAfterRoute) // ------------------------------------------------------------------ - /** - * Check admin routes against restriction rules and redirect if blocked. - * - * @return void - * - * @since 02.01.08 - */ - protected function enforceAdminRestrictions() - { - // Master user bypasses ALL restrictions - if ($this->isMasterUser()) - { - return; - } - - $input = $this->app->input; - $option = $input->get('option', ''); - $view = $input->get('view', ''); - $task = $input->get('task', ''); - - // Disable install-from-URL for non-master users - if ($this->params->get('disable_install_url', 1) - && $option === 'com_installer' - && stripos($task, 'install') !== false - && $input->get('installtype') === 'url') - { - $this->blockAccess('Install from URL is disabled.'); - - return; - } - - $blocked = []; - - if ($this->params->get('restrict_installer', 1)) - { - // Allow the update view by default so tenants can update extensions - $allowUpdates = (int) $this->params->get('allow_extension_updates', 1); - - if ($allowUpdates && $option === 'com_installer' - && \in_array($view, ['update', 'updatesites'], true)) - { - // Do not block — update views are permitted - } - elseif ($option === 'com_installer') - { - $this->blockAccess('Access restricted.'); - - return; - } - } - - if ($this->params->get('hide_sysinfo', 1)) - { - $blocked[] = [ - 'option' => 'com_admin', - 'view' => 'sysinfo', - ]; - } - - if ($this->params->get('restrict_global_config', 1)) - { - $blocked[] = [ - 'option' => 'com_config', - 'view' => 'application', - ]; - // Also block empty view (default landing = global config) - if ($option === 'com_config' && $view === '') - { - $this->blockAccess('Access restricted.'); - - return; - } - } - - if ($this->params->get('restrict_template_editing', 1)) - { - $blocked[] = [ - 'option' => 'com_templates', - 'view' => 'template', - ]; - } - - foreach ($blocked as $rule) - { - if ($option !== $rule['option']) - { - continue; - } - - if (isset($rule['view']) && $view !== $rule['view']) - { - continue; - } - - $this->blockAccess('Access restricted.'); - - return; - } - } - - /** - * Redirect to admin dashboard with an error message. - * - * @param string $message Error message to display - * - * @return void - * - * @since 02.01.08 - */ - protected function blockAccess($message) - { - $this->app->enqueueMessage($message, 'error'); - $this->app->redirect(Route::_('index.php', false)); - } - /** * Check whether the current user is the master WaaS user. * @@ -5111,38 +4536,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface return $this->masterNames; } - /** - * Build the list of components to hide from admin menu. - * - * Combines explicit hidden_menu_items config with components that - * are implicitly blocked by other restriction toggles. - * - * @return array Component option strings - * - * @since 02.01.08 - */ - protected function getHiddenMenuComponents() - { - $hidden = array_filter(array_map( - 'trim', - explode("\n", $this->params->get('hidden_menu_items', '')) - )); - - // Auto-hide components that are restricted (keep visible when updates are allowed) - if ($this->params->get('restrict_installer', 1) - && !$this->params->get('allow_extension_updates', 1)) - { - $hidden[] = 'com_installer'; - } - - if ($this->params->get('hide_sysinfo', 1)) - { - $hidden[] = 'com_admin'; - } - - return array_unique($hidden); - } - // ------------------------------------------------------------------ // Atum Template Branding (called from onAfterInitialise) // ------------------------------------------------------------------ -- 2.52.0 From 3be42ec37a94b2786688445845a03442a8efdaaa Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:34:28 +0000 Subject: [PATCH 023/142] chore(version): auto-bump 02.32.28 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 46 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index ef712e3..0b5649c 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.27 + 02.32.28 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index dceb183..a2e32b2 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.27 +# VERSION: 02.32.28 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 04ecefa..9c87b69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.27 + VERSION: 02.32.28 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 6a1a5ea..ec93979 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 73d1a48..e3143b8 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 6c7ad33..b57ef37 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.27 + VERSION: 02.32.28 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 11eadeb..be6f2b8 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index b166708..6042b94 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.27 +VERSION: 02.32.28 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 8d3c9dd..da50bd6 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.27) +# MokoWaaS Build Guide (VERSION: 02.32.28) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 2fec27c..d1b1a0f 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.27) +# MokoWaaS Configuration Guide (VERSION: 02.32.28) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 5a66883..1aac4b4 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.27) +# MokoWaaS Installation Guide (VERSION: 02.32.28) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 031e15c..4e8b979 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.27) +# MokoWaaS Operations Guide (VERSION: 02.32.28) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 8207fab..34922e3 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.27) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.28) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index b856242..b61e382 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.27) +# MokoWaaS Testing Guide (VERSION: 02.32.28) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 9f5eb47..d62d023 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.27) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.28) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 4959f77..5277a1c 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.27) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.28) ## Introduction diff --git a/docs/index.md b/docs/index.md index 0307ee8..4dcc63c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.27 + VERSION: 02.32.28 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.27) +# MokoWaaS Documentation Index (VERSION: 02.32.28) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 4887b3b..fe1b2eb 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.27 + VERSION: 02.32.28 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.27) +# MokoWaaS Plugin Overview (VERSION: 02.32.28) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index c7f5982..6120d93 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.27 +VERSION: 02.32.28 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index fd26056..7525aed 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 + 02.32.28 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index a38d649..29e2e21 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 + 02.32.28 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index eeb3278..937ded1 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.27 + * VERSION: 02.32.28 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index cace402..56f9cb6 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.27 + * VERSION: 02.32.28 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 35e0f22..b71ef8a 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.27 + * VERSION: 02.32.28 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 5dd96bf..f0f60e1 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.27 + * VERSION: 02.32.28 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 8d7ea37..5a51538 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.27 + * VERSION: 02.32.28 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index ca48c87..ec14a45 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.27 + * VERSION: 02.32.28 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 6512745..371fddd 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.27 + * VERSION: 02.32.28 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 03b0606..f367b1b 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.27 + * VERSION: 02.32.28 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 56244a6..9162512 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.27 + * VERSION: 02.32.28 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index bcd87cc..e31c66d 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.27 + * VERSION: 02.32.28 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index b8bd35d..ad32563 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 + 02.32.28 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index c076faf..af5e5f6 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.27 + * VERSION: 02.32.28 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 5c46747..7fdbc8f 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.27 + * VERSION: 02.32.28 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 193bf41..923c09c 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 + 02.32.28 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 986d855..542b805 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 + 02.32.28 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index c505fb8..955a199 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 + 02.32.28 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 6fc57ca..6e058e5 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 + 02.32.28 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 9ae01ec..8312c12 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 - 02.32.27 + 02.32.28 + 02.32.28 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index ab9cdb7..b1d3906 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 + 02.32.28 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index f7996fc..cd7481a 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 - 02.32.27 + 02.32.28 + 02.32.28 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 8427339..a790572 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.27 - 02.32.27 + 02.32.28 + 02.32.28 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index fcc3bb8..7952b0c 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.27 + * VERSION: 02.32.28 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index a09e4f5..67235ec 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.27 + * VERSION: 02.32.28 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 5e7f2cb..6494374 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.27 + 02.32.28 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index c5348bc..1683cff 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From b7d90f9b18160d92c8c36b14412a7898cc13268a Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:34:30 +0000 Subject: [PATCH 024/142] chore: update development channel 02.32.28 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 1683cff..89bdd4d 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.27-dev + 02.32.28-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.27-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.28-dev.zip - bd6356adc7d195a59437462d89bf99bf7834e3802ef933bd0862169867eea0e1 + 6cdd45c78b4673b14637c8160e9f7807f105049bd849751b8da6aa07bdcf0452 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 1cdbfd035d09a701450f7edff52b1583918e75dc Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:52:06 -0500 Subject: [PATCH 025/142] feat: integrate MokoJoomTOS as Offline Bypass feature plugin + add OpenGraph to catalog New plugin: plg_system_mokowaas_tos (Offline Bypass) - Keeps configured pages accessible during offline mode - SEF path matching + Itemid fallback - Custom MenuslugField for multi-select menu items - Include children option for parent menu matching - Renamed from MokoJoomTOS to MokoWaaS Offline Bypass Also: - Added MokoJoomOpenGraph to extension manager catalog - Added to package manifest, script.php, dashboard, cascade list Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/src/Model/DashboardModel.php | 8 + .../admin/src/Model/ExtensionsModel.php | 10 + .../Extension/MokoWaaS.php | 1 + .../en-GB/plg_system_mokowaas_tos.ini | 13 ++ .../en-GB/plg_system_mokowaas_tos.sys.ini | 3 + .../plg_system_mokowaas_tos/mokowaas_tos.xml | 44 +++++ .../services/provider.php | 34 ++++ .../src/Extension/Tos.php | 172 ++++++++++++++++++ .../src/Field/MenuslugField.php | 81 +++++++++ src/pkg_mokowaas.xml | 1 + src/script.php | 2 + 11 files changed, 369 insertions(+) create mode 100644 src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini create mode 100644 src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini create mode 100644 src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml create mode 100644 src/packages/plg_system_mokowaas_tos/services/provider.php create mode 100644 src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php create mode 100644 src/packages/plg_system_mokowaas_tos/src/Field/MenuslugField.php diff --git a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php index b0706f4..fbc9ab5 100644 --- a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php @@ -45,6 +45,14 @@ class DashboardModel extends BaseDatabaseModel 'protected' => false, 'configure_only' => false, ], + 'mokowaas_tos' => [ + 'icon' => 'icon-globe', + 'category' => 'security', + 'label' => 'Offline Bypass', + 'description' => 'Keep selected pages (TOS, Privacy Policy) accessible during offline mode.', + 'protected' => false, + 'configure_only' => true, + ], 'mokowaas_devtools' => [ 'icon' => 'icon-wrench', 'category' => 'tools', diff --git a/src/packages/com_mokowaas/admin/src/Model/ExtensionsModel.php b/src/packages/com_mokowaas/admin/src/Model/ExtensionsModel.php index e8402f1..76e3f6f 100644 --- a/src/packages/com_mokowaas/admin/src/Model/ExtensionsModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/ExtensionsModel.php @@ -96,6 +96,16 @@ class ExtensionsModel extends BaseDatabaseModel 'article' => 'https://mokoconsulting.tech/kb/mokogallerycalendar', 'protected' => false, ], + 'MokoJoomOpenGraph' => [ + 'label' => 'MokoJoomOpenGraph', + 'description' => 'Open Graph meta tags for articles, categories, and pages. Controls Facebook, Twitter, and LinkedIn link previews.', + 'element' => 'pkg_mokoog', + 'type' => 'package', + 'icon' => 'icon-share-alt', + 'category' => 'Components', + 'article' => 'https://mokoconsulting.tech/kb/mokojoomopengraph', + 'protected' => false, + ], ]; private const GITEA_URL = 'https://git.mokoconsulting.tech'; diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index eeb3278..506b3c0 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -1424,6 +1424,7 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface $db->quote('mokowaas_firewall'), $db->quote('mokowaas_tenant'), $db->quote('mokowaas_devtools'), + $db->quote('mokowaas_tos'), $db->quote('mod_mokowaas_cpanel'), ]; diff --git a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini b/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini new file mode 100644 index 0000000..7b75c1e --- /dev/null +++ b/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini @@ -0,0 +1,13 @@ +; MokoWaaS Terms of Service Plugin +; Copyright (C) 2026 Moko Consulting. All rights reserved. +; License: GPL-3.0-or-later + +PLG_SYSTEM_MOKOWAAS_TOS="System - MokoWaaS Offline Bypass" +PLG_SYSTEM_MOKOWAAS_TOS_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." + +PLG_SYSTEM_MOKOWAAS_TOS_FIELDSET_BASIC="Offline-Accessible Pages" +PLG_SYSTEM_MOKOWAAS_TOS_SLUG_LABEL="Menu Items to Keep Online" +PLG_SYSTEM_MOKOWAAS_TOS_SLUG_DESC="Select menu items that remain accessible during offline mode. Hold Ctrl/Cmd for multiple." +PLG_SYSTEM_MOKOWAAS_TOS_CHILDREN_LABEL="Include Child Menu Items" +PLG_SYSTEM_MOKOWAAS_TOS_CHILDREN_DESC="Also allow access to child pages under the selected items." +PLG_SYSTEM_MOKOWAAS_TOS_SEF_WARNING="SEF URLs are disabled - path matching requires SEF. Itemid fallback is active." diff --git a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini b/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini new file mode 100644 index 0000000..cf84d46 --- /dev/null +++ b/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini @@ -0,0 +1,3 @@ +; MokoWaaS Terms of Service Plugin - System strings +PLG_SYSTEM_MOKOWAAS_TOS="System - MokoWaaS Offline Bypass" +PLG_SYSTEM_MOKOWAAS_TOS_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." diff --git a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml new file mode 100644 index 0000000..57ad338 --- /dev/null +++ b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml @@ -0,0 +1,44 @@ + + + System - MokoWaaS Offline Bypass + mokowaas_tos + Moko Consulting + 2026-06-02 + Copyright (C) 2026 Moko Consulting. All rights reserved. + GPL-3.0-or-later + hello@mokoconsulting.tech + https://mokoconsulting.tech + 02.32.00 + PLG_SYSTEM_MOKOWAAS_TOS_DESC + Moko\Plugin\System\MokoWaaSTos + + + src + services + language + + + + en-GB/plg_system_mokowaas_tos.ini + en-GB/plg_system_mokowaas_tos.sys.ini + + + + +
+ + + + + + +
+
+
+
diff --git a/src/packages/plg_system_mokowaas_tos/services/provider.php b/src/packages/plg_system_mokowaas_tos/services/provider.php new file mode 100644 index 0000000..8a7f163 --- /dev/null +++ b/src/packages/plg_system_mokowaas_tos/services/provider.php @@ -0,0 +1,34 @@ +set( + PluginInterface::class, + function (Container $container) { + $dispatcher = $container->get(DispatcherInterface::class); + $plugin = new Tos($dispatcher, (array) PluginHelper::getPlugin('system', 'mokowaas_tos')); + $plugin->setApplication(Factory::getApplication()); + + return $plugin; + } + ); + } +}; diff --git a/src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php b/src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php new file mode 100644 index 0000000..8ef01ed --- /dev/null +++ b/src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php @@ -0,0 +1,172 @@ + 'onAfterRoute', + ]; + } + + public function onAfterRoute(): void + { + $app = $this->getApplication(); + + if (!$app->isClient('site')) + { + return; + } + + $config = $app->getConfig(); + + if (!$config->get('offline')) + { + return; + } + + $slugs = $this->params->get('tos_slug', []); + + if (\is_string($slugs)) + { + $slugs = array_filter([trim($slugs)]); + } + else + { + $slugs = (array) $slugs; + } + + if (empty($slugs)) + { + return; + } + + $includeChildren = (int) $this->params->get('include_children', 1); + + if ($this->matchByPath($slugs, $config, $app, $includeChildren)) + { + return; + } + + $this->matchByItemId($slugs, $config, $app, $includeChildren); + } + + private function matchByPath(array $slugs, $config, $app, int $includeChildren = 1): bool + { + $uri = Uri::getInstance(); + $path = urldecode(trim($uri->getPath(), '/')); + + $base = trim(Uri::base(true), '/'); + + if (!empty($base) && strpos($path, $base) === 0) + { + $path = trim(substr($path, \strlen($base)), '/'); + } + + if (empty($path) || $path === 'index.php') + { + return false; + } + + foreach ($slugs as $slug) + { + $slug = trim((string) $slug); + + if (empty($slug)) + { + continue; + } + + if ($path === $slug || ($includeChildren && strpos($path, $slug . '/') === 0)) + { + $this->bypassOffline($config, $app); + + return true; + } + } + + return false; + } + + private function matchByItemId(array $slugs, $config, $app, int $includeChildren = 1): bool + { + $itemId = (int) $app->getInput()->getInt('Itemid', 0); + + if (!$itemId) + { + return false; + } + + try + { + $db = Factory::getDbo(); + $query = $db->getQuery(true) + ->select($db->quoteName('path')) + ->from($db->quoteName('#__menu')) + ->where($db->quoteName('id') . ' = ' . $itemId) + ->where($db->quoteName('published') . ' = 1') + ->where($db->quoteName('client_id') . ' = 0'); + $db->setQuery($query); + $menuPath = trim((string) $db->loadResult(), '/'); + + if (empty($menuPath)) + { + return false; + } + + foreach ($slugs as $slug) + { + $slug = trim((string) $slug); + + if (empty($slug)) + { + continue; + } + + if ($menuPath === $slug || ($includeChildren && strpos($menuPath, $slug . '/') === 0)) + { + $this->bypassOffline($config, $app); + + return true; + } + } + } + catch (\Throwable $e) + { + // Silent + } + + return false; + } + + private function bypassOffline($config, $app): void + { + $config->set('offline', 0); + $app->getInput()->set('tmpl', 'component'); + } +} diff --git a/src/packages/plg_system_mokowaas_tos/src/Field/MenuslugField.php b/src/packages/plg_system_mokowaas_tos/src/Field/MenuslugField.php new file mode 100644 index 0000000..c9dd7ed --- /dev/null +++ b/src/packages/plg_system_mokowaas_tos/src/Field/MenuslugField.php @@ -0,0 +1,81 @@ +get('sef', true); + + if (!$sef) + { + $options[] = (object) [ + 'value' => '', + 'text' => Text::_('PLG_SYSTEM_MOKOWAAS_TOS_SEF_WARNING'), + 'disabled' => true, + ]; + } + } + catch (\Throwable $e) + { + // Ignore + } + + try + { + $db = Factory::getDbo(); + $query = $db->getQuery(true) + ->select($db->quoteName(['path', 'alias', 'title', 'menutype'])) + ->from($db->quoteName('#__menu')) + ->where($db->quoteName('published') . ' = 1') + ->where($db->quoteName('client_id') . ' = 0') + ->where($db->quoteName('alias') . ' != ' . $db->quote('')) + ->order($db->quoteName('menutype') . ', ' . $db->quoteName('title')); + $db->setQuery($query); + $menuItems = $db->loadObjectList(); + + $lastMenuType = ''; + + foreach ($menuItems ?: [] as $item) + { + if ($item->menutype !== $lastMenuType) + { + if ($lastMenuType !== '') + { + $options[] = (object) ['value' => '', 'text' => '──────────────', 'disabled' => true]; + } + + $lastMenuType = $item->menutype; + } + + $label = $item->title !== '' ? $item->title : ucwords(str_replace(['-', '_'], ' ', $item->alias)); + $options[] = (object) ['value' => $item->path, 'text' => $label . ' (/' . $item->path . ')']; + } + } + catch (\Throwable $e) + { + // Silent + } + + return $options; + } +} diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 5e7f2cb..9ee8989 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -17,6 +17,7 @@ plg_system_mokowaas_firewall.zip plg_system_mokowaas_tenant.zip plg_system_mokowaas_devtools.zip + plg_system_mokowaas_tos.zip com_mokowaas.zip mod_mokowaas_cpanel.zip plg_webservices_mokowaas.zip diff --git a/src/script.php b/src/script.php index 481deb6..7bf3d36 100644 --- a/src/script.php +++ b/src/script.php @@ -42,6 +42,7 @@ class Pkg_MokowaasInstallerScript $this->enablePlugin('system', 'mokowaas_firewall'); $this->enablePlugin('system', 'mokowaas_tenant'); $this->enablePlugin('system', 'mokowaas_devtools'); + $this->enablePlugin('system', 'mokowaas_tos'); $this->enablePlugin('webservices', 'mokowaas'); $this->enablePlugin('task', 'mokowaasdemo'); $this->enablePlugin('task', 'mokowaassync'); @@ -289,6 +290,7 @@ class Pkg_MokowaasInstallerScript $db->quote('mokowaas_firewall'), $db->quote('mokowaas_tenant'), $db->quote('mokowaas_devtools'), + $db->quote('mokowaas_tos'), $db->quote('com_mokowaas'), $db->quote('mod_mokowaas_cpanel'), $db->quote('mokowaasdemo'), -- 2.52.0 From b5eebb0acc50ce10631976acd4fb6bfec367fe02 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:52:38 +0000 Subject: [PATCH 026/142] chore(version): auto-bump 02.32.29 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 47 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 0b5649c..acf14d0 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.28 + 02.32.29 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index a2e32b2..2f24d8d 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.28 +# VERSION: 02.32.29 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c87b69..75ee0bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.28 + VERSION: 02.32.29 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index ec93979..a30ba58 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index e3143b8..3dbaed0 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index b57ef37..4e50bb5 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.28 + VERSION: 02.32.29 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index be6f2b8..de95840 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 6042b94..cc3b847 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.28 +VERSION: 02.32.29 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index da50bd6..fc15693 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.28) +# MokoWaaS Build Guide (VERSION: 02.32.29) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index d1b1a0f..d979fd9 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.28) +# MokoWaaS Configuration Guide (VERSION: 02.32.29) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 1aac4b4..5db5ca2 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.28) +# MokoWaaS Installation Guide (VERSION: 02.32.29) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 4e8b979..b776c12 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.28) +# MokoWaaS Operations Guide (VERSION: 02.32.29) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 34922e3..ba9ccd5 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.28) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.29) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index b61e382..aae3cec 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.28) +# MokoWaaS Testing Guide (VERSION: 02.32.29) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index d62d023..7c3f822 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.28) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.29) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 5277a1c..4e660ff 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.28) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.29) ## Introduction diff --git a/docs/index.md b/docs/index.md index 4dcc63c..4af6959 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.28 + VERSION: 02.32.29 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.28) +# MokoWaaS Documentation Index (VERSION: 02.32.29) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index fe1b2eb..bf580d9 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.28 + VERSION: 02.32.29 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.28) +# MokoWaaS Plugin Overview (VERSION: 02.32.29) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 6120d93..5d07498 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.28 +VERSION: 02.32.29 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 7525aed..83fbe3c 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 + 02.32.29 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 29e2e21..eef7435 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 + 02.32.29 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index fcca7e3..e126503 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.28 + * VERSION: 02.32.29 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 56f9cb6..b4289e5 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.28 + * VERSION: 02.32.29 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index b71ef8a..fbe2d5a 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.28 + * VERSION: 02.32.29 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index f0f60e1..2df7ef3 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.28 + * VERSION: 02.32.29 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 5a51538..bcaadc3 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.28 + * VERSION: 02.32.29 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index ec14a45..bcea8a2 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.28 + * VERSION: 02.32.29 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 371fddd..eb730be 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.28 + * VERSION: 02.32.29 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index f367b1b..6f96e9e 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.28 + * VERSION: 02.32.29 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 9162512..25e1d3c 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.28 + * VERSION: 02.32.29 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index e31c66d..cee76c5 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.28 + * VERSION: 02.32.29 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index ad32563..8afe3ba 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 + 02.32.29 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index af5e5f6..6b9ad20 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.28 + * VERSION: 02.32.29 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 7fdbc8f..85928e3 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.28 + * VERSION: 02.32.29 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 923c09c..4c8495e 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 + 02.32.29 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 542b805..a739182 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 + 02.32.29 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 955a199..b4bc3ee 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 + 02.32.29 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 6e058e5..451a5fc 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 + 02.32.29 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml index 57ad338..cb9ae8a 100644 --- a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml +++ b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.00 + 02.32.29 PLG_SYSTEM_MOKOWAAS_TOS_DESC Moko\Plugin\System\MokoWaaSTos diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 8312c12..a7b0d16 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 - 02.32.28 + 02.32.29 + 02.32.29 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index b1d3906..0b767b6 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 + 02.32.29 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index cd7481a..a2a96c3 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 - 02.32.28 + 02.32.29 + 02.32.29 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index a790572..838079c 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.28 - 02.32.28 + 02.32.29 + 02.32.29 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 7952b0c..64ff4f4 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.28 + * VERSION: 02.32.29 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 67235ec..32bbc30 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.28 + * VERSION: 02.32.29 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 24bc8c8..ffcfb87 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.28 + 02.32.29 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 89bdd4d..c04ece0 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 25e2c29e2ef427015e53acac3943749761d3a5de Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:52:39 +0000 Subject: [PATCH 027/142] chore: update development channel 02.32.29 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index c04ece0..47048f1 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.28-dev + 02.32.29-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.28-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.29-dev.zip - 6cdd45c78b4673b14637c8160e9f7807f105049bd849751b8da6aa07bdcf0452 + 3b7268eddee7ad3b927b1a174132a44892a058a4716dfecf3708f628fd1e087a dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 0e5caf6b3fe15af348a7c690a2db69a00f3f5cc5 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 14:58:24 -0500 Subject: [PATCH 028/142] fix: move boot() session lifetime logic from core to firewall plugin Core plugin's boot() called ipIsTrusted() which was deleted in the cleanup. The session lifetime extension for trusted IPs is now in the firewall plugin's boot() method where ipIsTrusted() still exists. Firewall now implements BootableExtensionInterface. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Extension/MokoWaaS.php | 15 +----------- .../src/Extension/Firewall.php | 23 ++++++++++++++++++- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index fcca7e3..17240ed 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -161,20 +161,7 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface */ public function boot(ContainerInterface $container): void { - $timeout = (int) $this->params->get('admin_session_timeout', 0); - - if ($timeout <= 0) - { - return; - } - - if ($this->ipIsTrusted()) - { - // Set both PHP and Joomla session lifetimes before the - // session handler runs its expiry check. - ini_set('session.gc_maxlifetime', 315360000); - Factory::getConfig()->set('lifetime', 525600); - } + // Session lifetime for trusted IPs is now handled by the firewall plugin } /** diff --git a/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php b/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php index c2b096b..b7b8218 100644 --- a/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php +++ b/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php @@ -10,12 +10,14 @@ namespace Moko\Plugin\System\MokoWaaSFirewall\Extension; defined('_JEXEC') or die; +use Joomla\CMS\Extension\BootableExtensionInterface; use Joomla\CMS\Factory; use Joomla\CMS\Log\Log; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\CMS\Router\Route; use Joomla\Event\SubscriberInterface; use Moko\Plugin\System\MokoWaaS\Helper\MokoWaaSHelper; +use Psr\Container\ContainerInterface; /** * MokoWaaS Firewall Plugin @@ -25,10 +27,29 @@ use Moko\Plugin\System\MokoWaaS\Helper\MokoWaaSHelper; * * @since 02.32.00 */ -class Firewall extends CMSPlugin implements SubscriberInterface +class Firewall extends CMSPlugin implements SubscriberInterface, BootableExtensionInterface { protected $autoloadLanguage = true; + /** + * Extend session lifetime for trusted IPs before Joomla creates the session. + */ + public function boot(ContainerInterface $container): void + { + $timeout = (int) $this->params->get('admin_session_timeout', 0); + + if ($timeout <= 0) + { + return; + } + + if ($this->ipIsTrusted()) + { + ini_set('session.gc_maxlifetime', 315360000); + Factory::getConfig()->set('lifetime', 525600); + } + } + private const BLOCKED_FILES = [ 'htaccess.txt', 'web.config.txt', 'configuration.php-dist', 'README.txt', 'LICENSE.txt', 'joomla.xml', 'robots.txt.dist', -- 2.52.0 From 8ea724116c786c800f279a0fc7a8641c31562cbb Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:59:12 +0000 Subject: [PATCH 029/142] chore(version): auto-bump 02.32.30 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 47 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index acf14d0..affd44f 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.29 + 02.32.30 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 2f24d8d..319cb7c 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.29 +# VERSION: 02.32.30 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 75ee0bf..35b0e32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.29 + VERSION: 02.32.30 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index a30ba58..c2b4236 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 3dbaed0..2f58c5c 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 4e50bb5..ed3df2b 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.29 + VERSION: 02.32.30 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index de95840..0e4241f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index cc3b847..16f7a36 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.29 +VERSION: 02.32.30 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index fc15693..d86dfe8 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.29) +# MokoWaaS Build Guide (VERSION: 02.32.30) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index d979fd9..e20ffba 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.29) +# MokoWaaS Configuration Guide (VERSION: 02.32.30) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 5db5ca2..c7cbc95 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.29) +# MokoWaaS Installation Guide (VERSION: 02.32.30) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index b776c12..0deec5f 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.29) +# MokoWaaS Operations Guide (VERSION: 02.32.30) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index ba9ccd5..41bd94b 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.29) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.30) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index aae3cec..6a87459 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.29) +# MokoWaaS Testing Guide (VERSION: 02.32.30) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 7c3f822..631ccf8 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.29) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.30) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 4e660ff..c6ab537 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.29) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.30) ## Introduction diff --git a/docs/index.md b/docs/index.md index 4af6959..3d3f38d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.29 + VERSION: 02.32.30 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.29) +# MokoWaaS Documentation Index (VERSION: 02.32.30) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index bf580d9..0531656 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.29 + VERSION: 02.32.30 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.29) +# MokoWaaS Plugin Overview (VERSION: 02.32.30) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 5d07498..682915f 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.29 +VERSION: 02.32.30 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 83fbe3c..2747292 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 + 02.32.30 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index eef7435..47ff686 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 + 02.32.30 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index b59dcf4..792ba48 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.29 + * VERSION: 02.32.30 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index b4289e5..b9d0d35 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.29 + * VERSION: 02.32.30 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index fbe2d5a..34c9509 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.29 + * VERSION: 02.32.30 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 2df7ef3..f0e6674 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.29 + * VERSION: 02.32.30 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index bcaadc3..95aaa25 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.29 + * VERSION: 02.32.30 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index bcea8a2..568a107 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.29 + * VERSION: 02.32.30 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index eb730be..e86ee06 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.29 + * VERSION: 02.32.30 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 6f96e9e..2c453f9 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.29 + * VERSION: 02.32.30 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 25e1d3c..cc82ede 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.29 + * VERSION: 02.32.30 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index cee76c5..da93885 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.29 + * VERSION: 02.32.30 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 8afe3ba..44354e4 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 + 02.32.30 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 6b9ad20..60326d0 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.29 + * VERSION: 02.32.30 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 85928e3..eacff21 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.29 + * VERSION: 02.32.30 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 4c8495e..e35a7f8 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 + 02.32.30 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index a739182..117bbe0 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 + 02.32.30 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index b4bc3ee..56c425e 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 + 02.32.30 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 451a5fc..5df1fee 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 + 02.32.30 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml index cb9ae8a..682c698 100644 --- a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml +++ b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 + 02.32.30 PLG_SYSTEM_MOKOWAAS_TOS_DESC Moko\Plugin\System\MokoWaaSTos diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index a7b0d16..057f45e 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 - 02.32.29 + 02.32.30 + 02.32.30 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 0b767b6..596224f 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 + 02.32.30 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index a2a96c3..470922b 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 - 02.32.29 + 02.32.30 + 02.32.30 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 838079c..cf4e598 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.29 - 02.32.29 + 02.32.30 + 02.32.30 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 64ff4f4..cbc0689 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.29 + * VERSION: 02.32.30 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 32bbc30..e4f7644 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.29 + * VERSION: 02.32.30 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index ffcfb87..812fbe3 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.29 + 02.32.30 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 47048f1..521a7a3 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From db260008a2e6cbd29d15cbd09a4a53cda9371d49 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 19:59:14 +0000 Subject: [PATCH 030/142] chore: update development channel 02.32.30 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 521a7a3..3c17532 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.29-dev + 02.32.30-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.29-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.30-dev.zip - 3b7268eddee7ad3b927b1a174132a44892a058a4716dfecf3708f628fd1e087a + a41c5d16c26c906a33de21bb415a819dc9ed6db9d45d3ca3d99cc8c33eb94d05 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 7f64651517695aee0f07785fd7280077c52765d4 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 15:25:08 -0500 Subject: [PATCH 031/142] feat: helpdesk / ticket system with SLA tracking Full helpdesk built into com_mokowaas: Ticket List View (view=tickets): - Status summary cards (open, in progress, waiting, resolved, closed, SLA overdue) - Filterable table (status, priority, category) - SLA highlighting (red=overdue, yellow=at risk) - New ticket modal with category, priority, description Ticket Detail View (view=ticket): - Conversation thread with replies - Internal notes (staff-only, yellow highlight) - Canned response selector - Status action buttons (reopen, in progress, waiting, resolve, close) - SLA response/resolution due with overdue indicators - Ticket metadata sidebar Model (TicketsModel): - getTickets with filters, getTicket with replies - createTicket with auto-assign from category + SLA deadlines - addReply with SLA response tracking - updateStatus with resolved/closed timestamps - getCategories, getCannedResponses - getStatusCounts, getOverdueTickets Database: - #__mokowaas_tickets (status, priority, SLA fields) - #__mokowaas_ticket_replies (with internal notes) - #__mokowaas_ticket_categories (SLA + auto-assign config) - #__mokowaas_ticket_canned (response templates) - 5 default categories with SLA presets Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/language/en-GB/com_mokowaas.ini | 1 + .../admin/language/en-GB/com_mokowaas.sys.ini | 1 + .../com_mokowaas/admin/sql/install.mysql.sql | 70 ++++ .../src/Controller/DisplayController.php | 66 ++++ .../admin/src/Model/TicketsModel.php | 353 ++++++++++++++++++ .../admin/src/View/Ticket/HtmlView.php | 53 +++ .../admin/src/View/Tickets/HtmlView.php | 54 +++ .../admin/tmpl/ticket/default.php | 198 ++++++++++ .../admin/tmpl/tickets/default.php | 181 +++++++++ src/packages/com_mokowaas/mokowaas.xml | 6 + 10 files changed, 983 insertions(+) create mode 100644 src/packages/com_mokowaas/admin/sql/install.mysql.sql create mode 100644 src/packages/com_mokowaas/admin/src/Model/TicketsModel.php create mode 100644 src/packages/com_mokowaas/admin/src/View/Ticket/HtmlView.php create mode 100644 src/packages/com_mokowaas/admin/src/View/Tickets/HtmlView.php create mode 100644 src/packages/com_mokowaas/admin/tmpl/ticket/default.php create mode 100644 src/packages/com_mokowaas/admin/tmpl/tickets/default.php diff --git a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini index e11af07..d771304 100644 --- a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini +++ b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini @@ -20,3 +20,4 @@ COM_MOKOWAAS_EXTENSIONS_TITLE="Moko Extensions" COM_MOKOWAAS_EXTENSIONS_INFO="Install Moko Consulting Joomla packages from the official release server. Updates are handled through Joomla's native System > Update mechanism — each package registers its own update server." COM_MOKOWAAS_EXTENSIONS_LINK="Moko Extensions" COM_MOKOWAAS_HTACCESS_TITLE=".htaccess Maker" +COM_MOKOWAAS_TICKETS_TITLE="Helpdesk" diff --git a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini index 4ec4189..bd38065 100644 --- a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini +++ b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini @@ -10,5 +10,6 @@ COM_MOKOWAAS_MENU_EXTENSIONS="Moko Extensions" COM_MOKOWAAS_MENU_PLUGINS="Feature Plugins" COM_MOKOWAAS_MENU_UPDATES="Joomla Updates" COM_MOKOWAAS_MENU_CHECKIN="Global Check-in" +COM_MOKOWAAS_MENU_TICKETS="Helpdesk" COM_MOKOWAAS_MENU_HTACCESS=".htaccess Maker" COM_MOKOWAAS_MENU_CACHE="Cache Management" diff --git a/src/packages/com_mokowaas/admin/sql/install.mysql.sql b/src/packages/com_mokowaas/admin/sql/install.mysql.sql new file mode 100644 index 0000000..12dbca5 --- /dev/null +++ b/src/packages/com_mokowaas/admin/sql/install.mysql.sql @@ -0,0 +1,70 @@ +-- +-- MokoWaaS Helpdesk Tables +-- + +CREATE TABLE IF NOT EXISTS `#__mokowaas_ticket_categories` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `title` VARCHAR(255) NOT NULL, + `alias` VARCHAR(255) NOT NULL DEFAULT '', + `description` TEXT, + `auto_assign_user` INT DEFAULT NULL, + `sla_response_minutes` INT UNSIGNED NOT NULL DEFAULT 480, + `sla_resolution_minutes` INT UNSIGNED NOT NULL DEFAULT 2880, + `ordering` INT NOT NULL DEFAULT 0, + `published` TINYINT NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + KEY `idx_alias` (`alias`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokowaas_tickets` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `subject` VARCHAR(512) NOT NULL, + `body` TEXT NOT NULL, + `status` ENUM('open','in_progress','waiting','resolved','closed') NOT NULL DEFAULT 'open', + `priority` ENUM('low','normal','high','urgent') NOT NULL DEFAULT 'normal', + `category_id` INT UNSIGNED DEFAULT NULL, + `created_by` INT NOT NULL DEFAULT 0, + `assigned_to` INT DEFAULT NULL, + `created` DATETIME NOT NULL, + `modified` DATETIME DEFAULT NULL, + `resolved` DATETIME DEFAULT NULL, + `closed` DATETIME DEFAULT NULL, + `sla_response_due` DATETIME DEFAULT NULL, + `sla_resolution_due` DATETIME DEFAULT NULL, + `sla_responded` TINYINT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_status` (`status`), + KEY `idx_priority` (`priority`), + KEY `idx_assigned` (`assigned_to`), + KEY `idx_category` (`category_id`), + KEY `idx_created` (`created`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokowaas_ticket_replies` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `ticket_id` INT UNSIGNED NOT NULL, + `user_id` INT NOT NULL DEFAULT 0, + `body` TEXT NOT NULL, + `is_internal` TINYINT NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_ticket` (`ticket_id`), + KEY `idx_created` (`created`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokowaas_ticket_canned` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `title` VARCHAR(255) NOT NULL, + `body` TEXT NOT NULL, + `category_id` INT UNSIGNED DEFAULT NULL, + `ordering` INT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- Default categories +INSERT IGNORE INTO `#__mokowaas_ticket_categories` (`id`, `title`, `alias`, `description`, `sla_response_minutes`, `sla_resolution_minutes`, `ordering`) VALUES +(1, 'General Support', 'general-support', 'General questions and assistance', 480, 2880, 1), +(2, 'Bug Report', 'bug-report', 'Report a software bug or issue', 240, 1440, 2), +(3, 'Feature Request', 'feature-request', 'Request a new feature or enhancement', 1440, 10080, 3), +(4, 'Billing', 'billing', 'Billing, invoicing, and payment questions', 240, 1440, 4), +(5, 'Urgent / Outage', 'urgent-outage', 'Site down or critical issue', 60, 240, 5); diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index 6cfebbb..a4f3fc6 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -189,4 +189,70 @@ class DisplayController extends BaseController ]); $app->close(); } + + /** + * Create a new support ticket. + */ + public function createTicket() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + $app = Factory::getApplication(); + $input = $app->getInput(); + $model = $this->getModel('Tickets'); + + $result = $model->createTicket([ + 'subject' => $input->getString('subject', ''), + 'body' => $input->getRaw('body', ''), + 'priority' => $input->getString('priority', 'normal'), + 'category_id' => $input->getInt('category_id', 0), + ]); + + $app->setHeader('Content-Type', 'application/json'); + echo json_encode($result); + $app->close(); + } + + /** + * Add a reply to a ticket. + */ + public function addTicketReply() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + $app = Factory::getApplication(); + $input = $app->getInput(); + $model = $this->getModel('Tickets'); + + $result = $model->addReply( + $input->getInt('ticket_id', 0), + $input->getRaw('body', ''), + (bool) $input->getInt('is_internal', 0) + ); + + $app->setHeader('Content-Type', 'application/json'); + echo json_encode($result); + $app->close(); + } + + /** + * Update ticket status. + */ + public function updateTicketStatus() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + $app = Factory::getApplication(); + $input = $app->getInput(); + $model = $this->getModel('Tickets'); + + $result = $model->updateStatus( + $input->getInt('ticket_id', 0), + $input->getString('status', '') + ); + + $app->setHeader('Content-Type', 'application/json'); + echo json_encode($result); + $app->close(); + } } diff --git a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php new file mode 100644 index 0000000..c4245d6 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php @@ -0,0 +1,353 @@ +getDatabase(); + $query = $db->getQuery(true) + ->select([ + $db->quoteName('t.id'), + $db->quoteName('t.subject'), + $db->quoteName('t.status'), + $db->quoteName('t.priority'), + $db->quoteName('t.created'), + $db->quoteName('t.modified'), + $db->quoteName('t.sla_response_due'), + $db->quoteName('t.sla_resolution_due'), + $db->quoteName('t.sla_responded'), + $db->quoteName('c.title', 'category_title'), + $db->quoteName('u.name', 'created_by_name'), + $db->quoteName('a.name', 'assigned_to_name'), + ]) + ->from($db->quoteName('#__mokowaas_tickets', 't')) + ->leftJoin($db->quoteName('#__mokowaas_ticket_categories', 'c') . ' ON c.id = t.category_id') + ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = t.created_by') + ->leftJoin($db->quoteName('#__users', 'a') . ' ON a.id = t.assigned_to'); + + if (!empty($filters['status'])) + { + $query->where($db->quoteName('t.status') . ' = ' . $db->quote($filters['status'])); + } + + if (!empty($filters['priority'])) + { + $query->where($db->quoteName('t.priority') . ' = ' . $db->quote($filters['priority'])); + } + + if (!empty($filters['assigned_to'])) + { + $query->where($db->quoteName('t.assigned_to') . ' = ' . (int) $filters['assigned_to']); + } + + if (!empty($filters['category_id'])) + { + $query->where($db->quoteName('t.category_id') . ' = ' . (int) $filters['category_id']); + } + + $query->order($db->quoteName('t.created') . ' DESC'); + $query->setLimit(50); + + $db->setQuery($query); + + return $db->loadObjectList() ?: []; + } + + /** + * Get a single ticket with all replies. + */ + public function getTicket(int $id): ?object + { + $db = $this->getDatabase(); + $query = $db->getQuery(true) + ->select([ + $db->quoteName('t') . '.*', + $db->quoteName('c.title', 'category_title'), + $db->quoteName('u.name', 'created_by_name'), + $db->quoteName('u.email', 'created_by_email'), + $db->quoteName('a.name', 'assigned_to_name'), + ]) + ->from($db->quoteName('#__mokowaas_tickets', 't')) + ->leftJoin($db->quoteName('#__mokowaas_ticket_categories', 'c') . ' ON c.id = t.category_id') + ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = t.created_by') + ->leftJoin($db->quoteName('#__users', 'a') . ' ON a.id = t.assigned_to') + ->where($db->quoteName('t.id') . ' = ' . $id); + $db->setQuery($query); + $ticket = $db->loadObject(); + + if (!$ticket) + { + return null; + } + + // Load replies + $query = $db->getQuery(true) + ->select([ + $db->quoteName('r') . '.*', + $db->quoteName('u.name', 'user_name'), + ]) + ->from($db->quoteName('#__mokowaas_ticket_replies', 'r')) + ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = r.user_id') + ->where($db->quoteName('r.ticket_id') . ' = ' . $id) + ->order($db->quoteName('r.created') . ' ASC'); + $db->setQuery($query); + $ticket->replies = $db->loadObjectList() ?: []; + + // Reply count + $ticket->reply_count = \count($ticket->replies); + + return $ticket; + } + + /** + * Create a new ticket. + */ + public function createTicket(array $data): array + { + try + { + $db = $this->getDatabase(); + $user = Factory::getApplication()->getIdentity(); + $now = Factory::getDate()->toSql(); + + $ticket = (object) [ + 'subject' => $data['subject'] ?? '', + 'body' => $data['body'] ?? '', + 'status' => 'open', + 'priority' => $data['priority'] ?? 'normal', + 'category_id' => (int) ($data['category_id'] ?? 0) ?: null, + 'created_by' => $user->id, + 'assigned_to' => (int) ($data['assigned_to'] ?? 0) ?: null, + 'created' => $now, + 'modified' => $now, + ]; + + // Auto-assign from category + if (!$ticket->assigned_to && $ticket->category_id) + { + $query = $db->getQuery(true) + ->select($db->quoteName('auto_assign_user')) + ->from($db->quoteName('#__mokowaas_ticket_categories')) + ->where($db->quoteName('id') . ' = ' . (int) $ticket->category_id); + $db->setQuery($query); + $autoAssign = (int) $db->loadResult(); + + if ($autoAssign) + { + $ticket->assigned_to = $autoAssign; + } + } + + // SLA deadlines from category + if ($ticket->category_id) + { + $query = $db->getQuery(true) + ->select([$db->quoteName('sla_response_minutes'), $db->quoteName('sla_resolution_minutes')]) + ->from($db->quoteName('#__mokowaas_ticket_categories')) + ->where($db->quoteName('id') . ' = ' . (int) $ticket->category_id); + $db->setQuery($query); + $sla = $db->loadObject(); + + if ($sla) + { + $ticket->sla_response_due = Factory::getDate($now)->modify('+' . (int) $sla->sla_response_minutes . ' minutes')->toSql(); + $ticket->sla_resolution_due = Factory::getDate($now)->modify('+' . (int) $sla->sla_resolution_minutes . ' minutes')->toSql(); + } + } + + $db->insertObject('#__mokowaas_tickets', $ticket, 'id'); + + return ['success' => true, 'message' => 'Ticket #' . $ticket->id . ' created.', 'id' => (int) $ticket->id]; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Failed: ' . $e->getMessage()]; + } + } + + /** + * Add a reply to a ticket. + */ + public function addReply(int $ticketId, string $body, bool $isInternal = false): array + { + try + { + $db = $this->getDatabase(); + $user = Factory::getApplication()->getIdentity(); + $now = Factory::getDate()->toSql(); + + $reply = (object) [ + 'ticket_id' => $ticketId, + 'user_id' => $user->id, + 'body' => $body, + 'is_internal' => $isInternal ? 1 : 0, + 'created' => $now, + ]; + + $db->insertObject('#__mokowaas_ticket_replies', $reply, 'id'); + + // Mark SLA as responded if first staff reply + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_tickets')) + ->set($db->quoteName('modified') . ' = ' . $db->quote($now)) + ->set($db->quoteName('sla_responded') . ' = 1') + ->where($db->quoteName('id') . ' = ' . $ticketId) + ->where($db->quoteName('sla_responded') . ' = 0') + )->execute(); + + return ['success' => true, 'message' => 'Reply added.']; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Failed: ' . $e->getMessage()]; + } + } + + /** + * Update ticket status. + */ + public function updateStatus(int $ticketId, string $status): array + { + $valid = ['open', 'in_progress', 'waiting', 'resolved', 'closed']; + + if (!\in_array($status, $valid, true)) + { + return ['success' => false, 'message' => 'Invalid status.']; + } + + try + { + $db = $this->getDatabase(); + $now = Factory::getDate()->toSql(); + + $sets = [ + $db->quoteName('status') . ' = ' . $db->quote($status), + $db->quoteName('modified') . ' = ' . $db->quote($now), + ]; + + if ($status === 'resolved') + { + $sets[] = $db->quoteName('resolved') . ' = ' . $db->quote($now); + } + + if ($status === 'closed') + { + $sets[] = $db->quoteName('closed') . ' = ' . $db->quote($now); + } + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_tickets')) + ->set($sets) + ->where($db->quoteName('id') . ' = ' . $ticketId) + )->execute(); + + return ['success' => true, 'message' => 'Status updated to ' . $status . '.']; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Failed: ' . $e->getMessage()]; + } + } + + /** + * Get all ticket categories. + */ + public function getCategories(): array + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_ticket_categories')) + ->where($db->quoteName('published') . ' = 1') + ->order($db->quoteName('ordering') . ' ASC') + ); + + return $db->loadObjectList() ?: []; + } + + /** + * Get canned responses, optionally filtered by category. + */ + public function getCannedResponses(int $categoryId = 0): array + { + $db = $this->getDatabase(); + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_ticket_canned')) + ->order($db->quoteName('ordering') . ' ASC'); + + if ($categoryId) + { + $query->where('(' . $db->quoteName('category_id') . ' = ' . $categoryId + . ' OR ' . $db->quoteName('category_id') . ' IS NULL)'); + } + + $db->setQuery($query); + + return $db->loadObjectList() ?: []; + } + + /** + * Get ticket counts by status for dashboard. + */ + public function getStatusCounts(): object + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select([$db->quoteName('status'), 'COUNT(*) AS ' . $db->quoteName('cnt')]) + ->from($db->quoteName('#__mokowaas_tickets')) + ->group($db->quoteName('status')) + ); + $rows = $db->loadObjectList('status') ?: []; + + return (object) [ + 'open' => (int) ($rows['open']->cnt ?? 0), + 'in_progress' => (int) ($rows['in_progress']->cnt ?? 0), + 'waiting' => (int) ($rows['waiting']->cnt ?? 0), + 'resolved' => (int) ($rows['resolved']->cnt ?? 0), + 'closed' => (int) ($rows['closed']->cnt ?? 0), + 'total' => array_sum(array_map(fn($r) => (int) $r->cnt, $rows)), + ]; + } + + /** + * Get overdue tickets (SLA breached). + */ + public function getOverdueTickets(): array + { + $db = $this->getDatabase(); + $now = Factory::getDate()->toSql(); + + $query = $db->getQuery(true) + ->select([$db->quoteName('id'), $db->quoteName('subject'), $db->quoteName('priority'), + $db->quoteName('sla_response_due'), $db->quoteName('sla_resolution_due'), $db->quoteName('sla_responded')]) + ->from($db->quoteName('#__mokowaas_tickets')) + ->where($db->quoteName('status') . ' NOT IN (' . $db->quote('resolved') . ',' . $db->quote('closed') . ')') + ->where('((' . $db->quoteName('sla_response_due') . ' < ' . $db->quote($now) . ' AND ' . $db->quoteName('sla_responded') . ' = 0)' + . ' OR ' . $db->quoteName('sla_resolution_due') . ' < ' . $db->quote($now) . ')') + ->order($db->quoteName('sla_resolution_due') . ' ASC'); + $db->setQuery($query); + + return $db->loadObjectList() ?: []; + } +} diff --git a/src/packages/com_mokowaas/admin/src/View/Ticket/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Ticket/HtmlView.php new file mode 100644 index 0000000..b4c0047 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Ticket/HtmlView.php @@ -0,0 +1,53 @@ +getModel('Tickets'); + $id = Factory::getApplication()->getInput()->getInt('id', 0); + + $this->ticket = $model->getTicket($id); + $this->cannedResponses = $model->getCannedResponses((int) ($this->ticket->category_id ?? 0)); + + if (!$this->ticket) + { + Factory::getApplication()->enqueueMessage('Ticket not found.', 'error'); + Factory::getApplication()->redirect('index.php?option=com_mokowaas&view=tickets'); + + return; + } + + $this->addToolbar(); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } + + protected function addToolbar(): void + { + $title = $this->ticket ? 'Ticket #' . $this->ticket->id . ' — ' . $this->ticket->subject : 'Ticket'; + ToolbarHelper::title($title, 'headphones'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas&view=tickets'); + } +} diff --git a/src/packages/com_mokowaas/admin/src/View/Tickets/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Tickets/HtmlView.php new file mode 100644 index 0000000..387d575 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Tickets/HtmlView.php @@ -0,0 +1,54 @@ +getModel(); + $app = Factory::getApplication(); + + $filters = [ + 'status' => $app->getInput()->getString('filter_status', ''), + 'priority' => $app->getInput()->getString('filter_priority', ''), + 'category_id' => $app->getInput()->getInt('filter_category', 0), + ]; + + $this->tickets = $model->getTickets($filters); + $this->categories = $model->getCategories(); + $this->statusCounts = $model->getStatusCounts(); + $this->overdue = $model->getOverdueTickets(); + + $this->addToolbar(); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } + + protected function addToolbar(): void + { + ToolbarHelper::title(Text::_('COM_MOKOWAAS_TICKETS_TITLE'), 'headphones'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas'); + } +} diff --git a/src/packages/com_mokowaas/admin/tmpl/ticket/default.php b/src/packages/com_mokowaas/admin/tmpl/ticket/default.php new file mode 100644 index 0000000..e7ceb8e --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/ticket/default.php @@ -0,0 +1,198 @@ +ticket; +$canned = $this->cannedResponses; +$token = Session::getFormToken(); + +$statusBadge = [ + 'open' => 'bg-primary', 'in_progress' => 'bg-info', + 'waiting' => 'bg-warning text-dark', 'resolved' => 'bg-success', 'closed' => 'bg-secondary', +]; +$priorityBadge = [ + 'low' => 'bg-secondary', 'normal' => 'bg-primary', 'high' => 'bg-warning text-dark', 'urgent' => 'bg-danger', +]; +?> + +
+ +
+ +
+
+
+ escape($t->created_by_name); ?> + created, 'M d, Y H:i'); ?> +
+ Original +
+
escape($t->body)); ?>
+
+ + + replies as $reply): ?> +
+
+
+ escape($reply->user_name ?? 'System'); ?> + created, 'M d, Y H:i'); ?> +
+ is_internal): ?> + Internal Note + +
+
escape($reply->body)); ?>
+
+ + + +
+
Reply
+
+ +
+ +
+ + +
+ + +
+
+
+
+ + +
+
+
Details
+
+ + + + + + + + resolved): ?> + closed): ?> + +
Statusstatus)); ?>
Prioritypriority); ?>
Categoryescape($t->category_title ?? '—'); ?>
Created Byescape($t->created_by_name); ?>
escape($t->created_by_email ?? ''); ?>
Assigned Toescape($t->assigned_to_name ?? 'Unassigned'); ?>
Createdcreated, 'M d, Y H:i'); ?>
Resolvedresolved, 'M d, Y H:i'); ?>
Closedclosed, 'M d, Y H:i'); ?>
Repliesreply_count; ?>
+
+
+ + + sla_response_due || $t->sla_resolution_due): ?> +
+
SLA
+
+ sla_response_due): ?> +
+ Response Due
+ sla_responded && strtotime($t->sla_response_due) < time(); + ?> + + sla_responded ? 'Responded' : HTMLHelper::_('date', $t->sla_response_due, 'M d H:i'); ?> + + +
+ + sla_resolution_due): ?> +
+ Resolution Due
+ status, ['resolved','closed']) && strtotime($t->sla_resolution_due) < time(); + ?> + + status, ['resolved','closed']) ? 'Met' : HTMLHelper::_('date', $t->sla_resolution_due, 'M d H:i'); ?> + + +
+ +
+
+ + + +
+
Actions
+
+ 'Reopen', 'in_progress' => 'In Progress', 'waiting' => 'Waiting', 'resolved' => 'Resolve', 'closed' => 'Close'] as $s => $label): ?> + status): ?> + + + +
+
+
+
+ + diff --git a/src/packages/com_mokowaas/admin/tmpl/tickets/default.php b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php new file mode 100644 index 0000000..f5cfa0f --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php @@ -0,0 +1,181 @@ +tickets; +$categories = $this->categories; +$counts = $this->statusCounts; +$overdue = $this->overdue; +$token = Session::getFormToken(); + +$statusBadge = [ + 'open' => 'bg-primary', + 'in_progress' => 'bg-info', + 'waiting' => 'bg-warning text-dark', + 'resolved' => 'bg-success', + 'closed' => 'bg-secondary', +]; + +$priorityBadge = [ + 'low' => 'bg-secondary', + 'normal' => 'bg-primary', + 'high' => 'bg-warning text-dark', + 'urgent' => 'bg-danger', +]; +?> + +
+ +
+
open; ?>Open
+
in_progress; ?>In Progress
+
waiting; ?>Waiting
+
resolved; ?>Resolved
+
closed; ?>Closed
+ 0): ?> +
SLA Overdue
+ +
+ + +
+
+ +
+
+ + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + sla_response_due && !$t->sla_responded && strtotime($t->sla_response_due) < $now) $slaClass = 'table-danger'; + elseif ($t->sla_resolution_due && strtotime($t->sla_resolution_due) < $now && !\in_array($t->status, ['resolved','closed'])) $slaClass = 'table-danger'; + elseif ($t->sla_response_due && !$t->sla_responded && strtotime($t->sla_response_due) < $now + 3600) $slaClass = 'table-warning'; + ?> + + + + + + + + + + + + + + +
#SubjectStatusPriorityCategoryCreated ByAssigned ToCreatedSLA
No tickets found.
id; ?>escape(mb_substr($t->subject, 0, 60)); ?>status)); ?>priority); ?>escape($t->category_title ?? '—'); ?>escape($t->created_by_name ?? ''); ?>escape($t->assigned_to_name ?? 'Unassigned'); ?>created, 'M d H:i'); ?> + sla_response_due && !$t->sla_responded): ?> + sla_response_due, 'M d H:i'); ?> + sla_resolution_due): ?> + sla_resolution_due, 'M d H:i'); ?> + +
+
+
+
+ + + + + diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 83fbe3c..afbea40 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -30,6 +30,7 @@ COM_MOKOWAAS_MENU_DASHBOARD COM_MOKOWAAS_MENU_EXTENSIONS + COM_MOKOWAAS_MENU_TICKETS COM_MOKOWAAS_MENU_HTACCESS COM_MOKOWAAS_MENU_PLUGINS COM_MOKOWAAS_MENU_UPDATES @@ -39,11 +40,16 @@ language services + sql src tmpl + + admin/sql/install.mysql.sql + + src -- 2.52.0 From 6798a5da7e7daa7600c471208a8a5ec22b3a58d0 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:25:37 +0000 Subject: [PATCH 032/142] chore(version): auto-bump 02.32.31 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 47 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index affd44f..d15590a 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.30 + 02.32.31 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 319cb7c..8d90bd4 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.30 +# VERSION: 02.32.31 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 35b0e32..ae9805d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.30 + VERSION: 02.32.31 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index c2b4236..2f13de0 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 2f58c5c..35abe21 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index ed3df2b..a60ed9f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.30 + VERSION: 02.32.31 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 0e4241f..deb24f3 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 16f7a36..8e43a32 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.30 +VERSION: 02.32.31 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index d86dfe8..0a7ae59 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.30) +# MokoWaaS Build Guide (VERSION: 02.32.31) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index e20ffba..b2fde52 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.30) +# MokoWaaS Configuration Guide (VERSION: 02.32.31) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index c7cbc95..e95e2a8 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.30) +# MokoWaaS Installation Guide (VERSION: 02.32.31) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 0deec5f..102737c 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.30) +# MokoWaaS Operations Guide (VERSION: 02.32.31) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 41bd94b..6b1b5ac 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.30) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.31) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 6a87459..294bfc0 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.30) +# MokoWaaS Testing Guide (VERSION: 02.32.31) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 631ccf8..c4cfa12 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.30) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.31) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index c6ab537..140f2b4 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.30) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.31) ## Introduction diff --git a/docs/index.md b/docs/index.md index 3d3f38d..d0e28fa 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.30 + VERSION: 02.32.31 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.30) +# MokoWaaS Documentation Index (VERSION: 02.32.31) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 0531656..28c17ce 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.30 + VERSION: 02.32.31 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.30) +# MokoWaaS Plugin Overview (VERSION: 02.32.31) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 682915f..43c1a44 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.30 +VERSION: 02.32.31 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 148f3fe..d724986 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 + 02.32.31 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 47ff686..ec76555 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 + 02.32.31 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 792ba48..e6bd3b1 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.30 + * VERSION: 02.32.31 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index b9d0d35..4109555 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.30 + * VERSION: 02.32.31 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 34c9509..a52b4a5 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.30 + * VERSION: 02.32.31 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index f0e6674..4a0e7ce 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.30 + * VERSION: 02.32.31 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 95aaa25..106c470 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.30 + * VERSION: 02.32.31 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 568a107..6f76949 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.30 + * VERSION: 02.32.31 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index e86ee06..d62ea8f 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.30 + * VERSION: 02.32.31 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 2c453f9..e375c23 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.30 + * VERSION: 02.32.31 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index cc82ede..3b66a92 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.30 + * VERSION: 02.32.31 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index da93885..57cf4b2 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.30 + * VERSION: 02.32.31 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 44354e4..5ea2a12 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 + 02.32.31 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 60326d0..62325d1 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.30 + * VERSION: 02.32.31 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index eacff21..5da7a84 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.30 + * VERSION: 02.32.31 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index e35a7f8..faf1d9c 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 + 02.32.31 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 117bbe0..cb6c7f5 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 + 02.32.31 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 56c425e..6fdcb63 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 + 02.32.31 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 5df1fee..00e05bf 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 + 02.32.31 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml index 682c698..02188e4 100644 --- a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml +++ b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 + 02.32.31 PLG_SYSTEM_MOKOWAAS_TOS_DESC Moko\Plugin\System\MokoWaaSTos diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 057f45e..8c651e9 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 - 02.32.30 + 02.32.31 + 02.32.31 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 596224f..5e7261e 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 + 02.32.31 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 470922b..7167cff 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 - 02.32.30 + 02.32.31 + 02.32.31 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index cf4e598..8518e6c 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.30 - 02.32.30 + 02.32.31 + 02.32.31 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index cbc0689..cea4f3e 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.30 + * VERSION: 02.32.31 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index e4f7644..249954f 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.30 + * VERSION: 02.32.31 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 812fbe3..1423488 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.30 + 02.32.31 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 3c17532..e054ccc 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 1ce287cb2e6249e55cea11c88fd8c30e133cb086 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:25:39 +0000 Subject: [PATCH 033/142] chore: update development channel 02.32.31 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index e054ccc..31a5b27 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.30-dev + 02.32.31-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.30-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.31-dev.zip - a41c5d16c26c906a33de21bb415a819dc9ed6db9d45d3ca3d99cc8c33eb94d05 + 943b30ab763312c53e78c2debe0ec34661fdd19f84a8bedd023aed8220808d86 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From b50661d9ee1bb20e1c9425bc73de05d7a309d00d Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 15:30:57 -0500 Subject: [PATCH 034/142] feat: component ACL permissions for MokoWaaS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added access.xml with granular permissions: - core.admin / core.manage (Joomla standard) - mokowaas.dashboard — view the control panel - mokowaas.extensions — install/uninstall Moko packages - mokowaas.htaccess — edit .htaccess configuration - mokowaas.tickets — view helpdesk tickets - mokowaas.tickets.create — create new tickets - mokowaas.tickets.assign — assign tickets to users - mokowaas.plugins.toggle — enable/disable feature plugins - mokowaas.cache — clear Joomla cache Configurable per user group in Options > Permissions tab. Also moved MokoWaaS to top of admin sidebar menu. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/packages/com_mokowaas/admin/access.xml | 15 +++++++++++++++ .../admin/language/en-GB/com_mokowaas.ini | 18 ++++++++++++++++++ src/packages/com_mokowaas/mokowaas.xml | 1 + 3 files changed, 34 insertions(+) create mode 100644 src/packages/com_mokowaas/admin/access.xml diff --git a/src/packages/com_mokowaas/admin/access.xml b/src/packages/com_mokowaas/admin/access.xml new file mode 100644 index 0000000..753c1ee --- /dev/null +++ b/src/packages/com_mokowaas/admin/access.xml @@ -0,0 +1,15 @@ + + +
+ + + + + + + + + + +
+
diff --git a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini index d771304..f8a0022 100644 --- a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini +++ b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.ini @@ -21,3 +21,21 @@ COM_MOKOWAAS_EXTENSIONS_INFO="Install Moko Consulting Joomla packages from the o COM_MOKOWAAS_EXTENSIONS_LINK="Moko Extensions" COM_MOKOWAAS_HTACCESS_TITLE=".htaccess Maker" COM_MOKOWAAS_TICKETS_TITLE="Helpdesk" + +; ACL +COM_MOKOWAAS_ACL_DASHBOARD="View Dashboard" +COM_MOKOWAAS_ACL_DASHBOARD_DESC="Allow viewing the MokoWaaS control panel dashboard." +COM_MOKOWAAS_ACL_EXTENSIONS="Manage Extensions" +COM_MOKOWAAS_ACL_EXTENSIONS_DESC="Allow installing and uninstalling Moko extensions." +COM_MOKOWAAS_ACL_HTACCESS="Manage .htaccess" +COM_MOKOWAAS_ACL_HTACCESS_DESC="Allow editing and saving the .htaccess configuration." +COM_MOKOWAAS_ACL_TICKETS="View Tickets" +COM_MOKOWAAS_ACL_TICKETS_DESC="Allow viewing helpdesk tickets." +COM_MOKOWAAS_ACL_TICKETS_CREATE="Create Tickets" +COM_MOKOWAAS_ACL_TICKETS_CREATE_DESC="Allow creating new helpdesk tickets." +COM_MOKOWAAS_ACL_TICKETS_ASSIGN="Assign Tickets" +COM_MOKOWAAS_ACL_TICKETS_ASSIGN_DESC="Allow assigning tickets to other users." +COM_MOKOWAAS_ACL_PLUGINS_TOGGLE="Toggle Plugins" +COM_MOKOWAAS_ACL_PLUGINS_TOGGLE_DESC="Allow enabling and disabling MokoWaaS feature plugins." +COM_MOKOWAAS_ACL_CACHE="Clear Cache" +COM_MOKOWAAS_ACL_CACHE_DESC="Allow clearing the Joomla cache from the dashboard." diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 148f3fe..3b5bfb5 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -38,6 +38,7 @@ COM_MOKOWAAS_MENU_CACHE
+ access.xml language services sql -- 2.52.0 From 4684c4a1ebd8bb295d1c5634b3df4ca8d0870bbb Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:31:13 +0000 Subject: [PATCH 035/142] chore(version): auto-bump 02.32.32 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 47 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index d15590a..5834fac 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.31 + 02.32.32 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 8d90bd4..d7ba1cd 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.31 +# VERSION: 02.32.32 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index ae9805d..b05d7cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.31 + VERSION: 02.32.32 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2f13de0..66dbe2f 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 35abe21..7e27f0e 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index a60ed9f..e721cd0 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.31 + VERSION: 02.32.32 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index deb24f3..9ce595f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 8e43a32..3bb4027 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.31 +VERSION: 02.32.32 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 0a7ae59..7df4ddb 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.31) +# MokoWaaS Build Guide (VERSION: 02.32.32) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index b2fde52..78decbc 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.31) +# MokoWaaS Configuration Guide (VERSION: 02.32.32) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index e95e2a8..ed20fba 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.31) +# MokoWaaS Installation Guide (VERSION: 02.32.32) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 102737c..b61c252 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.31) +# MokoWaaS Operations Guide (VERSION: 02.32.32) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 6b1b5ac..40ae61f 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.31) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.32) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 294bfc0..e23266c 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.31) +# MokoWaaS Testing Guide (VERSION: 02.32.32) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index c4cfa12..d6cc21a 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.31) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.32) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 140f2b4..1c98f40 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.31) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.32) ## Introduction diff --git a/docs/index.md b/docs/index.md index d0e28fa..cbfde08 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.31 + VERSION: 02.32.32 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.31) +# MokoWaaS Documentation Index (VERSION: 02.32.32) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 28c17ce..54e0f3a 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.31 + VERSION: 02.32.32 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.31) +# MokoWaaS Plugin Overview (VERSION: 02.32.32) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 43c1a44..59bab55 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.31 +VERSION: 02.32.32 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 40433bb..2b3001d 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 + 02.32.32 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index ec76555..16aa4ce 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 + 02.32.32 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index e6bd3b1..a36066c 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.31 + * VERSION: 02.32.32 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 4109555..fae4a6f 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.31 + * VERSION: 02.32.32 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index a52b4a5..f6c504e 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.31 + * VERSION: 02.32.32 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 4a0e7ce..39e05f0 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.31 + * VERSION: 02.32.32 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 106c470..01b1890 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.31 + * VERSION: 02.32.32 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 6f76949..56dbfd8 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.31 + * VERSION: 02.32.32 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index d62ea8f..39e6cf8 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.31 + * VERSION: 02.32.32 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index e375c23..42f5abb 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.31 + * VERSION: 02.32.32 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 3b66a92..3dec1fd 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.31 + * VERSION: 02.32.32 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 57cf4b2..5416553 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.31 + * VERSION: 02.32.32 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 5ea2a12..28fbb1d 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 + 02.32.32 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 62325d1..2b46fbb 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.31 + * VERSION: 02.32.32 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 5da7a84..73881d8 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.31 + * VERSION: 02.32.32 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index faf1d9c..6fb48a0 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 + 02.32.32 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index cb6c7f5..bba0470 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 + 02.32.32 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 6fdcb63..b305a73 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 + 02.32.32 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 00e05bf..61d7860 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 + 02.32.32 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml index 02188e4..1cf673c 100644 --- a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml +++ b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 + 02.32.32 PLG_SYSTEM_MOKOWAAS_TOS_DESC Moko\Plugin\System\MokoWaaSTos diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 8c651e9..75c9e92 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 - 02.32.31 + 02.32.32 + 02.32.32 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 5e7261e..4ea9088 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 + 02.32.32 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 7167cff..7b65bc1 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 - 02.32.31 + 02.32.32 + 02.32.32 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 8518e6c..ff03892 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.31 - 02.32.31 + 02.32.32 + 02.32.32 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index cea4f3e..11d8f39 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.31 + * VERSION: 02.32.32 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 249954f..b5000ae 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.31 + * VERSION: 02.32.32 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 1423488..ffa1607 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.31 + 02.32.32 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 31a5b27..5744615 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From cf85a560e44dbc64fe8dc1888af8008214b28da5 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:31:15 +0000 Subject: [PATCH 036/142] chore: update development channel 02.32.32 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 5744615..5597df9 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.31-dev + 02.32.32-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.31-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.32-dev.zip - 943b30ab763312c53e78c2debe0ec34661fdd19f84a8bedd023aed8220808d86 + 3f27a5a89763bfca54c53b17a4b9047e61886c34acf2b33a787b6eaad1d751d9 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 33ce8b115c92b89ee1ea737f2071201c30135d9b Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 15:33:33 -0500 Subject: [PATCH 037/142] feat: wire ACL checks into all controller actions and views MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every view and AJAX task now checks its specific ACL permission: - display() checks VIEW_ACL map per view name - togglePlugin → mokowaas.plugins.toggle - clearCache → mokowaas.cache - installExtension → mokowaas.extensions - saveHtaccess/generateHtaccess → mokowaas.htaccess - createTicket → mokowaas.tickets.create - addTicketReply/updateTicketStatus → mokowaas.tickets Super admins (core.admin) always bypass all checks. Refactored to use checkAcl/jsonResponse/jsonForbidden helpers. Default ACL applied on dev: - Super Users: all permissions - Administrator: cache + ticket assign - Manager: dashboard + tickets (view/create) - Others: no access Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/Controller/DisplayController.php | 261 +++++++++--------- 1 file changed, 135 insertions(+), 126 deletions(-) diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index a4f3fc6..c20a314 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -20,131 +20,113 @@ class DisplayController extends BaseController { protected $default_view = 'dashboard'; + /** + * ACL map: view name => required permission. + */ + private const VIEW_ACL = [ + 'dashboard' => 'mokowaas.dashboard', + 'extensions' => 'mokowaas.extensions', + 'htaccess' => 'mokowaas.htaccess', + 'tickets' => 'mokowaas.tickets', + 'ticket' => 'mokowaas.tickets', + ]; + public function display($cachable = false, $urlparams = []) { + $view = $this->input->get('view', $this->default_view); + $acl = self::VIEW_ACL[$view] ?? 'core.manage'; + + if (!$this->checkAcl($acl)) + { + Factory::getApplication()->enqueueMessage(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 'error'); + Factory::getApplication()->redirect(Route::_('index.php', false)); + + return; + } + return parent::display($cachable, $urlparams); } - /** - * Toggle a MokoWaaS feature plugin on or off. - * - * Expects POST with extension_id and enabled (0 or 1). - * Returns JSON response for AJAX calls. - */ + // ================================================================== + // Plugin toggle + // ================================================================== + public function togglePlugin() { Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('mokowaas.plugins.toggle')) + { + $this->jsonForbidden(); + } + $app = Factory::getApplication(); - $input = $app->getInput(); + $model = $this->getModel('Dashboard'); - $user = $app->getIdentity(); - if (!$user->authorise('core.manage', 'com_plugins')) - { - $app->setHeader('Content-Type', 'application/json'); - echo json_encode(['success' => false, 'message' => Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')]); - $app->close(); - } + $result = $model->togglePlugin( + $app->getInput()->getInt('extension_id', 0), + $app->getInput()->getInt('enabled', 0) + ); - $extensionId = $input->getInt('extension_id', 0); - $enabled = $input->getInt('enabled', 0); - - if (!$extensionId) - { - $app->setHeader('Content-Type', 'application/json'); - echo json_encode(['success' => false, 'message' => 'Missing extension_id']); - $app->close(); - } - - $model = $this->getModel('Dashboard'); - $result = $model->togglePlugin($extensionId, $enabled); - - $app->setHeader('Content-Type', 'application/json'); - echo json_encode($result); - $app->close(); + $this->jsonResponse($result); } - /** - * Clear the Joomla cache. - */ + // ================================================================== + // Cache + // ================================================================== + public function clearCache() { Session::checkToken() or die(Text::_('JINVALID_TOKEN')); - $app = Factory::getApplication(); - $user = $app->getIdentity(); - - if (!$user->authorise('core.admin')) + if (!$this->checkAcl('mokowaas.cache')) { - $app->setHeader('Content-Type', 'application/json'); - echo json_encode(['success' => false, 'message' => Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')]); - $app->close(); + $this->jsonForbidden(); } - $model = $this->getModel('Dashboard'); - $result = $model->clearCache(); - - $app->setHeader('Content-Type', 'application/json'); - echo json_encode($result); - $app->close(); + $this->jsonResponse($this->getModel('Dashboard')->clearCache()); } - /** - * Install a Moko extension from a download URL. - */ + // ================================================================== + // Extensions + // ================================================================== + public function installExtension() { Session::checkToken() or die(Text::_('JINVALID_TOKEN')); - $app = Factory::getApplication(); - $user = $app->getIdentity(); - - if (!$user->authorise('core.admin')) + if (!$this->checkAcl('mokowaas.extensions')) { - $app->setHeader('Content-Type', 'application/json'); - echo json_encode(['success' => false, 'message' => Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')]); - $app->close(); + $this->jsonForbidden(); } - $downloadUrl = $app->getInput()->getString('download_url', ''); + $downloadUrl = Factory::getApplication()->getInput()->getString('download_url', ''); if (empty($downloadUrl)) { - $app->setHeader('Content-Type', 'application/json'); - echo json_encode(['success' => false, 'message' => 'Missing download URL.']); - $app->close(); + $this->jsonResponse(['success' => false, 'message' => 'Missing download URL.']); } - $model = $this->getModel('Extensions'); - $result = $model->installFromUrl($downloadUrl); - - $app->setHeader('Content-Type', 'application/json'); - echo json_encode($result); - $app->close(); + $this->jsonResponse($this->getModel('Extensions')->installFromUrl($downloadUrl)); } - /** - * Save .htaccess to disk and persist options. - */ + // ================================================================== + // .htaccess + // ================================================================== + public function saveHtaccess() { Session::checkToken() or die(Text::_('JINVALID_TOKEN')); - $app = Factory::getApplication(); - $user = $app->getIdentity(); - - if (!$user->authorise('core.admin')) + if (!$this->checkAcl('mokowaas.htaccess')) { - $app->setHeader('Content-Type', 'application/json'); - echo json_encode(['success' => false, 'message' => Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')]); - $app->close(); + $this->jsonForbidden(); } - $input = $app->getInput(); - $content = $input->getRaw('content', ''); - $model = $this->getModel('Htaccess'); + $app = Factory::getApplication(); + $input = $app->getInput(); + $model = $this->getModel('Htaccess'); - // Save options from opt_ prefixed fields $options = []; foreach ($input->getArray() as $key => $value) @@ -160,28 +142,24 @@ class DisplayController extends BaseController $model->saveOptions($options); } - $result = $model->saveHtaccess($content); - - $app->setHeader('Content-Type', 'application/json'); - echo json_encode($result); - $app->close(); + $this->jsonResponse($model->saveHtaccess($input->getRaw('content', ''))); } - /** - * Generate .htaccess preview from posted options (AJAX). - */ public function generateHtaccess() { Session::checkToken() or die(Text::_('JINVALID_TOKEN')); - $app = Factory::getApplication(); - $input = $app->getInput(); - $model = $this->getModel('Htaccess'); - $options = $input->getArray(); + if (!$this->checkAcl('mokowaas.htaccess')) + { + $this->jsonForbidden(); + } + + $model = $this->getModel('Htaccess'); + $options = Factory::getApplication()->getInput()->getArray(); - // Save options for persistence $model->saveOptions($options); + $app = Factory::getApplication(); $app->setHeader('Content-Type', 'application/json'); echo json_encode([ 'htaccess' => $model->generateHtaccess($options), @@ -190,69 +168,100 @@ class DisplayController extends BaseController $app->close(); } - /** - * Create a new support ticket. - */ + // ================================================================== + // Tickets + // ================================================================== + public function createTicket() { Session::checkToken() or die(Text::_('JINVALID_TOKEN')); - $app = Factory::getApplication(); - $input = $app->getInput(); - $model = $this->getModel('Tickets'); + if (!$this->checkAcl('mokowaas.tickets.create')) + { + $this->jsonForbidden(); + } - $result = $model->createTicket([ + $input = Factory::getApplication()->getInput(); + + $this->jsonResponse($this->getModel('Tickets')->createTicket([ 'subject' => $input->getString('subject', ''), 'body' => $input->getRaw('body', ''), 'priority' => $input->getString('priority', 'normal'), 'category_id' => $input->getInt('category_id', 0), - ]); - - $app->setHeader('Content-Type', 'application/json'); - echo json_encode($result); - $app->close(); + ])); } - /** - * Add a reply to a ticket. - */ public function addTicketReply() { Session::checkToken() or die(Text::_('JINVALID_TOKEN')); - $app = Factory::getApplication(); - $input = $app->getInput(); - $model = $this->getModel('Tickets'); + if (!$this->checkAcl('mokowaas.tickets')) + { + $this->jsonForbidden(); + } - $result = $model->addReply( + $input = Factory::getApplication()->getInput(); + + $this->jsonResponse($this->getModel('Tickets')->addReply( $input->getInt('ticket_id', 0), $input->getRaw('body', ''), (bool) $input->getInt('is_internal', 0) - ); - - $app->setHeader('Content-Type', 'application/json'); - echo json_encode($result); - $app->close(); + )); } - /** - * Update ticket status. - */ public function updateTicketStatus() { Session::checkToken() or die(Text::_('JINVALID_TOKEN')); - $app = Factory::getApplication(); - $input = $app->getInput(); - $model = $this->getModel('Tickets'); + if (!$this->checkAcl('mokowaas.tickets')) + { + $this->jsonForbidden(); + } - $result = $model->updateStatus( + $input = Factory::getApplication()->getInput(); + + $this->jsonResponse($this->getModel('Tickets')->updateStatus( $input->getInt('ticket_id', 0), $input->getString('status', '') - ); + )); + } + // ================================================================== + // Helpers + // ================================================================== + + /** + * Check a MokoWaaS ACL permission for the current user. + */ + private function checkAcl(string $action): bool + { + $user = Factory::getApplication()->getIdentity(); + + // Super admins always pass + if ($user->authorise('core.admin', 'com_mokowaas')) + { + return true; + } + + return $user->authorise($action, 'com_mokowaas'); + } + + /** + * Send a JSON response and close. + */ + private function jsonResponse(array $data): void + { + $app = Factory::getApplication(); $app->setHeader('Content-Type', 'application/json'); - echo json_encode($result); + echo json_encode($data); $app->close(); } + + /** + * Send a 403 JSON response and close. + */ + private function jsonForbidden(): void + { + $this->jsonResponse(['success' => false, 'message' => Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')]); + } } -- 2.52.0 From 6ae5daffa25336a97f7ec5b77c37226f2ac77190 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:33:48 +0000 Subject: [PATCH 038/142] chore(version): auto-bump 02.32.33 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 47 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 5834fac..d3a7e7d 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.32 + 02.32.33 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index d7ba1cd..4dbf0bb 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.32 +# VERSION: 02.32.33 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index b05d7cc..43f34e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.32 + VERSION: 02.32.33 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 66dbe2f..befa814 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 7e27f0e..8304560 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index e721cd0..1aec51f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.32 + VERSION: 02.32.33 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 9ce595f..d08bd8f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 3bb4027..8158890 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.32 +VERSION: 02.32.33 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 7df4ddb..96c04f3 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.32) +# MokoWaaS Build Guide (VERSION: 02.32.33) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 78decbc..09dc36f 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.32) +# MokoWaaS Configuration Guide (VERSION: 02.32.33) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index ed20fba..222042e 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.32) +# MokoWaaS Installation Guide (VERSION: 02.32.33) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index b61c252..e10d797 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.32) +# MokoWaaS Operations Guide (VERSION: 02.32.33) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 40ae61f..04159b7 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.32) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.33) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index e23266c..abf41a1 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.32) +# MokoWaaS Testing Guide (VERSION: 02.32.33) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index d6cc21a..df5dee9 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.32) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.33) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 1c98f40..4c13724 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.32) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.33) ## Introduction diff --git a/docs/index.md b/docs/index.md index cbfde08..c1d3698 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.32 + VERSION: 02.32.33 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.32) +# MokoWaaS Documentation Index (VERSION: 02.32.33) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 54e0f3a..4c97781 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.32 + VERSION: 02.32.33 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.32) +# MokoWaaS Plugin Overview (VERSION: 02.32.33) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 59bab55..20a5b6f 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.32 +VERSION: 02.32.33 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 2b3001d..988f3e4 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.33 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 16aa4ce..ff6b3d0 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.33 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index a36066c..01b79ae 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.32 + * VERSION: 02.32.33 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index fae4a6f..573f09c 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.32 + * VERSION: 02.32.33 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index f6c504e..0adfe81 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.32 + * VERSION: 02.32.33 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 39e05f0..c73f5ae 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.32 + * VERSION: 02.32.33 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 01b1890..ad84464 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.32 + * VERSION: 02.32.33 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 56dbfd8..f1fb382 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.32 + * VERSION: 02.32.33 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 39e6cf8..a43708f 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.32 + * VERSION: 02.32.33 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 42f5abb..c71888c 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.32 + * VERSION: 02.32.33 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 3dec1fd..7067879 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.32 + * VERSION: 02.32.33 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 5416553..2745bd0 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.32 + * VERSION: 02.32.33 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 28fbb1d..ec16710 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.33 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 2b46fbb..405d3cc 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.32 + * VERSION: 02.32.33 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 73881d8..0a4a666 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.32 + * VERSION: 02.32.33 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 6fb48a0..efd3436 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.33 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index bba0470..fa25e64 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.33 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index b305a73..d387fd2 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.33 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 61d7860..075c18a 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.33 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml index 1cf673c..329a566 100644 --- a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml +++ b/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.33 PLG_SYSTEM_MOKOWAAS_TOS_DESC Moko\Plugin\System\MokoWaaSTos diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 75c9e92..bfdffe8 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 - 02.32.32 + 02.32.33 + 02.32.33 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 4ea9088..4c7a9ae 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.33 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 7b65bc1..d79d6c0 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 - 02.32.32 + 02.32.33 + 02.32.33 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index ff03892..ca74748 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 - 02.32.32 + 02.32.33 + 02.32.33 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 11d8f39..6398ec9 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.32 + * VERSION: 02.32.33 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index b5000ae..d46f41d 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.32 + * VERSION: 02.32.33 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index ffa1607..47a0613 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.32 + 02.32.33 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 5597df9..f9357ba 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From bb03cd94d60fc1402cfbec8cb2390db337f8cd75 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:33:50 +0000 Subject: [PATCH 039/142] chore: update development channel 02.32.33 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index f9357ba..a48eb53 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.32-dev + 02.32.33-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.32-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.33-dev.zip - 3f27a5a89763bfca54c53b17a4b9047e61886c34acf2b33a787b6eaad1d751d9 + a337d676828192b56c70354b2bd2017326be8b24e4f7e0cebc76efa45b908614 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From adccf3bd2ad35eaf9b8cbcb83c3857537ee4d012 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 15:39:04 -0500 Subject: [PATCH 040/142] feat: rename mokowaas_tos to mokowaas_offline + auto-migrate from standalone MokoJoomTOS Renamed plugin element from mokowaas_tos to mokowaas_offline to better reflect its purpose (offline bypass, not just TOS). Added migrateStandalonePlugins() to package script: - Detects if standalone mokojoomtos plugin is installed - Copies its params (configured slugs) to mokowaas_offline - Removes old extension record, update sites, and files - Logs the migration Future standalone-to-MokoWaaS migrations can be added to the $migrations array. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/src/Model/DashboardModel.php | 2 +- .../Extension/MokoWaaS.php | 2 +- .../en-GB/plg_system_mokowaas_offline.ini | 13 ++ .../en-GB/plg_system_mokowaas_offline.sys.ini | 3 + .../mokowaas_offline.xml} | 22 ++-- .../services/provider.php | 6 +- .../src/Extension/Tos.php | 4 +- .../src/Field/MenuslugField.php | 6 +- .../en-GB/plg_system_mokowaas_tos.ini | 13 -- .../en-GB/plg_system_mokowaas_tos.sys.ini | 3 - src/pkg_mokowaas.xml | 2 +- src/script.php | 117 +++++++++++++++++- 12 files changed, 153 insertions(+), 40 deletions(-) create mode 100644 src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.ini create mode 100644 src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.sys.ini rename src/packages/{plg_system_mokowaas_tos/mokowaas_tos.xml => plg_system_mokowaas_offline/mokowaas_offline.xml} (61%) rename src/packages/{plg_system_mokowaas_tos => plg_system_mokowaas_offline}/services/provider.php (85%) rename src/packages/{plg_system_mokowaas_tos => plg_system_mokowaas_offline}/src/Extension/Tos.php (96%) rename src/packages/{plg_system_mokowaas_tos => plg_system_mokowaas_offline}/src/Field/MenuslugField.php (91%) delete mode 100644 src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini delete mode 100644 src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini diff --git a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php index fbc9ab5..b8674dc 100644 --- a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php @@ -45,7 +45,7 @@ class DashboardModel extends BaseDatabaseModel 'protected' => false, 'configure_only' => false, ], - 'mokowaas_tos' => [ + 'mokowaas_offline' => [ 'icon' => 'icon-globe', 'category' => 'security', 'label' => 'Offline Bypass', diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index a36066c..29dcdc9 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -1411,7 +1411,7 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface $db->quote('mokowaas_firewall'), $db->quote('mokowaas_tenant'), $db->quote('mokowaas_devtools'), - $db->quote('mokowaas_tos'), + $db->quote('mokowaas_offline'), $db->quote('mod_mokowaas_cpanel'), ]; diff --git a/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.ini b/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.ini new file mode 100644 index 0000000..6551799 --- /dev/null +++ b/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.ini @@ -0,0 +1,13 @@ +; MokoWaaS Terms of Service Plugin +; Copyright (C) 2026 Moko Consulting. All rights reserved. +; License: GPL-3.0-or-later + +PLG_SYSTEM_MOKOWAAS_OFFLINE="System - MokoWaaS Offline Bypass" +PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." + +PLG_SYSTEM_MOKOWAAS_OFFLINE_FIELDSET_BASIC="Offline-Accessible Pages" +PLG_SYSTEM_MOKOWAAS_OFFLINE_SLUG_LABEL="Menu Items to Keep Online" +PLG_SYSTEM_MOKOWAAS_OFFLINE_SLUG_DESC="Select menu items that remain accessible during offline mode. Hold Ctrl/Cmd for multiple." +PLG_SYSTEM_MOKOWAAS_OFFLINE_CHILDREN_LABEL="Include Child Menu Items" +PLG_SYSTEM_MOKOWAAS_OFFLINE_CHILDREN_DESC="Also allow access to child pages under the selected items." +PLG_SYSTEM_MOKOWAAS_OFFLINE_SEF_WARNING="SEF URLs are disabled - path matching requires SEF. Itemid fallback is active." diff --git a/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.sys.ini b/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.sys.ini new file mode 100644 index 0000000..7b6f1ef --- /dev/null +++ b/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.sys.ini @@ -0,0 +1,3 @@ +; MokoWaaS Terms of Service Plugin - System strings +PLG_SYSTEM_MOKOWAAS_OFFLINE="System - MokoWaaS Offline Bypass" +PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." diff --git a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml similarity index 61% rename from src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml rename to src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 1cf673c..b24656f 100644 --- a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -1,7 +1,7 @@ System - MokoWaaS Offline Bypass - mokowaas_tos + mokowaas_offline Moko Consulting 2026-06-02 Copyright (C) 2026 Moko Consulting. All rights reserved. @@ -9,8 +9,8 @@ hello@mokoconsulting.tech https://mokoconsulting.tech 02.32.32 - PLG_SYSTEM_MOKOWAAS_TOS_DESC - Moko\Plugin\System\MokoWaaSTos + PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC + Moko\Plugin\System\MokoWaaSOffline src @@ -19,21 +19,21 @@ - en-GB/plg_system_mokowaas_tos.ini - en-GB/plg_system_mokowaas_tos.sys.ini + en-GB/plg_system_mokowaas_offline.ini + en-GB/plg_system_mokowaas_offline.sys.ini - -
+ +
diff --git a/src/packages/plg_system_mokowaas_tos/services/provider.php b/src/packages/plg_system_mokowaas_offline/services/provider.php similarity index 85% rename from src/packages/plg_system_mokowaas_tos/services/provider.php rename to src/packages/plg_system_mokowaas_offline/services/provider.php index 8a7f163..c45e733 100644 --- a/src/packages/plg_system_mokowaas_tos/services/provider.php +++ b/src/packages/plg_system_mokowaas_offline/services/provider.php @@ -1,7 +1,7 @@ get(DispatcherInterface::class); - $plugin = new Tos($dispatcher, (array) PluginHelper::getPlugin('system', 'mokowaas_tos')); + $plugin = new Tos($dispatcher, (array) PluginHelper::getPlugin('system', 'mokowaas_offline')); $plugin->setApplication(Factory::getApplication()); return $plugin; diff --git a/src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php b/src/packages/plg_system_mokowaas_offline/src/Extension/Tos.php similarity index 96% rename from src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php rename to src/packages/plg_system_mokowaas_offline/src/Extension/Tos.php index 8ef01ed..1ab84cf 100644 --- a/src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php +++ b/src/packages/plg_system_mokowaas_offline/src/Extension/Tos.php @@ -1,12 +1,12 @@ '', - 'text' => Text::_('PLG_SYSTEM_MOKOWAAS_TOS_SEF_WARNING'), + 'text' => Text::_('PLG_SYSTEM_MOKOWAAS_OFFLINE_SEF_WARNING'), 'disabled' => true, ]; } diff --git a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini b/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini deleted file mode 100644 index 7b75c1e..0000000 --- a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini +++ /dev/null @@ -1,13 +0,0 @@ -; MokoWaaS Terms of Service Plugin -; Copyright (C) 2026 Moko Consulting. All rights reserved. -; License: GPL-3.0-or-later - -PLG_SYSTEM_MOKOWAAS_TOS="System - MokoWaaS Offline Bypass" -PLG_SYSTEM_MOKOWAAS_TOS_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." - -PLG_SYSTEM_MOKOWAAS_TOS_FIELDSET_BASIC="Offline-Accessible Pages" -PLG_SYSTEM_MOKOWAAS_TOS_SLUG_LABEL="Menu Items to Keep Online" -PLG_SYSTEM_MOKOWAAS_TOS_SLUG_DESC="Select menu items that remain accessible during offline mode. Hold Ctrl/Cmd for multiple." -PLG_SYSTEM_MOKOWAAS_TOS_CHILDREN_LABEL="Include Child Menu Items" -PLG_SYSTEM_MOKOWAAS_TOS_CHILDREN_DESC="Also allow access to child pages under the selected items." -PLG_SYSTEM_MOKOWAAS_TOS_SEF_WARNING="SEF URLs are disabled - path matching requires SEF. Itemid fallback is active." diff --git a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini b/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini deleted file mode 100644 index cf84d46..0000000 --- a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini +++ /dev/null @@ -1,3 +0,0 @@ -; MokoWaaS Terms of Service Plugin - System strings -PLG_SYSTEM_MOKOWAAS_TOS="System - MokoWaaS Offline Bypass" -PLG_SYSTEM_MOKOWAAS_TOS_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index ffa1607..112dec4 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -17,7 +17,7 @@ plg_system_mokowaas_firewall.zip plg_system_mokowaas_tenant.zip plg_system_mokowaas_devtools.zip - plg_system_mokowaas_tos.zip + plg_system_mokowaas_offline.zip com_mokowaas.zip mod_mokowaas_cpanel.zip plg_webservices_mokowaas.zip diff --git a/src/script.php b/src/script.php index 7bf3d36..c6a598c 100644 --- a/src/script.php +++ b/src/script.php @@ -37,12 +37,13 @@ class Pkg_MokowaasInstallerScript // Remove legacy and retired extensions $this->cleanupLegacyExtensions(); $this->removeRetiredExtensions(); + $this->migrateStandalonePlugins(); $this->enablePlugin('system', 'mokowaas'); $this->enablePlugin('system', 'mokowaas_firewall'); $this->enablePlugin('system', 'mokowaas_tenant'); $this->enablePlugin('system', 'mokowaas_devtools'); - $this->enablePlugin('system', 'mokowaas_tos'); + $this->enablePlugin('system', 'mokowaas_offline'); $this->enablePlugin('webservices', 'mokowaas'); $this->enablePlugin('task', 'mokowaasdemo'); $this->enablePlugin('task', 'mokowaassync'); @@ -137,6 +138,118 @@ class Pkg_MokowaasInstallerScript * * @since 02.32.00 */ + private function migrateStandalonePlugins(): void + { + // Migrate standalone MokoJoomTOS plugin to MokoWaaS Offline Bypass + $migrations = [ + ['old_element' => 'mokojoomtos', 'old_folder' => 'system', 'new_element' => 'mokowaas_offline', 'new_folder' => 'system'], + ]; + + try + { + $db = Factory::getDbo(); + + foreach ($migrations as $m) + { + // Check if old plugin exists + $query = $db->getQuery(true) + ->select([$db->quoteName('extension_id'), $db->quoteName('params')]) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($m['old_element'])) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote($m['old_folder'])); + $db->setQuery($query); + $old = $db->loadObject(); + + if (!$old) + { + continue; + } + + $oldParams = $old->params ?? '{}'; + + // Copy params to new plugin (only if new plugin has empty params) + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($m['new_element'])) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote($m['new_folder'])); + $db->setQuery($query); + $newParams = (string) $db->loadResult(); + + if (empty($newParams) || $newParams === '{}' || $newParams === '[]') + { + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote($oldParams)) + ->where($db->quoteName('element') . ' = ' . $db->quote($m['new_element'])) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote($m['new_folder'])) + )->execute(); + + Factory::getApplication()->enqueueMessage( + sprintf('Migrated settings from %s to %s.', $m['old_element'], $m['new_element']), + 'message' + ); + } + + // Unprotect old plugin + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('protected') . ' = 0') + ->where($db->quoteName('extension_id') . ' = ' . (int) $old->extension_id) + )->execute(); + + // Remove old extension record + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__extensions')) + ->where($db->quoteName('extension_id') . ' = ' . (int) $old->extension_id) + )->execute(); + + // Remove old update site entries + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__update_sites_extensions')) + ->where($db->quoteName('extension_id') . ' = ' . (int) $old->extension_id) + )->execute(); + + // Remove old files + $dir = JPATH_PLUGINS . '/' . $m['old_folder'] . '/' . $m['old_element']; + + if (is_dir($dir)) + { + $this->rmdirRecursive($dir); + } + + Factory::getApplication()->enqueueMessage( + sprintf('Removed standalone %s plugin (replaced by %s).', $m['old_element'], $m['new_element']), + 'message' + ); + + Log::add( + sprintf('Migrated %s → %s and removed old plugin', $m['old_element'], $m['new_element']), + Log::INFO, + 'mokowaas' + ); + } + } + catch (\Throwable $e) + { + Log::add('Standalone plugin migration error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + + /** + * Remove extensions that have been retired and merged into core. + * + * @return void + * + * @since 02.32.00 + */ private function removeRetiredExtensions(): void { $retired = [ @@ -290,7 +403,7 @@ class Pkg_MokowaasInstallerScript $db->quote('mokowaas_firewall'), $db->quote('mokowaas_tenant'), $db->quote('mokowaas_devtools'), - $db->quote('mokowaas_tos'), + $db->quote('mokowaas_offline'), $db->quote('com_mokowaas'), $db->quote('mod_mokowaas_cpanel'), $db->quote('mokowaasdemo'), -- 2.52.0 From fe87e9038ad5ee8e82c3b0b030505a6a43174540 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 15:44:32 -0500 Subject: [PATCH 041/142] feat: Akeeba Ticket System importer Auto-detects ATS tables (#__ats_tickets, #__ats_posts, #__ats_cannedreplies) and shows an import button on the helpdesk ticket list with counts. Imports: - Tickets: maps ATS status (O/P/C) to MokoWaaS statuses, priority 1-5 to low/normal/high/urgent, preserves created_by/assigned_to/dates - Posts: first post becomes ticket body, subsequent posts become replies - Canned replies: imported with title and body (HTML stripped) - Skips duplicates on re-import (idempotent) ACL enforced: requires mokowaas.tickets permission. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/Controller/DisplayController.php | 16 ++ .../admin/src/Model/TicketsModel.php | 202 ++++++++++++++++++ .../admin/src/View/Tickets/HtmlView.php | 2 + .../admin/tmpl/tickets/default.php | 42 +++- 4 files changed, 256 insertions(+), 6 deletions(-) diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index c20a314..b0f2458 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -226,6 +226,22 @@ class DisplayController extends BaseController )); } + // ================================================================== + // ATS Import + // ================================================================== + + public function importAts() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + if (!$this->checkAcl('mokowaas.tickets')) + { + $this->jsonForbidden(); + } + + $this->jsonResponse($this->getModel('Tickets')->importFromAts()); + } + // ================================================================== // Helpers // ================================================================== diff --git a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php index c4245d6..8bad035 100644 --- a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php @@ -350,4 +350,206 @@ class TicketsModel extends BaseDatabaseModel return $db->loadObjectList() ?: []; } + + // ================================================================== + // Akeeba Ticket System Importer + // ================================================================== + + /** + * Check if ATS tables exist and return counts. + */ + public function checkAtsAvailable(): ?object + { + $db = $this->getDatabase(); + + try + { + $db->setQuery('SELECT COUNT(*) FROM #__ats_tickets'); + $tickets = (int) $db->loadResult(); + + $db->setQuery('SELECT COUNT(*) FROM #__ats_posts'); + $posts = (int) $db->loadResult(); + + $db->setQuery('SELECT COUNT(*) FROM #__ats_cannedreplies'); + $canned = (int) $db->loadResult(); + + return (object) ['tickets' => $tickets, 'posts' => $posts, 'canned' => $canned]; + } + catch (\Throwable $e) + { + return null; + } + } + + /** + * Import tickets, replies, and canned responses from Akeeba Ticket System. + */ + public function importFromAts(): array + { + $db = $this->getDatabase(); + $results = ['tickets' => 0, 'replies' => 0, 'canned' => 0, 'errors' => []]; + + try + { + // Status mapping: ATS → MokoWaaS + $statusMap = [ + 'O' => 'open', // Open + 'P' => 'in_progress', // Pending (staff action needed) + 'C' => 'closed', // Closed + ]; + // Numeric statuses 1-99 are custom — map to open + for ($i = 1; $i <= 99; $i++) + { + $statusMap[(string) $i] = 'open'; + } + + // Priority mapping: ATS uses 1-5, we use enum + $priorityMap = [ + 1 => 'low', + 2 => 'low', + 3 => 'normal', + 4 => 'high', + 5 => 'urgent', + ]; + + // Category mapping: ATS uses Joomla categories, map catid to our category + // Default all to General Support (1) — admin can reassign later + $defaultCategory = 1; + + // Import canned replies first + $db->setQuery('SELECT * FROM #__ats_cannedreplies WHERE enabled = 1 ORDER BY ordering'); + $atsCanned = $db->loadObjectList() ?: []; + + foreach ($atsCanned as $c) + { + $exists = $db->setQuery( + $db->getQuery(true) + ->select('COUNT(*)') + ->from('#__mokowaas_ticket_canned') + ->where($db->quoteName('title') . ' = ' . $db->quote($c->title)) + )->loadResult(); + + if ((int) $exists > 0) + { + continue; + } + + $row = (object) [ + 'title' => $c->title, + 'body' => strip_tags($c->reply ?? ''), + 'category_id' => null, + 'ordering' => (int) ($c->ordering ?? 0), + ]; + $db->insertObject('#__mokowaas_ticket_canned', $row, 'id'); + $results['canned']++; + } + + // Import tickets + $db->setQuery('SELECT * FROM #__ats_tickets ORDER BY id'); + $atsTickets = $db->loadObjectList() ?: []; + + $ticketIdMap = []; // ATS id → MokoWaaS id + + foreach ($atsTickets as $t) + { + // Skip if already imported (check by subject + created_by + created) + $exists = $db->setQuery( + $db->getQuery(true) + ->select('COUNT(*)') + ->from('#__mokowaas_tickets') + ->where($db->quoteName('subject') . ' = ' . $db->quote($t->title)) + ->where($db->quoteName('created_by') . ' = ' . (int) $t->created_by) + )->loadResult(); + + if ((int) $exists > 0) + { + continue; + } + + $status = $statusMap[$t->status] ?? 'open'; + $priority = $priorityMap[(int) $t->priority] ?? 'normal'; + + $row = (object) [ + 'subject' => $t->title, + 'body' => '', + 'status' => $status, + 'priority' => $priority, + 'category_id' => $defaultCategory, + 'created_by' => (int) $t->created_by, + 'assigned_to' => (int) $t->assigned_to ?: null, + 'created' => $t->created ?: Factory::getDate()->toSql(), + 'modified' => $t->modified, + 'resolved' => $status === 'closed' ? ($t->modified ?: $t->created) : null, + 'closed' => $status === 'closed' ? ($t->modified ?: $t->created) : null, + 'sla_responded' => 1, + ]; + + $db->insertObject('#__mokowaas_tickets', $row, 'id'); + $ticketIdMap[(int) $t->id] = (int) $row->id; + $results['tickets']++; + } + + // Import posts (replies) + $db->setQuery('SELECT * FROM #__ats_posts ORDER BY id'); + $atsPosts = $db->loadObjectList() ?: []; + + foreach ($atsPosts as $p) + { + $newTicketId = $ticketIdMap[(int) $p->ticket_id] ?? null; + + if (!$newTicketId) + { + continue; + } + + // First post of a ticket is usually the ticket body — update the ticket + if (empty($results['first_post_' . $p->ticket_id])) + { + $results['first_post_' . $p->ticket_id] = true; + $body = strip_tags($p->content_html ?? ''); + $db->setQuery( + $db->getQuery(true) + ->update('#__mokowaas_tickets') + ->set($db->quoteName('body') . ' = ' . $db->quote($body)) + ->where($db->quoteName('id') . ' = ' . $newTicketId) + )->execute(); + + continue; + } + + $row = (object) [ + 'ticket_id' => $newTicketId, + 'user_id' => (int) $p->created_by, + 'body' => strip_tags($p->content_html ?? ''), + 'is_internal' => 0, + 'created' => $p->created ?: Factory::getDate()->toSql(), + ]; + + $db->insertObject('#__mokowaas_ticket_replies', $row, 'id'); + $results['replies']++; + } + + // Clean up temp tracking keys + foreach (array_keys($results) as $k) + { + if (str_starts_with($k, 'first_post_')) + { + unset($results[$k]); + } + } + + return [ + 'success' => true, + 'message' => sprintf( + 'Imported %d tickets, %d replies, %d canned responses from Akeeba Ticket System.', + $results['tickets'], $results['replies'], $results['canned'] + ), + 'counts' => $results, + ]; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Import failed: ' . $e->getMessage()]; + } + } } diff --git a/src/packages/com_mokowaas/admin/src/View/Tickets/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Tickets/HtmlView.php index 387d575..98cacb9 100644 --- a/src/packages/com_mokowaas/admin/src/View/Tickets/HtmlView.php +++ b/src/packages/com_mokowaas/admin/src/View/Tickets/HtmlView.php @@ -21,6 +21,7 @@ class HtmlView extends BaseHtmlView protected $categories = []; protected $statusCounts; protected $overdue = []; + protected $atsAvailable = null; public function display($tpl = null) { @@ -37,6 +38,7 @@ class HtmlView extends BaseHtmlView $this->categories = $model->getCategories(); $this->statusCounts = $model->getStatusCounts(); $this->overdue = $model->getOverdueTickets(); + $this->atsAvailable = $model->checkAtsAvailable(); $this->addToolbar(); diff --git a/src/packages/com_mokowaas/admin/tmpl/tickets/default.php b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php index f5cfa0f..8b3a241 100644 --- a/src/packages/com_mokowaas/admin/tmpl/tickets/default.php +++ b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php @@ -6,11 +6,12 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; use Joomla\CMS\Session\Session; -$tickets = $this->tickets; -$categories = $this->categories; -$counts = $this->statusCounts; -$overdue = $this->overdue; -$token = Session::getFormToken(); +$tickets = $this->tickets; +$categories = $this->categories; +$counts = $this->statusCounts; +$overdue = $this->overdue; +$atsAvailable = $this->atsAvailable; +$token = Session::getFormToken(); $statusBadge = [ 'open' => 'bg-primary', @@ -43,10 +44,19 @@ $priorityBadge = [
-
+
+ + +
@@ -178,4 +188,24 @@ document.querySelector('#newTicketModal form').addEventListener('submit', functi else { Joomla.renderMessages({error:[d.message]}); } }); }); + +// ATS Import +var atsBtn = document.getElementById('btn-import-ats'); +if (atsBtn) { + atsBtn.addEventListener('click', function() { + var el = this; + if (!confirm('Import ' + el.dataset.tickets + ' tickets and ' + el.dataset.posts + ' posts from Akeeba Ticket System? Duplicates will be skipped.')) return; + el.disabled = true; + el.textContent = ' Importing...'; + var fd = new FormData(); + fd.append(el.dataset.token, '1'); + fetch(el.dataset.url, {method:'POST', body:fd, headers:{'X-Requested-With':'XMLHttpRequest'}}) + .then(function(r){return r.json()}) + .then(function(d){ + if (d.success) { Joomla.renderMessages({message:[d.message]}); location.reload(); } + else { Joomla.renderMessages({error:[d.message]}); el.disabled = false; el.textContent = 'Import Failed - Retry'; } + }) + .catch(function(){ Joomla.renderMessages({error:['Network error']}); el.disabled = false; }); + }); +} -- 2.52.0 From cb33aabb0cdff07e68daa78097a1d94916a9e99a Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:47:38 +0000 Subject: [PATCH 042/142] chore(version): auto-bump 02.32.34 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 47 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index d3a7e7d..5237c57 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.33 + 02.32.34 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 4dbf0bb..3bdc892 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.33 +# VERSION: 02.32.34 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 43f34e9..0bb56d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.33 + VERSION: 02.32.34 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index befa814..fefb482 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 8304560..0082fb4 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 1aec51f..479fbf9 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.33 + VERSION: 02.32.34 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index d08bd8f..b17f8f1 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 8158890..3aff444 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.33 +VERSION: 02.32.34 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 96c04f3..224ae8d 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.33) +# MokoWaaS Build Guide (VERSION: 02.32.34) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 09dc36f..b61a09a 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.33) +# MokoWaaS Configuration Guide (VERSION: 02.32.34) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 222042e..c3b7089 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.33) +# MokoWaaS Installation Guide (VERSION: 02.32.34) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index e10d797..47a6526 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.33) +# MokoWaaS Operations Guide (VERSION: 02.32.34) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 04159b7..02b43fc 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.33) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.34) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index abf41a1..ac69218 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.33) +# MokoWaaS Testing Guide (VERSION: 02.32.34) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index df5dee9..afc88a0 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.33) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.34) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 4c13724..be42a00 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.33) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.34) ## Introduction diff --git a/docs/index.md b/docs/index.md index c1d3698..ea98f2f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.33 + VERSION: 02.32.34 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.33) +# MokoWaaS Documentation Index (VERSION: 02.32.34) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 4c97781..def1b26 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.33 + VERSION: 02.32.34 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.33) +# MokoWaaS Plugin Overview (VERSION: 02.32.34) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 20a5b6f..46c3a5b 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.33 +VERSION: 02.32.34 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 988f3e4..e13f7fe 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 + 02.32.34 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index ff6b3d0..cba969d 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 + 02.32.34 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index dc028ff..cc60b08 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.33 + * VERSION: 02.32.34 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 573f09c..fe6ff55 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.33 + * VERSION: 02.32.34 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 0adfe81..9692962 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.33 + * VERSION: 02.32.34 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index c73f5ae..6ff7563 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.33 + * VERSION: 02.32.34 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index ad84464..ef83703 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.33 + * VERSION: 02.32.34 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index f1fb382..8d78537 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.33 + * VERSION: 02.32.34 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index a43708f..0d52514 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.33 + * VERSION: 02.32.34 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index c71888c..1975898 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.33 + * VERSION: 02.32.34 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 7067879..d01ce79 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.33 + * VERSION: 02.32.34 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 2745bd0..a73e2c3 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.33 + * VERSION: 02.32.34 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index ec16710..6a75b9b 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 + 02.32.34 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 405d3cc..ab386cb 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.33 + * VERSION: 02.32.34 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 0a4a666..df6cf99 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.33 + * VERSION: 02.32.34 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index efd3436..8ea6bfe 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 + 02.32.34 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index fa25e64..0e4b653 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 + 02.32.34 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index d387fd2..bd14b21 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 + 02.32.34 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index b24656f..a549677 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.32 + 02.32.34 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 075c18a..936fca9 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 + 02.32.34 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index bfdffe8..c5b381a 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 - 02.32.33 + 02.32.34 + 02.32.34 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 4c7a9ae..19c50ea 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 + 02.32.34 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index d79d6c0..429d14a 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 - 02.32.33 + 02.32.34 + 02.32.34 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index ca74748..c19283c 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.33 - 02.32.33 + 02.32.34 + 02.32.34 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 6398ec9..b0690f0 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.33 + * VERSION: 02.32.34 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index d46f41d..e53f6c5 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.33 + * VERSION: 02.32.34 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 95416c5..3a0e1c2 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.33 + 02.32.34 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index a48eb53..e616274 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 883e7c72f04156003ca8d65fadb34ae6ed98a20f Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:47:40 +0000 Subject: [PATCH 043/142] chore: update development channel 02.32.34 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index e616274..cd0d4e9 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.33-dev + 02.32.34-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.33-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.34-dev.zip - a337d676828192b56c70354b2bd2017326be8b24e4f7e0cebc76efa45b908614 + 631e2a56989418caee3d0bfdecad58adbe9a2a466bae5d0d3e06fd00cfd74ec4 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From ed138fdc5750a240a0639870fd3e49acf3842dc8 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 15:51:22 -0500 Subject: [PATCH 044/142] feat: Akeeba Admin Tools + Ticket System importers with auto-disable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New ImportModel with two importers: Admin Tools Importer: - Reads #__admintools_wafconfig → maps WAF shields, admin secret, session timeout, template blocking to firewall plugin params - Reads #__admintools_storage → maps server signature, HSTS, GZip, expires, ETag, www redirect, directory listing to htaccess options - Reads #__admintools_ipblock → merges into firewall IP deny list - Disables com_admintools + all admintools plugins after import Akeeba Ticket System Importer: - Imports tickets with status/priority mapping - First post becomes ticket body, rest become replies - Imports canned replies - Disables com_ats + all ATS plugins after import Dashboard shows blue import banner when Akeeba data is detected. Both importers require core.admin (Super Users only). Idempotent — safe to run multiple times. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/Controller/DisplayController.php | 16 +- .../admin/src/Model/ImportModel.php | 617 ++++++++++++++++++ .../admin/src/View/Dashboard/HtmlView.php | 5 + .../admin/tmpl/dashboard/default.php | 24 + .../com_mokowaas/media/js/dashboard.js | 22 + 5 files changed, 682 insertions(+), 2 deletions(-) create mode 100644 src/packages/com_mokowaas/admin/src/Model/ImportModel.php diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index b0f2458..fe5e1a8 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -227,7 +227,7 @@ class DisplayController extends BaseController } // ================================================================== - // ATS Import + // Importers // ================================================================== public function importAts() @@ -239,7 +239,19 @@ class DisplayController extends BaseController $this->jsonForbidden(); } - $this->jsonResponse($this->getModel('Tickets')->importFromAts()); + $this->jsonResponse($this->getModel('Import')->importAts()); + } + + public function importAdminTools() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + if (!$this->checkAcl('core.admin')) + { + $this->jsonForbidden(); + } + + $this->jsonResponse($this->getModel('Import')->importAdminTools()); } // ================================================================== diff --git a/src/packages/com_mokowaas/admin/src/Model/ImportModel.php b/src/packages/com_mokowaas/admin/src/Model/ImportModel.php new file mode 100644 index 0000000..660351a --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/Model/ImportModel.php @@ -0,0 +1,617 @@ +getDatabase(); + + try + { + $result = (object) [ + 'component' => false, + 'waf_config' => false, + 'storage' => false, + 'ip_blocks' => 0, + ]; + + // Check component + $db->setQuery("SELECT COUNT(*) FROM #__extensions WHERE element = 'com_admintools' AND type = 'component'"); + $result->component = (int) $db->loadResult() > 0; + + // Check WAF config table + $db->setQuery('SHOW TABLES LIKE ' . $db->quote('%admintools_wafconfig%')); + + if ($db->loadResult()) + { + $result->waf_config = true; + $db->setQuery('SELECT COUNT(*) FROM #__admintools_wafconfig'); + $result->waf_settings = (int) $db->loadResult(); + } + + // Check storage table + $db->setQuery('SHOW TABLES LIKE ' . $db->quote('%admintools_storage%')); + + if ($db->loadResult()) + { + $result->storage = true; + } + + // Check IP blocklist + $db->setQuery('SHOW TABLES LIKE ' . $db->quote('%admintools_ipblock%')); + + if ($db->loadResult()) + { + $db->setQuery('SELECT COUNT(*) FROM #__admintools_ipblock'); + $result->ip_blocks = (int) $db->loadResult(); + } + + // Only available if at least one data source exists + if (!$result->component && !$result->waf_config && !$result->storage) + { + return null; + } + + return $result; + } + catch (\Throwable $e) + { + return null; + } + } + + /** + * Import Admin Tools settings into MokoWaaS. + */ + public function importAdminTools(): array + { + $db = $this->getDatabase(); + $results = ['firewall' => 0, 'htaccess' => 0, 'ip_blocks' => 0, 'disabled' => false]; + + try + { + // ============================================================ + // 1. Import WAF Config → Firewall plugin params + // ============================================================ + $wafSettings = $this->readWafConfig($db); + $firewallParams = $this->mapWafToFirewall($wafSettings); + + if (!empty($firewallParams)) + { + $this->mergePluginParams('mokowaas_firewall', 'system', $firewallParams); + $results['firewall'] = \count($firewallParams); + } + + // ============================================================ + // 2. Import htaccess settings → component htaccess options + // ============================================================ + $htaccessSettings = $this->readHtaccessConfig($db); + $htaccessOptions = $this->mapToHtaccess($htaccessSettings, $wafSettings); + + if (!empty($htaccessOptions)) + { + $this->mergeComponentHtaccessOptions($htaccessOptions); + $results['htaccess'] = \count($htaccessOptions); + } + + // ============================================================ + // 3. Import IP blocklist → Firewall IP deny list + // ============================================================ + $ipBlocks = $this->readIpBlocklist($db); + + if (!empty($ipBlocks)) + { + $this->mergeIpBlocklist($ipBlocks); + $results['ip_blocks'] = \count($ipBlocks); + } + + // ============================================================ + // 4. Disable Admin Tools + // ============================================================ + $this->disableAdminTools($db); + $results['disabled'] = true; + + return [ + 'success' => true, + 'message' => \sprintf( + 'Imported %d firewall settings, %d htaccess options, %d blocked IPs from Admin Tools. Admin Tools has been disabled.', + $results['firewall'], $results['htaccess'], $results['ip_blocks'] + ), + 'counts' => $results, + ]; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Import failed: ' . $e->getMessage()]; + } + } + + /** + * Read WAF config from #__admintools_wafconfig. + */ + private function readWafConfig($db): array + { + try + { + $db->setQuery('SHOW TABLES LIKE ' . $db->quote('%admintools_wafconfig%')); + + if (!$db->loadResult()) + { + return []; + } + + $db->setQuery('SELECT * FROM #__admintools_wafconfig'); + $rows = $db->loadObjectList() ?: []; + + $config = []; + + foreach ($rows as $row) + { + $key = $row->key ?? $row->option ?? ''; + + if (!empty($key)) + { + $config[$key] = $row->value ?? ''; + } + } + + return $config; + } + catch (\Throwable $e) + { + return []; + } + } + + /** + * Read htaccess/server config from #__admintools_storage. + */ + private function readHtaccessConfig($db): array + { + try + { + $db->setQuery('SHOW TABLES LIKE ' . $db->quote('%admintools_storage%')); + + if (!$db->loadResult()) + { + return []; + } + + $db->setQuery('SELECT * FROM #__admintools_storage'); + $rows = $db->loadObjectList() ?: []; + + $config = []; + + foreach ($rows as $row) + { + $key = $row->key ?? ''; + + if (!empty($key)) + { + $config[$key] = $row->value ?? ''; + } + } + + return $config; + } + catch (\Throwable $e) + { + return []; + } + } + + /** + * Read IP blocklist from #__admintools_ipblock. + */ + private function readIpBlocklist($db): array + { + try + { + $db->setQuery('SHOW TABLES LIKE ' . $db->quote('%admintools_ipblock%')); + + if (!$db->loadResult()) + { + return []; + } + + $db->setQuery('SELECT ip FROM #__admintools_ipblock'); + + return $db->loadColumn() ?: []; + } + catch (\Throwable $e) + { + return []; + } + } + + /** + * Map Admin Tools WAF config to MokoWaaS firewall plugin params. + */ + private function mapWafToFirewall(array $waf): array + { + $params = []; + + // WAF shields + if (isset($waf['sqlishield'])) + { + $params['waf_sqli'] = (int) $waf['sqlishield'] ? 1 : 0; + } + + if (isset($waf['antispam'])) + { + $params['waf_xss'] = (int) $waf['antispam'] ? 1 : 0; + } + + if (isset($waf['muashield'])) + { + $params['waf_mua'] = (int) $waf['muashield'] ? 1 : 0; + } + + if (isset($waf['rfishield'])) + { + $params['waf_rfi'] = (int) $waf['rfishield'] ? 1 : 0; + } + + if (isset($waf['dfishield'])) + { + $params['waf_dfi'] = (int) $waf['dfishield'] ? 1 : 0; + } + + if (isset($waf['uploadshield'])) + { + // Map to our block_direct_php + $params['block_direct_php'] = (int) $waf['uploadshield'] ? 1 : 0; + } + + // Admin secret URL + if (!empty($waf['adminpw'])) + { + $params['admin_secret'] = $waf['adminpw']; + } + + // Block frontend super user login + if (isset($waf['nofesalogin'])) + { + $params['block_frontend_superuser'] = (int) $waf['nofesalogin'] ? 1 : 0; + } + + // Session timeout + if (!empty($waf['sessionshield']) && !empty($waf['session_timeout'])) + { + $params['admin_session_timeout'] = (int) $waf['session_timeout']; + } + + // Template switch blocking + if (isset($waf['tmpl'])) + { + $params['block_template_switch'] = (int) $waf['tmpl'] ? 1 : 0; + } + + // Blocked sensitive files + if (isset($waf['hogfiles'])) + { + $params['block_sensitive_files'] = (int) $waf['hogfiles'] ? 1 : 0; + } + + return $params; + } + + /** + * Map Admin Tools config to MokoWaaS htaccess maker options. + */ + private function mapToHtaccess(array $storage, array $waf): array + { + $opts = []; + + // Server signature + if (isset($waf['serversignature']) || isset($storage['serversignature'])) + { + $opts['disable_server_signature'] = 1; + } + + // Clickjacking + if (isset($waf['clickjacking']) || isset($storage['xframeoptions'])) + { + $opts['prevent_clickjacking'] = 1; + } + + // HSTS + if (!empty($storage['hstsheader']) || !empty($waf['hstsheader'])) + { + $opts['hsts_enabled'] = 1; + + if (!empty($storage['hstsmaxage'])) + { + $opts['hsts_max_age'] = (int) $storage['hstsmaxage']; + } + } + + // GZip + if (isset($storage['gzipcompression'])) + { + $opts['enable_gzip'] = (int) $storage['gzipcompression'] ? 1 : 0; + } + + // Expiration + if (isset($storage['exptime'])) + { + $opts['enable_expires'] = (int) $storage['exptime'] ? 1 : 0; + } + + // ETag + if (isset($storage['etagtype'])) + { + $opts['etag_control'] = ($storage['etagtype'] === 'none') ? 1 : 0; + } + + // Redirect www / non-www + if (!empty($storage['wwwredir'])) + { + $map = ['www' => 'www', 'nowww' => 'non-www']; + $opts['www_redirect'] = $map[$storage['wwwredir']] ?? 'off'; + } + + // Directory listing + if (isset($storage['nodirlisting'])) + { + $opts['disable_directory_listing'] = (int) $storage['nodirlisting'] ? 1 : 0; + } + + // Block PHP in uploads + if (isset($storage['phpuploadexec'])) + { + $opts['block_php_in_uploads'] = (int) $storage['phpuploadexec'] ? 1 : 0; + } + + // Sensitive files + if (isset($storage['hogfiles'])) + { + $opts['block_sensitive_files'] = (int) $storage['hogfiles'] ? 1 : 0; + } + + return $opts; + } + + /** + * Merge params into a plugin's existing params. + */ + private function mergePluginParams(string $element, string $folder, array $newParams): void + { + $db = $this->getDatabase(); + + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($element)) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote($folder)); + $db->setQuery($query); + $current = new Registry($db->loadResult() ?? '{}'); + + foreach ($newParams as $key => $value) + { + $current->set($key, $value); + } + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote($current->toString())) + ->where($db->quoteName('element') . ' = ' . $db->quote($element)) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote($folder)) + )->execute(); + } + + /** + * Merge htaccess options into the component params. + */ + private function mergeComponentHtaccessOptions(array $options): void + { + $db = $this->getDatabase(); + + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')); + $db->setQuery($query); + $params = new Registry($db->loadResult() ?? '{}'); + + $htaccess = (array) json_decode(json_encode($params->get('htaccess', new \stdClass())), true); + + foreach ($options as $key => $value) + { + $htaccess[$key] = $value; + } + + $params->set('htaccess', $htaccess); + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote($params->toString())) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')) + )->execute(); + } + + /** + * Merge imported IPs into the firewall IP blocklist. + */ + private function mergeIpBlocklist(array $ips): void + { + $db = $this->getDatabase(); + + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('mokowaas_firewall')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('system')); + $db->setQuery($query); + $params = new Registry($db->loadResult() ?? '{}'); + + $blocklist = json_decode($params->get('ip_blocklist', '[]'), true) ?: []; + + $existingIps = array_column($blocklist, 'ip'); + + foreach ($ips as $ip) + { + $ip = trim($ip); + + if (empty($ip) || \in_array($ip, $existingIps, true)) + { + continue; + } + + $blocklist[] = [ + 'ip' => $ip, + 'enabled' => '1', + 'label' => 'Imported from Admin Tools', + ]; + } + + $params->set('ip_blocklist', json_encode($blocklist)); + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote($params->toString())) + ->where($db->quoteName('element') . ' = ' . $db->quote('mokowaas_firewall')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) + )->execute(); + } + + /** + * Disable Admin Tools component and plugins. + */ + private function disableAdminTools($db): void + { + // Disable component + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('enabled') . ' = 0') + ->where($db->quoteName('element') . ' = ' . $db->quote('com_admintools')) + )->execute(); + + // Disable all Admin Tools plugins + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('enabled') . ' = 0') + ->where($db->quoteName('element') . ' LIKE ' . $db->quote('admintools%')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + )->execute(); + + Log::add('Admin Tools component and plugins disabled after MokoWaaS import', Log::INFO, 'mokowaas'); + } + + // ================================================================== + // Akeeba Ticket System Import + // ================================================================== + + /** + * Check if ATS tables exist. + */ + public function checkAtsAvailable(): ?object + { + $db = $this->getDatabase(); + + try + { + $db->setQuery('SHOW TABLES LIKE ' . $db->quote('%ats_tickets%')); + + if (!$db->loadResult()) + { + return null; + } + + $db->setQuery('SELECT COUNT(*) FROM #__ats_tickets'); + $tickets = (int) $db->loadResult(); + + $db->setQuery('SELECT COUNT(*) FROM #__ats_posts'); + $posts = (int) $db->loadResult(); + + return (object) ['tickets' => $tickets, 'posts' => $posts]; + } + catch (\Throwable $e) + { + return null; + } + } + + /** + * Import from Akeeba Ticket System and disable it. + */ + public function importAts(): array + { + // Delegate to TicketsModel for the actual import + $ticketsModel = new TicketsModel(); + $result = $ticketsModel->importFromAts(); + + if (!$result['success']) + { + return $result; + } + + // Disable ATS after successful import + try + { + $db = $this->getDatabase(); + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('enabled') . ' = 0') + ->where($db->quoteName('element') . ' = ' . $db->quote('com_ats')) + )->execute(); + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('enabled') . ' = 0') + ->where($db->quoteName('element') . ' LIKE ' . $db->quote('ats%')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + )->execute(); + + $result['message'] .= ' Akeeba Ticket System has been disabled.'; + Log::add('Akeeba Ticket System disabled after MokoWaaS import', Log::INFO, 'mokowaas'); + } + catch (\Throwable $e) + { + $result['message'] .= ' Warning: could not disable ATS: ' . $e->getMessage(); + } + + return $result; + } +} diff --git a/src/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php index 323febf..8638da9 100644 --- a/src/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php +++ b/src/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php @@ -35,6 +35,11 @@ class HtmlView extends BaseHtmlView $this->checkedOutItems = $model->getCheckedOutItems(); $this->wafBlocks = $model->getRecentWafBlocks(5); + // Check for importable Akeeba data + $importModel = $this->getModel('Import'); + $this->adminToolsAvailable = $importModel->checkAdminToolsAvailable(); + $this->atsAvailable = $importModel->checkAtsAvailable(); + $this->addToolbar(); $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); diff --git a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php index 4728a39..4da5004 100644 --- a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php +++ b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php @@ -19,6 +19,8 @@ $siteInfo = $this->siteInfo; $plugins = $this->plugins; $recentLogins = $this->recentLogins; $pendingUpdates = $this->pendingUpdates; +$adminToolsAvail = $this->adminToolsAvailable ?? null; +$atsAvail = $this->atsAvailable ?? null; $checkedOut = $this->checkedOutItems; $wafBlocks = $this->wafBlocks; $token = Session::getFormToken(); @@ -66,6 +68,28 @@ $categoryOrder = ['core', 'security', 'monitoring', 'content', 'tools', 'api'];
+ + +
+ + Akeeba data detected — import into MokoWaaS: + + + + + + +
+ +
diff --git a/src/packages/com_mokowaas/media/js/dashboard.js b/src/packages/com_mokowaas/media/js/dashboard.js index df8433e..e6aa671 100644 --- a/src/packages/com_mokowaas/media/js/dashboard.js +++ b/src/packages/com_mokowaas/media/js/dashboard.js @@ -109,4 +109,26 @@ document.addEventListener('DOMContentLoaded', function () { }); }); } + + // Akeeba import buttons + ['btn-import-admintools', 'btn-import-ats-dash'].forEach(function(id) { + var btn = document.getElementById(id); + if (!btn) return; + btn.addEventListener('click', function() { + var el = this; + if (!confirm('Import Akeeba data into MokoWaaS? Akeeba extensions will be disabled after import.')) return; + el.disabled = true; + var origText = el.textContent; + el.textContent = ' Importing...'; + var fd = new FormData(); + fd.append(el.dataset.token, '1'); + fetch(el.dataset.url, {method:'POST', body:fd, headers:{'X-Requested-With':'XMLHttpRequest'}}) + .then(function(r){return r.json()}) + .then(function(d){ + if (d.success) { Joomla.renderMessages({message:[d.message]}); setTimeout(function(){location.reload()}, 2000); } + else { Joomla.renderMessages({error:[d.message]}); el.disabled = false; el.textContent = origText; } + }) + .catch(function(){ Joomla.renderMessages({error:['Network error']}); el.disabled = false; el.textContent = origText; }); + }); + }); }); -- 2.52.0 From 23d6a1ad44edb35712b132846951f09f47ef2ab0 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:51:45 +0000 Subject: [PATCH 045/142] chore(version): auto-bump 02.32.35 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 47 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 5237c57..2572b83 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.34 + 02.32.35 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 3bdc892..cb6bbab 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.34 +# VERSION: 02.32.35 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bb56d8..b9c76fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.34 + VERSION: 02.32.35 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index fefb482..cae6740 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 0082fb4..37185d1 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 479fbf9..15e4be4 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.34 + VERSION: 02.32.35 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index b17f8f1..e3e2e3d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 3aff444..b4ffecc 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.34 +VERSION: 02.32.35 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 224ae8d..cc0002f 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.34) +# MokoWaaS Build Guide (VERSION: 02.32.35) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index b61a09a..07c0344 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.34) +# MokoWaaS Configuration Guide (VERSION: 02.32.35) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index c3b7089..e7dbaae 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.34) +# MokoWaaS Installation Guide (VERSION: 02.32.35) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 47a6526..8243c0f 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.34) +# MokoWaaS Operations Guide (VERSION: 02.32.35) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 02b43fc..954545a 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.34) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.35) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index ac69218..1152078 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.34) +# MokoWaaS Testing Guide (VERSION: 02.32.35) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index afc88a0..25902a8 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.34) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.35) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index be42a00..fe439e9 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.34) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.35) ## Introduction diff --git a/docs/index.md b/docs/index.md index ea98f2f..83dea72 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.34 + VERSION: 02.32.35 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.34) +# MokoWaaS Documentation Index (VERSION: 02.32.35) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index def1b26..784df7d 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.34 + VERSION: 02.32.35 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.34) +# MokoWaaS Plugin Overview (VERSION: 02.32.35) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 46c3a5b..083c078 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.34 +VERSION: 02.32.35 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index e13f7fe..7ced6b5 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 + 02.32.35 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index cba969d..112c94a 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 + 02.32.35 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index cc60b08..73785e8 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.34 + * VERSION: 02.32.35 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index fe6ff55..dcc2e19 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.34 + * VERSION: 02.32.35 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 9692962..aabbf7d 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.34 + * VERSION: 02.32.35 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 6ff7563..cdeb1db 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.34 + * VERSION: 02.32.35 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index ef83703..9265a9b 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.34 + * VERSION: 02.32.35 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 8d78537..a1da112 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.34 + * VERSION: 02.32.35 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 0d52514..36814c1 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.34 + * VERSION: 02.32.35 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 1975898..8f3ff5f 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.34 + * VERSION: 02.32.35 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index d01ce79..a583d77 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.34 + * VERSION: 02.32.35 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index a73e2c3..f4b62ef 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.34 + * VERSION: 02.32.35 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 6a75b9b..a42360a 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 + 02.32.35 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index ab386cb..69e2247 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.34 + * VERSION: 02.32.35 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index df6cf99..cc943fb 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.34 + * VERSION: 02.32.35 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 8ea6bfe..85a62e4 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 + 02.32.35 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 0e4b653..79de377 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 + 02.32.35 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index bd14b21..25e1883 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 + 02.32.35 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index a549677..ebf3832 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 + 02.32.35 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 936fca9..74a5c23 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 + 02.32.35 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index c5b381a..2b012e1 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 - 02.32.34 + 02.32.35 + 02.32.35 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 19c50ea..c8fbe7b 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 + 02.32.35 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 429d14a..edb0525 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 - 02.32.34 + 02.32.35 + 02.32.35 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index c19283c..1486d32 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.34 - 02.32.34 + 02.32.35 + 02.32.35 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index b0690f0..a50ba24 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.34 + * VERSION: 02.32.35 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index e53f6c5..9b0f543 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.34 + * VERSION: 02.32.35 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 3a0e1c2..f7b6e62 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.34 + 02.32.35 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index cd0d4e9..1407ffc 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From eab0ed1b807923338b4d824126a16dea4e98ee5d Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 20:51:48 +0000 Subject: [PATCH 046/142] chore: update development channel 02.32.35 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 1407ffc..e2d4662 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.34-dev + 02.32.35-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.34-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.35-dev.zip - 631e2a56989418caee3d0bfdecad58adbe9a2a466bae5d0d3e06fd00cfd74ec4 + 6dc0bc62259de6bd62963a7d663e2aa80d5c0a69a1fd430f5a4a489f794afe34 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From a2091b1a672825c4b206c8a20490845acb51f59a Mon Sep 17 00:00:00 2001 From: Moko Consulting Date: Tue, 2 Jun 2026 21:33:04 +0000 Subject: [PATCH 047/142] chore(ci): sync CI issue reporter from Template-Joomla --- .mokogitea/workflows/repo-health.yml | 1586 +++++++++++++------------- 1 file changed, 817 insertions(+), 769 deletions(-) diff --git a/.mokogitea/workflows/repo-health.yml b/.mokogitea/workflows/repo-health.yml index b619d89..b23d971 100644 --- a/.mokogitea/workflows/repo-health.yml +++ b/.mokogitea/workflows/repo-health.yml @@ -1,769 +1,817 @@ -# ============================================================================ -# Copyright (C) 2025 Moko Consulting -# -# This file is part of a Moko Consulting project. -# -# SPDX-License-Identifier: GPL-3.0-or-later -# -# FILE INFORMATION -# DEFGROUP: Gitea.Workflow -# INGROUP: moko-platform.Validation -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform -# PATH: /templates/workflows/joomla/repo_health.yml.template -# VERSION: 09.23.00 -# BRIEF: Enforces repository guardrails by validating release configuration, scripts governance, tooling availability, and core repository health artifacts. -# ============================================================================ - -name: "Generic: Repo Health" - -defaults: - run: - shell: bash - -on: - workflow_dispatch: - inputs: - profile: - description: 'Validation profile: all, release, scripts, or repo' - required: true - default: all - type: choice - options: - - all - - release - - scripts - - repo - pull_request: - push: - -permissions: - contents: read - -env: - # Release policy - Repository Variables Only - RELEASE_REQUIRED_REPO_VARS: RS_FTP_PATH_SUFFIX - RELEASE_OPTIONAL_REPO_VARS: DEV_FTP_SUFFIX - - # Scripts governance policy - SCRIPTS_REQUIRED_DIRS: - SCRIPTS_ALLOWED_DIRS: scripts,scripts/fix,scripts/lib,scripts/release,scripts/run,scripts/validate - - # Repo health policy - REPO_REQUIRED_ARTIFACTS: README.md,LICENSE,CHANGELOG.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,.mokogitea/workflows/ - REPO_OPTIONAL_FILES: SECURITY.md,GOVERNANCE.md,.editorconfig,.gitattributes,.gitignore,README.md,docs/ - REPO_DISALLOWED_DIRS: - REPO_DISALLOWED_FILES: TODO.md,todo.md - - # Extended checks toggles - EXTENDED_CHECKS: "true" - - # File / directory variables - DOCS_INDEX: docs/docs-index.md - SCRIPT_DIR: scripts - WORKFLOWS_DIR: .mokogitea/workflows - SHELLCHECK_PATTERN: '*.sh' - SPDX_FILE_GLOBS: '*.sh,*.php,*.js,*.ts,*.css,*.xml,*.yml,*.yaml' - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - -jobs: - access_check: - name: Access control - runs-on: ubuntu-latest - timeout-minutes: 10 - permissions: - contents: read - - outputs: - allowed: ${{ steps.perm.outputs.allowed }} - permission: ${{ steps.perm.outputs.permission }} - - steps: - - name: Check actor permission (admin only) - id: perm - env: - TOKEN: ${{ secrets.MOKOGITEA_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }} - REPO: ${{ github.repository }} - ACTOR: ${{ github.actor }} - run: | - set -euo pipefail - ALLOWED=false - PERMISSION=unknown - METHOD="" - - # Hardcoded authorized users — always allowed - case "$ACTOR" in - jmiller|gitea-actions[bot]) - ALLOWED=true - PERMISSION=admin - METHOD="hardcoded allowlist" - ;; - *) - # Detect platform and check permissions via API - API_BASE="${GITHUB_API_URL:-${GITEA_API_URL:-https://api.github.com}}" - RESP=$(curl -sf -H "Authorization: token ${TOKEN}" \ - "${API_BASE}/repos/${REPO}/collaborators/${ACTOR}/permission" 2>/dev/null || echo '{}') - PERMISSION=$(echo "$RESP" | grep -oP '"permission"\s*:\s*"\K[^"]+' || echo "unknown") - if [ "$PERMISSION" = "admin" ] || [ "$PERMISSION" = "maintain" ] || [ "$PERMISSION" = "owner" ]; then - ALLOWED=true - fi - METHOD="collaborator API" - ;; - esac - - echo "permission=${PERMISSION}" >> "$GITHUB_OUTPUT" - echo "allowed=${ALLOWED}" >> "$GITHUB_OUTPUT" - - { - echo "## Access Authorization" - echo "" - echo "| Field | Value |" - echo "|-------|-------|" - echo "| **Actor** | \`${ACTOR}\` |" - echo "| **Repository** | \`${REPO}\` |" - echo "| **Permission** | \`${PERMISSION}\` |" - echo "| **Method** | ${METHOD} |" - echo "| **Authorized** | ${ALLOWED} |" - echo "" - if [ "$ALLOWED" = "true" ]; then - echo "${ACTOR} authorized (${METHOD})" - else - echo "${ACTOR} is NOT authorized. Requires admin or maintain role." - fi - } >> "${GITHUB_STEP_SUMMARY}" - - - name: Deny execution when not permitted - if: ${{ steps.perm.outputs.allowed != 'true' }} - run: | - set -euo pipefail - printf '%s\n' 'ERROR: Access denied. Admin permission required.' >> "${GITHUB_STEP_SUMMARY}" - exit 1 - - release_config: - name: Release configuration - needs: access_check - if: ${{ needs.access_check.outputs.allowed == 'true' }} - runs-on: ubuntu-latest - timeout-minutes: 20 - permissions: - contents: read - - steps: - - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - with: - fetch-depth: 0 - - - name: Guardrails release vars - env: - PROFILE_RAW: ${{ github.event.inputs.profile }} - RS_FTP_PATH_SUFFIX: ${{ vars.RS_FTP_PATH_SUFFIX }} - DEV_FTP_SUFFIX: ${{ vars.DEV_FTP_SUFFIX }} - run: | - set -euo pipefail - - profile="${PROFILE_RAW:-all}" - case "${profile}" in - all|release|scripts|repo) ;; - *) - printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" - exit 1 - ;; - esac - - if [ "${profile}" = 'scripts' ] || [ "${profile}" = 'repo' ]; then - { - printf '%s\n' '### Release configuration (Repository Variables)' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' 'Status: SKIPPED' - printf '%s\n' 'Reason: profile excludes release validation' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 0 - fi - - IFS=',' read -r -a required <<< "${RELEASE_REQUIRED_REPO_VARS}" - IFS=',' read -r -a optional <<< "${RELEASE_OPTIONAL_REPO_VARS}" - - missing=() - missing_optional=() - - for k in "${required[@]}"; do - v="${!k:-}" - [ -z "${v}" ] && missing+=("${k}") - done - - for k in "${optional[@]}"; do - v="${!k:-}" - [ -z "${v}" ] && missing_optional+=("${k}") - done - - { - printf '%s\n' '### Release configuration (Repository Variables)' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' '| Variable | Status |' - printf '%s\n' '|---|---|' - printf '%s\n' "| RS_FTP_PATH_SUFFIX | ${RS_FTP_PATH_SUFFIX:-NOT SET} |" - printf '%s\n' "| DEV_FTP_SUFFIX | ${DEV_FTP_SUFFIX:-NOT SET} |" - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - - if [ "${#missing_optional[@]}" -gt 0 ]; then - { - printf '%s\n' '### Missing optional repository variables' - for m in "${missing_optional[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - if [ "${#missing[@]}" -gt 0 ]; then - { - printf '%s\n' '### Missing required repository variables' - for m in "${missing[@]}"; do printf '%s\n' "- ${m}"; done - printf '%s\n' 'ERROR: Guardrails failed. Missing required repository variables.' - } >> "${GITHUB_STEP_SUMMARY}" - exit 1 - fi - - { - printf '%s\n' '### Repository variables validation result' - printf '%s\n' 'Status: OK' - printf '%s\n' 'All required repository variables present.' - printf '%s\n' '' - printf '%s\n' '**Note**: Organization secrets (RS_FTP_HOST, RS_FTP_USER, etc.) are validated at deployment time, not in repository health checks.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - - scripts_governance: - name: Scripts governance - needs: access_check - if: ${{ needs.access_check.outputs.allowed == 'true' }} - runs-on: ubuntu-latest - timeout-minutes: 15 - permissions: - contents: read - - steps: - - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - with: - fetch-depth: 0 - - - name: Scripts folder checks - env: - PROFILE_RAW: ${{ github.event.inputs.profile }} - run: | - set -euo pipefail - - profile="${PROFILE_RAW:-all}" - case "${profile}" in - all|release|scripts|repo) ;; - *) - printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" - exit 1 - ;; - esac - - if [ "${profile}" = 'release' ] || [ "${profile}" = 'repo' ]; then - { - printf '%s\n' '### Scripts governance' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' 'Status: SKIPPED' - printf '%s\n' 'Reason: profile excludes scripts governance' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 0 - fi - - if [ ! -d "${SCRIPT_DIR}" ]; then - { - printf '%s\n' '### Scripts governance' - printf '%s\n' 'Status: OK (advisory)' - printf '%s\n' 'scripts/ directory not present. No scripts governance enforced.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 0 - fi - - if [ -n "${SCRIPTS_REQUIRED_DIRS:-}" ]; then IFS=',' read -r -a required_dirs <<< "${SCRIPTS_REQUIRED_DIRS}"; else required_dirs=(); fi - IFS=',' read -r -a allowed_dirs <<< "${SCRIPTS_ALLOWED_DIRS}" - - missing_dirs=() - unapproved_dirs=() - - for d in "${required_dirs[@]}"; do - req="${d%/}" - [ ! -d "${req}" ] && missing_dirs+=("${req}/") - done - - while IFS= read -r d; do - allowed=false - for a in "${allowed_dirs[@]}"; do - a_norm="${a%/}" - [ "${d%/}" = "${a_norm}" ] && allowed=true - done - [ "${allowed}" = false ] && unapproved_dirs+=("${d%/}/") - done < <(find "${SCRIPT_DIR}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sed 's#^\./##') - - { - printf '%s\n' '### Scripts governance' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' '| Area | Status | Notes |' - printf '%s\n' '|---|---|---|' - - if [ "${#missing_dirs[@]}" -gt 0 ]; then - printf '%s\n' '| Required directories | Warning | Missing required subfolders |' - else - printf '%s\n' '| Required directories | OK | All required subfolders present |' - fi - - if [ "${#unapproved_dirs[@]}" -gt 0 ]; then - printf '%s\n' '| Directory policy | Warning | Unapproved directories detected |' - else - printf '%s\n' '| Directory policy | OK | No unapproved directories |' - fi - - printf '%s\n' '| Enforcement mode | Advisory | scripts folder is optional |' - printf '\n' - - if [ "${#missing_dirs[@]}" -gt 0 ]; then - printf '%s\n' 'Missing required script directories:' - for m in "${missing_dirs[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - else - printf '%s\n' 'Missing required script directories: none.' - printf '\n' - fi - - if [ "${#unapproved_dirs[@]}" -gt 0 ]; then - printf '%s\n' 'Unapproved script directories detected:' - for m in "${unapproved_dirs[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - else - printf '%s\n' 'Unapproved script directories detected: none.' - printf '\n' - fi - - printf '%s\n' 'Scripts governance completed in advisory mode.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - - repo_health: - name: Repository health - needs: access_check - if: ${{ needs.access_check.outputs.allowed == 'true' }} - runs-on: ubuntu-latest - timeout-minutes: 20 - permissions: - contents: read - - steps: - - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - with: - fetch-depth: 0 - - - name: Repository health checks - env: - PROFILE_RAW: ${{ github.event.inputs.profile }} - run: | - set -euo pipefail - - profile="${PROFILE_RAW:-all}" - case "${profile}" in - all|release|scripts|repo) ;; - *) - printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" - exit 1 - ;; - esac - - if [ "${profile}" = 'release' ] || [ "${profile}" = 'scripts' ]; then - { - printf '%s\n' '### Repository health' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' 'Status: SKIPPED' - printf '%s\n' 'Reason: profile excludes repository health' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 0 - fi - - IFS=',' read -r -a required_artifacts <<< "${REPO_REQUIRED_ARTIFACTS}" - IFS=',' read -r -a optional_files <<< "${REPO_OPTIONAL_FILES}" - if [ -n "${REPO_DISALLOWED_DIRS:-}" ]; then IFS=',' read -r -a disallowed_dirs <<< "${REPO_DISALLOWED_DIRS}"; else disallowed_dirs=(); fi - IFS=',' read -r -a disallowed_files <<< "${REPO_DISALLOWED_FILES:-}" - - missing_required=() - missing_optional=() - - # Source directory: src/ or htdocs/ (either is valid for extension repos) - SOURCE_DIR="" - if [ -d "src" ]; then - SOURCE_DIR="src" - elif [ -d "htdocs" ]; then - SOURCE_DIR="htdocs" - elif [ -d "deploy" ] || [ -d "cli" ] || [ -d "monitoring" ]; then - # Platform/tooling repos don't need src/ - SOURCE_DIR="" - else - missing_required+=("src/ or htdocs/ (source directory required)") - fi - - for item in "${required_artifacts[@]}"; do - if printf '%s' "${item}" | grep -q '/$'; then - d="${item%/}" - [ ! -d "${d}" ] && missing_required+=("${item}") - else - [ ! -f "${item}" ] && missing_required+=("${item}") - fi - done - - for f in "${optional_files[@]}"; do - if printf '%s' "${f}" | grep -q '/$'; then - d="${f%/}" - [ ! -d "${d}" ] && missing_optional+=("${f}") - else - [ ! -f "${f}" ] && missing_optional+=("${f}") - fi - done - - for d in "${disallowed_dirs[@]}"; do - d_norm="${d%/}" - [ -d "${d_norm}" ] && missing_required+=("${d_norm}/ (disallowed)") - done - - for f in "${disallowed_files[@]}"; do - [ -f "${f}" ] && missing_required+=("${f} (disallowed)") - done - - git fetch origin --prune - - dev_paths=() - dev_branches=() - - while IFS= read -r b; do - name="${b#origin/}" - if [ "${name}" = 'dev' ]; then - dev_branches+=("${name}") - else - dev_paths+=("${name}") - fi - done < <(git branch -r --list 'origin/dev*' | sed 's/^ *//') - - if [ "${#dev_paths[@]}" -eq 0 ] && [ "${#dev_branches[@]}" -eq 0 ]; then - missing_required+=("dev or dev/* branch") - fi - - content_warnings=() - - if [ -f 'CHANGELOG.md' ] && ! grep -Eq '^# Changelog' CHANGELOG.md; then - content_warnings+=("CHANGELOG.md missing '# Changelog' header") - fi - - if [ -f 'CHANGELOG.md' ] && grep -Eq '^[# ]*Unreleased' CHANGELOG.md; then - content_warnings+=("CHANGELOG.md contains Unreleased section (review release readiness)") - fi - - if [ -f 'LICENSE' ] && ! grep -qiE 'GNU GENERAL PUBLIC LICENSE|GPL' LICENSE; then - content_warnings+=("LICENSE does not look like a GPL text") - fi - - if [ -f 'README.md' ] && ! grep -qiE 'moko|Moko' README.md; then - content_warnings+=("README.md missing expected brand keyword") - fi - - export PROFILE_RAW="${profile}" - export MISSING_REQUIRED="$(printf '%s\n' "${missing_required[@]:-}")" - export MISSING_OPTIONAL="$(printf '%s\n' "${missing_optional[@]:-}")" - export CONTENT_WARNINGS="$(printf '%s\n' "${content_warnings[@]:-}")" - - report_json=$(printf '{"profile":"%s","missing_required":%d,"missing_optional":%d,"content_warnings":%d}' "$profile" "${#missing_required[@]}" "${#missing_optional[@]}" "${#content_warnings[@]}") - - { - printf '%s\n' '### Repository health' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' '| Metric | Value |' - printf '%s\n' '|---|---|' - printf '%s\n' "| Missing required | ${#missing_required[@]} |" - printf '%s\n' "| Missing optional | ${#missing_optional[@]} |" - printf '%s\n' "| Content warnings | ${#content_warnings[@]} |" - printf '\n' - - printf '%s\n' '### Guardrails report (JSON)' - printf '%s\n' '```json' - printf '%s\n' "${report_json}" - printf '%s\n' '```' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - - if [ "${#missing_required[@]}" -gt 0 ]; then - { - printf '%s\n' '### Missing required repo artifacts' - for m in "${missing_required[@]}"; do printf '%s\n' "- ${m}"; done - printf '%s\n' 'ERROR: Guardrails failed. Missing required repository artifacts.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 1 - fi - - if [ "${#missing_optional[@]}" -gt 0 ]; then - { - printf '%s\n' '### Missing optional repo artifacts' - for m in "${missing_optional[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - if [ "${#content_warnings[@]}" -gt 0 ]; then - { - printf '%s\n' '### Repo content warnings' - for m in "${content_warnings[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - # -- Joomla-specific checks -- - joomla_findings=() - - MANIFEST="$(find . -maxdepth 2 -name '*.xml' -exec grep -l '/dev/null | head -1 || true)" - if [ -z "${MANIFEST}" ]; then - joomla_findings+=("Joomla XML manifest not found (no *.xml with tag)") - else - if ! grep -qP '' "${MANIFEST}"; then - joomla_findings+=("XML manifest: tag missing") - fi - if ! grep -qP 'type="(component|module|plugin|library|package|template|language)"' "${MANIFEST}"; then - joomla_findings+=("XML manifest: type attribute missing or invalid") - fi - if ! grep -qP '' "${MANIFEST}"; then - joomla_findings+=("XML manifest: tag missing") - fi - if ! grep -qP '' "${MANIFEST}"; then - joomla_findings+=("XML manifest: tag missing") - fi - if ! grep -qP ' missing (required for Joomla 5+)") - fi - fi - - INI_COUNT="$(find . -name '*.ini' -type f 2>/dev/null | wc -l)" - if [ "${INI_COUNT}" -eq 0 ]; then - joomla_findings+=("No .ini language files found") - fi - - if [ ! -f 'updates.xml' ]; then - joomla_findings+=("updates.xml missing in root (required for Joomla update server)") - fi - - if [ -n "${SOURCE_DIR}" ]; then - INDEX_DIRS=("${SOURCE_DIR}" "${SOURCE_DIR}/admin" "${SOURCE_DIR}/site") - for dir in "${INDEX_DIRS[@]}"; do - if [ -d "${dir}" ] && [ ! -f "${dir}/index.html" ]; then - joomla_findings+=("${dir}/index.html missing (directory listing protection)") - fi - done - fi - - if [ "${#joomla_findings[@]}" -gt 0 ]; then - { - printf '%s\n' '### Joomla extension checks' - printf '%s\n' '| Check | Status |' - printf '%s\n' '|---|---|' - for f in "${joomla_findings[@]}"; do - printf '%s\n' "| ${f} | Warning |" - done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - else - { - printf '%s\n' '### Joomla extension checks' - printf '%s\n' 'All Joomla-specific checks passed.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - extended_enabled="${EXTENDED_CHECKS:-true}" - extended_findings=() - - if [ "${extended_enabled}" = 'true' ]; then - if [ -f '.github/CODEOWNERS' ] || [ -f 'CODEOWNERS' ] || [ -f 'docs/CODEOWNERS' ]; then - : - else - extended_findings+=("CODEOWNERS not found (.github/CODEOWNERS preferred)") - fi - - if ls "${WORKFLOWS_DIR}"/*.yml >/dev/null 2>&1 || ls "${WORKFLOWS_DIR}"/*.yaml >/dev/null 2>&1; then - bad_refs="$(grep -RIn --include='*.yml' --include='*.yaml' -E '^[[:space:]]*uses:[[:space:]]*[^#]+@(main|master)\b' "${WORKFLOWS_DIR}" 2>/dev/null || true)" - if [ -n "${bad_refs}" ]; then - extended_findings+=("Workflows reference actions @main/@master (pin versions): see log excerpt") - { - printf '%s\n' '### Workflow pinning advisory' - printf '%s\n' 'Found uses: entries pinned to main/master:' - printf '%s\n' '```' - printf '%s\n' "${bad_refs}" - printf '%s\n' '```' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - fi - - if [ -f "${DOCS_INDEX}" ]; then - missing_links="" - while IFS= read -r docline; do - for link in $(echo "$docline" | grep -oE '\]\([^)]+\)' | sed 's/\](//' | sed 's/)$//' || true); do - case "$link" in http://*|https://*|"#"*|mailto:*) continue ;; esac - linkpath="${link%%#*}" - linkpath="${linkpath%%\?*}" - [ -z "$linkpath" ] && continue - if [ "${linkpath:0:1}" = "/" ]; then - testpath="${linkpath#/}" - else - testpath="$(dirname "${DOCS_INDEX}")/${linkpath}" - fi - [ ! -e "$testpath" ] && missing_links="${missing_links}${testpath} " - done - done < "${DOCS_INDEX}" - if [ -n "${missing_links}" ]; then - extended_findings+=("docs/docs-index.md contains broken relative links") - { - printf '%s\n' '### Docs index link integrity' - printf '%s\n' 'Broken relative links:' - for bl in ${missing_links}; do - printf '%s\n' "- ${bl}" - done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - fi - - if [ -d "${SCRIPT_DIR}" ]; then - if ! command -v shellcheck >/dev/null 2>&1; then - sudo apt-get update -qq - sudo apt-get install -y shellcheck >/dev/null - fi - - sc_out='' - while IFS= read -r shf; do - [ -z "${shf}" ] && continue - out_one="$(shellcheck -S warning -x "${shf}" 2>/dev/null || true)" - if [ -n "${out_one}" ]; then - sc_out="${sc_out}${out_one}\n" - fi - done < <(find "${SCRIPT_DIR}" -type f -name "${SHELLCHECK_PATTERN}" 2>/dev/null | sort) - - if [ -n "${sc_out}" ]; then - extended_findings+=("ShellCheck warnings detected (advisory)") - sc_head="$(printf '%s' "${sc_out}" | head -n 200)" - { - printf '%s\n' '### ShellCheck (advisory)' - printf '%s\n' '```' - printf '%s\n' "${sc_head}" - printf '%s\n' '```' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - fi - - spdx_missing=() - IFS=',' read -r -a spdx_globs <<< "${SPDX_FILE_GLOBS}" - spdx_args=() - for g in "${spdx_globs[@]}"; do spdx_args+=("${g}"); done - - while IFS= read -r f; do - [ -z "${f}" ] && continue - if ! head -n 40 "${f}" | grep -q 'SPDX-License-Identifier:'; then - spdx_missing+=("${f}") - fi - done < <(git ls-files "${spdx_args[@]}" 2>/dev/null || true) - - if [ "${#spdx_missing[@]}" -gt 0 ]; then - extended_findings+=("SPDX header missing in some tracked files (advisory)") - { - printf '%s\n' '### SPDX header advisory' - printf '%s\n' 'Files missing SPDX-License-Identifier (first 40 lines scan):' - for f in "${spdx_missing[@]}"; do printf '%s\n' "- ${f}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - stale_cutoff_days=180 - stale_branches="$(git for-each-ref --format='%(refname:short) %(committerdate:unix)' refs/remotes/origin 2>/dev/null | awk -v now="$(date +%s)" -v days="${stale_cutoff_days}" '{if (now-$2 > days*86400) print $1}' | head -50)" - if [ -n "${stale_branches}" ]; then - extended_findings+=("Stale remote branches detected (advisory)") - { - printf '%s\n' '### Git hygiene advisory' - printf '%s\n' "Branches with last commit older than ${stale_cutoff_days} days (sample up to 50):" - while IFS= read -r b; do [ -n "${b}" ] && printf '%s\n' "- ${b}"; done <<< "${stale_branches}" - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - fi - - { - printf '%s\n' '### Guardrails coverage matrix' - printf '%s\n' '| Domain | Status | Notes |' - printf '%s\n' '|---|---|---|' - printf '%s\n' '| Access control | OK | Admin-only execution gate |' - printf '%s\n' '| Release variables | OK | Repository variables validation |' - printf '%s\n' '| Scripts governance | OK | Directory policy and advisory reporting |' - printf '%s\n' '| Repo required artifacts | OK | Required, optional, disallowed enforcement |' - printf '%s\n' '| Repo content heuristics | OK | Brand, license, changelog structure |' - if [ "${extended_enabled}" = 'true' ]; then - if [ "${#extended_findings[@]}" -gt 0 ]; then - printf '%s\n' '| Extended checks | Warning | See extended findings below |' - else - printf '%s\n' '| Extended checks | OK | No findings |' - fi - else - printf '%s\n' '| Extended checks | SKIPPED | EXTENDED_CHECKS disabled |' - fi - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - - if [ "${extended_enabled}" = 'true' ] && [ "${#extended_findings[@]}" -gt 0 ]; then - { - printf '%s\n' '### Extended findings (advisory)' - for f in "${extended_findings[@]}"; do printf '%s\n' "- ${f}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - printf '%s\n' 'Repository health guardrails passed.' >> "${GITHUB_STEP_SUMMARY}" - - - site-health: - name: Site Health - runs-on: ubuntu-latest - if: github.event_name == 'workflow_dispatch' - steps: - - uses: actions/checkout@v4 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.3' - - - name: Uptime check - if: env.URLS != '' - run: | - echo "$URLS" > /tmp/urls.txt - php monitoring/uptime-probe.php --urls /tmp/urls.txt --timeout 15 || echo "::warning::Some sites are down" - rm -f /tmp/urls.txt - env: - URLS: ${{ vars.MONITORED_URLS }} - - - name: SSL certificate check - if: env.DOMAINS != '' - run: | - echo "$DOMAINS" > /tmp/domains.txt - php monitoring/ssl-check.php --domains /tmp/domains.txt --warn-days 30 || echo "::warning::SSL certificates expiring soon" - rm -f /tmp/domains.txt - env: - DOMAINS: ${{ vars.MONITORED_DOMAINS }} - - - name: Summary - if: always() - run: | - echo "### Site Health" >> $GITHUB_STEP_SUMMARY - echo "Uptime and SSL checks completed." >> $GITHUB_STEP_SUMMARY - +# ============================================================================ +# Copyright (C) 2025 Moko Consulting +# +# This file is part of a Moko Consulting project. +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# FILE INFORMATION +# DEFGROUP: Gitea.Workflow +# INGROUP: moko-platform.Validation +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform +# PATH: /templates/workflows/joomla/repo_health.yml.template +# VERSION: 09.23.00 +# BRIEF: Enforces repository guardrails by validating release configuration, scripts governance, tooling availability, and core repository health artifacts. +# ============================================================================ + +name: "Generic: Repo Health" + +defaults: + run: + shell: bash + +on: + workflow_dispatch: + inputs: + profile: + description: 'Validation profile: all, release, scripts, or repo' + required: true + default: all + type: choice + options: + - all + - release + - scripts + - repo + pull_request: + push: + +permissions: + contents: read + +env: + # Release policy - Repository Variables Only + RELEASE_REQUIRED_REPO_VARS: RS_FTP_PATH_SUFFIX + RELEASE_OPTIONAL_REPO_VARS: DEV_FTP_SUFFIX + + # Scripts governance policy + SCRIPTS_REQUIRED_DIRS: + SCRIPTS_ALLOWED_DIRS: scripts,scripts/fix,scripts/lib,scripts/release,scripts/run,scripts/validate + + # Repo health policy + REPO_REQUIRED_ARTIFACTS: README.md,LICENSE,CHANGELOG.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,.mokogitea/workflows/ + REPO_OPTIONAL_FILES: SECURITY.md,GOVERNANCE.md,.editorconfig,.gitattributes,.gitignore,README.md,docs/ + REPO_DISALLOWED_DIRS: + REPO_DISALLOWED_FILES: TODO.md,todo.md + + # Extended checks toggles + EXTENDED_CHECKS: "true" + + # File / directory variables + DOCS_INDEX: docs/docs-index.md + SCRIPT_DIR: scripts + WORKFLOWS_DIR: .mokogitea/workflows + SHELLCHECK_PATTERN: '*.sh' + SPDX_FILE_GLOBS: '*.sh,*.php,*.js,*.ts,*.css,*.xml,*.yml,*.yaml' + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + +jobs: + access_check: + name: Access control + runs-on: ubuntu-latest + timeout-minutes: 10 + permissions: + contents: read + + outputs: + allowed: ${{ steps.perm.outputs.allowed }} + permission: ${{ steps.perm.outputs.permission }} + + steps: + - name: Check actor permission (admin only) + id: perm + env: + TOKEN: ${{ secrets.MOKOGITEA_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }} + REPO: ${{ github.repository }} + ACTOR: ${{ github.actor }} + run: | + set -euo pipefail + ALLOWED=false + PERMISSION=unknown + METHOD="" + + # Hardcoded authorized users — always allowed + case "$ACTOR" in + jmiller|gitea-actions[bot]) + ALLOWED=true + PERMISSION=admin + METHOD="hardcoded allowlist" + ;; + *) + # Detect platform and check permissions via API + API_BASE="${GITHUB_API_URL:-${GITEA_API_URL:-https://api.github.com}}" + RESP=$(curl -sf -H "Authorization: token ${TOKEN}" \ + "${API_BASE}/repos/${REPO}/collaborators/${ACTOR}/permission" 2>/dev/null || echo '{}') + PERMISSION=$(echo "$RESP" | grep -oP '"permission"\s*:\s*"\K[^"]+' || echo "unknown") + if [ "$PERMISSION" = "admin" ] || [ "$PERMISSION" = "maintain" ] || [ "$PERMISSION" = "owner" ]; then + ALLOWED=true + fi + METHOD="collaborator API" + ;; + esac + + echo "permission=${PERMISSION}" >> "$GITHUB_OUTPUT" + echo "allowed=${ALLOWED}" >> "$GITHUB_OUTPUT" + + { + echo "## Access Authorization" + echo "" + echo "| Field | Value |" + echo "|-------|-------|" + echo "| **Actor** | \`${ACTOR}\` |" + echo "| **Repository** | \`${REPO}\` |" + echo "| **Permission** | \`${PERMISSION}\` |" + echo "| **Method** | ${METHOD} |" + echo "| **Authorized** | ${ALLOWED} |" + echo "" + if [ "$ALLOWED" = "true" ]; then + echo "${ACTOR} authorized (${METHOD})" + else + echo "${ACTOR} is NOT authorized. Requires admin or maintain role." + fi + } >> "${GITHUB_STEP_SUMMARY}" + + - name: Deny execution when not permitted + if: ${{ steps.perm.outputs.allowed != 'true' }} + run: | + set -euo pipefail + printf '%s\n' 'ERROR: Access denied. Admin permission required.' >> "${GITHUB_STEP_SUMMARY}" + exit 1 + + release_config: + name: Release configuration + needs: access_check + if: ${{ needs.access_check.outputs.allowed == 'true' }} + runs-on: ubuntu-latest + timeout-minutes: 20 + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 0 + + - name: Guardrails release vars + env: + PROFILE_RAW: ${{ github.event.inputs.profile }} + RS_FTP_PATH_SUFFIX: ${{ vars.RS_FTP_PATH_SUFFIX }} + DEV_FTP_SUFFIX: ${{ vars.DEV_FTP_SUFFIX }} + run: | + set -euo pipefail + + profile="${PROFILE_RAW:-all}" + case "${profile}" in + all|release|scripts|repo) ;; + *) + printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" + exit 1 + ;; + esac + + if [ "${profile}" = 'scripts' ] || [ "${profile}" = 'repo' ]; then + { + printf '%s\n' '### Release configuration (Repository Variables)' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' 'Status: SKIPPED' + printf '%s\n' 'Reason: profile excludes release validation' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + exit 0 + fi + + IFS=',' read -r -a required <<< "${RELEASE_REQUIRED_REPO_VARS}" + IFS=',' read -r -a optional <<< "${RELEASE_OPTIONAL_REPO_VARS}" + + missing=() + missing_optional=() + + for k in "${required[@]}"; do + v="${!k:-}" + [ -z "${v}" ] && missing+=("${k}") + done + + for k in "${optional[@]}"; do + v="${!k:-}" + [ -z "${v}" ] && missing_optional+=("${k}") + done + + { + printf '%s\n' '### Release configuration (Repository Variables)' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' '| Variable | Status |' + printf '%s\n' '|---|---|' + printf '%s\n' "| RS_FTP_PATH_SUFFIX | ${RS_FTP_PATH_SUFFIX:-NOT SET} |" + printf '%s\n' "| DEV_FTP_SUFFIX | ${DEV_FTP_SUFFIX:-NOT SET} |" + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + + if [ "${#missing_optional[@]}" -gt 0 ]; then + { + printf '%s\n' '### Missing optional repository variables' + for m in "${missing_optional[@]}"; do printf '%s\n' "- ${m}"; done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + if [ "${#missing[@]}" -gt 0 ]; then + { + printf '%s\n' '### Missing required repository variables' + for m in "${missing[@]}"; do printf '%s\n' "- ${m}"; done + printf '%s\n' 'ERROR: Guardrails failed. Missing required repository variables.' + } >> "${GITHUB_STEP_SUMMARY}" + exit 1 + fi + + { + printf '%s\n' '### Repository variables validation result' + printf '%s\n' 'Status: OK' + printf '%s\n' 'All required repository variables present.' + printf '%s\n' '' + printf '%s\n' '**Note**: Organization secrets (RS_FTP_HOST, RS_FTP_USER, etc.) are validated at deployment time, not in repository health checks.' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + + scripts_governance: + name: Scripts governance + needs: access_check + if: ${{ needs.access_check.outputs.allowed == 'true' }} + runs-on: ubuntu-latest + timeout-minutes: 15 + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 0 + + - name: Scripts folder checks + env: + PROFILE_RAW: ${{ github.event.inputs.profile }} + run: | + set -euo pipefail + + profile="${PROFILE_RAW:-all}" + case "${profile}" in + all|release|scripts|repo) ;; + *) + printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" + exit 1 + ;; + esac + + if [ "${profile}" = 'release' ] || [ "${profile}" = 'repo' ]; then + { + printf '%s\n' '### Scripts governance' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' 'Status: SKIPPED' + printf '%s\n' 'Reason: profile excludes scripts governance' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + exit 0 + fi + + if [ ! -d "${SCRIPT_DIR}" ]; then + { + printf '%s\n' '### Scripts governance' + printf '%s\n' 'Status: OK (advisory)' + printf '%s\n' 'scripts/ directory not present. No scripts governance enforced.' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + exit 0 + fi + + if [ -n "${SCRIPTS_REQUIRED_DIRS:-}" ]; then IFS=',' read -r -a required_dirs <<< "${SCRIPTS_REQUIRED_DIRS}"; else required_dirs=(); fi + IFS=',' read -r -a allowed_dirs <<< "${SCRIPTS_ALLOWED_DIRS}" + + missing_dirs=() + unapproved_dirs=() + + for d in "${required_dirs[@]}"; do + req="${d%/}" + [ ! -d "${req}" ] && missing_dirs+=("${req}/") + done + + while IFS= read -r d; do + allowed=false + for a in "${allowed_dirs[@]}"; do + a_norm="${a%/}" + [ "${d%/}" = "${a_norm}" ] && allowed=true + done + [ "${allowed}" = false ] && unapproved_dirs+=("${d%/}/") + done < <(find "${SCRIPT_DIR}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sed 's#^\./##') + + { + printf '%s\n' '### Scripts governance' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' '| Area | Status | Notes |' + printf '%s\n' '|---|---|---|' + + if [ "${#missing_dirs[@]}" -gt 0 ]; then + printf '%s\n' '| Required directories | Warning | Missing required subfolders |' + else + printf '%s\n' '| Required directories | OK | All required subfolders present |' + fi + + if [ "${#unapproved_dirs[@]}" -gt 0 ]; then + printf '%s\n' '| Directory policy | Warning | Unapproved directories detected |' + else + printf '%s\n' '| Directory policy | OK | No unapproved directories |' + fi + + printf '%s\n' '| Enforcement mode | Advisory | scripts folder is optional |' + printf '\n' + + if [ "${#missing_dirs[@]}" -gt 0 ]; then + printf '%s\n' 'Missing required script directories:' + for m in "${missing_dirs[@]}"; do printf '%s\n' "- ${m}"; done + printf '\n' + else + printf '%s\n' 'Missing required script directories: none.' + printf '\n' + fi + + if [ "${#unapproved_dirs[@]}" -gt 0 ]; then + printf '%s\n' 'Unapproved script directories detected:' + for m in "${unapproved_dirs[@]}"; do printf '%s\n' "- ${m}"; done + printf '\n' + else + printf '%s\n' 'Unapproved script directories detected: none.' + printf '\n' + fi + + printf '%s\n' 'Scripts governance completed in advisory mode.' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + + repo_health: + name: Repository health + needs: access_check + if: ${{ needs.access_check.outputs.allowed == 'true' }} + runs-on: ubuntu-latest + timeout-minutes: 20 + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 0 + + - name: Repository health checks + env: + PROFILE_RAW: ${{ github.event.inputs.profile }} + run: | + set -euo pipefail + + profile="${PROFILE_RAW:-all}" + case "${profile}" in + all|release|scripts|repo) ;; + *) + printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" + exit 1 + ;; + esac + + if [ "${profile}" = 'release' ] || [ "${profile}" = 'scripts' ]; then + { + printf '%s\n' '### Repository health' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' 'Status: SKIPPED' + printf '%s\n' 'Reason: profile excludes repository health' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + exit 0 + fi + + IFS=',' read -r -a required_artifacts <<< "${REPO_REQUIRED_ARTIFACTS}" + IFS=',' read -r -a optional_files <<< "${REPO_OPTIONAL_FILES}" + if [ -n "${REPO_DISALLOWED_DIRS:-}" ]; then IFS=',' read -r -a disallowed_dirs <<< "${REPO_DISALLOWED_DIRS}"; else disallowed_dirs=(); fi + IFS=',' read -r -a disallowed_files <<< "${REPO_DISALLOWED_FILES:-}" + + missing_required=() + missing_optional=() + + # Source directory: src/ or htdocs/ (either is valid for extension repos) + SOURCE_DIR="" + if [ -d "src" ]; then + SOURCE_DIR="src" + elif [ -d "htdocs" ]; then + SOURCE_DIR="htdocs" + elif [ -d "deploy" ] || [ -d "cli" ] || [ -d "monitoring" ]; then + # Platform/tooling repos don't need src/ + SOURCE_DIR="" + else + missing_required+=("src/ or htdocs/ (source directory required)") + fi + + for item in "${required_artifacts[@]}"; do + if printf '%s' "${item}" | grep -q '/$'; then + d="${item%/}" + [ ! -d "${d}" ] && missing_required+=("${item}") + else + [ ! -f "${item}" ] && missing_required+=("${item}") + fi + done + + for f in "${optional_files[@]}"; do + if printf '%s' "${f}" | grep -q '/$'; then + d="${f%/}" + [ ! -d "${d}" ] && missing_optional+=("${f}") + else + [ ! -f "${f}" ] && missing_optional+=("${f}") + fi + done + + for d in "${disallowed_dirs[@]}"; do + d_norm="${d%/}" + [ -d "${d_norm}" ] && missing_required+=("${d_norm}/ (disallowed)") + done + + for f in "${disallowed_files[@]}"; do + [ -f "${f}" ] && missing_required+=("${f} (disallowed)") + done + + git fetch origin --prune + + dev_paths=() + dev_branches=() + + while IFS= read -r b; do + name="${b#origin/}" + if [ "${name}" = 'dev' ]; then + dev_branches+=("${name}") + else + dev_paths+=("${name}") + fi + done < <(git branch -r --list 'origin/dev*' | sed 's/^ *//') + + if [ "${#dev_paths[@]}" -eq 0 ] && [ "${#dev_branches[@]}" -eq 0 ]; then + missing_required+=("dev or dev/* branch") + fi + + content_warnings=() + + if [ -f 'CHANGELOG.md' ] && ! grep -Eq '^# Changelog' CHANGELOG.md; then + content_warnings+=("CHANGELOG.md missing '# Changelog' header") + fi + + if [ -f 'CHANGELOG.md' ] && grep -Eq '^[# ]*Unreleased' CHANGELOG.md; then + content_warnings+=("CHANGELOG.md contains Unreleased section (review release readiness)") + fi + + if [ -f 'LICENSE' ] && ! grep -qiE 'GNU GENERAL PUBLIC LICENSE|GPL' LICENSE; then + content_warnings+=("LICENSE does not look like a GPL text") + fi + + if [ -f 'README.md' ] && ! grep -qiE 'moko|Moko' README.md; then + content_warnings+=("README.md missing expected brand keyword") + fi + + export PROFILE_RAW="${profile}" + export MISSING_REQUIRED="$(printf '%s\n' "${missing_required[@]:-}")" + export MISSING_OPTIONAL="$(printf '%s\n' "${missing_optional[@]:-}")" + export CONTENT_WARNINGS="$(printf '%s\n' "${content_warnings[@]:-}")" + + report_json=$(printf '{"profile":"%s","missing_required":%d,"missing_optional":%d,"content_warnings":%d}' "$profile" "${#missing_required[@]}" "${#missing_optional[@]}" "${#content_warnings[@]}") + + { + printf '%s\n' '### Repository health' + printf '%s\n' "Profile: ${profile}" + printf '%s\n' '| Metric | Value |' + printf '%s\n' '|---|---|' + printf '%s\n' "| Missing required | ${#missing_required[@]} |" + printf '%s\n' "| Missing optional | ${#missing_optional[@]} |" + printf '%s\n' "| Content warnings | ${#content_warnings[@]} |" + printf '\n' + + printf '%s\n' '### Guardrails report (JSON)' + printf '%s\n' '```json' + printf '%s\n' "${report_json}" + printf '%s\n' '```' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + + if [ "${#missing_required[@]}" -gt 0 ]; then + { + printf '%s\n' '### Missing required repo artifacts' + for m in "${missing_required[@]}"; do printf '%s\n' "- ${m}"; done + printf '%s\n' 'ERROR: Guardrails failed. Missing required repository artifacts.' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + exit 1 + fi + + if [ "${#missing_optional[@]}" -gt 0 ]; then + { + printf '%s\n' '### Missing optional repo artifacts' + for m in "${missing_optional[@]}"; do printf '%s\n' "- ${m}"; done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + if [ "${#content_warnings[@]}" -gt 0 ]; then + { + printf '%s\n' '### Repo content warnings' + for m in "${content_warnings[@]}"; do printf '%s\n' "- ${m}"; done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + # -- Joomla-specific checks -- + joomla_findings=() + + MANIFEST="$(find . -maxdepth 2 -name '*.xml' -exec grep -l '/dev/null | head -1 || true)" + if [ -z "${MANIFEST}" ]; then + joomla_findings+=("Joomla XML manifest not found (no *.xml with tag)") + else + if ! grep -qP '' "${MANIFEST}"; then + joomla_findings+=("XML manifest: tag missing") + fi + if ! grep -qP 'type="(component|module|plugin|library|package|template|language)"' "${MANIFEST}"; then + joomla_findings+=("XML manifest: type attribute missing or invalid") + fi + if ! grep -qP '' "${MANIFEST}"; then + joomla_findings+=("XML manifest: tag missing") + fi + if ! grep -qP '' "${MANIFEST}"; then + joomla_findings+=("XML manifest: tag missing") + fi + if ! grep -qP ' missing (required for Joomla 5+)") + fi + fi + + INI_COUNT="$(find . -name '*.ini' -type f 2>/dev/null | wc -l)" + if [ "${INI_COUNT}" -eq 0 ]; then + joomla_findings+=("No .ini language files found") + fi + + if [ ! -f 'updates.xml' ]; then + joomla_findings+=("updates.xml missing in root (required for Joomla update server)") + fi + + if [ -n "${SOURCE_DIR}" ]; then + INDEX_DIRS=("${SOURCE_DIR}" "${SOURCE_DIR}/admin" "${SOURCE_DIR}/site") + for dir in "${INDEX_DIRS[@]}"; do + if [ -d "${dir}" ] && [ ! -f "${dir}/index.html" ]; then + joomla_findings+=("${dir}/index.html missing (directory listing protection)") + fi + done + fi + + if [ "${#joomla_findings[@]}" -gt 0 ]; then + { + printf '%s\n' '### Joomla extension checks' + printf '%s\n' '| Check | Status |' + printf '%s\n' '|---|---|' + for f in "${joomla_findings[@]}"; do + printf '%s\n' "| ${f} | Warning |" + done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + else + { + printf '%s\n' '### Joomla extension checks' + printf '%s\n' 'All Joomla-specific checks passed.' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + extended_enabled="${EXTENDED_CHECKS:-true}" + extended_findings=() + + if [ "${extended_enabled}" = 'true' ]; then + if [ -f '.github/CODEOWNERS' ] || [ -f 'CODEOWNERS' ] || [ -f 'docs/CODEOWNERS' ]; then + : + else + extended_findings+=("CODEOWNERS not found (.github/CODEOWNERS preferred)") + fi + + if ls "${WORKFLOWS_DIR}"/*.yml >/dev/null 2>&1 || ls "${WORKFLOWS_DIR}"/*.yaml >/dev/null 2>&1; then + bad_refs="$(grep -RIn --include='*.yml' --include='*.yaml' -E '^[[:space:]]*uses:[[:space:]]*[^#]+@(main|master)\b' "${WORKFLOWS_DIR}" 2>/dev/null || true)" + if [ -n "${bad_refs}" ]; then + extended_findings+=("Workflows reference actions @main/@master (pin versions): see log excerpt") + { + printf '%s\n' '### Workflow pinning advisory' + printf '%s\n' 'Found uses: entries pinned to main/master:' + printf '%s\n' '```' + printf '%s\n' "${bad_refs}" + printf '%s\n' '```' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + fi + + if [ -f "${DOCS_INDEX}" ]; then + missing_links="" + while IFS= read -r docline; do + for link in $(echo "$docline" | grep -oE '\]\([^)]+\)' | sed 's/\](//' | sed 's/)$//' || true); do + case "$link" in http://*|https://*|"#"*|mailto:*) continue ;; esac + linkpath="${link%%#*}" + linkpath="${linkpath%%\?*}" + [ -z "$linkpath" ] && continue + if [ "${linkpath:0:1}" = "/" ]; then + testpath="${linkpath#/}" + else + testpath="$(dirname "${DOCS_INDEX}")/${linkpath}" + fi + [ ! -e "$testpath" ] && missing_links="${missing_links}${testpath} " + done + done < "${DOCS_INDEX}" + if [ -n "${missing_links}" ]; then + extended_findings+=("docs/docs-index.md contains broken relative links") + { + printf '%s\n' '### Docs index link integrity' + printf '%s\n' 'Broken relative links:' + for bl in ${missing_links}; do + printf '%s\n' "- ${bl}" + done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + fi + + if [ -d "${SCRIPT_DIR}" ]; then + if ! command -v shellcheck >/dev/null 2>&1; then + sudo apt-get update -qq + sudo apt-get install -y shellcheck >/dev/null + fi + + sc_out='' + while IFS= read -r shf; do + [ -z "${shf}" ] && continue + out_one="$(shellcheck -S warning -x "${shf}" 2>/dev/null || true)" + if [ -n "${out_one}" ]; then + sc_out="${sc_out}${out_one}\n" + fi + done < <(find "${SCRIPT_DIR}" -type f -name "${SHELLCHECK_PATTERN}" 2>/dev/null | sort) + + if [ -n "${sc_out}" ]; then + extended_findings+=("ShellCheck warnings detected (advisory)") + sc_head="$(printf '%s' "${sc_out}" | head -n 200)" + { + printf '%s\n' '### ShellCheck (advisory)' + printf '%s\n' '```' + printf '%s\n' "${sc_head}" + printf '%s\n' '```' + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + fi + + spdx_missing=() + IFS=',' read -r -a spdx_globs <<< "${SPDX_FILE_GLOBS}" + spdx_args=() + for g in "${spdx_globs[@]}"; do spdx_args+=("${g}"); done + + while IFS= read -r f; do + [ -z "${f}" ] && continue + if ! head -n 40 "${f}" | grep -q 'SPDX-License-Identifier:'; then + spdx_missing+=("${f}") + fi + done < <(git ls-files "${spdx_args[@]}" 2>/dev/null || true) + + if [ "${#spdx_missing[@]}" -gt 0 ]; then + extended_findings+=("SPDX header missing in some tracked files (advisory)") + { + printf '%s\n' '### SPDX header advisory' + printf '%s\n' 'Files missing SPDX-License-Identifier (first 40 lines scan):' + for f in "${spdx_missing[@]}"; do printf '%s\n' "- ${f}"; done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + stale_cutoff_days=180 + stale_branches="$(git for-each-ref --format='%(refname:short) %(committerdate:unix)' refs/remotes/origin 2>/dev/null | awk -v now="$(date +%s)" -v days="${stale_cutoff_days}" '{if (now-$2 > days*86400) print $1}' | head -50)" + if [ -n "${stale_branches}" ]; then + extended_findings+=("Stale remote branches detected (advisory)") + { + printf '%s\n' '### Git hygiene advisory' + printf '%s\n' "Branches with last commit older than ${stale_cutoff_days} days (sample up to 50):" + while IFS= read -r b; do [ -n "${b}" ] && printf '%s\n' "- ${b}"; done <<< "${stale_branches}" + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + fi + + { + printf '%s\n' '### Guardrails coverage matrix' + printf '%s\n' '| Domain | Status | Notes |' + printf '%s\n' '|---|---|---|' + printf '%s\n' '| Access control | OK | Admin-only execution gate |' + printf '%s\n' '| Release variables | OK | Repository variables validation |' + printf '%s\n' '| Scripts governance | OK | Directory policy and advisory reporting |' + printf '%s\n' '| Repo required artifacts | OK | Required, optional, disallowed enforcement |' + printf '%s\n' '| Repo content heuristics | OK | Brand, license, changelog structure |' + if [ "${extended_enabled}" = 'true' ]; then + if [ "${#extended_findings[@]}" -gt 0 ]; then + printf '%s\n' '| Extended checks | Warning | See extended findings below |' + else + printf '%s\n' '| Extended checks | OK | No findings |' + fi + else + printf '%s\n' '| Extended checks | SKIPPED | EXTENDED_CHECKS disabled |' + fi + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + + if [ "${extended_enabled}" = 'true' ] && [ "${#extended_findings[@]}" -gt 0 ]; then + { + printf '%s\n' '### Extended findings (advisory)' + for f in "${extended_findings[@]}"; do printf '%s\n' "- ${f}"; done + printf '\n' + } >> "${GITHUB_STEP_SUMMARY}" + fi + + printf '%s\n' 'Repository health guardrails passed.' >> "${GITHUB_STEP_SUMMARY}" + + + site-health: + name: Site Health + runs-on: ubuntu-latest + if: github.event_name == 'workflow_dispatch' + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + + - name: Uptime check + if: env.URLS != '' + run: | + echo "$URLS" > /tmp/urls.txt + php monitoring/uptime-probe.php --urls /tmp/urls.txt --timeout 15 || echo "::warning::Some sites are down" + rm -f /tmp/urls.txt + env: + URLS: ${{ vars.MONITORED_URLS }} + + - name: SSL certificate check + if: env.DOMAINS != '' + run: | + echo "$DOMAINS" > /tmp/domains.txt + php monitoring/ssl-check.php --domains /tmp/domains.txt --warn-days 30 || echo "::warning::SSL certificates expiring soon" + rm -f /tmp/domains.txt + env: + DOMAINS: ${{ vars.MONITORED_DOMAINS }} + + - name: Summary + if: always() + run: | + echo "### Site Health" >> $GITHUB_STEP_SUMMARY + echo "Uptime and SSL checks completed." >> $GITHUB_STEP_SUMMARY + + # ═══════════════════════════════════════════════════════════════════════ + # Issue Reporter — file issues for failed gates + # ═══════════════════════════════════════════════════════════════════════ + report-issues: + name: "Report Issues" + runs-on: ubuntu-latest + needs: [access_check, release_config, scripts_governance, repo_health] + if: >- + always() && + (needs.release_config.result == 'failure' || + needs.scripts_governance.result == 'failure' || + needs.repo_health.result == 'failure') + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + sparse-checkout: automation/ci-issue-reporter.sh + sparse-checkout-cone-mode: false + + - name: "File issues for failed gates" + env: + GITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + run: | + chmod +x automation/ci-issue-reporter.sh + REPORTER="./automation/ci-issue-reporter.sh" + WF="Repo Health" + + report_gate() { + local gate="$1" result="$2" details="$3" + if [ "$result" = "failure" ]; then + "$REPORTER" --gate "$gate" --details "$details" --workflow "$WF" --severity error + fi + } + + report_gate "Release Configuration" \ + "${{ needs.release_config.result }}" \ + "Required repository variables are missing (RS_FTP_PATH_SUFFIX). Check repository settings." + + report_gate "Scripts Governance" \ + "${{ needs.scripts_governance.result }}" \ + "Scripts directory policy violations detected. Review required and allowed directories." + + report_gate "Repository Health" \ + "${{ needs.repo_health.result }}" \ + "Repository health checks failed — missing required artifacts, disallowed files, or content warnings. Check the CI run summary." + -- 2.52.0 From 240a947bec383227e502919d5981a0c229522066 Mon Sep 17 00:00:00 2001 From: Moko Consulting Date: Tue, 2 Jun 2026 21:33:06 +0000 Subject: [PATCH 048/142] chore(ci): sync CI issue reporter from Template-Joomla --- .mokogitea/workflows/pr-check.yml | 500 ++++++++++++++++-------------- 1 file changed, 264 insertions(+), 236 deletions(-) diff --git a/.mokogitea/workflows/pr-check.yml b/.mokogitea/workflows/pr-check.yml index d1aac4e..e2c82ef 100644 --- a/.mokogitea/workflows/pr-check.yml +++ b/.mokogitea/workflows/pr-check.yml @@ -1,236 +1,264 @@ -# Copyright (C) 2026 Moko Consulting -# -# SPDX-License-Identifier: GPL-3.0-or-later -# -# FILE INFORMATION -# DEFGROUP: Gitea.Workflow -# INGROUP: moko-platform.CI -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform -# PATH: /templates/workflows/universal/pr-check.yml.template -# VERSION: 09.23.00 -# BRIEF: PR gate — branch policy + code validation before merge - -name: "Universal: PR Check" - -on: - pull_request: - types: [opened, synchronize, reopened, edited] - -permissions: - contents: read - pull-requests: write - -env: - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - -jobs: - # ── Branch Policy ────────────────────────────────────────────────────── - branch-policy: - name: Branch Policy - runs-on: ubuntu-latest - steps: - - name: Check branch merge target - run: | - HEAD="${{ github.head_ref }}" - BASE="${{ github.base_ref }}" - - echo "PR: ${HEAD} → ${BASE}" - - ALLOWED=true - REASON="" - - case "$HEAD" in - feature/*|feat/*) - if [ "$BASE" != "dev" ]; then - ALLOWED=false - REASON="Feature branches must target 'dev', not '${BASE}'" - fi - ;; - fix/*|bugfix/*) - if [ "$BASE" != "dev" ]; then - ALLOWED=false - REASON="Fix branches must target 'dev', not '${BASE}'" - fi - ;; - patch/*) - if [ "$BASE" != "dev" ] && [ "$BASE" != "rc" ]; then - ALLOWED=false - REASON="Patch branches must target 'dev' or 'rc', not '${BASE}'" - fi - ;; - hotfix/*) - if [ "$BASE" != "dev" ] && [ "$BASE" != "main" ]; then - ALLOWED=false - REASON="Hotfix branches can only target 'dev' or 'main', not '${BASE}'" - fi - ;; - rc) - if [ "$BASE" != "main" ]; then - ALLOWED=false - REASON="RC branch can only merge into 'main', not '${BASE}'" - fi - ;; - dev) - if [ "$BASE" != "main" ]; then - ALLOWED=false - REASON="Dev branch can only merge into 'main', not '${BASE}'" - fi - ;; - esac - - if [ "$ALLOWED" = false ]; then - echo "::error::${REASON}" - echo "## Branch Policy Violation" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "${REASON}" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "### Allowed merge paths:" >> $GITHUB_STEP_SUMMARY - echo "- \`feature/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY - echo "- \`fix/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY - echo "- \`hotfix/*\` → \`dev\` or \`main\`" >> $GITHUB_STEP_SUMMARY - echo "- \`dev\` → \`main\`" >> $GITHUB_STEP_SUMMARY - echo "- \`rc/*\` → \`main\`" >> $GITHUB_STEP_SUMMARY - exit 1 - fi - - echo "Branch policy: OK (${HEAD} → ${BASE})" - echo "## Branch Policy: Passed" >> $GITHUB_STEP_SUMMARY - - # ── Code Validation ──────────────────────────────────────────────────── - validate: - name: Validate PR - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Detect platform - id: platform - run: | - # Read platform from XML manifest ( tag) or plain text fallback - PLATFORM=$(sed -n 's/.*\([^<]*\)<\/platform>.*/\1/p' .mokogitea/manifest.xml 2>/dev/null | head -1) - [ -z "$PLATFORM" ] && PLATFORM=$(cat .mokogitea/manifest.xml 2>/dev/null | tr -d '[:space:]') - [ -z "$PLATFORM" ] && PLATFORM="generic" - echo "platform=$PLATFORM" >> "$GITHUB_OUTPUT" - - - name: Setup PHP - if: steps.platform.outputs.platform == 'joomla' || steps.platform.outputs.platform == 'dolibarr' - run: | - if ! command -v php &> /dev/null; then - sudo apt-get update -qq - sudo apt-get install -y -qq php-cli php-mbstring php-xml >/dev/null 2>&1 - fi - - - name: PHP syntax check - if: steps.platform.outputs.platform == 'joomla' || steps.platform.outputs.platform == 'dolibarr' - run: | - ERRORS=0 - while IFS= read -r -d '' file; do - if ! php -l "$file" 2>&1 | grep -q "No syntax errors"; then - ERRORS=$((ERRORS + 1)) - fi - done < <(find . -name "*.php" -not -path "./.git/*" -not -path "./vendor/*" -print0) - echo "PHP lint: ${ERRORS} error(s)" - [ "$ERRORS" -eq 0 ] || { echo "::error::PHP syntax errors found"; exit 1; } - - - name: Validate platform manifest - run: | - PLATFORM="${{ steps.platform.outputs.platform }}" - case "$PLATFORM" in - joomla) - MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1) - if [ -z "$MANIFEST" ]; then - echo "::warning::No Joomla manifest found (WaaS site)" - exit 0 - fi - echo "Manifest: ${MANIFEST}" - if command -v php &> /dev/null; then - php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('$MANIFEST'); if(!\$x){foreach(libxml_get_errors() as \$e) echo \$e->message; exit(1);}" || { echo "::error::Manifest XML is malformed"; exit 1; } - fi - for ELEMENT in name version description; do - grep -q "<${ELEMENT}>" "$MANIFEST" || { echo "::error::Missing <${ELEMENT}> in manifest"; exit 1; } - done - echo "Joomla manifest valid" - ;; - dolibarr) - MOD_FILE=$(find . -maxdepth 4 -name "mod*.class.php" ! -path "./.git/*" -exec grep -l 'extends DolibarrModules' {} \; 2>/dev/null | head -1) - if [ -z "$MOD_FILE" ]; then - echo "::error::No mod*.class.php found" - exit 1 - fi - echo "Dolibarr module: ${MOD_FILE}" - ;; - *) - echo "Generic platform — no manifest validation" - ;; - esac - - - name: Check update stream format - run: | - PLATFORM="${{ steps.platform.outputs.platform }}" - case "$PLATFORM" in - joomla) - if [ -f "updates.xml" ]; then - if command -v php &> /dev/null; then - php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('updates.xml'); if(!\$x){foreach(libxml_get_errors() as \$e) echo \$e->message; exit(1);}" || { echo "::error::updates.xml is malformed"; exit 1; } - fi - echo "updates.xml valid" - fi - ;; - dolibarr) - [ -f "update.txt" ] && echo "update.txt present" || echo "::warning::No update.txt" - ;; - esac - - - name: Check changelog has unreleased entry - run: | - if [ ! -f "CHANGELOG.md" ]; then - echo "::warning::No CHANGELOG.md found" - exit 0 - fi - # Check for content under [Unreleased] section - if ! grep -q "## \[Unreleased\]" CHANGELOG.md; then - echo "::error::CHANGELOG.md missing [Unreleased] section" - exit 1 - fi - # Check there's at least one entry (Added/Changed/Fixed/Removed) under Unreleased - UNRELEASED_CONTENT=$(sed -n '/## \[Unreleased\]/,/## \[/p' CHANGELOG.md | grep -cE '^\s*-\s' || true) - if [ "$UNRELEASED_CONTENT" -eq 0 ]; then - echo "::error::CHANGELOG.md [Unreleased] section has no entries. Add a changelog entry describing your changes." - echo "## Changelog Check: Failed" >> $GITHUB_STEP_SUMMARY - echo "The \`[Unreleased]\` section in CHANGELOG.md has no entries." >> $GITHUB_STEP_SUMMARY - echo "Add a line like \`- Description of your change\` under a heading (\`### Added\`, \`### Changed\`, \`### Fixed\`, etc.)" >> $GITHUB_STEP_SUMMARY - exit 1 - fi - echo "Changelog: ${UNRELEASED_CONTENT} entry/entries in [Unreleased]" - - - name: Verify package source - run: | - SOURCE_DIR="src" - [ ! -d "$SOURCE_DIR" ] && SOURCE_DIR="htdocs" - if [ ! -d "$SOURCE_DIR" ]; then - echo "::warning::No src/ or htdocs/ directory" - exit 0 - fi - FILE_COUNT=$(find "$SOURCE_DIR" -type f | wc -l) - echo "Source: ${FILE_COUNT} files" - [ "$FILE_COUNT" -gt 0 ] || { echo "::error::Source directory is empty"; exit 1; } - - # ── Pre-Release RC Build ───────────────────────────────────────────────── - pre-release: - name: Build RC Package - runs-on: ubuntu-latest - needs: [branch-policy, validate] - - steps: - - name: Trigger RC pre-release - env: - GA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} - REPO: ${{ github.repository }} - BRANCH: ${{ github.head_ref }} - GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} - run: | - curl -s -X POST "${GITEA_URL}/api/v1/repos/${REPO}/actions/workflows/pre-release.yml/dispatches" -H "Authorization: token ${GITEA_TOKEN}" -H "Content-Type: application/json" -d "{\"ref\":\"${BRANCH}\",\"inputs\":{\"stability\":\"release-candidate\"}}" - echo "### Pre-Release" >> $GITHUB_STEP_SUMMARY - echo "Triggered RC build on branch \`${BRANCH}\`" >> $GITHUB_STEP_SUMMARY +# Copyright (C) 2026 Moko Consulting +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# FILE INFORMATION +# DEFGROUP: Gitea.Workflow +# INGROUP: moko-platform.CI +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform +# PATH: /templates/workflows/universal/pr-check.yml.template +# VERSION: 09.23.00 +# BRIEF: PR gate — branch policy + code validation before merge + +name: "Universal: PR Check" + +on: + pull_request: + types: [opened, synchronize, reopened, edited] + +permissions: + contents: read + pull-requests: write + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + +jobs: + # ── Branch Policy ────────────────────────────────────────────────────── + branch-policy: + name: Branch Policy + runs-on: ubuntu-latest + steps: + - name: Check branch merge target + run: | + HEAD="${{ github.head_ref }}" + BASE="${{ github.base_ref }}" + + echo "PR: ${HEAD} → ${BASE}" + + ALLOWED=true + REASON="" + + case "$HEAD" in + feature/*|feat/*) + if [ "$BASE" != "dev" ]; then + ALLOWED=false + REASON="Feature branches must target 'dev', not '${BASE}'" + fi + ;; + fix/*|bugfix/*) + if [ "$BASE" != "dev" ]; then + ALLOWED=false + REASON="Fix branches must target 'dev', not '${BASE}'" + fi + ;; + patch/*) + if [ "$BASE" != "dev" ] && [ "$BASE" != "rc" ]; then + ALLOWED=false + REASON="Patch branches must target 'dev' or 'rc', not '${BASE}'" + fi + ;; + hotfix/*) + if [ "$BASE" != "dev" ] && [ "$BASE" != "main" ]; then + ALLOWED=false + REASON="Hotfix branches can only target 'dev' or 'main', not '${BASE}'" + fi + ;; + rc) + if [ "$BASE" != "main" ]; then + ALLOWED=false + REASON="RC branch can only merge into 'main', not '${BASE}'" + fi + ;; + dev) + if [ "$BASE" != "main" ]; then + ALLOWED=false + REASON="Dev branch can only merge into 'main', not '${BASE}'" + fi + ;; + esac + + if [ "$ALLOWED" = false ]; then + echo "::error::${REASON}" + echo "## Branch Policy Violation" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "${REASON}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Allowed merge paths:" >> $GITHUB_STEP_SUMMARY + echo "- \`feature/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY + echo "- \`fix/*\` → \`dev\`" >> $GITHUB_STEP_SUMMARY + echo "- \`hotfix/*\` → \`dev\` or \`main\`" >> $GITHUB_STEP_SUMMARY + echo "- \`dev\` → \`main\`" >> $GITHUB_STEP_SUMMARY + echo "- \`rc/*\` → \`main\`" >> $GITHUB_STEP_SUMMARY + exit 1 + fi + + echo "Branch policy: OK (${HEAD} → ${BASE})" + echo "## Branch Policy: Passed" >> $GITHUB_STEP_SUMMARY + + # ── Code Validation ──────────────────────────────────────────────────── + validate: + name: Validate PR + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Detect platform + id: platform + run: | + # Read platform from XML manifest ( tag) or plain text fallback + PLATFORM=$(sed -n 's/.*\([^<]*\)<\/platform>.*/\1/p' .mokogitea/manifest.xml 2>/dev/null | head -1) + [ -z "$PLATFORM" ] && PLATFORM=$(cat .mokogitea/manifest.xml 2>/dev/null | tr -d '[:space:]') + [ -z "$PLATFORM" ] && PLATFORM="generic" + echo "platform=$PLATFORM" >> "$GITHUB_OUTPUT" + + - name: Setup PHP + if: steps.platform.outputs.platform == 'joomla' || steps.platform.outputs.platform == 'dolibarr' + run: | + if ! command -v php &> /dev/null; then + sudo apt-get update -qq + sudo apt-get install -y -qq php-cli php-mbstring php-xml >/dev/null 2>&1 + fi + + - name: PHP syntax check + if: steps.platform.outputs.platform == 'joomla' || steps.platform.outputs.platform == 'dolibarr' + run: | + ERRORS=0 + while IFS= read -r -d '' file; do + if ! php -l "$file" 2>&1 | grep -q "No syntax errors"; then + ERRORS=$((ERRORS + 1)) + fi + done < <(find . -name "*.php" -not -path "./.git/*" -not -path "./vendor/*" -print0) + echo "PHP lint: ${ERRORS} error(s)" + [ "$ERRORS" -eq 0 ] || { echo "::error::PHP syntax errors found"; exit 1; } + + - name: Validate platform manifest + run: | + PLATFORM="${{ steps.platform.outputs.platform }}" + case "$PLATFORM" in + joomla) + MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '/dev/null | head -1) + if [ -z "$MANIFEST" ]; then + echo "::warning::No Joomla manifest found (WaaS site)" + exit 0 + fi + echo "Manifest: ${MANIFEST}" + if command -v php &> /dev/null; then + php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('$MANIFEST'); if(!\$x){foreach(libxml_get_errors() as \$e) echo \$e->message; exit(1);}" || { echo "::error::Manifest XML is malformed"; exit 1; } + fi + for ELEMENT in name version description; do + grep -q "<${ELEMENT}>" "$MANIFEST" || { echo "::error::Missing <${ELEMENT}> in manifest"; exit 1; } + done + echo "Joomla manifest valid" + ;; + dolibarr) + MOD_FILE=$(find . -maxdepth 4 -name "mod*.class.php" ! -path "./.git/*" -exec grep -l 'extends DolibarrModules' {} \; 2>/dev/null | head -1) + if [ -z "$MOD_FILE" ]; then + echo "::error::No mod*.class.php found" + exit 1 + fi + echo "Dolibarr module: ${MOD_FILE}" + ;; + *) + echo "Generic platform — no manifest validation" + ;; + esac + + - name: Check update stream format + run: | + PLATFORM="${{ steps.platform.outputs.platform }}" + case "$PLATFORM" in + joomla) + if [ -f "updates.xml" ]; then + if command -v php &> /dev/null; then + php -r "libxml_use_internal_errors(true); \$x = simplexml_load_file('updates.xml'); if(!\$x){foreach(libxml_get_errors() as \$e) echo \$e->message; exit(1);}" || { echo "::error::updates.xml is malformed"; exit 1; } + fi + echo "updates.xml valid" + fi + ;; + dolibarr) + [ -f "update.txt" ] && echo "update.txt present" || echo "::warning::No update.txt" + ;; + esac + + - name: Check changelog has unreleased entry + run: | + if [ ! -f "CHANGELOG.md" ]; then + echo "::warning::No CHANGELOG.md found" + exit 0 + fi + # Check for content under [Unreleased] section + if ! grep -q "## \[Unreleased\]" CHANGELOG.md; then + echo "::error::CHANGELOG.md missing [Unreleased] section" + exit 1 + fi + # Check there's at least one entry (Added/Changed/Fixed/Removed) under Unreleased + UNRELEASED_CONTENT=$(sed -n '/## \[Unreleased\]/,/## \[/p' CHANGELOG.md | grep -cE '^\s*-\s' || true) + if [ "$UNRELEASED_CONTENT" -eq 0 ]; then + echo "::error::CHANGELOG.md [Unreleased] section has no entries. Add a changelog entry describing your changes." + echo "## Changelog Check: Failed" >> $GITHUB_STEP_SUMMARY + echo "The \`[Unreleased]\` section in CHANGELOG.md has no entries." >> $GITHUB_STEP_SUMMARY + echo "Add a line like \`- Description of your change\` under a heading (\`### Added\`, \`### Changed\`, \`### Fixed\`, etc.)" >> $GITHUB_STEP_SUMMARY + exit 1 + fi + echo "Changelog: ${UNRELEASED_CONTENT} entry/entries in [Unreleased]" + + - name: Verify package source + run: | + SOURCE_DIR="src" + [ ! -d "$SOURCE_DIR" ] && SOURCE_DIR="htdocs" + if [ ! -d "$SOURCE_DIR" ]; then + echo "::warning::No src/ or htdocs/ directory" + exit 0 + fi + FILE_COUNT=$(find "$SOURCE_DIR" -type f | wc -l) + echo "Source: ${FILE_COUNT} files" + [ "$FILE_COUNT" -gt 0 ] || { echo "::error::Source directory is empty"; exit 1; } + + # ── Pre-Release RC Build ───────────────────────────────────────────────── + pre-release: + name: Build RC Package + runs-on: ubuntu-latest + needs: [branch-policy, validate] + + steps: + - name: Trigger RC pre-release + env: + GA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + REPO: ${{ github.repository }} + BRANCH: ${{ github.head_ref }} + GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + run: | + curl -s -X POST "${GITEA_URL}/api/v1/repos/${REPO}/actions/workflows/pre-release.yml/dispatches" -H "Authorization: token ${GITEA_TOKEN}" -H "Content-Type: application/json" -d "{\"ref\":\"${BRANCH}\",\"inputs\":{\"stability\":\"release-candidate\"}}" + echo "### Pre-Release" >> $GITHUB_STEP_SUMMARY + echo "Triggered RC build on branch \`${BRANCH}\`" >> $GITHUB_STEP_SUMMARY + + # ── Issue Reporter ────────────────────────────────────────────────────── + report-issues: + name: Report Issues + runs-on: ubuntu-latest + needs: [branch-policy, validate] + if: >- + always() && + needs.validate.result == 'failure' + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + sparse-checkout: automation/ci-issue-reporter.sh + sparse-checkout-cone-mode: false + + - name: "File issue for PR validation failure" + env: + GITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + run: | + chmod +x automation/ci-issue-reporter.sh + ./automation/ci-issue-reporter.sh \ + --gate "PR Validation" \ + --workflow "PR Check" \ + --severity error \ + --details "PR validation failed (syntax, manifest, changelog, or source checks). See the CI run for the specific check that failed." -- 2.52.0 From 995fc4b591e57ced20eb5988693ec09798080e4a Mon Sep 17 00:00:00 2001 From: Moko Consulting Date: Tue, 2 Jun 2026 21:33:07 +0000 Subject: [PATCH 049/142] chore(ci): sync CI issue reporter from Template-Joomla --- automation/ci-issue-reporter.sh | 237 ++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 automation/ci-issue-reporter.sh diff --git a/automation/ci-issue-reporter.sh b/automation/ci-issue-reporter.sh new file mode 100644 index 0000000..65c47ba --- /dev/null +++ b/automation/ci-issue-reporter.sh @@ -0,0 +1,237 @@ +#!/usr/bin/env bash +# ============================================================================ +# Copyright (C) 2026 Moko Consulting +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# FILE INFORMATION +# DEFGROUP: Automation.CI +# INGROUP: moko-platform.Automation +# REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform +# PATH: /automation/ci-issue-reporter.sh +# VERSION: 09.23.00 +# BRIEF: Creates or updates a Gitea issue when a CI gate fails. +# Deduplicates by searching open issues with the "ci-auto" label +# whose title matches the gate. If a matching issue exists, a comment +# is appended instead of opening a duplicate. +# ============================================================================ + +set -euo pipefail + +# ── Defaults ──────────────────────────────────────────────────────────────── +GITEA_URL="${GITEA_URL:-https://git.mokoconsulting.tech}" +GITEA_TOKEN="${GITEA_TOKEN:-}" +REPO="${GITHUB_REPOSITORY:-}" +RUN_URL="${GITHUB_SERVER_URL:-${GITEA_URL}}/${REPO}/actions/runs/${GITHUB_RUN_ID:-0}" +LABEL_NAME="ci-auto" +LABEL_COLOR="#e11d48" + +GATE="" +DETAILS="" +SEVERITY="error" +WORKFLOW="" + +# ── Parse arguments ───────────────────────────────────────────────────────── +usage() { + cat </dev/null || echo "000") + + if [[ "$exists" == "200" ]]; then + # Check if label already exists + local found + found=$(curl -sf \ + -H "Authorization: token ${GITEA_TOKEN}" \ + "${API}/labels" 2>/dev/null \ + | grep -o "\"name\":\"${LABEL_NAME}\"" || true) + + if [[ -z "$found" ]]; then + curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${API}/labels" \ + -d "{\"name\":\"${LABEL_NAME}\",\"color\":\"${LABEL_COLOR}\",\"description\":\"Auto-created by CI issue reporter\"}" \ + > /dev/null 2>&1 || true + fi + fi +} + +# ── Search for existing open issue ────────────────────────────────────────── +find_existing_issue() { + # URL-encode the gate name for the query + local query + query=$(printf '%s' "[CI] ${GATE}" | sed 's/ /%20/g; s/\[/%5B/g; s/\]/%5D/g') + + local response + response=$(curl -sf \ + -H "Authorization: token ${GITEA_TOKEN}" \ + "${API}/issues?type=issues&state=open&labels=${LABEL_NAME}&q=${query}&limit=5" \ + 2>/dev/null || echo "[]") + + # Extract the first matching issue number + echo "$response" \ + | grep -oP '"number":\s*\K[0-9]+' \ + | head -1 +} + +# ── Build issue body ──────────────────────────────────────────────────────── +build_body() { + local severity_badge + if [[ "$SEVERITY" == "error" ]]; then + severity_badge="**Severity:** Error" + else + severity_badge="**Severity:** Warning" + fi + + cat </dev/null) + + HTTP=$(curl -sf -o /dev/null -w '%{http_code}' -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${API}/issues/${EXISTING}/comments" \ + -d "${COMMENT_JSON}" 2>/dev/null || echo "000") + + if [[ "$HTTP" == "201" ]]; then + echo "Commented on existing issue #${EXISTING}" + else + echo "WARNING: Failed to comment on issue #${EXISTING} (HTTP ${HTTP})" + fi +else + # Create new issue + ISSUE_BODY=$(build_body) + ISSUE_JSON=$(python3 -c " +import sys, json +body = sys.stdin.read() +print(json.dumps({ + 'title': sys.argv[1], + 'body': body, + 'labels': [] +}))" "$TITLE" <<< "$ISSUE_BODY" 2>/dev/null) + + # Create the issue + RESPONSE=$(curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${API}/issues" \ + -d "${ISSUE_JSON}" 2>/dev/null || echo "{}") + + ISSUE_NUM=$(echo "$RESPONSE" | grep -oP '"number":\s*\K[0-9]+' | head -1) + + if [[ -n "$ISSUE_NUM" ]]; then + # Apply label (separate call — more reliable across Gitea versions) + LABEL_ID=$(curl -sf \ + -H "Authorization: token ${GITEA_TOKEN}" \ + "${API}/labels" 2>/dev/null \ + | grep -oP "\"id\":\s*\K[0-9]+(?=[^}]*\"name\":\s*\"${LABEL_NAME}\")" \ + | head -1 || true) + + if [[ -n "$LABEL_ID" ]]; then + curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${API}/issues/${ISSUE_NUM}/labels" \ + -d "{\"labels\":[${LABEL_ID}]}" \ + > /dev/null 2>&1 || true + fi + + echo "Created issue #${ISSUE_NUM}: ${TITLE}" + else + echo "WARNING: Failed to create issue" + echo "Response: ${RESPONSE}" + fi +fi -- 2.52.0 From 80c2658b063159250eae918820bdf22d17b334a6 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 16:39:06 -0500 Subject: [PATCH 050/142] feat: customer portal - frontend ticket submission and history Frontend (site-side) views for authenticated users: Ticket List (view=tickets): - Shows user's own tickets with status badges - Collapsible new ticket form with category + priority - Redirects guests to login with return URL Ticket Detail (view=ticket): - Conversation thread (excludes internal notes) - Staff replies highlighted with badge - Reply form (disabled for closed/resolved tickets) - User can only see their own tickets Also fixed .gitignore to allow src/packages/*/site/ directories. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitignore | 1 + src/packages/com_mokowaas/mokowaas.xml | 7 + .../site/language/en-GB/com_mokowaas.ini | 11 ++ .../com_mokowaas/site/services/provider.php | 38 +++++ .../site/src/Controller/DisplayController.php | 110 +++++++++++++++ .../site/src/View/Ticket/HtmlView.php | 64 +++++++++ .../site/src/View/Tickets/HtmlView.php | 56 ++++++++ .../com_mokowaas/site/tmpl/ticket/default.php | 126 +++++++++++++++++ .../site/tmpl/tickets/default.php | 133 ++++++++++++++++++ 9 files changed, 546 insertions(+) create mode 100644 src/packages/com_mokowaas/site/language/en-GB/com_mokowaas.ini create mode 100644 src/packages/com_mokowaas/site/services/provider.php create mode 100644 src/packages/com_mokowaas/site/src/Controller/DisplayController.php create mode 100644 src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php create mode 100644 src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php create mode 100644 src/packages/com_mokowaas/site/tmpl/ticket/default.php create mode 100644 src/packages/com_mokowaas/site/tmpl/tickets/default.php diff --git a/.gitignore b/.gitignore index ee50256..e22eb9c 100644 --- a/.gitignore +++ b/.gitignore @@ -122,6 +122,7 @@ build/ dist/ out/ site/ +!src/packages/*/site/ *.map *.css.map *.js.map diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index e13f7fe..391a8b8 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -47,6 +47,13 @@ + + language + services + src + tmpl + + admin/sql/install.mysql.sql diff --git a/src/packages/com_mokowaas/site/language/en-GB/com_mokowaas.ini b/src/packages/com_mokowaas/site/language/en-GB/com_mokowaas.ini new file mode 100644 index 0000000..3047c85 --- /dev/null +++ b/src/packages/com_mokowaas/site/language/en-GB/com_mokowaas.ini @@ -0,0 +1,11 @@ +; MokoWaaS Customer Portal - Language Strings +; Copyright (C) 2026 Moko Consulting. All rights reserved. +; License: GPL-3.0-or-later + +COM_MOKOWAAS_PORTAL_TITLE="Support Portal" +COM_MOKOWAAS_PORTAL_MY_TICKETS="My Support Tickets" +COM_MOKOWAAS_PORTAL_NEW_TICKET="New Ticket" +COM_MOKOWAAS_PORTAL_SUBMIT="Submit Ticket" +COM_MOKOWAAS_PORTAL_REPLY="Send Reply" +COM_MOKOWAAS_PORTAL_NO_TICKETS="You haven't submitted any support tickets yet." +COM_MOKOWAAS_PORTAL_LOGIN_REQUIRED="Please log in to access the support portal." diff --git a/src/packages/com_mokowaas/site/services/provider.php b/src/packages/com_mokowaas/site/services/provider.php new file mode 100644 index 0000000..cb74ca3 --- /dev/null +++ b/src/packages/com_mokowaas/site/services/provider.php @@ -0,0 +1,38 @@ +registerServiceProvider(new MVCFactory('\\Moko\\Component\\MokoWaaS')); + $container->registerServiceProvider(new ComponentDispatcherFactory('\\Moko\\Component\\MokoWaaS')); + + $container->set( + ComponentInterface::class, + function (Container $container) { + $component = new \Joomla\CMS\Extension\MVCComponent( + $container->get(ComponentDispatcherFactoryInterface::class) + ); + $component->setMVCFactory($container->get(MVCFactoryInterface::class)); + + return $component; + } + ); + } +}; diff --git a/src/packages/com_mokowaas/site/src/Controller/DisplayController.php b/src/packages/com_mokowaas/site/src/Controller/DisplayController.php new file mode 100644 index 0000000..15a90e6 --- /dev/null +++ b/src/packages/com_mokowaas/site/src/Controller/DisplayController.php @@ -0,0 +1,110 @@ +getIdentity(); + + if ($user->guest) + { + Factory::getApplication()->enqueueMessage('Please log in to access the support portal.', 'warning'); + Factory::getApplication()->redirect(Route::_('index.php?option=com_users&view=login&return=' . base64_encode('index.php?option=com_mokowaas&view=tickets'), false)); + + return; + } + + return parent::display($cachable, $urlparams); + } + + /** + * Submit a new ticket from frontend. + */ + public function submitTicket() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + $user = Factory::getApplication()->getIdentity(); + + if ($user->guest) + { + $this->jsonResponse(['success' => false, 'message' => 'Please log in.']); + } + + $app = Factory::getApplication(); + $input = $app->getInput(); + + // Use admin model for ticket creation + $model = $this->getModel('Tickets', 'Administrator'); + + $result = $model->createTicket([ + 'subject' => $input->getString('subject', ''), + 'body' => $input->getRaw('body', ''), + 'priority' => $input->getString('priority', 'normal'), + 'category_id' => $input->getInt('category_id', 0), + ]); + + $this->jsonResponse($result); + } + + /** + * Submit a reply from frontend. + */ + public function submitReply() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + $user = Factory::getApplication()->getIdentity(); + + if ($user->guest) + { + $this->jsonResponse(['success' => false, 'message' => 'Please log in.']); + } + + $input = Factory::getApplication()->getInput(); + $model = $this->getModel('Tickets', 'Administrator'); + + // Verify user owns this ticket + $ticketId = $input->getInt('ticket_id', 0); + $ticket = $model->getTicket($ticketId); + + if (!$ticket || (int) $ticket->created_by !== $user->id) + { + $this->jsonResponse(['success' => false, 'message' => 'Ticket not found.']); + } + + $result = $model->addReply( + $ticketId, + $input->getRaw('body', ''), + false + ); + + $this->jsonResponse($result); + } + + private function jsonResponse(array $data): void + { + $app = Factory::getApplication(); + $app->setHeader('Content-Type', 'application/json'); + echo json_encode($data); + $app->close(); + } +} diff --git a/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php b/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php new file mode 100644 index 0000000..c5a929f --- /dev/null +++ b/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php @@ -0,0 +1,64 @@ +get('Joomla\Database\DatabaseInterface'); + $user = Factory::getApplication()->getIdentity(); + $id = Factory::getApplication()->getInput()->getInt('id', 0); + + // Get ticket — only if owned by this user + $query = $db->getQuery(true) + ->select([ + $db->quoteName('t') . '.*', + $db->quoteName('c.title', 'category_title'), + ]) + ->from($db->quoteName('#__mokowaas_tickets', 't')) + ->leftJoin($db->quoteName('#__mokowaas_ticket_categories', 'c') . ' ON c.id = t.category_id') + ->where($db->quoteName('t.id') . ' = ' . $id) + ->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id); + $db->setQuery($query); + $this->ticket = $db->loadObject(); + + if (!$this->ticket) + { + Factory::getApplication()->enqueueMessage('Ticket not found.', 'error'); + Factory::getApplication()->redirect(Route::_('index.php?option=com_mokowaas&view=tickets', false)); + + return; + } + + // Load replies (exclude internal notes) + $query = $db->getQuery(true) + ->select([ + $db->quoteName('r') . '.*', + $db->quoteName('u.name', 'user_name'), + ]) + ->from($db->quoteName('#__mokowaas_ticket_replies', 'r')) + ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = r.user_id') + ->where($db->quoteName('r.ticket_id') . ' = ' . $id) + ->where($db->quoteName('r.is_internal') . ' = 0') + ->order($db->quoteName('r.created') . ' ASC'); + $db->setQuery($query); + $this->ticket->replies = $db->loadObjectList() ?: []; + + parent::display($tpl); + } +} diff --git a/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php b/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php new file mode 100644 index 0000000..933e5c5 --- /dev/null +++ b/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php @@ -0,0 +1,56 @@ +get('Joomla\Database\DatabaseInterface'); + $user = Factory::getApplication()->getIdentity(); + + // Get user's tickets + $query = $db->getQuery(true) + ->select([ + $db->quoteName('t.id'), + $db->quoteName('t.subject'), + $db->quoteName('t.status'), + $db->quoteName('t.priority'), + $db->quoteName('t.created'), + $db->quoteName('t.modified'), + $db->quoteName('c.title', 'category_title'), + ]) + ->from($db->quoteName('#__mokowaas_tickets', 't')) + ->leftJoin($db->quoteName('#__mokowaas_ticket_categories', 'c') . ' ON c.id = t.category_id') + ->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id) + ->order($db->quoteName('t.created') . ' DESC') + ->setLimit(50); + $db->setQuery($query); + $this->tickets = $db->loadObjectList() ?: []; + + // Get categories for new ticket form + $query = $db->getQuery(true) + ->select([$db->quoteName('id'), $db->quoteName('title')]) + ->from($db->quoteName('#__mokowaas_ticket_categories')) + ->where($db->quoteName('published') . ' = 1') + ->order($db->quoteName('ordering') . ' ASC'); + $db->setQuery($query); + $this->categories = $db->loadObjectList() ?: []; + + parent::display($tpl); + } +} diff --git a/src/packages/com_mokowaas/site/tmpl/ticket/default.php b/src/packages/com_mokowaas/site/tmpl/ticket/default.php new file mode 100644 index 0000000..5c6d135 --- /dev/null +++ b/src/packages/com_mokowaas/site/tmpl/ticket/default.php @@ -0,0 +1,126 @@ +ticket; +$token = Session::getFormToken(); + +$statusLabel = [ + 'open' => 'Open', 'in_progress' => 'In Progress', 'waiting' => 'Awaiting Your Response', + 'resolved' => 'Resolved', 'closed' => 'Closed', +]; +$statusClass = [ + 'open' => 'primary', 'in_progress' => 'info', 'waiting' => 'warning', + 'resolved' => 'success', 'closed' => 'secondary', +]; +?> + +
+ + + +
+
+
+
+

#id; ?> — subject); ?>

+ + category_title ?? 'General'); ?> + · Submitted created, 'M d, Y \a\t H:i'); ?> + · Priority: priority); ?> + +
+ + status] ?? ucfirst($t->status); ?> + +
+
+
+ + +
+
+ You + created, 'M d, Y H:i'); ?> +
+
body)); ?>
+
+ + + replies as $reply): ?> + user_id !== (int) $t->created_by); + ?> +
+
+
+ user_name ?? 'Support'); ?> + + Staff + + created, 'M d, Y H:i'); ?> +
+
+
body)); ?>
+
+ + + + status, ['closed', 'resolved'])): ?> +
+
+
Reply
+ +
+ +
+ + + + +
+
+ +
+ This ticket is status] ?? $t->status); ?>. If you need further help, please open a new ticket. +
+ +
+ + diff --git a/src/packages/com_mokowaas/site/tmpl/tickets/default.php b/src/packages/com_mokowaas/site/tmpl/tickets/default.php new file mode 100644 index 0000000..f9face4 --- /dev/null +++ b/src/packages/com_mokowaas/site/tmpl/tickets/default.php @@ -0,0 +1,133 @@ +tickets; +$categories = $this->categories; +$token = Session::getFormToken(); + +$statusLabel = [ + 'open' => 'Open', 'in_progress' => 'In Progress', 'waiting' => 'Awaiting Response', + 'resolved' => 'Resolved', 'closed' => 'Closed', +]; +$statusClass = [ + 'open' => 'primary', 'in_progress' => 'info', 'waiting' => 'warning', + 'resolved' => 'success', 'closed' => 'secondary', +]; +?> + +
+
+

My Support Tickets

+ +
+ + +
+
+
+
Submit a Support Request
+
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+ + +
+
+
+
+ + + +
+ + You haven't submitted any support tickets yet. Click "New Ticket" above to get started. +
+ + + +
+ + -- 2.52.0 From b37120341f5fdc806e7320f8c32edfbf21472154 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 16:47:21 -0500 Subject: [PATCH 051/142] feat: auto-create Support menu item on package install MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creates a frontend menu item at /support pointing to the customer portal (com_mokowaas&view=tickets). Access level: Registered. Idempotent — skips if already exists. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/script.php | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/src/script.php b/src/script.php index c6a598c..5afddde 100644 --- a/src/script.php +++ b/src/script.php @@ -54,6 +54,9 @@ class Pkg_MokowaasInstallerScript // Set up cpanel module on the admin dashboard $this->setupCpanelModule(); + // Create Support portal menu item on frontend + $this->setupSupportMenuItem(); + // Mark MokoWaaS extensions as protected (prevents disable/uninstall at framework level) $this->protectExtensions(); @@ -699,6 +702,82 @@ class Pkg_MokowaasInstallerScript } } + /** + * Create a "Support" menu item on the frontend main menu. + */ + private function setupSupportMenuItem(): void + { + try + { + $db = Factory::getDbo(); + + $db->setQuery( + $db->getQuery(true) + ->select('COUNT(*)') + ->from($db->quoteName('#__menu')) + ->where($db->quoteName('link') . ' LIKE ' . $db->quote('%com_mokowaas&view=tickets%')) + ->where($db->quoteName('client_id') . ' = 0') + ); + + if ((int) $db->loadResult() > 0) + { + return; + } + + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('extension_id')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')) + ); + $componentId = (int) $db->loadResult(); + + if (!$componentId) + { + return; + } + + $db->setQuery("SELECT id FROM #__menu WHERE menutype = '' AND level = 0 AND client_id = 0 LIMIT 1"); + $rootId = (int) $db->loadResult() ?: 1; + + $db->setQuery('SELECT MAX(rgt) FROM #__menu WHERE client_id = 0'); + $maxRgt = (int) $db->loadResult(); + + $item = (object) [ + 'menutype' => 'mainmenu', + 'title' => 'Support', + 'alias' => 'support', + 'note' => '', + 'path' => 'support', + 'link' => 'index.php?option=com_mokowaas&view=tickets', + 'type' => 'component', + 'published' => 1, + 'parent_id' => $rootId, + 'level' => 1, + 'component_id' => $componentId, + 'checked_out' => null, + 'checked_out_time' => null, + 'browserNav' => 0, + 'access' => 2, + 'img' => '', + 'template_style_id' => 0, + 'params' => '{}', + 'lft' => $maxRgt + 1, + 'rgt' => $maxRgt + 2, + 'home' => 0, + 'language' => '*', + 'client_id' => 0, + ]; + + $db->insertObject('#__menu', $item, 'id'); + } + catch (\Throwable $e) + { + Log::add('Support menu setup error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + /** * One-time migration of params from the monolithic core plugin to * the new feature plugins. Copies security, tenant, and dev params. -- 2.52.0 From ce047016164b84c23a143429aca66fdb5f8535fd Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Tue, 2 Jun 2026 21:51:27 +0000 Subject: [PATCH 052/142] chore: sync .mokogitea/workflows/pr-check.yml from moko-platform [skip ci] --- .mokogitea/workflows/pr-check.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.mokogitea/workflows/pr-check.yml b/.mokogitea/workflows/pr-check.yml index e2c82ef..0ac0ef1 100644 --- a/.mokogitea/workflows/pr-check.yml +++ b/.mokogitea/workflows/pr-check.yml @@ -105,6 +105,19 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Check for merge conflict markers + run: | + CONFLICTS=$(grep -rn '<<<<<<< \|>>>>>>> \|^=======$' --include='*.php' --include='*.xml' --include='*.css' --include='*.js' --include='*.json' --include='*.md' --include='*.yml' --include='*.yaml' --include='*.ini' --include='*.txt' . 2>/dev/null | grep -v '.git/' || true) + if [ -n "$CONFLICTS" ]; then + echo "::error::Merge conflict markers found in source files" + echo "## Conflict Markers Found" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + echo "$CONFLICTS" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + exit 1 + fi + echo "No conflict markers found" + - name: Detect platform id: platform run: | -- 2.52.0 From 4a18318cb9eb482a2a57c56e53db92b6798280a4 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 18:46:12 -0500 Subject: [PATCH 053/142] feat: search KB before submitting ticket (frontend + backend) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both frontend and admin ticket creation now show a KB search step first. User types their issue, Smart Search (com_finder) returns matching articles. If nothing helps, they click through to the ticket form with the search query pre-filled as the subject. Frontend (/support/submit-ticket): - Search input with live results from #__finder_links - Article links open in new tab - "Submit Anyway" shows the ticket form - Falls back to direct form if Smart Search has no indexed content Admin (New Ticket modal): - Same KB search step before the form - Results as clickable list-group items - Modal resets on close Also: - Added searchKb controller task (both frontend + admin) - Added "Submit a Ticket" child menu item under Support on install - Fixed innerHTML → safe DOM methods for search results Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/Controller/DisplayController.php | 42 ++++ .../admin/tmpl/tickets/default.php | 117 ++++++++-- .../site/src/Controller/DisplayController.php | 167 ++++++++++++-- .../com_mokowaas/site/tmpl/tickets/submit.php | 204 ++++++++++++++++++ src/script.php | 36 ++++ 5 files changed, 528 insertions(+), 38 deletions(-) create mode 100644 src/packages/com_mokowaas/site/tmpl/tickets/submit.php diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index fe5e1a8..01ca5a9 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -226,6 +226,48 @@ class DisplayController extends BaseController )); } + // ================================================================== + // KB Search + // ================================================================== + + public function searchKb() + { + $query = Factory::getApplication()->getInput()->getString('q', ''); + + if (strlen($query) < 3) + { + $this->jsonResponse(['results' => []]); + } + + try + { + $db = Factory::getDbo(); + $escaped = $db->quote('%' . $db->escape($query, true) . '%'); + + $results = $db->setQuery( + $db->getQuery(true) + ->select([$db->quoteName('l.title'), $db->quoteName('l.url'), $db->quoteName('l.description')]) + ->from($db->quoteName('#__finder_links', 'l')) + ->where($db->quoteName('l.published') . ' = 1') + ->where('(' . $db->quoteName('l.title') . ' LIKE ' . $escaped + . ' OR ' . $db->quoteName('l.description') . ' LIKE ' . $escaped . ')') + ->order($db->quoteName('l.title') . ' ASC') + ->setLimit(8) + )->loadObjectList() ?: []; + + foreach ($results as $r) + { + $r->description = mb_substr(strip_tags($r->description ?? ''), 0, 150); + } + + $this->jsonResponse(['results' => $results]); + } + catch (\Throwable $e) + { + $this->jsonResponse(['results' => []]); + } + } + // ================================================================== // Importers // ================================================================== diff --git a/src/packages/com_mokowaas/admin/tmpl/tickets/default.php b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php index 8b3a241..5d40328 100644 --- a/src/packages/com_mokowaas/admin/tmpl/tickets/default.php +++ b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php @@ -135,11 +135,25 @@ $priorityBadge = [ diff --git a/src/script.php b/src/script.php index 5afddde..7afd3b8 100644 --- a/src/script.php +++ b/src/script.php @@ -771,6 +771,42 @@ class Pkg_MokowaasInstallerScript ]; $db->insertObject('#__menu', $item, 'id'); + $supportId = (int) $item->id; + + // Create "Submit a Ticket" child menu item + if ($supportId) + { + $db->setQuery('SELECT MAX(rgt) FROM #__menu WHERE client_id = 0'); + $maxRgt2 = (int) $db->loadResult(); + + $child = (object) [ + 'menutype' => 'mainmenu', + 'title' => 'Submit a Ticket', + 'alias' => 'submit-ticket', + 'note' => '', + 'path' => 'support/submit-ticket', + 'link' => 'index.php?option=com_mokowaas&view=tickets&layout=submit', + 'type' => 'component', + 'published' => 1, + 'parent_id' => $supportId, + 'level' => 2, + 'component_id' => $componentId, + 'checked_out' => null, + 'checked_out_time' => null, + 'browserNav' => 0, + 'access' => 2, + 'img' => '', + 'template_style_id' => 0, + 'params' => '{}', + 'lft' => $maxRgt2 + 1, + 'rgt' => $maxRgt2 + 2, + 'home' => 0, + 'language' => '*', + 'client_id' => 0, + ]; + + $db->insertObject('#__menu', $child, 'id'); + } } catch (\Throwable $e) { -- 2.52.0 From fd6c79d3a2fa1303a5cb70249251251a5e671415 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 23:46:30 +0000 Subject: [PATCH 054/142] chore(version): auto-bump 02.32.36 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 47 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 2572b83..30095f8 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.35 + 02.32.36 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index cb6bbab..d689b2d 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.35 +# VERSION: 02.32.36 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index b9c76fb..edd9c8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.35 + VERSION: 02.32.36 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index cae6740..db283c6 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 37185d1..8acbd85 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 15e4be4..23d7ef8 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.35 + VERSION: 02.32.36 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index e3e2e3d..1b864ce 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index b4ffecc..c7ffa0d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.35 +VERSION: 02.32.36 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index cc0002f..3d21447 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.35) +# MokoWaaS Build Guide (VERSION: 02.32.36) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 07c0344..92eea90 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.35) +# MokoWaaS Configuration Guide (VERSION: 02.32.36) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index e7dbaae..98021dd 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.35) +# MokoWaaS Installation Guide (VERSION: 02.32.36) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 8243c0f..0c0e023 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.35) +# MokoWaaS Operations Guide (VERSION: 02.32.36) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 954545a..fea5af8 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.35) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.36) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 1152078..0ea0eb3 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.35) +# MokoWaaS Testing Guide (VERSION: 02.32.36) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 25902a8..5b6a389 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.35) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.36) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index fe439e9..fb05084 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.35) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.36) ## Introduction diff --git a/docs/index.md b/docs/index.md index 83dea72..fbfcdcf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.35 + VERSION: 02.32.36 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.35) +# MokoWaaS Documentation Index (VERSION: 02.32.36) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 784df7d..7f08c68 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.35 + VERSION: 02.32.36 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.35) +# MokoWaaS Plugin Overview (VERSION: 02.32.36) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 083c078..8efbe3b 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.35 +VERSION: 02.32.36 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index bdd309d..2f50b93 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 + 02.32.36 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 112c94a..a7da2b4 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 + 02.32.36 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 73785e8..635d09e 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.35 + * VERSION: 02.32.36 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index dcc2e19..8a27cc8 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.35 + * VERSION: 02.32.36 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index aabbf7d..bff139e 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.35 + * VERSION: 02.32.36 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index cdeb1db..966c5b4 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.35 + * VERSION: 02.32.36 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 9265a9b..0ea18a7 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.35 + * VERSION: 02.32.36 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index a1da112..dcbb7f7 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.35 + * VERSION: 02.32.36 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 36814c1..0da36af 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.35 + * VERSION: 02.32.36 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 8f3ff5f..f0f65df 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.35 + * VERSION: 02.32.36 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index a583d77..6623850 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.35 + * VERSION: 02.32.36 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index f4b62ef..0145742 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.35 + * VERSION: 02.32.36 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index a42360a..e80c974 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 + 02.32.36 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 69e2247..ed34f45 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.35 + * VERSION: 02.32.36 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index cc943fb..a118ce5 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.35 + * VERSION: 02.32.36 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 85a62e4..2003509 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 + 02.32.36 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 79de377..333fdb6 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 + 02.32.36 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 25e1883..f47078c 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 + 02.32.36 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index ebf3832..41eac26 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 + 02.32.36 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 74a5c23..c3ab49c 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 + 02.32.36 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 2b012e1..6fe5a13 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 - 02.32.35 + 02.32.36 + 02.32.36 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index c8fbe7b..d64a96d 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 + 02.32.36 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index edb0525..94327d3 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 - 02.32.35 + 02.32.36 + 02.32.36 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 1486d32..c7ceee6 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.35 - 02.32.35 + 02.32.36 + 02.32.36 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index a50ba24..eada063 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.35 + * VERSION: 02.32.36 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 9b0f543..7ec9ac2 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.35 + * VERSION: 02.32.36 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index f7b6e62..a5eb97a 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.35 + 02.32.36 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index e2d4662..b947f7b 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From b8fbb0d1d66f2d079c2cb911deb0d06258028b95 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 23:46:31 +0000 Subject: [PATCH 055/142] chore: update development channel 02.32.36 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index b947f7b..2a0773f 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.35-dev + 02.32.36-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.35-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.36-dev.zip - 6dc0bc62259de6bd62963a7d663e2aa80d5c0a69a1fd430f5a4a489f794afe34 + d8c4739ac985757071eb0dd00d8ea3b64af7b53d9d18a4654fedcc83ffb24d1b dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 756c2bff32c434961a35d0abe5ebe7a083746cca Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Tue, 2 Jun 2026 23:47:10 +0000 Subject: [PATCH 056/142] chore: sync .mokogitea/workflows/auto-release.yml from moko-platform [skip ci] --- .mokogitea/workflows/auto-release.yml | 555 +++++++++++++------------- 1 file changed, 283 insertions(+), 272 deletions(-) diff --git a/.mokogitea/workflows/auto-release.yml b/.mokogitea/workflows/auto-release.yml index 0b771b6..2325032 100644 --- a/.mokogitea/workflows/auto-release.yml +++ b/.mokogitea/workflows/auto-release.yml @@ -1,272 +1,283 @@ -# Copyright (C) 2026 Moko Consulting -# -# SPDX-License-Identifier: GPL-3.0-or-later -# -# FILE INFORMATION -# DEFGROUP: Gitea.Workflow -# INGROUP: moko-platform.Release -# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform -# PATH: /templates/workflows/universal/auto-release.yml.template -# VERSION: 09.23.00 -# BRIEF: Universal build & release � detects platform from manifest.xml -# -# +========================================================================+ -# | UNIVERSAL BUILD & RELEASE PIPELINE | -# +========================================================================+ -# | | -# | Reads manifest.xml (joomla|dolibarr|generic) to branch logic. | -# | | -# | Platform-specific: | -# | joomla: XML manifest, updates.xml, type-prefixed packages | -# | dolibarr: mod*.class.php, update.txt, dev version reset | -# | generic: README-only, no update stream | -# | | -# +========================================================================+ - -name: "Universal: Build & Release" - -on: - pull_request: - types: [opened, closed] - branches: - - main - workflow_dispatch: - inputs: - action: - description: 'Action to perform' - required: false - type: choice - default: release - options: - - release - - promote-rc - -env: - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} - GITEA_ORG: ${{ vars.GITEA_ORG || github.repository_owner }} - GITEA_REPO: ${{ vars.GITEA_REPO || github.event.repository.name }} - -permissions: - contents: write - -jobs: - # ── PR Opened → Rename branch to RC and build RC release ───────────────────── - promote-rc: - name: Promote to RC - runs-on: release - if: >- - (github.event.action == 'opened' && github.event.pull_request.merged != true) || - (github.event_name == 'workflow_dispatch' && inputs.action == 'promote-rc') - - steps: - - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - with: - token: ${{ secrets.MOKOGITEA_TOKEN }} - fetch-depth: 1 - submodules: recursive - - - name: Setup moko-platform tools - env: - MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} - MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting - run: | - if ! command -v composer &> /dev/null; then - sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 - fi - # Always fetch latest CLI tools — never use stale cache from previous runs - rm -rf /tmp/moko-platform-api - git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/moko-platform.git" \ - /tmp/moko-platform-api - cd /tmp/moko-platform-api - composer install --no-dev --no-interaction --quiet - - - name: Rename branch to rc - run: | - php /tmp/moko-platform-api/cli/branch_rename.php \ - --from "${{ github.event.pull_request.head.ref || 'dev' }}" --to rc \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" \ - --api-base "${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" \ - --pr "${{ github.event.pull_request.number }}" - - - name: Checkout rc and configure git - run: | - git fetch origin rc - git checkout rc - git config --local user.email "gitea-actions[bot]@mokoconsulting.tech" - git config --local user.name "gitea-actions[bot]" - git remote set-url origin "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" - - - name: Publish RC release - run: | - php /tmp/moko-platform-api/cli/release_publish.php \ - --path . --stability rc --bump minor --branch rc \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" - - - name: Summary - if: always() - run: | - echo "## Promoted to Release Candidate" >> $GITHUB_STEP_SUMMARY - echo "Branch renamed to rc, minor bump, RC + lesser stream releases built, updates.xml synced" >> $GITHUB_STEP_SUMMARY - - # ── Merged PR → Build & Release (or promote RC to stable) ──────────────────── - release: - name: Build & Release Pipeline - runs-on: release - if: >- - github.event.pull_request.merged == true || - (github.event_name == 'workflow_dispatch' && inputs.action != 'promote-rc') - - steps: - - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - with: - token: ${{ secrets.MOKOGITEA_TOKEN }} - fetch-depth: 0 - submodules: recursive - - - name: Configure git for bot pushes - run: | - git config --local user.email "gitea-actions[bot]@mokoconsulting.tech" - git config --local user.name "gitea-actions[bot]" - git remote set-url origin "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" - - - name: Setup moko-platform tools - env: - MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} - MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting - COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_MIRROR_TOKEN }}"}}' - run: | - # Ensure PHP + Composer are available - if ! command -v composer &> /dev/null; then - sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 - fi - # Always fetch latest CLI tools — never use stale cache from previous runs - rm -rf /tmp/moko-platform-api - git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/moko-platform.git" \ - /tmp/moko-platform-api - cd /tmp/moko-platform-api - composer install --no-dev --no-interaction --quiet - - - - name: "Publish stable release" - run: | - php /tmp/moko-platform-api/cli/release_publish.php \ - --path . --stability stable --bump minor --branch main \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" - - # -- STEP 9: Mirror to GitHub (stable only) -------------------------------- - - name: "Step 9: Mirror release to GitHub" - if: >- - steps.version.outputs.skip != 'true' && - secrets.GH_MIRROR_TOKEN != '' - continue-on-error: true - run: | - VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - RELEASE_TAG="${{ steps.version.outputs.release_tag }}" - GH_REPO="${{ vars.GH_MIRROR_REPO || github.repository }}" - API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - php /tmp/moko-platform-api/cli/release_mirror.php \ - --version "$VERSION" --tag "$RELEASE_TAG" \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "$API_BASE" \ - --gh-token "${{ secrets.GH_MIRROR_TOKEN }}" --gh-repo "$GH_REPO" \ - --branch main 2>&1 || true - echo "GitHub mirror updated" >> $GITHUB_STEP_SUMMARY - - # -- STEP 10: Sync main branch to GitHub mirror ---------------------------- - - name: "Step 10: Push main to GitHub mirror" - if: >- - steps.version.outputs.skip != 'true' && - secrets.GH_MIRROR_TOKEN != '' - continue-on-error: true - run: | - GH_REPO="${{ vars.GH_MIRROR_REPO || github.repository }}" - GH_ORG=$(echo "$GH_REPO" | cut -d/ -f1) - GH_NAME=$(echo "$GH_REPO" | cut -d/ -f2) - git remote add github "https://x-access-token:${{ secrets.GH_MIRROR_TOKEN }}@github.com/${GH_ORG}/${GH_NAME}.git" 2>/dev/null || \ - git remote set-url github "https://x-access-token:${{ secrets.GH_MIRROR_TOKEN }}@github.com/${GH_ORG}/${GH_NAME}.git" - git fetch origin main --depth=1 - git push github origin/main:refs/heads/main --force 2>/dev/null \ - && echo "main branch pushed to GitHub mirror" \ - || echo "WARNING: GitHub mirror push failed" - - - name: "Step 11: Delete rc branch and recreate dev from main" - if: steps.version.outputs.skip != 'true' - continue-on-error: true - run: | - API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" - - # Delete rc branch (ephemeral — created by promote-rc) - curl -sf -X DELETE -H "Authorization: token ${TOKEN}" \ - "${API_BASE}/branches/rc" 2>/dev/null \ - && echo "Deleted rc branch" || echo "rc branch not found" - - # Delete dev branch - curl -sf -X DELETE -H "Authorization: token ${TOKEN}" \ - "${API_BASE}/branches/dev" 2>/dev/null && echo "Deleted dev branch" - - # Recreate dev from main (now includes version bump + changelog promotion) - curl -sf -X POST -H "Authorization: token ${TOKEN}" \ - -H "Content-Type: application/json" \ - "${API_BASE}/branches" \ - -d '{"new_branch_name":"dev","old_branch_name":"main"}' 2>/dev/null && echo "Recreated dev from main" - - echo "Pre-release branches cleaned, dev reset from main" >> $GITHUB_STEP_SUMMARY - - - name: "Step 12: Create version branch from main" - if: steps.version.outputs.skip != 'true' - continue-on-error: true - run: | - API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" - VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - BRANCH_NAME="version/${VERSION}" - MAIN_SHA=$(git rev-parse HEAD) - - # Delete old version branch if it exists (same version re-release) - curl -sf -X DELETE -H "Authorization: token ${TOKEN}" "${API_BASE}/branches/${BRANCH_NAME}" 2>/dev/null && echo "Deleted old ${BRANCH_NAME}" - - # Create version/XX.YY.ZZ from main - curl -sf -X POST -H "Authorization: token ${TOKEN}" -H "Content-Type: application/json" "${API_BASE}/branches" -d "{\"new_branch_name\":\"${BRANCH_NAME}\",\"old_branch_name\":\"main\"}" 2>/dev/null && echo "Created ${BRANCH_NAME} from main (${MAIN_SHA})" || echo "WARNING: ${BRANCH_NAME} creation failed" - - echo "Version branch created: ${BRANCH_NAME} (${MAIN_SHA})" >> $GITHUB_STEP_SUMMARY - - - - # -- Dolibarr post-release: Reset dev version ----------------------------- - - name: "Post-release: Reset dev version" - if: steps.version.outputs.skip != 'true' - continue-on-error: true - run: | - API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - php /tmp/moko-platform-api/cli/version_reset_dev.php \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "${API_BASE}" \ - --branch dev --path . 2>&1 || true - - # -- Summary -------------------------------------------------------------- - - name: Pipeline Summary - if: always() - run: | - VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" - PLATFORM="${{ steps.platform.outputs.platform }}" - if [ "${{ steps.version.outputs.skip }}" = "true" ]; then - echo "## Release Skipped" >> $GITHUB_STEP_SUMMARY - echo "No VERSION in README.md" >> $GITHUB_STEP_SUMMARY - elif [ "${{ steps.check.outputs.already_released }}" = "true" ]; then - echo "## Already Released — ${VERSION}" >> $GITHUB_STEP_SUMMARY - else - echo "" >> $GITHUB_STEP_SUMMARY - echo "## Build & Release Complete (${PLATFORM})" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "| Step | Result |" >> $GITHUB_STEP_SUMMARY - echo "|------|--------|" >> $GITHUB_STEP_SUMMARY - echo "| Platform | \`${PLATFORM}\` |" >> $GITHUB_STEP_SUMMARY - echo "| Version | \`${VERSION}\` |" >> $GITHUB_STEP_SUMMARY - echo "| Branch | \`${{ steps.version.outputs.branch }}\` |" >> $GITHUB_STEP_SUMMARY - echo "| Tag | \`${{ steps.version.outputs.tag }}\` |" >> $GITHUB_STEP_SUMMARY - echo "| Release | [View](${GITEA_URL}/${GITEA_ORG}/${GITEA_REPO}/releases/tag/${{ steps.version.outputs.tag }}) |" >> $GITHUB_STEP_SUMMARY - fi +# Copyright (C) 2026 Moko Consulting +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# FILE INFORMATION +# DEFGROUP: Gitea.Workflow +# INGROUP: moko-platform.Release +# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform +# PATH: /templates/workflows/universal/auto-release.yml.template +# VERSION: 05.00.00 +# BRIEF: Universal build & release � detects platform from manifest.xml +# +# +========================================================================+ +# | UNIVERSAL BUILD & RELEASE PIPELINE | +# +========================================================================+ +# | | +# | Reads manifest.xml (joomla|dolibarr|generic) to branch logic. | +# | | +# | Platform-specific: | +# | joomla: XML manifest, updates.xml, type-prefixed packages | +# | dolibarr: mod*.class.php, update.txt, dev version reset | +# | generic: README-only, no update stream | +# | | +# +========================================================================+ + +name: "Universal: Build & Release" + +on: + pull_request: + types: [opened, closed] + branches: + - main + workflow_dispatch: + inputs: + action: + description: 'Action to perform' + required: false + type: choice + default: release + options: + - release + - promote-rc + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + GITEA_ORG: ${{ vars.GITEA_ORG || github.repository_owner }} + GITEA_REPO: ${{ vars.GITEA_REPO || github.event.repository.name }} + +permissions: + contents: write + +jobs: + # ── PR Opened → Rename branch to RC and build RC release ───────────────────── + promote-rc: + name: Promote to RC + runs-on: release + if: >- + (github.event.action == 'opened' && github.event.pull_request.merged != true) || + (github.event_name == 'workflow_dispatch' && inputs.action == 'promote-rc') + + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + token: ${{ secrets.MOKOGITEA_TOKEN }} + fetch-depth: 1 + + - name: Setup moko-platform tools + env: + MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting + run: | + if ! command -v composer &> /dev/null; then + sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 + fi + # Always fetch latest CLI tools — never use stale cache from previous runs + rm -rf /tmp/moko-platform-api + git clone --depth 1 --branch main --quiet \ + "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/moko-platform.git" \ + /tmp/moko-platform-api + cd /tmp/moko-platform-api + composer install --no-dev --no-interaction --quiet + + - name: Rename branch to rc + run: | + php /tmp/moko-platform-api/cli/branch_rename.php \ + --from "${{ github.event.pull_request.head.ref || 'dev' }}" --to rc \ + --token "${{ secrets.MOKOGITEA_TOKEN }}" \ + --api-base "${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" \ + --pr "${{ github.event.pull_request.number }}" + + - name: Checkout rc and configure git + run: | + git fetch origin rc + git checkout rc + git config --local user.email "gitea-actions[bot]@mokoconsulting.tech" + git config --local user.name "gitea-actions[bot]" + git remote set-url origin "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" + + - name: Publish RC release + run: | + php /tmp/moko-platform-api/cli/release_publish.php \ + --path . --stability rc --bump minor --branch rc \ + --token "${{ secrets.MOKOGITEA_TOKEN }}" + + - name: Summary + if: always() + run: | + echo "## Promoted to Release Candidate" >> $GITHUB_STEP_SUMMARY + echo "Branch renamed to rc, minor bump, RC + lesser stream releases built, updates.xml synced" >> $GITHUB_STEP_SUMMARY + + # ── Merged PR → Build & Release (or promote RC to stable) ──────────────────── + release: + name: Build & Release Pipeline + runs-on: release + if: >- + github.event.pull_request.merged == true || + (github.event_name == 'workflow_dispatch' && inputs.action != 'promote-rc') + + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + token: ${{ secrets.MOKOGITEA_TOKEN }} + fetch-depth: 0 + + - name: Configure git for bot pushes + run: | + git config --local user.email "gitea-actions[bot]@mokoconsulting.tech" + git config --local user.name "gitea-actions[bot]" + git remote set-url origin "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" + + - name: Check for merge conflict markers + run: | + CONFLICTS=$(grep -rn '<<<<<<< \|>>>>>>> \|^=======$' --include='*.php' --include='*.xml' --include='*.css' --include='*.js' --include='*.json' --include='*.md' --include='*.yml' --include='*.yaml' --include='*.ini' --include='*.txt' . 2>/dev/null | grep -v '.git/' || true) + if [ -n "$CONFLICTS" ]; then + echo "::error::Merge conflict markers found — aborting release" + echo "## Release Blocked: Conflict Markers" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + echo "$CONFLICTS" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + exit 1 + fi + echo "No conflict markers found" + + - name: Setup moko-platform tools + env: + MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting + COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_MIRROR_TOKEN }}"}}' + run: | + # Ensure PHP + Composer are available + if ! command -v composer &> /dev/null; then + sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1 + fi + # Always fetch latest CLI tools — never use stale cache from previous runs + rm -rf /tmp/moko-platform-api + git clone --depth 1 --branch main --quiet \ + "https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/moko-platform.git" \ + /tmp/moko-platform-api + cd /tmp/moko-platform-api + composer install --no-dev --no-interaction --quiet + + + - name: "Publish stable release" + run: | + php /tmp/moko-platform-api/cli/release_publish.php \ + --path . --stability stable --bump minor --branch main \ + --token "${{ secrets.MOKOGITEA_TOKEN }}" + + # -- STEP 9: Mirror to GitHub (stable only) -------------------------------- + - name: "Step 9: Mirror release to GitHub" + if: >- + steps.version.outputs.skip != 'true' && + secrets.GH_MIRROR_TOKEN != '' + continue-on-error: true + run: | + VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" + RELEASE_TAG="${{ steps.version.outputs.release_tag }}" + GH_REPO="${{ vars.GH_MIRROR_REPO || github.repository }}" + API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + php /tmp/moko-platform-api/cli/release_mirror.php \ + --version "$VERSION" --tag "$RELEASE_TAG" \ + --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "$API_BASE" \ + --gh-token "${{ secrets.GH_MIRROR_TOKEN }}" --gh-repo "$GH_REPO" \ + --branch main 2>&1 || true + echo "GitHub mirror updated" >> $GITHUB_STEP_SUMMARY + + # -- STEP 10: Sync main branch to GitHub mirror ---------------------------- + - name: "Step 10: Push main to GitHub mirror" + if: >- + steps.version.outputs.skip != 'true' && + secrets.GH_MIRROR_TOKEN != '' + continue-on-error: true + run: | + GH_REPO="${{ vars.GH_MIRROR_REPO || github.repository }}" + GH_ORG=$(echo "$GH_REPO" | cut -d/ -f1) + GH_NAME=$(echo "$GH_REPO" | cut -d/ -f2) + git remote add github "https://x-access-token:${{ secrets.GH_MIRROR_TOKEN }}@github.com/${GH_ORG}/${GH_NAME}.git" 2>/dev/null || \ + git remote set-url github "https://x-access-token:${{ secrets.GH_MIRROR_TOKEN }}@github.com/${GH_ORG}/${GH_NAME}.git" + git fetch origin main --depth=1 + git push github origin/main:refs/heads/main --force 2>/dev/null \ + && echo "main branch pushed to GitHub mirror" \ + || echo "WARNING: GitHub mirror push failed" + + - name: "Step 11: Delete rc branch and recreate dev from main" + if: steps.version.outputs.skip != 'true' + continue-on-error: true + run: | + API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" + + # Delete rc branch (ephemeral — created by promote-rc) + curl -sf -X DELETE -H "Authorization: token ${TOKEN}" \ + "${API_BASE}/branches/rc" 2>/dev/null \ + && echo "Deleted rc branch" || echo "rc branch not found" + + # Delete dev branch + curl -sf -X DELETE -H "Authorization: token ${TOKEN}" \ + "${API_BASE}/branches/dev" 2>/dev/null && echo "Deleted dev branch" + + # Recreate dev from main (now includes version bump + changelog promotion) + curl -sf -X POST -H "Authorization: token ${TOKEN}" \ + -H "Content-Type: application/json" \ + "${API_BASE}/branches" \ + -d '{"new_branch_name":"dev","old_branch_name":"main"}' 2>/dev/null && echo "Recreated dev from main" + + echo "Pre-release branches cleaned, dev reset from main" >> $GITHUB_STEP_SUMMARY + + - name: "Step 12: Create version branch from main" + if: steps.version.outputs.skip != 'true' + continue-on-error: true + run: | + API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" + VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" + BRANCH_NAME="version/${VERSION}" + MAIN_SHA=$(git rev-parse HEAD) + + # Delete old version branch if it exists (same version re-release) + curl -sf -X DELETE -H "Authorization: token ${TOKEN}" "${API_BASE}/branches/${BRANCH_NAME}" 2>/dev/null && echo "Deleted old ${BRANCH_NAME}" + + # Create version/XX.YY.ZZ from main + curl -sf -X POST -H "Authorization: token ${TOKEN}" -H "Content-Type: application/json" "${API_BASE}/branches" -d "{\"new_branch_name\":\"${BRANCH_NAME}\",\"old_branch_name\":\"main\"}" 2>/dev/null && echo "Created ${BRANCH_NAME} from main (${MAIN_SHA})" || echo "WARNING: ${BRANCH_NAME} creation failed" + + echo "Version branch created: ${BRANCH_NAME} (${MAIN_SHA})" >> $GITHUB_STEP_SUMMARY + + + + # -- Dolibarr post-release: Reset dev version ----------------------------- + - name: "Post-release: Reset dev version" + if: steps.version.outputs.skip != 'true' + continue-on-error: true + run: | + API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + php /tmp/moko-platform-api/cli/version_reset_dev.php \ + --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "${API_BASE}" \ + --branch dev --path . 2>&1 || true + + # -- Summary -------------------------------------------------------------- + - name: Pipeline Summary + if: always() + run: | + VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" + PLATFORM="${{ steps.platform.outputs.platform }}" + if [ "${{ steps.version.outputs.skip }}" = "true" ]; then + echo "## Release Skipped" >> $GITHUB_STEP_SUMMARY + echo "No VERSION in README.md" >> $GITHUB_STEP_SUMMARY + elif [ "${{ steps.check.outputs.already_released }}" = "true" ]; then + echo "## Already Released — ${VERSION}" >> $GITHUB_STEP_SUMMARY + else + echo "" >> $GITHUB_STEP_SUMMARY + echo "## Build & Release Complete (${PLATFORM})" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Step | Result |" >> $GITHUB_STEP_SUMMARY + echo "|------|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Platform | \`${PLATFORM}\` |" >> $GITHUB_STEP_SUMMARY + echo "| Version | \`${VERSION}\` |" >> $GITHUB_STEP_SUMMARY + echo "| Branch | \`${{ steps.version.outputs.branch }}\` |" >> $GITHUB_STEP_SUMMARY + echo "| Tag | \`${{ steps.version.outputs.tag }}\` |" >> $GITHUB_STEP_SUMMARY + echo "| Release | [View](${GITEA_URL}/${GITEA_ORG}/${GITEA_REPO}/releases/tag/${{ steps.version.outputs.tag }}) |" >> $GITHUB_STEP_SUMMARY + fi -- 2.52.0 From f3a3bc90b3c9fd4edeba6f29cedfcc55ca205c87 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 18:48:13 -0500 Subject: [PATCH 057/142] feat: frontend ticket management with smart permissions Ticket List (view=tickets): - Staff see all tickets with Submitted By + Assigned To columns - Customers see only their own tickets - Status filter dropdown for staff - isStaff check: core.admin OR mokowaas.tickets ACL Ticket Detail (view=ticket): - Staff see all tickets + internal notes (yellow highlight) - Customers see only their own + no internal notes - Staff sidebar: ticket details, change status buttons, assign to me - Staff can post internal notes from frontend - Customers can reply (disabled for closed tickets) - Ownership enforced: customers can't view/reply to others' tickets Controller: - updateStatus: staff only - assignTicket: mokowaas.tickets.assign ACL - submitReply: verifies ownership OR staff Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../site/src/View/Ticket/HtmlView.php | 34 +- .../site/src/View/Tickets/HtmlView.php | 31 +- .../com_mokowaas/site/tmpl/ticket/default.php | 299 ++++++++++++------ .../site/tmpl/tickets/default.php | 148 +++------ 4 files changed, 308 insertions(+), 204 deletions(-) diff --git a/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php b/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php index c5a929f..4a4289e 100644 --- a/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php +++ b/src/packages/com_mokowaas/site/src/View/Ticket/HtmlView.php @@ -17,6 +17,8 @@ use Joomla\CMS\Router\Route; class HtmlView extends BaseHtmlView { protected $ticket; + protected $isStaff = false; + protected $canAssign = false; public function display($tpl = null) { @@ -24,16 +26,29 @@ class HtmlView extends BaseHtmlView $user = Factory::getApplication()->getIdentity(); $id = Factory::getApplication()->getInput()->getInt('id', 0); - // Get ticket — only if owned by this user + $this->isStaff = $user->authorise('core.admin') || $user->authorise('mokowaas.tickets', 'com_mokowaas'); + $this->canAssign = $user->authorise('core.admin') || $user->authorise('mokowaas.tickets.assign', 'com_mokowaas'); + + // Get ticket — staff see any, customers see only their own $query = $db->getQuery(true) ->select([ $db->quoteName('t') . '.*', $db->quoteName('c.title', 'category_title'), + $db->quoteName('u.name', 'created_by_name'), + $db->quoteName('u.email', 'created_by_email'), + $db->quoteName('a.name', 'assigned_to_name'), ]) ->from($db->quoteName('#__mokowaas_tickets', 't')) ->leftJoin($db->quoteName('#__mokowaas_ticket_categories', 'c') . ' ON c.id = t.category_id') - ->where($db->quoteName('t.id') . ' = ' . $id) - ->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id); + ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = t.created_by') + ->leftJoin($db->quoteName('#__users', 'a') . ' ON a.id = t.assigned_to') + ->where($db->quoteName('t.id') . ' = ' . $id); + + if (!$this->isStaff) + { + $query->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id); + } + $db->setQuery($query); $this->ticket = $db->loadObject(); @@ -45,7 +60,7 @@ class HtmlView extends BaseHtmlView return; } - // Load replies (exclude internal notes) + // Load replies — staff see internal notes, customers don't $query = $db->getQuery(true) ->select([ $db->quoteName('r') . '.*', @@ -53,9 +68,14 @@ class HtmlView extends BaseHtmlView ]) ->from($db->quoteName('#__mokowaas_ticket_replies', 'r')) ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = r.user_id') - ->where($db->quoteName('r.ticket_id') . ' = ' . $id) - ->where($db->quoteName('r.is_internal') . ' = 0') - ->order($db->quoteName('r.created') . ' ASC'); + ->where($db->quoteName('r.ticket_id') . ' = ' . $id); + + if (!$this->isStaff) + { + $query->where($db->quoteName('r.is_internal') . ' = 0'); + } + + $query->order($db->quoteName('r.created') . ' ASC'); $db->setQuery($query); $this->ticket->replies = $db->loadObjectList() ?: []; diff --git a/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php b/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php index 933e5c5..5988fba 100644 --- a/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php +++ b/src/packages/com_mokowaas/site/src/View/Tickets/HtmlView.php @@ -17,13 +17,17 @@ class HtmlView extends BaseHtmlView { protected $tickets = []; protected $categories = []; + protected $isStaff = false; public function display($tpl = null) { $db = Factory::getContainer()->get('Joomla\Database\DatabaseInterface'); $user = Factory::getApplication()->getIdentity(); - // Get user's tickets + $this->isStaff = $user->authorise('core.admin') + || $user->authorise('mokowaas.tickets', 'com_mokowaas'); + + // Staff see all tickets, customers see their own $query = $db->getQuery(true) ->select([ $db->quoteName('t.id'), @@ -31,18 +35,33 @@ class HtmlView extends BaseHtmlView $db->quoteName('t.status'), $db->quoteName('t.priority'), $db->quoteName('t.created'), - $db->quoteName('t.modified'), + $db->quoteName('t.assigned_to'), $db->quoteName('c.title', 'category_title'), + $db->quoteName('u.name', 'created_by_name'), + $db->quoteName('a.name', 'assigned_to_name'), ]) ->from($db->quoteName('#__mokowaas_tickets', 't')) ->leftJoin($db->quoteName('#__mokowaas_ticket_categories', 'c') . ' ON c.id = t.category_id') - ->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id) - ->order($db->quoteName('t.created') . ' DESC') - ->setLimit(50); + ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = t.created_by') + ->leftJoin($db->quoteName('#__users', 'a') . ' ON a.id = t.assigned_to'); + + if (!$this->isStaff) + { + $query->where($db->quoteName('t.created_by') . ' = ' . (int) $user->id); + } + + $filterStatus = Factory::getApplication()->getInput()->getString('filter_status', ''); + + if ($filterStatus) + { + $query->where($db->quoteName('t.status') . ' = ' . $db->quote($filterStatus)); + } + + $query->order($db->quoteName('t.created') . ' DESC')->setLimit(50); $db->setQuery($query); $this->tickets = $db->loadObjectList() ?: []; - // Get categories for new ticket form + // Categories for new ticket form $query = $db->getQuery(true) ->select([$db->quoteName('id'), $db->quoteName('title')]) ->from($db->quoteName('#__mokowaas_ticket_categories')) diff --git a/src/packages/com_mokowaas/site/tmpl/ticket/default.php b/src/packages/com_mokowaas/site/tmpl/ticket/default.php index 5c6d135..7f84e57 100644 --- a/src/packages/com_mokowaas/site/tmpl/ticket/default.php +++ b/src/packages/com_mokowaas/site/tmpl/ticket/default.php @@ -1,22 +1,19 @@ ticket; -$token = Session::getFormToken(); +$t = $this->ticket; +$isStaff = $this->isStaff; +$canAssign = $this->canAssign; +$token = Session::getFormToken(); +$userId = Factory::getApplication()->getIdentity()->id; $statusLabel = [ - 'open' => 'Open', 'in_progress' => 'In Progress', 'waiting' => 'Awaiting Your Response', + 'open' => 'Open', 'in_progress' => 'In Progress', 'waiting' => 'Awaiting Response', 'resolved' => 'Resolved', 'closed' => 'Closed', ]; $statusClass = [ @@ -28,99 +25,217 @@ $statusClass = [
- -
-
-
-
-

#id; ?> — subject); ?>

- - category_title ?? 'General'); ?> - · Submitted created, 'M d, Y \a\t H:i'); ?> - · Priority: priority); ?> - +
+ +
+ + +
+
+
+
+

#id; ?> — subject); ?>

+ + category_title ?? 'General'); ?> + · created, 'M d, Y H:i'); ?> + · priority); ?> + + · By: created_by_name); ?> + + +
+ + status] ?? $t->status; ?> + +
- - status] ?? ucfirst($t->status); ?> -
-
-
- -
-
- You - created, 'M d, Y H:i'); ?> -
-
body)); ?>
-
- - - replies as $reply): ?> - user_id !== (int) $t->created_by); - ?> -
-
-
- user_name ?? 'Support'); ?> - - Staff - - created, 'M d, Y H:i'); ?> -
-
-
body)); ?>
-
- - - - status, ['closed', 'resolved'])): ?> -
-
-
Reply
-
-
- + +
+
+ created_by_name); ?> + created, 'M d, Y H:i'); ?>
- - - - +
body)); ?>
+
+ + + replies as $reply): ?> + user_id !== (int) $t->created_by); + $isInternal = (int) $reply->is_internal; + ?> +
+
+
+ user_name ?? 'Support'); ?> + Staff + Internal Note + created, 'M d, Y H:i'); ?> +
+
+
body)); ?>
+
+ + + + status, ['closed'])): ?> +
+
+
Reply
+
+ + + +
+ + + + +
+
+
+
+ status === 'closed'): ?> +
+ This ticket is closed. Open a new ticket if you need further help. +
+
+ + + +
+ +
+
Details
+
+
+
Status
+
status] ?? $t->status; ?>
+
Priority
+
priority); ?>
+
Category
+
category_title ?? '—'); ?>
+
Submitted By
+
created_by_name); ?>
created_by_email ?? ''); ?>
+
Assigned To
+
assigned_to_name ?? 'Unassigned'); ?>
+
Created
+
created, 'M d H:i'); ?>
+
Replies
+
replies); ?>
+
+
+
+ + +
+
Change Status
+
+ 'Reopen', 'in_progress' => 'In Progress', 'waiting' => 'Waiting on Customer', 'resolved' => 'Resolve', 'closed' => 'Close'] as $s => $label): ?> + status): ?> + + + +
+
+ + + +
+
Assign
+
+ +
+
+ +
+
- -
- This ticket is status] ?? $t->status); ?>. If you need further help, please open a new ticket. -
-
diff --git a/src/packages/com_mokowaas/site/tmpl/tickets/default.php b/src/packages/com_mokowaas/site/tmpl/tickets/default.php index f9face4..8ed9e1a 100644 --- a/src/packages/com_mokowaas/site/tmpl/tickets/default.php +++ b/src/packages/com_mokowaas/site/tmpl/tickets/default.php @@ -1,11 +1,4 @@ tickets; $categories = $this->categories; +$isStaff = $this->isStaff; $token = Session::getFormToken(); $statusLabel = [ @@ -28,106 +22,62 @@ $statusClass = [
-

My Support Tickets

- -
- - -
-
-
-
Submit a Support Request
-
-
- - -
-
-
- - -
-
- - -
-
-
- - -
- - -
-
+

+
+ + New Ticket + + +
+ + + +
+
-
- You haven't submitted any support tickets yet. Click "New Ticket" above to get started. +
-
- - -
-
-
#id; ?> — subject); ?>
- - category_title ?? 'General'); ?> - · created, 'M d, Y'); ?> - -
-
- - status] ?? ucfirst($t->status); ?> - -
- priority); ?> -
-
-
- +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#SubjectStatusPriorityCategorySubmitted ByAssigned ToDate
id; ?>subject, 0, 60)); ?>status] ?? $t->status; ?>priority); ?>category_title ?? '—'); ?>created_by_name ?? ''); ?>assigned_to_name ?? 'Unassigned'); ?>created, 'M d, Y'); ?>
- - -- 2.52.0 From 8168bfb2dc55cb379bea2b273ac0a1387950aade Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 23:48:57 +0000 Subject: [PATCH 058/142] chore(version): auto-bump 02.32.37 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 47 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 30095f8..25f7022 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.36 + 02.32.37 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index d689b2d..8c3f3b4 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.36 +# VERSION: 02.32.37 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index edd9c8d..df38c82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.36 + VERSION: 02.32.37 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index db283c6..02c7a29 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 8acbd85..89475a8 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 23d7ef8..da63bb5 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.36 + VERSION: 02.32.37 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 1b864ce..d568be8 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index c7ffa0d..4f2a2f8 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.36 +VERSION: 02.32.37 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 3d21447..52f7bcf 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.36) +# MokoWaaS Build Guide (VERSION: 02.32.37) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 92eea90..9f0833d 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.36) +# MokoWaaS Configuration Guide (VERSION: 02.32.37) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 98021dd..4b6652f 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.36) +# MokoWaaS Installation Guide (VERSION: 02.32.37) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 0c0e023..6aedd7a 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.36) +# MokoWaaS Operations Guide (VERSION: 02.32.37) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index fea5af8..d139924 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.36) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.37) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 0ea0eb3..56c9858 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.36) +# MokoWaaS Testing Guide (VERSION: 02.32.37) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 5b6a389..e8a2948 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.36) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.37) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index fb05084..d454014 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.36) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.37) ## Introduction diff --git a/docs/index.md b/docs/index.md index fbfcdcf..ba743ae 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.36 + VERSION: 02.32.37 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.36) +# MokoWaaS Documentation Index (VERSION: 02.32.37) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 7f08c68..403740b 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.36 + VERSION: 02.32.37 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.36) +# MokoWaaS Plugin Overview (VERSION: 02.32.37) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 8efbe3b..561fdba 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.36 +VERSION: 02.32.37 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 2f50b93..f0f2cfc 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 + 02.32.37 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index a7da2b4..8440889 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 + 02.32.37 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 635d09e..e9590d5 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.36 + * VERSION: 02.32.37 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 8a27cc8..3ca1d92 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.36 + * VERSION: 02.32.37 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index bff139e..edad19d 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.36 + * VERSION: 02.32.37 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 966c5b4..4a36ccf 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.36 + * VERSION: 02.32.37 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 0ea18a7..3ec5740 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.36 + * VERSION: 02.32.37 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index dcbb7f7..4bc582b 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.36 + * VERSION: 02.32.37 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 0da36af..d99dfc9 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.36 + * VERSION: 02.32.37 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index f0f65df..73d22af 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.36 + * VERSION: 02.32.37 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 6623850..3889d9b 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.36 + * VERSION: 02.32.37 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 0145742..c0813e2 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.36 + * VERSION: 02.32.37 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index e80c974..70ff560 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 + 02.32.37 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index ed34f45..69fd80e 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.36 + * VERSION: 02.32.37 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index a118ce5..9a7d501 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.36 + * VERSION: 02.32.37 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 2003509..dfe1594 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 + 02.32.37 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 333fdb6..d52be75 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 + 02.32.37 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index f47078c..1c3f44c 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 + 02.32.37 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 41eac26..31a9b05 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 + 02.32.37 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index c3ab49c..235b5d2 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 + 02.32.37 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 6fe5a13..9219cbe 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 - 02.32.36 + 02.32.37 + 02.32.37 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index d64a96d..a07c13d 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 + 02.32.37 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 94327d3..93fdf7b 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 - 02.32.36 + 02.32.37 + 02.32.37 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index c7ceee6..0c4ff60 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.36 - 02.32.36 + 02.32.37 + 02.32.37 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index eada063..1d2a14f 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.36 + * VERSION: 02.32.37 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 7ec9ac2..ffcf65e 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.36 + * VERSION: 02.32.37 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index a5eb97a..e3ed626 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.36 + 02.32.37 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 2a0773f..32daffe 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From c5552a94fb51722b7fda85e3cc45645ac263c888 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 2 Jun 2026 23:48:58 +0000 Subject: [PATCH 059/142] chore: update development channel 02.32.37 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 32daffe..0d12cb4 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.36-dev + 02.32.37-dev 2026-06-02 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.36-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.37-dev.zip - d8c4739ac985757071eb0dd00d8ea3b64af7b53d9d18a4654fedcc83ffb24d1b + b4bea266f76b874759da7992ebce08a827def90eddf448291b6efce95959c6ba dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From ac920b997a23010fa9cc378f6134fbc9acb7a8fc Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 19:29:10 -0500 Subject: [PATCH 060/142] feat: helpdesk automation engine + scheduled task plugin Automation engine in TicketsModel: - Condition evaluator: field/op/value with eq, neq, gt, lt, in, not_in - Action executor: set_status, set_priority, assign, add_note - Trigger events: ticket_created, ticket_replied, status_changed, scheduled - Hooks wired into createTicket, addReply, updateStatus Scheduled task plugin (plg_task_mokowaas_tickets): - Runs all 'scheduled' automation rules against non-closed tickets - Evaluates age_hours, status, priority, sla_responded - Joomla Scheduler integration via TaskPluginTrait Default automation rules: 1. Auto-close resolved tickets after 7 days 2. Escalate urgent tickets with no response in 1 hour 3. Notify on high/urgent ticket creation Also: - Added #__mokowaas_ticket_automation table - Fixed dashboard ImportModel null error (direct instantiation) - Added task plugin to package manifest + script.php Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com_mokowaas/admin/sql/install.mysql.sql | 17 ++ .../admin/src/Model/TicketsModel.php | 238 ++++++++++++++++++ .../admin/src/View/Dashboard/HtmlView.php | 14 +- .../en-GB/plg_task_mokowaas_tickets.ini | 4 + .../en-GB/plg_task_mokowaas_tickets.sys.ini | 2 + .../mokowaas_tickets.xml | 25 ++ .../services/provider.php | 27 ++ .../src/Extension/TicketAutomation.php | 65 +++++ src/pkg_mokowaas.xml | 1 + src/script.php | 2 + 10 files changed, 392 insertions(+), 3 deletions(-) create mode 100644 src/packages/plg_task_mokowaas_tickets/language/en-GB/plg_task_mokowaas_tickets.ini create mode 100644 src/packages/plg_task_mokowaas_tickets/language/en-GB/plg_task_mokowaas_tickets.sys.ini create mode 100644 src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml create mode 100644 src/packages/plg_task_mokowaas_tickets/services/provider.php create mode 100644 src/packages/plg_task_mokowaas_tickets/src/Extension/TicketAutomation.php diff --git a/src/packages/com_mokowaas/admin/sql/install.mysql.sql b/src/packages/com_mokowaas/admin/sql/install.mysql.sql index 12dbca5..208a25b 100644 --- a/src/packages/com_mokowaas/admin/sql/install.mysql.sql +++ b/src/packages/com_mokowaas/admin/sql/install.mysql.sql @@ -61,6 +61,23 @@ CREATE TABLE IF NOT EXISTS `#__mokowaas_ticket_canned` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE IF NOT EXISTS `#__mokowaas_ticket_automation` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `title` VARCHAR(255) NOT NULL, + `trigger_event` VARCHAR(50) NOT NULL DEFAULT 'ticket_created', + `conditions` TEXT NOT NULL DEFAULT '[]', + `actions` TEXT NOT NULL DEFAULT '[]', + `enabled` TINYINT NOT NULL DEFAULT 1, + `ordering` INT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- Default automation rules +INSERT IGNORE INTO `#__mokowaas_ticket_automation` (`id`, `title`, `trigger_event`, `conditions`, `actions`, `enabled`, `ordering`) VALUES +(1, 'Auto-close resolved tickets after 7 days', 'scheduled', '[{"field":"status","op":"eq","value":"resolved"},{"field":"age_hours","op":"gt","value":"168"}]', '[{"type":"set_status","value":"closed"},{"type":"add_note","value":"Auto-closed after 7 days with no response."}]', 1, 1), +(2, 'Escalate urgent tickets with no response in 1 hour', 'scheduled', '[{"field":"priority","op":"eq","value":"urgent"},{"field":"sla_responded","op":"eq","value":"0"},{"field":"age_hours","op":"gt","value":"1"}]', '[{"type":"add_note","value":"SLA BREACH: Urgent ticket has no staff response after 1 hour."}]', 1, 2), +(3, 'Notify on high priority ticket creation', 'ticket_created', '[{"field":"priority","op":"in","value":"high,urgent"}]', '[{"type":"add_note","value":"High/urgent ticket created — requires immediate attention."}]', 1, 3); + -- Default categories INSERT IGNORE INTO `#__mokowaas_ticket_categories` (`id`, `title`, `alias`, `description`, `sla_response_minutes`, `sla_resolution_minutes`, `ordering`) VALUES (1, 'General Support', 'general-support', 'General questions and assistance', 480, 2880, 1), diff --git a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php index 8bad035..657b7d7 100644 --- a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php @@ -173,6 +173,9 @@ class TicketsModel extends BaseDatabaseModel $db->insertObject('#__mokowaas_tickets', $ticket, 'id'); + // Run automation + $this->runAutomation('ticket_created', (int) $ticket->id); + return ['success' => true, 'message' => 'Ticket #' . $ticket->id . ' created.', 'id' => (int) $ticket->id]; } catch (\Throwable $e) @@ -212,6 +215,9 @@ class TicketsModel extends BaseDatabaseModel ->where($db->quoteName('sla_responded') . ' = 0') )->execute(); + // Run automation + $this->runAutomation('ticket_replied', $ticketId); + return ['success' => true, 'message' => 'Reply added.']; } catch (\Throwable $e) @@ -259,6 +265,9 @@ class TicketsModel extends BaseDatabaseModel ->where($db->quoteName('id') . ' = ' . $ticketId) )->execute(); + // Run automation + $this->runAutomation('status_changed', $ticketId); + return ['success' => true, 'message' => 'Status updated to ' . $status . '.']; } catch (\Throwable $e) @@ -351,6 +360,235 @@ class TicketsModel extends BaseDatabaseModel return $db->loadObjectList() ?: []; } + // ================================================================== + // Automation Engine + // ================================================================== + + /** + * Run automation rules for a specific trigger event against a ticket. + * + * @param string $event trigger_event: ticket_created, ticket_replied, status_changed, scheduled + * @param int $ticketId The ticket to evaluate + */ + public function runAutomation(string $event, int $ticketId): void + { + try + { + $db = $this->getDatabase(); + + // Load enabled rules for this event + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_ticket_automation')) + ->where($db->quoteName('trigger_event') . ' = ' . $db->quote($event)) + ->where($db->quoteName('enabled') . ' = 1') + ->order($db->quoteName('ordering') . ' ASC'); + $db->setQuery($query); + $rules = $db->loadObjectList() ?: []; + + if (empty($rules)) + { + return; + } + + // Load the ticket + $ticket = $this->getTicket($ticketId); + + if (!$ticket) + { + return; + } + + // Calculate age in hours + $ticket->age_hours = (time() - strtotime($ticket->created)) / 3600; + + foreach ($rules as $rule) + { + $conditions = json_decode($rule->conditions, true) ?: []; + $actions = json_decode($rule->actions, true) ?: []; + + if ($this->evaluateConditions($conditions, $ticket)) + { + $this->executeActions($actions, $ticketId, $ticket); + } + } + } + catch (\Throwable $e) + { + \Joomla\CMS\Log\Log::add('Automation error: ' . $e->getMessage(), \Joomla\CMS\Log\Log::WARNING, 'mokowaas'); + } + } + + /** + * Run all scheduled automation rules against all open tickets. + */ + public function runScheduledAutomation(): array + { + $db = $this->getDatabase(); + $results = ['evaluated' => 0, 'acted' => 0]; + + // Load scheduled rules + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_ticket_automation')) + ->where($db->quoteName('trigger_event') . ' = ' . $db->quote('scheduled')) + ->where($db->quoteName('enabled') . ' = 1') + ->order($db->quoteName('ordering') . ' ASC'); + $db->setQuery($query); + $rules = $db->loadObjectList() ?: []; + + if (empty($rules)) + { + return $results; + } + + // Load all non-closed tickets + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_tickets')) + ->where($db->quoteName('status') . ' != ' . $db->quote('closed')); + $db->setQuery($query); + $tickets = $db->loadObjectList() ?: []; + + foreach ($tickets as $ticket) + { + $ticket->age_hours = (time() - strtotime($ticket->created)) / 3600; + $ticket->replies = []; + $results['evaluated']++; + + foreach ($rules as $rule) + { + $conditions = json_decode($rule->conditions, true) ?: []; + $actions = json_decode($rule->actions, true) ?: []; + + if ($this->evaluateConditions($conditions, $ticket)) + { + $this->executeActions($actions, (int) $ticket->id, $ticket); + $results['acted']++; + } + } + } + + return $results; + } + + /** + * Evaluate a set of conditions against a ticket (all must match). + */ + private function evaluateConditions(array $conditions, object $ticket): bool + { + foreach ($conditions as $cond) + { + $field = $cond['field'] ?? ''; + $op = $cond['op'] ?? 'eq'; + $value = $cond['value'] ?? ''; + + $ticketValue = $ticket->{$field} ?? null; + + if ($ticketValue === null) + { + return false; + } + + switch ($op) + { + case 'eq': + if ((string) $ticketValue !== (string) $value) return false; + break; + case 'neq': + if ((string) $ticketValue === (string) $value) return false; + break; + case 'gt': + if ((float) $ticketValue <= (float) $value) return false; + break; + case 'lt': + if ((float) $ticketValue >= (float) $value) return false; + break; + case 'in': + $list = array_map('trim', explode(',', $value)); + if (!\in_array((string) $ticketValue, $list, true)) return false; + break; + case 'not_in': + $list = array_map('trim', explode(',', $value)); + if (\in_array((string) $ticketValue, $list, true)) return false; + break; + default: + return false; + } + } + + return true; + } + + /** + * Execute a set of actions on a ticket. + */ + private function executeActions(array $actions, int $ticketId, object $ticket): void + { + $db = $this->getDatabase(); + $now = Factory::getDate()->toSql(); + + foreach ($actions as $action) + { + $type = $action['type'] ?? ''; + $value = $action['value'] ?? ''; + + switch ($type) + { + case 'set_status': + $this->updateStatus($ticketId, $value); + break; + + case 'set_priority': + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_tickets')) + ->set($db->quoteName('priority') . ' = ' . $db->quote($value)) + ->set($db->quoteName('modified') . ' = ' . $db->quote($now)) + ->where($db->quoteName('id') . ' = ' . $ticketId) + )->execute(); + break; + + case 'assign': + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_tickets')) + ->set($db->quoteName('assigned_to') . ' = ' . (int) $value) + ->set($db->quoteName('modified') . ' = ' . $db->quote($now)) + ->where($db->quoteName('id') . ' = ' . $ticketId) + )->execute(); + break; + + case 'add_note': + $reply = (object) [ + 'ticket_id' => $ticketId, + 'user_id' => 0, + 'body' => $value, + 'is_internal' => 1, + 'created' => $now, + ]; + $db->insertObject('#__mokowaas_ticket_replies', $reply, 'id'); + break; + } + } + } + + /** + * Get all automation rules. + */ + public function getAutomationRules(): array + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_ticket_automation')) + ->order($db->quoteName('ordering') . ' ASC') + ); + + return $db->loadObjectList() ?: []; + } + // ================================================================== // Akeeba Ticket System Importer // ================================================================== diff --git a/src/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php index 8638da9..b8b2f0d 100644 --- a/src/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php +++ b/src/packages/com_mokowaas/admin/src/View/Dashboard/HtmlView.php @@ -36,9 +36,17 @@ class HtmlView extends BaseHtmlView $this->wafBlocks = $model->getRecentWafBlocks(5); // Check for importable Akeeba data - $importModel = $this->getModel('Import'); - $this->adminToolsAvailable = $importModel->checkAdminToolsAvailable(); - $this->atsAvailable = $importModel->checkAtsAvailable(); + try + { + $importModel = new \Moko\Component\MokoWaaS\Administrator\Model\ImportModel(); + $this->adminToolsAvailable = $importModel->checkAdminToolsAvailable(); + $this->atsAvailable = $importModel->checkAtsAvailable(); + } + catch (\Throwable $e) + { + $this->adminToolsAvailable = null; + $this->atsAvailable = null; + } $this->addToolbar(); diff --git a/src/packages/plg_task_mokowaas_tickets/language/en-GB/plg_task_mokowaas_tickets.ini b/src/packages/plg_task_mokowaas_tickets/language/en-GB/plg_task_mokowaas_tickets.ini new file mode 100644 index 0000000..5b695de --- /dev/null +++ b/src/packages/plg_task_mokowaas_tickets/language/en-GB/plg_task_mokowaas_tickets.ini @@ -0,0 +1,4 @@ +PLG_TASK_MOKOWAAS_TICKETS="Task - MokoWaaS Ticket Automation" +PLG_TASK_MOKOWAAS_TICKETS_DESC="Runs scheduled helpdesk automation rules." +PLG_TASK_MOKOWAAS_TICKETS_AUTOMATION_TITLE="MokoWaaS: Ticket Automation" +PLG_TASK_MOKOWAAS_TICKETS_AUTOMATION_DESC="Runs time-based automation rules against open tickets (auto-close, SLA escalation, etc.)." diff --git a/src/packages/plg_task_mokowaas_tickets/language/en-GB/plg_task_mokowaas_tickets.sys.ini b/src/packages/plg_task_mokowaas_tickets/language/en-GB/plg_task_mokowaas_tickets.sys.ini new file mode 100644 index 0000000..c0dc656 --- /dev/null +++ b/src/packages/plg_task_mokowaas_tickets/language/en-GB/plg_task_mokowaas_tickets.sys.ini @@ -0,0 +1,2 @@ +PLG_TASK_MOKOWAAS_TICKETS="Task - MokoWaaS Ticket Automation" +PLG_TASK_MOKOWAAS_TICKETS_DESC="Runs scheduled helpdesk automation rules — auto-close, SLA escalation, and time-based actions." diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml new file mode 100644 index 0000000..c8e4801 --- /dev/null +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -0,0 +1,25 @@ + + + Task - MokoWaaS Ticket Automation + mokowaas_tickets + Moko Consulting + 2026-06-02 + Copyright (C) 2026 Moko Consulting. All rights reserved. + GPL-3.0-or-later + hello@mokoconsulting.tech + https://mokoconsulting.tech + 02.32.00 + Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. + Moko\Plugin\Task\MokoWaaSTickets + + + src + services + language + + + + en-GB/plg_task_mokowaas_tickets.ini + en-GB/plg_task_mokowaas_tickets.sys.ini + + diff --git a/src/packages/plg_task_mokowaas_tickets/services/provider.php b/src/packages/plg_task_mokowaas_tickets/services/provider.php new file mode 100644 index 0000000..e97c8c8 --- /dev/null +++ b/src/packages/plg_task_mokowaas_tickets/services/provider.php @@ -0,0 +1,27 @@ +set( + PluginInterface::class, + function (Container $container) { + $dispatcher = $container->get(DispatcherInterface::class); + $plugin = new TicketAutomation($dispatcher, (array) PluginHelper::getPlugin('task', 'mokowaas_tickets')); + $plugin->setApplication(Factory::getApplication()); + + return $plugin; + } + ); + } +}; diff --git a/src/packages/plg_task_mokowaas_tickets/src/Extension/TicketAutomation.php b/src/packages/plg_task_mokowaas_tickets/src/Extension/TicketAutomation.php new file mode 100644 index 0000000..3daa7ae --- /dev/null +++ b/src/packages/plg_task_mokowaas_tickets/src/Extension/TicketAutomation.php @@ -0,0 +1,65 @@ + [ + 'langConstPrefix' => 'PLG_TASK_MOKOWAAS_TICKETS_AUTOMATION', + 'method' => 'runAutomation', + ], + ]; + + protected $autoloadLanguage = true; + + public static function getSubscribedEvents(): array + { + return [ + 'onTaskOptionsList' => 'advertiseRoutines', + 'onExecuteTask' => 'standardRoutineHandler', + 'onContentPrepareForm' => 'enhanceTaskItemForm', + ]; + } + + /** + * Run all scheduled automation rules against open tickets. + */ + private function runAutomation(ExecuteTaskEvent $event): int + { + try + { + $model = new TicketsModel(); + $results = $model->runScheduledAutomation(); + + $this->logTask( + \sprintf('Ticket automation: evaluated %d tickets, acted on %d', $results['evaluated'], $results['acted']) + ); + + return Status::OK; + } + catch (\Throwable $e) + { + $this->logTask('Ticket automation failed: ' . $e->getMessage(), 'error'); + + return Status::KNOCKOUT; + } + } +} diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index a5eb97a..67ea2c6 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -24,6 +24,7 @@ plg_webservices_perfectpublisher.zip plg_task_mokowaasdemo.zip plg_task_mokowaassync.zip + plg_task_mokowaas_tickets.zip tpl_mokoonyx.zip diff --git a/src/script.php b/src/script.php index 7afd3b8..882bcba 100644 --- a/src/script.php +++ b/src/script.php @@ -47,6 +47,7 @@ class Pkg_MokowaasInstallerScript $this->enablePlugin('webservices', 'mokowaas'); $this->enablePlugin('task', 'mokowaasdemo'); $this->enablePlugin('task', 'mokowaassync'); + $this->enablePlugin('task', 'mokowaas_tickets'); // Migrate params from core plugin to feature plugins (one-time) $this->migrateFeatureParams(); @@ -411,6 +412,7 @@ class Pkg_MokowaasInstallerScript $db->quote('mod_mokowaas_cpanel'), $db->quote('mokowaasdemo'), $db->quote('mokowaassync'), + $db->quote('mokowaas_tickets'), $db->quote('perfectpublisher'), $db->quote('mokoonyx'), ]; -- 2.52.0 From 6f762534feb1045a38ed8de57397f89615964e2f Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Wed, 3 Jun 2026 00:29:35 +0000 Subject: [PATCH 061/142] chore(version): auto-bump 02.32.38 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 48 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 25f7022..41d3cc8 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.37 + 02.32.38 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 8c3f3b4..6ee01cc 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.37 +# VERSION: 02.32.38 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index df38c82..d807934 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.37 + VERSION: 02.32.38 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 02c7a29..c92e50a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 89475a8..3aaac7b 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index da63bb5..dfd2bca 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.37 + VERSION: 02.32.38 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index d568be8..f62100a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 4f2a2f8..9d3bd4c 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.37 +VERSION: 02.32.38 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 52f7bcf..b6e3729 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.37) +# MokoWaaS Build Guide (VERSION: 02.32.38) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 9f0833d..6423146 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.37) +# MokoWaaS Configuration Guide (VERSION: 02.32.38) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 4b6652f..5ebdd41 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.37) +# MokoWaaS Installation Guide (VERSION: 02.32.38) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 6aedd7a..51313d7 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.37) +# MokoWaaS Operations Guide (VERSION: 02.32.38) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index d139924..8a64148 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.37) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.38) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 56c9858..d63361b 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.37) +# MokoWaaS Testing Guide (VERSION: 02.32.38) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index e8a2948..8ba68bf 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.37) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.38) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index d454014..36dc88b 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.37) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.38) ## Introduction diff --git a/docs/index.md b/docs/index.md index ba743ae..ecd1c69 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.37 + VERSION: 02.32.38 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.37) +# MokoWaaS Documentation Index (VERSION: 02.32.38) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 403740b..7f7b4ca 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.37 + VERSION: 02.32.38 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.37) +# MokoWaaS Plugin Overview (VERSION: 02.32.38) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 561fdba..f1e7e80 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.37 +VERSION: 02.32.38 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index f0f2cfc..26b0a22 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 + 02.32.38 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 8440889..5c812d7 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 + 02.32.38 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index e9590d5..2c11cd2 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.37 + * VERSION: 02.32.38 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 3ca1d92..e47cb4d 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.37 + * VERSION: 02.32.38 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index edad19d..0fc00fe 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.37 + * VERSION: 02.32.38 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 4a36ccf..55434e9 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.37 + * VERSION: 02.32.38 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 3ec5740..9bded35 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.37 + * VERSION: 02.32.38 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 4bc582b..397ce8a 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.37 + * VERSION: 02.32.38 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index d99dfc9..89b55ba 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.37 + * VERSION: 02.32.38 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 73d22af..82b8691 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.37 + * VERSION: 02.32.38 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 3889d9b..a406a08 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.37 + * VERSION: 02.32.38 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index c0813e2..c6ec030 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.37 + * VERSION: 02.32.38 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 70ff560..167fef8 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 + 02.32.38 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 69fd80e..5499438 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.37 + * VERSION: 02.32.38 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 9a7d501..e8a0b43 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.37 + * VERSION: 02.32.38 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index dfe1594..3352c44 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 + 02.32.38 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index d52be75..b41eb57 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 + 02.32.38 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 1c3f44c..9cf5b71 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 + 02.32.38 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 31a9b05..12aeec3 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 + 02.32.38 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 235b5d2..a3ecaa6 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 + 02.32.38 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index c8e4801..28261dc 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.00 + 02.32.38 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 9219cbe..9b51c11 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 - 02.32.37 + 02.32.38 + 02.32.38 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index a07c13d..4d7cc20 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 + 02.32.38 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 93fdf7b..acd22be 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 - 02.32.37 + 02.32.38 + 02.32.38 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 0c4ff60..85db103 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.37 - 02.32.37 + 02.32.38 + 02.32.38 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 1d2a14f..c24ed43 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.37 + * VERSION: 02.32.38 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index ffcf65e..c3cf50c 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.37 + * VERSION: 02.32.38 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 2d73e2a..ddc9d81 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.37 + 02.32.38 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 0d12cb4..44c02f2 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 9cf3b510242dab9e77fbd1eef0492ca7c46f9e6e Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Wed, 3 Jun 2026 00:29:36 +0000 Subject: [PATCH 062/142] chore: update development channel 02.32.38 [skip ci] --- updates.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/updates.xml b/updates.xml index 44c02f2..601dd08 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.37-dev - 2026-06-02 + 02.32.38-dev + 2026-06-03 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.37-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.38-dev.zip - b4bea266f76b874759da7992ebce08a827def90eddf448291b6efce95959c6ba + 86a9c67320ac162c60004706d3aef824cc91a5409ba4576a8a87e9fcddea86dd dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From aab196c26b5a6686201579374d6b480a7336dd79 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 22:03:54 -0500 Subject: [PATCH 063/142] fix: hide import buttons after successful import + fix Factory class error Import markers stored in com_mokowaas component params (imported_admintools, imported_ats). checkAdminToolsAvailable() and checkAtsAvailable() return null if already imported, hiding the dashboard banner and ticket list button. Also fixed missing 'use Joomla\CMS\Factory' in admin tickets template. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/src/Model/ImportModel.php | 71 +++++++++++++++++++ .../admin/tmpl/tickets/default.php | 1 + 2 files changed, 72 insertions(+) diff --git a/src/packages/com_mokowaas/admin/src/Model/ImportModel.php b/src/packages/com_mokowaas/admin/src/Model/ImportModel.php index 660351a..352c6ad 100644 --- a/src/packages/com_mokowaas/admin/src/Model/ImportModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/ImportModel.php @@ -28,9 +28,15 @@ class ImportModel extends BaseDatabaseModel { /** * Check if Admin Tools data is available for import. + * Returns null if already imported or no data found. */ public function checkAdminToolsAvailable(): ?object { + if ($this->wasImported('admintools')) + { + return null; + } + $db = $this->getDatabase(); try @@ -138,6 +144,8 @@ class ImportModel extends BaseDatabaseModel $this->disableAdminTools($db); $results['disabled'] = true; + $this->markImported('admintools'); + return [ 'success' => true, 'message' => \sprintf( @@ -542,9 +550,15 @@ class ImportModel extends BaseDatabaseModel /** * Check if ATS tables exist. + * Returns null if already imported or no data found. */ public function checkAtsAvailable(): ?object { + if ($this->wasImported('ats')) + { + return null; + } + $db = $this->getDatabase(); try @@ -612,6 +626,63 @@ class ImportModel extends BaseDatabaseModel $result['message'] .= ' Warning: could not disable ATS: ' . $e->getMessage(); } + $this->markImported('ats'); + return $result; } + + // ================================================================== + // Import markers (stored in component params) + // ================================================================== + + private function wasImported(string $key): bool + { + try + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')) + ); + $params = new Registry($db->loadResult() ?? '{}'); + + return (bool) $params->get('imported_' . $key, false); + } + catch (\Throwable $e) + { + return false; + } + } + + private function markImported(string $key): void + { + try + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')) + ); + $params = new Registry($db->loadResult() ?? '{}'); + $params->set('imported_' . $key, 1); + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote($params->toString())) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')) + )->execute(); + } + catch (\Throwable $e) + { + Log::add('Import marker error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } } diff --git a/src/packages/com_mokowaas/admin/tmpl/tickets/default.php b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php index 5d40328..e5a7814 100644 --- a/src/packages/com_mokowaas/admin/tmpl/tickets/default.php +++ b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php @@ -1,6 +1,7 @@ Date: Wed, 3 Jun 2026 03:09:32 +0000 Subject: [PATCH 064/142] chore(version): auto-bump 02.32.39 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 48 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 41d3cc8..a528dd0 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.38 + 02.32.39 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 6ee01cc..6603393 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.38 +# VERSION: 02.32.39 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index d807934..0de57da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.38 + VERSION: 02.32.39 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index c92e50a..824fb2a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 3aaac7b..b86e2e5 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index dfd2bca..056408e 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.38 + VERSION: 02.32.39 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index f62100a..648dd3f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 9d3bd4c..41f1072 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.38 +VERSION: 02.32.39 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index b6e3729..46132c6 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.38) +# MokoWaaS Build Guide (VERSION: 02.32.39) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 6423146..0530dea 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.38) +# MokoWaaS Configuration Guide (VERSION: 02.32.39) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 5ebdd41..801d18f 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.38) +# MokoWaaS Installation Guide (VERSION: 02.32.39) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 51313d7..c6a65ac 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.38) +# MokoWaaS Operations Guide (VERSION: 02.32.39) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 8a64148..ce1d499 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.38) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.39) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index d63361b..0fd7ae4 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.38) +# MokoWaaS Testing Guide (VERSION: 02.32.39) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 8ba68bf..05f8df8 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.38) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.39) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 36dc88b..a751171 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.38) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.39) ## Introduction diff --git a/docs/index.md b/docs/index.md index ecd1c69..f107243 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.38 + VERSION: 02.32.39 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.38) +# MokoWaaS Documentation Index (VERSION: 02.32.39) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 7f7b4ca..6dd2f5e 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.38 + VERSION: 02.32.39 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.38) +# MokoWaaS Plugin Overview (VERSION: 02.32.39) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index f1e7e80..6e42650 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.38 +VERSION: 02.32.39 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 26b0a22..2191ecf 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 5c812d7..c409ca3 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 2c11cd2..ad840aa 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.38 + * VERSION: 02.32.39 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index e47cb4d..eb73076 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.38 + * VERSION: 02.32.39 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 0fc00fe..4f259ea 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.38 + * VERSION: 02.32.39 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 55434e9..72e4c9a 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.38 + * VERSION: 02.32.39 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 9bded35..7a18f20 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.38 + * VERSION: 02.32.39 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 397ce8a..a069658 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.38 + * VERSION: 02.32.39 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 89b55ba..b43f2f3 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.38 + * VERSION: 02.32.39 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 82b8691..304fb4d 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.38 + * VERSION: 02.32.39 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index a406a08..dc3ca72 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.38 + * VERSION: 02.32.39 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index c6ec030..19d8d3b 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.38 + * VERSION: 02.32.39 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 167fef8..e2993f0 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 5499438..a5eb205 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.38 + * VERSION: 02.32.39 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index e8a0b43..037f2c8 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.38 + * VERSION: 02.32.39 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 3352c44..b9bf33e 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index b41eb57..0b6f142 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 9cf5b71..f84c1d5 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 12aeec3..795448e 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index a3ecaa6..96c6529 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index 28261dc..a6b5602 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 9b51c11..ddd297f 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 - 02.32.38 + 02.32.39 + 02.32.39 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 4d7cc20..8d498ef 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 + 02.32.39 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index acd22be..b607bd7 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 - 02.32.38 + 02.32.39 + 02.32.39 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 85db103..3481da4 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.38 - 02.32.38 + 02.32.39 + 02.32.39 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index c24ed43..1caa10e 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.38 + * VERSION: 02.32.39 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index c3cf50c..00e0cc2 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.38 + * VERSION: 02.32.39 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index ddc9d81..6d13b45 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.38 + 02.32.39 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 601dd08..7e75931 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From bc22f33a0c4873bb025693ebc911f42b4d29eea6 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Wed, 3 Jun 2026 03:09:34 +0000 Subject: [PATCH 065/142] chore: update development channel 02.32.39 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 7e75931..6e89d75 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.38-dev + 02.32.39-dev 2026-06-03 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.38-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.39-dev.zip - 86a9c67320ac162c60004706d3aef824cc91a5409ba4576a8a87e9fcddea86dd + 71788c251ca10df254171cd4fe7fbf2a953ee714a65c485f34c55c496bbe152e dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 236a148d42ee9d09411ab363d52d55926914aaf9 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Wed, 3 Jun 2026 03:10:33 +0000 Subject: [PATCH 066/142] chore: sync .mokogitea/workflows/repo-health.yml from moko-platform [skip ci] --- .mokogitea/workflows/repo-health.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.mokogitea/workflows/repo-health.yml b/.mokogitea/workflows/repo-health.yml index b23d971..d7743f0 100644 --- a/.mokogitea/workflows/repo-health.yml +++ b/.mokogitea/workflows/repo-health.yml @@ -41,7 +41,8 @@ permissions: env: # Release policy - Repository Variables Only - RELEASE_REQUIRED_REPO_VARS: RS_FTP_PATH_SUFFIX + # RS_FTP_PATH_SUFFIX removed — MokoGitea handles all releases now + RELEASE_REQUIRED_REPO_VARS: RELEASE_OPTIONAL_REPO_VARS: DEV_FTP_SUFFIX # Scripts governance policy -- 2.52.0 From 79bc17912ac97785f47bdc40de46a43348dd779c Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 22:52:21 -0500 Subject: [PATCH 067/142] feat: helpdesk email notifications (#135) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NotificationService with dual recipient support: - Joomla user IDs (looks up email from #__users) - Raw email addresses (comma-separated) - Admin emails + admin user IDs from component params - Per-event smart routing (creator, assignee, admins) Events: - ticket_created → admin emails + assigned user - ticket_replied → creator + assigned user (skip internal notes) - status_changed → creator (includes old/new status) - ticket_assigned → newly assigned user Email format: plain text with ticket details + view link Automation engine: added send_email action type for rules to send emails to specific addresses. Config stored in com_mokowaas params.notifications: admin_emails: comma-separated email addresses admin_user_ids: comma-separated Joomla user IDs Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/src/Model/TicketsModel.php | 45 ++- .../admin/src/Service/NotificationService.php | 334 ++++++++++++++++++ 2 files changed, 376 insertions(+), 3 deletions(-) create mode 100644 src/packages/com_mokowaas/admin/src/Service/NotificationService.php diff --git a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php index 657b7d7..9b7a816 100644 --- a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php @@ -12,6 +12,7 @@ defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\MVC\Model\BaseDatabaseModel; +use Moko\Component\MokoWaaS\Administrator\Service\NotificationService; class TicketsModel extends BaseDatabaseModel { @@ -173,8 +174,9 @@ class TicketsModel extends BaseDatabaseModel $db->insertObject('#__mokowaas_tickets', $ticket, 'id'); - // Run automation + // Run automation + notifications $this->runAutomation('ticket_created', (int) $ticket->id); + NotificationService::notify('ticket_created', $this->getTicket((int) $ticket->id)); return ['success' => true, 'message' => 'Ticket #' . $ticket->id . ' created.', 'id' => (int) $ticket->id]; } @@ -215,9 +217,14 @@ class TicketsModel extends BaseDatabaseModel ->where($db->quoteName('sla_responded') . ' = 0') )->execute(); - // Run automation + // Run automation + notifications (skip internal notes) $this->runAutomation('ticket_replied', $ticketId); + if (!$isInternal) + { + NotificationService::notify('ticket_replied', $this->getTicket($ticketId), ['reply_body' => $body]); + } + return ['success' => true, 'message' => 'Reply added.']; } catch (\Throwable $e) @@ -243,6 +250,15 @@ class TicketsModel extends BaseDatabaseModel $db = $this->getDatabase(); $now = Factory::getDate()->toSql(); + // Capture old status for notification + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('status')) + ->from($db->quoteName('#__mokowaas_tickets')) + ->where($db->quoteName('id') . ' = ' . $ticketId) + ); + $oldStatus = $db->loadResult() ?? ''; + $sets = [ $db->quoteName('status') . ' = ' . $db->quote($status), $db->quoteName('modified') . ' = ' . $db->quote($now), @@ -265,8 +281,9 @@ class TicketsModel extends BaseDatabaseModel ->where($db->quoteName('id') . ' = ' . $ticketId) )->execute(); - // Run automation + // Run automation + notifications $this->runAutomation('status_changed', $ticketId); + NotificationService::notify('status_changed', $this->getTicket($ticketId), ['old_status' => $oldStatus]); return ['success' => true, 'message' => 'Status updated to ' . $status . '.']; } @@ -569,6 +586,28 @@ class TicketsModel extends BaseDatabaseModel ]; $db->insertObject('#__mokowaas_ticket_replies', $reply, 'id'); break; + + case 'send_email': + // value = email address or comma-separated list + $emails = array_filter(array_map('trim', explode(',', $value))); + + foreach ($emails as $email) + { + try + { + $mailer = Factory::getMailer(); + $mailer->addRecipient($email); + $mailer->setSubject('[Ticket #' . $ticketId . '] Automation Alert'); + $mailer->setBody('Automation rule triggered for ticket #' . $ticketId . ': ' . ($ticket->subject ?? '')); + $mailer->isHtml(false); + $mailer->Send(); + } + catch (\Throwable $e) + { + \Joomla\CMS\Log\Log::add('Automation email failed: ' . $e->getMessage(), \Joomla\CMS\Log\Log::WARNING, 'mokowaas'); + } + } + break; } } } diff --git a/src/packages/com_mokowaas/admin/src/Service/NotificationService.php b/src/packages/com_mokowaas/admin/src/Service/NotificationService.php new file mode 100644 index 0000000..57e0010 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/Service/NotificationService.php @@ -0,0 +1,334 @@ +isHtml(false); + $mailer->setSubject($subject); + $mailer->setBody($body); + + foreach ($recipients as $email) + { + $email = trim($email); + + if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) + { + continue; + } + + try + { + $mailer->clearAddresses(); + $mailer->addRecipient($email); + $mailer->Send(); + } + catch (\Throwable $e) + { + Log::add('Notification send failed to ' . $email . ': ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + } + catch (\Throwable $e) + { + Log::add('Notification error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + + /** + * Determine recipients based on event type and ticket data. + */ + private static function getRecipients(string $event, object $ticket): array + { + $emails = []; + + // Get notification config from component params + $config = self::getNotificationConfig(); + + // Always notify configured admin emails + $adminEmails = array_filter(array_map('trim', explode(',', $config['admin_emails'] ?? ''))); + $emails = array_merge($emails, $adminEmails); + + // Always notify configured admin user IDs + $adminUserIds = array_filter(array_map('intval', explode(',', $config['admin_user_ids'] ?? ''))); + + foreach ($adminUserIds as $uid) + { + $email = self::getUserEmail($uid); + + if ($email) + { + $emails[] = $email; + } + } + + switch ($event) + { + case 'ticket_created': + // Notify assigned user if any + if (!empty($ticket->assigned_to)) + { + $email = self::getUserEmail((int) $ticket->assigned_to); + + if ($email) + { + $emails[] = $email; + } + } + break; + + case 'ticket_replied': + // Notify ticket creator (customer gets notified of staff reply) + if (!empty($ticket->created_by)) + { + $email = self::getUserEmail((int) $ticket->created_by); + + if ($email) + { + $emails[] = $email; + } + } + + // Notify assigned user + if (!empty($ticket->assigned_to)) + { + $email = self::getUserEmail((int) $ticket->assigned_to); + + if ($email) + { + $emails[] = $email; + } + } + break; + + case 'status_changed': + // Notify ticket creator + if (!empty($ticket->created_by)) + { + $email = self::getUserEmail((int) $ticket->created_by); + + if ($email) + { + $emails[] = $email; + } + } + break; + + case 'ticket_assigned': + // Notify newly assigned user + if (!empty($ticket->assigned_to)) + { + $email = self::getUserEmail((int) $ticket->assigned_to); + + if ($email) + { + $emails[] = $email; + } + } + break; + } + + return array_unique($emails); + } + + /** + * Build email subject line. + */ + private static function buildSubject(string $event, object $ticket): string + { + $siteName = Factory::getConfig()->get('sitename', 'Support'); + $prefix = '[' . $siteName . ' #' . $ticket->id . '] '; + + switch ($event) + { + case 'ticket_created': + return $prefix . 'New Ticket: ' . ($ticket->subject ?? ''); + + case 'ticket_replied': + return $prefix . 'Reply: ' . ($ticket->subject ?? ''); + + case 'status_changed': + return $prefix . 'Status Changed: ' . ($ticket->subject ?? ''); + + case 'ticket_assigned': + return $prefix . 'Assigned: ' . ($ticket->subject ?? ''); + + default: + return $prefix . ($ticket->subject ?? ''); + } + } + + /** + * Build email body. + */ + private static function buildBody(string $event, object $ticket, array $extra): string + { + $siteName = Factory::getConfig()->get('sitename', 'Support'); + $siteUrl = rtrim(Uri::root(), '/'); + $ticketUrl = $siteUrl . '/index.php?option=com_mokowaas&view=ticket&id=' . $ticket->id; + + $lines = []; + $lines[] = $siteName . ' Support'; + $lines[] = str_repeat('-', 40); + $lines[] = ''; + + switch ($event) + { + case 'ticket_created': + $lines[] = 'A new support ticket has been created.'; + $lines[] = ''; + $lines[] = 'Subject: ' . ($ticket->subject ?? ''); + $lines[] = 'Priority: ' . ucfirst($ticket->priority ?? 'normal'); + $lines[] = 'Category: ' . ($ticket->category_title ?? 'General'); + $lines[] = ''; + + if (!empty($ticket->body)) + { + $lines[] = 'Description:'; + $lines[] = strip_tags($ticket->body); + $lines[] = ''; + } + break; + + case 'ticket_replied': + $lines[] = 'A new reply has been added to your ticket.'; + $lines[] = ''; + $lines[] = 'Subject: ' . ($ticket->subject ?? ''); + $lines[] = 'Status: ' . ucwords(str_replace('_', ' ', $ticket->status ?? '')); + $lines[] = ''; + + if (!empty($extra['reply_body'])) + { + $lines[] = 'Reply:'; + $lines[] = strip_tags($extra['reply_body']); + $lines[] = ''; + } + break; + + case 'status_changed': + $lines[] = 'Your ticket status has been updated.'; + $lines[] = ''; + $lines[] = 'Subject: ' . ($ticket->subject ?? ''); + $lines[] = 'New Status: ' . ucwords(str_replace('_', ' ', $ticket->status ?? '')); + + if (!empty($extra['old_status'])) + { + $lines[] = 'Old Status: ' . ucwords(str_replace('_', ' ', $extra['old_status'])); + } + + $lines[] = ''; + break; + + case 'ticket_assigned': + $lines[] = 'A ticket has been assigned to you.'; + $lines[] = ''; + $lines[] = 'Subject: ' . ($ticket->subject ?? ''); + $lines[] = 'Priority: ' . ucfirst($ticket->priority ?? 'normal'); + $lines[] = ''; + break; + } + + $lines[] = 'View ticket: ' . $ticketUrl; + $lines[] = ''; + $lines[] = '-- '; + $lines[] = $siteName . ' | Powered by MokoWaaS'; + + return implode("\n", $lines); + } + + /** + * Get email address for a Joomla user ID. + */ + private static function getUserEmail(int $userId): ?string + { + if ($userId <= 0) + { + return null; + } + + try + { + $db = Factory::getDbo(); + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('email')) + ->from($db->quoteName('#__users')) + ->where($db->quoteName('id') . ' = ' . $userId) + ); + + return $db->loadResult() ?: null; + } + catch (\Throwable $e) + { + return null; + } + } + + /** + * Get notification configuration from component params. + */ + private static function getNotificationConfig(): array + { + try + { + $db = Factory::getDbo(); + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')) + ); + + $params = json_decode($db->loadResult() ?? '{}', true); + + return $params['notifications'] ?? []; + } + catch (\Throwable $e) + { + return []; + } + } +} -- 2.52.0 From 5a274f844c626cd09857fb4a37f36f88be64ccec Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Wed, 3 Jun 2026 03:52:41 +0000 Subject: [PATCH 068/142] chore(version): auto-bump 02.32.40 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 48 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index a528dd0..00f2abb 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.39 + 02.32.40 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 6603393..558fbf4 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.39 +# VERSION: 02.32.40 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 0de57da..7937ffe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.39 + VERSION: 02.32.40 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 824fb2a..fb1faa6 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index b86e2e5..0c38895 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 056408e..5d5ee35 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.39 + VERSION: 02.32.40 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 648dd3f..a5860c2 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 41f1072..54a53e4 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.39 +VERSION: 02.32.40 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 46132c6..1308121 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.39) +# MokoWaaS Build Guide (VERSION: 02.32.40) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 0530dea..33f7695 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.39) +# MokoWaaS Configuration Guide (VERSION: 02.32.40) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 801d18f..c44236a 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.39) +# MokoWaaS Installation Guide (VERSION: 02.32.40) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index c6a65ac..9bf3772 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.39) +# MokoWaaS Operations Guide (VERSION: 02.32.40) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index ce1d499..a1ef835 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.39) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.40) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 0fd7ae4..f7987e8 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.39) +# MokoWaaS Testing Guide (VERSION: 02.32.40) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 05f8df8..e743fb0 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.39) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.40) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index a751171..f19a06e 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.39) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.40) ## Introduction diff --git a/docs/index.md b/docs/index.md index f107243..bf1b489 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.39 + VERSION: 02.32.40 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.39) +# MokoWaaS Documentation Index (VERSION: 02.32.40) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 6dd2f5e..b7ec2ea 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.39 + VERSION: 02.32.40 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.39) +# MokoWaaS Plugin Overview (VERSION: 02.32.40) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 6e42650..5fe6d02 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.39 +VERSION: 02.32.40 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 2191ecf..b10e143 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index c409ca3..b944638 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index ad840aa..e25a820 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.39 + * VERSION: 02.32.40 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index eb73076..e3844ca 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.39 + * VERSION: 02.32.40 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 4f259ea..fa01b10 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.39 + * VERSION: 02.32.40 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 72e4c9a..0a98d67 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.39 + * VERSION: 02.32.40 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 7a18f20..9d1495e 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.39 + * VERSION: 02.32.40 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index a069658..cd6b074 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.39 + * VERSION: 02.32.40 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index b43f2f3..f9c14fb 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.39 + * VERSION: 02.32.40 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 304fb4d..4119cda 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.39 + * VERSION: 02.32.40 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index dc3ca72..878062a 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.39 + * VERSION: 02.32.40 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 19d8d3b..cba69d6 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.39 + * VERSION: 02.32.40 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index e2993f0..5dbc5b5 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index a5eb205..4fa87e1 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.39 + * VERSION: 02.32.40 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 037f2c8..c1ba2fb 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.39 + * VERSION: 02.32.40 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index b9bf33e..c7196de 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 0b6f142..5f4725d 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index f84c1d5..4b6a111 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 795448e..3c21e91 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 96c6529..1702ba1 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index a6b5602..7db32cb 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index ddd297f..368004e 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 - 02.32.39 + 02.32.40 + 02.32.40 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 8d498ef..5226893 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 + 02.32.40 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index b607bd7..2452bed 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 - 02.32.39 + 02.32.40 + 02.32.40 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 3481da4..2d161e6 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.39 - 02.32.39 + 02.32.40 + 02.32.40 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 1caa10e..918265e 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.39 + * VERSION: 02.32.40 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 00e0cc2..cbeaec1 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.39 + * VERSION: 02.32.40 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 6d13b45..ee9c507 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.39 + 02.32.40 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 6e89d75..9b2530e 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 53fe8c08a9d2e7962fe69b94fa31cbddb4f0492f Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Wed, 3 Jun 2026 03:52:42 +0000 Subject: [PATCH 069/142] chore: update development channel 02.32.40 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 9b2530e..579b520 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.39-dev + 02.32.40-dev 2026-06-03 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.39-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.40-dev.zip - 71788c251ca10df254171cd4fe7fbf2a953ee714a65c485f34c55c496bbe152e + ca582f5e1b524414d896b5b749d0ad004cff8b83f1e9d5a85d85f447d8de78dd dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 63fb1339b83a7f38388d6bd56340dc12ac8374f1 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Wed, 3 Jun 2026 09:36:51 +0000 Subject: [PATCH 070/142] chore: sync .mokogitea/workflows/repo-health.yml from moko-platform [skip ci] --- .mokogitea/workflows/repo-health.yml | 125 ++------------------------- 1 file changed, 9 insertions(+), 116 deletions(-) diff --git a/.mokogitea/workflows/repo-health.yml b/.mokogitea/workflows/repo-health.yml index d7743f0..8d57aaf 100644 --- a/.mokogitea/workflows/repo-health.yml +++ b/.mokogitea/workflows/repo-health.yml @@ -11,7 +11,7 @@ # REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform # PATH: /templates/workflows/joomla/repo_health.yml.template # VERSION: 09.23.00 -# BRIEF: Enforces repository guardrails by validating release configuration, scripts governance, tooling availability, and core repository health artifacts. +# BRIEF: Enforces repository guardrails by validating scripts governance, tooling availability, and core repository health artifacts. # ============================================================================ name: "Generic: Repo Health" @@ -24,13 +24,12 @@ on: workflow_dispatch: inputs: profile: - description: 'Validation profile: all, release, scripts, or repo' + description: 'Validation profile: all, scripts, or repo' required: true default: all type: choice options: - all - - release - scripts - repo pull_request: @@ -40,11 +39,6 @@ permissions: contents: read env: - # Release policy - Repository Variables Only - # RS_FTP_PATH_SUFFIX removed — MokoGitea handles all releases now - RELEASE_REQUIRED_REPO_VARS: - RELEASE_OPTIONAL_REPO_VARS: DEV_FTP_SUFFIX - # Scripts governance policy SCRIPTS_REQUIRED_DIRS: SCRIPTS_ALLOWED_DIRS: scripts,scripts/fix,scripts/lib,scripts/release,scripts/run,scripts/validate @@ -139,101 +133,6 @@ jobs: printf '%s\n' 'ERROR: Access denied. Admin permission required.' >> "${GITHUB_STEP_SUMMARY}" exit 1 - release_config: - name: Release configuration - needs: access_check - if: ${{ needs.access_check.outputs.allowed == 'true' }} - runs-on: ubuntu-latest - timeout-minutes: 20 - permissions: - contents: read - - steps: - - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - with: - fetch-depth: 0 - - - name: Guardrails release vars - env: - PROFILE_RAW: ${{ github.event.inputs.profile }} - RS_FTP_PATH_SUFFIX: ${{ vars.RS_FTP_PATH_SUFFIX }} - DEV_FTP_SUFFIX: ${{ vars.DEV_FTP_SUFFIX }} - run: | - set -euo pipefail - - profile="${PROFILE_RAW:-all}" - case "${profile}" in - all|release|scripts|repo) ;; - *) - printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" - exit 1 - ;; - esac - - if [ "${profile}" = 'scripts' ] || [ "${profile}" = 'repo' ]; then - { - printf '%s\n' '### Release configuration (Repository Variables)' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' 'Status: SKIPPED' - printf '%s\n' 'Reason: profile excludes release validation' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - exit 0 - fi - - IFS=',' read -r -a required <<< "${RELEASE_REQUIRED_REPO_VARS}" - IFS=',' read -r -a optional <<< "${RELEASE_OPTIONAL_REPO_VARS}" - - missing=() - missing_optional=() - - for k in "${required[@]}"; do - v="${!k:-}" - [ -z "${v}" ] && missing+=("${k}") - done - - for k in "${optional[@]}"; do - v="${!k:-}" - [ -z "${v}" ] && missing_optional+=("${k}") - done - - { - printf '%s\n' '### Release configuration (Repository Variables)' - printf '%s\n' "Profile: ${profile}" - printf '%s\n' '| Variable | Status |' - printf '%s\n' '|---|---|' - printf '%s\n' "| RS_FTP_PATH_SUFFIX | ${RS_FTP_PATH_SUFFIX:-NOT SET} |" - printf '%s\n' "| DEV_FTP_SUFFIX | ${DEV_FTP_SUFFIX:-NOT SET} |" - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - - if [ "${#missing_optional[@]}" -gt 0 ]; then - { - printf '%s\n' '### Missing optional repository variables' - for m in "${missing_optional[@]}"; do printf '%s\n' "- ${m}"; done - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - fi - - if [ "${#missing[@]}" -gt 0 ]; then - { - printf '%s\n' '### Missing required repository variables' - for m in "${missing[@]}"; do printf '%s\n' "- ${m}"; done - printf '%s\n' 'ERROR: Guardrails failed. Missing required repository variables.' - } >> "${GITHUB_STEP_SUMMARY}" - exit 1 - fi - - { - printf '%s\n' '### Repository variables validation result' - printf '%s\n' 'Status: OK' - printf '%s\n' 'All required repository variables present.' - printf '%s\n' '' - printf '%s\n' '**Note**: Organization secrets (RS_FTP_HOST, RS_FTP_USER, etc.) are validated at deployment time, not in repository health checks.' - printf '\n' - } >> "${GITHUB_STEP_SUMMARY}" - scripts_governance: name: Scripts governance needs: access_check @@ -257,14 +156,14 @@ jobs: profile="${PROFILE_RAW:-all}" case "${profile}" in - all|release|scripts|repo) ;; + all|scripts|repo) ;; *) printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" exit 1 ;; esac - if [ "${profile}" = 'release' ] || [ "${profile}" = 'repo' ]; then + if [ "${profile}" = 'repo' ]; then { printf '%s\n' '### Scripts governance' printf '%s\n' "Profile: ${profile}" @@ -371,14 +270,14 @@ jobs: profile="${PROFILE_RAW:-all}" case "${profile}" in - all|release|scripts|repo) ;; + all|scripts|repo) ;; *) printf '%s\n' "ERROR: Unknown profile: ${profile}" >> "${GITHUB_STEP_SUMMARY}" exit 1 ;; esac - if [ "${profile}" = 'release' ] || [ "${profile}" = 'scripts' ]; then + if [ "${profile}" = 'scripts' ]; then { printf '%s\n' '### Repository health' printf '%s\n' "Profile: ${profile}" @@ -705,7 +604,7 @@ jobs: printf '%s\n' '| Domain | Status | Notes |' printf '%s\n' '|---|---|---|' printf '%s\n' '| Access control | OK | Admin-only execution gate |' - printf '%s\n' '| Release variables | OK | Repository variables validation |' + printf '%s\n' '| Release policy | N/A | Releases handled by MokoGitea |' printf '%s\n' '| Scripts governance | OK | Directory policy and advisory reporting |' printf '%s\n' '| Repo required artifacts | OK | Required, optional, disallowed enforcement |' printf '%s\n' '| Repo content heuristics | OK | Brand, license, changelog structure |' @@ -774,11 +673,10 @@ jobs: report-issues: name: "Report Issues" runs-on: ubuntu-latest - needs: [access_check, release_config, scripts_governance, repo_health] + needs: [access_check, scripts_governance, repo_health] if: >- always() && - (needs.release_config.result == 'failure' || - needs.scripts_governance.result == 'failure' || + (needs.scripts_governance.result == 'failure' || needs.repo_health.result == 'failure') steps: @@ -804,10 +702,6 @@ jobs: fi } - report_gate "Release Configuration" \ - "${{ needs.release_config.result }}" \ - "Required repository variables are missing (RS_FTP_PATH_SUFFIX). Check repository settings." - report_gate "Scripts Governance" \ "${{ needs.scripts_governance.result }}" \ "Scripts directory policy violations detected. Review required and allowed directories." @@ -815,4 +709,3 @@ jobs: report_gate "Repository Health" \ "${{ needs.repo_health.result }}" \ "Repository health checks failed — missing required artifacts, disallowed files, or content warnings. Check the CI run summary." - -- 2.52.0 From dd20e42cb2d02683ba0d49337a53159defeb0321 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Wed, 3 Jun 2026 11:53:54 -0500 Subject: [PATCH 071/142] feat: Privacy Guard - data compliance, consent, retention (#150) Admin Privacy Dashboard (view=privacy): - Data subject requests list with approve/deny actions - Retention policies table with active status - Summary cards (pending, total, consent entries, policies) - Export user data as JSON download - ACL: core.admin only PrivacyModel: - createRequest/processRequest for export/delete/anonymize - exportUserData: profile, articles, action logs, tickets, replies, consent history, Community Builder profile - anonymizeUserData: replace PII, block account, clear logs - deleteUserData: full hard delete (anonymize first, then remove) - logConsent/getUserConsent: consent tracking - enforceRetentionPolicies: action_logs, waf_logs, sessions, inactive_users, closed_tickets (scheduled task ready) - getDashboardSummary Frontend Self-Service (/index.php?option=com_mokowaas&view=privacy): - Download My Data, Anonymize, Delete Account buttons - Request history table - Consent history table - Login required Database tables: - #__mokowaas_consent_log - #__mokowaas_data_requests - #__mokowaas_retention_policies (5 defaults) Submenu: MokoWaaS > Privacy Guard Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/language/en-GB/com_mokowaas.sys.ini | 1 + .../com_mokowaas/admin/sql/install.mysql.sql | 48 ++ .../src/Controller/DisplayController.php | 39 ++ .../admin/src/Model/PrivacyModel.php | 590 ++++++++++++++++++ .../admin/src/View/Privacy/HtmlView.php | 39 ++ .../admin/tmpl/privacy/default.php | 184 ++++++ src/packages/com_mokowaas/mokowaas.xml | 1 + .../site/src/Controller/DisplayController.php | 20 + .../site/src/View/Privacy/HtmlView.php | 68 ++ .../site/tmpl/privacy/default.php | 114 ++++ 10 files changed, 1104 insertions(+) create mode 100644 src/packages/com_mokowaas/admin/src/Model/PrivacyModel.php create mode 100644 src/packages/com_mokowaas/admin/src/View/Privacy/HtmlView.php create mode 100644 src/packages/com_mokowaas/admin/tmpl/privacy/default.php create mode 100644 src/packages/com_mokowaas/site/src/View/Privacy/HtmlView.php create mode 100644 src/packages/com_mokowaas/site/tmpl/privacy/default.php diff --git a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini index bd38065..e5da7db 100644 --- a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini +++ b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini @@ -12,4 +12,5 @@ COM_MOKOWAAS_MENU_UPDATES="Joomla Updates" COM_MOKOWAAS_MENU_CHECKIN="Global Check-in" COM_MOKOWAAS_MENU_TICKETS="Helpdesk" COM_MOKOWAAS_MENU_HTACCESS=".htaccess Maker" +COM_MOKOWAAS_MENU_PRIVACY="Privacy Guard" COM_MOKOWAAS_MENU_CACHE="Cache Management" diff --git a/src/packages/com_mokowaas/admin/sql/install.mysql.sql b/src/packages/com_mokowaas/admin/sql/install.mysql.sql index 208a25b..0bd447a 100644 --- a/src/packages/com_mokowaas/admin/sql/install.mysql.sql +++ b/src/packages/com_mokowaas/admin/sql/install.mysql.sql @@ -85,3 +85,51 @@ INSERT IGNORE INTO `#__mokowaas_ticket_categories` (`id`, `title`, `alias`, `des (3, 'Feature Request', 'feature-request', 'Request a new feature or enhancement', 1440, 10080, 3), (4, 'Billing', 'billing', 'Billing, invoicing, and payment questions', 240, 1440, 4), (5, 'Urgent / Outage', 'urgent-outage', 'Site down or critical issue', 60, 240, 5); + +-- +-- Privacy Guard Tables +-- + +CREATE TABLE IF NOT EXISTS `#__mokowaas_consent_log` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT NOT NULL, + `category` VARCHAR(50) NOT NULL, + `action` ENUM('granted','revoked') NOT NULL, + `ip_address` VARCHAR(45) NOT NULL DEFAULT '', + `created` DATETIME NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_user` (`user_id`), + KEY `idx_category` (`category`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokowaas_data_requests` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` INT NOT NULL, + `type` ENUM('export','delete','anonymize') NOT NULL, + `status` ENUM('pending','processing','completed','denied') NOT NULL DEFAULT 'pending', + `notes` TEXT, + `processed_by` INT DEFAULT NULL, + `created` DATETIME NOT NULL, + `processed` DATETIME DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_user` (`user_id`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokowaas_retention_policies` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `content_type` VARCHAR(100) NOT NULL, + `retention_days` INT UNSIGNED NOT NULL DEFAULT 365, + `action` ENUM('anonymize','delete','archive') NOT NULL DEFAULT 'anonymize', + `enabled` TINYINT NOT NULL DEFAULT 1, + `description` VARCHAR(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- Default retention policies +INSERT IGNORE INTO `#__mokowaas_retention_policies` (`id`, `content_type`, `retention_days`, `action`, `enabled`, `description`) VALUES +(1, 'action_logs', 90, 'delete', 1, 'Delete action log entries older than 90 days'), +(2, 'waf_logs', 30, 'delete', 1, 'Delete WAF block logs older than 30 days'), +(3, 'sessions', 7, 'delete', 1, 'Purge expired sessions older than 7 days'), +(4, 'inactive_users', 730, 'anonymize', 0, 'Anonymize users inactive for 2 years (disabled by default)'), +(5, 'closed_tickets', 365, 'anonymize', 0, 'Anonymize closed tickets older than 1 year (disabled by default)'); diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index 01ca5a9..648340a 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -29,6 +29,7 @@ class DisplayController extends BaseController 'htaccess' => 'mokowaas.htaccess', 'tickets' => 'mokowaas.tickets', 'ticket' => 'mokowaas.tickets', + 'privacy' => 'core.admin', ]; public function display($cachable = false, $urlparams = []) @@ -268,6 +269,44 @@ class DisplayController extends BaseController } } + // ================================================================== + // Privacy Guard + // ================================================================== + + public function processDataRequest() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + if (!$this->checkAcl('core.admin')) + { + $this->jsonForbidden(); + } + + $input = Factory::getApplication()->getInput(); + $model = new \Moko\Component\MokoWaaS\Administrator\Model\PrivacyModel(); + + $this->jsonResponse($model->processRequest( + $input->getInt('request_id', 0), + $input->getString('action', 'deny') + )); + } + + public function exportUserData() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + if (!$this->checkAcl('core.admin')) + { + $this->jsonForbidden(); + } + + $model = new \Moko\Component\MokoWaaS\Administrator\Model\PrivacyModel(); + + $this->jsonResponse($model->exportUserData( + Factory::getApplication()->getInput()->getInt('user_id', 0) + )); + } + // ================================================================== // Importers // ================================================================== diff --git a/src/packages/com_mokowaas/admin/src/Model/PrivacyModel.php b/src/packages/com_mokowaas/admin/src/Model/PrivacyModel.php new file mode 100644 index 0000000..9bb5356 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/Model/PrivacyModel.php @@ -0,0 +1,590 @@ +getDatabase(); + $query = $db->getQuery(true) + ->select([ + $db->quoteName('r') . '.*', + $db->quoteName('u.name', 'user_name'), + $db->quoteName('u.email', 'user_email'), + $db->quoteName('u.username'), + $db->quoteName('p.name', 'processed_by_name'), + ]) + ->from($db->quoteName('#__mokowaas_data_requests', 'r')) + ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = r.user_id') + ->leftJoin($db->quoteName('#__users', 'p') . ' ON p.id = r.processed_by'); + + if ($filterStatus) + { + $query->where($db->quoteName('r.status') . ' = ' . $db->quote($filterStatus)); + } + + $query->order($db->quoteName('r.created') . ' DESC')->setLimit(50); + $db->setQuery($query); + + return $db->loadObjectList() ?: []; + } + + /** + * Create a data request (from admin or user self-service). + */ + public function createRequest(int $userId, string $type, string $notes = ''): array + { + $validTypes = ['export', 'delete', 'anonymize']; + + if (!\in_array($type, $validTypes, true)) + { + return ['success' => false, 'message' => 'Invalid request type.']; + } + + try + { + $db = $this->getDatabase(); + $row = (object) [ + 'user_id' => $userId, + 'type' => $type, + 'status' => 'pending', + 'notes' => $notes, + 'created' => Factory::getDate()->toSql(), + ]; + + $db->insertObject('#__mokowaas_data_requests', $row, 'id'); + + return ['success' => true, 'message' => ucfirst($type) . ' request #' . $row->id . ' created.', 'id' => (int) $row->id]; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Failed: ' . $e->getMessage()]; + } + } + + /** + * Process a data request (approve and execute). + */ + public function processRequest(int $requestId, string $action): array + { + $db = $this->getDatabase(); + + try + { + $db->setQuery( + $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_data_requests')) + ->where($db->quoteName('id') . ' = ' . $requestId) + ); + $request = $db->loadObject(); + + if (!$request) + { + return ['success' => false, 'message' => 'Request not found.']; + } + + if ($action === 'deny') + { + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_data_requests')) + ->set($db->quoteName('status') . ' = ' . $db->quote('denied')) + ->set($db->quoteName('processed_by') . ' = ' . (int) Factory::getApplication()->getIdentity()->id) + ->set($db->quoteName('processed') . ' = ' . $db->quote(Factory::getDate()->toSql())) + ->where($db->quoteName('id') . ' = ' . $requestId) + )->execute(); + + return ['success' => true, 'message' => 'Request denied.']; + } + + // Mark as processing + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_data_requests')) + ->set($db->quoteName('status') . ' = ' . $db->quote('processing')) + ->where($db->quoteName('id') . ' = ' . $requestId) + )->execute(); + + // Execute the request + $result = null; + + switch ($request->type) + { + case 'export': + $result = $this->exportUserData((int) $request->user_id); + break; + + case 'delete': + $result = $this->deleteUserData((int) $request->user_id); + break; + + case 'anonymize': + $result = $this->anonymizeUserData((int) $request->user_id); + break; + } + + // Mark completed + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_data_requests')) + ->set($db->quoteName('status') . ' = ' . $db->quote('completed')) + ->set($db->quoteName('processed_by') . ' = ' . (int) Factory::getApplication()->getIdentity()->id) + ->set($db->quoteName('processed') . ' = ' . $db->quote(Factory::getDate()->toSql())) + ->where($db->quoteName('id') . ' = ' . $requestId) + )->execute(); + + return $result ?? ['success' => true, 'message' => 'Request processed.']; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Processing failed: ' . $e->getMessage()]; + } + } + + /** + * Export all data for a user as a structured array. + */ + public function exportUserData(int $userId): array + { + $db = $this->getDatabase(); + $data = ['user_id' => $userId, 'exported' => gmdate('Y-m-d\TH:i:s\Z')]; + + try + { + // User profile + $db->setQuery( + $db->getQuery(true) + ->select(['id', 'name', 'username', 'email', 'registerDate', 'lastvisitDate', 'params']) + ->from($db->quoteName('#__users')) + ->where($db->quoteName('id') . ' = ' . $userId) + ); + $data['profile'] = $db->loadObject(); + + // Content (articles) + $db->setQuery( + $db->getQuery(true) + ->select(['id', 'title', 'alias', 'created', 'modified', 'hits']) + ->from($db->quoteName('#__content')) + ->where($db->quoteName('created_by') . ' = ' . $userId) + ); + $data['articles'] = $db->loadObjectList() ?: []; + + // Action logs + $db->setQuery( + $db->getQuery(true) + ->select(['message', 'log_date', 'ip_address']) + ->from($db->quoteName('#__action_logs')) + ->where($db->quoteName('user_id') . ' = ' . $userId) + ->order('log_date DESC') + ->setLimit(100) + ); + $data['action_logs'] = $db->loadObjectList() ?: []; + + // Support tickets + $db->setQuery( + $db->getQuery(true) + ->select(['id', 'subject', 'body', 'status', 'priority', 'created']) + ->from($db->quoteName('#__mokowaas_tickets')) + ->where($db->quoteName('created_by') . ' = ' . $userId) + ); + $data['tickets'] = $db->loadObjectList() ?: []; + + // Ticket replies + $db->setQuery( + $db->getQuery(true) + ->select(['r.id', 'r.ticket_id', 'r.body', 'r.created']) + ->from($db->quoteName('#__mokowaas_ticket_replies', 'r')) + ->where($db->quoteName('r.user_id') . ' = ' . $userId) + ); + $data['ticket_replies'] = $db->loadObjectList() ?: []; + + // Consent log + $db->setQuery( + $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_consent_log')) + ->where($db->quoteName('user_id') . ' = ' . $userId) + ->order('created ASC') + ); + $data['consent_history'] = $db->loadObjectList() ?: []; + + // Community Builder profile (if table exists) + try + { + $db->setQuery('SHOW TABLES LIKE ' . $db->quote('%comprofiler%')); + + if ($db->loadResult()) + { + $db->setQuery( + $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__comprofiler')) + ->where($db->quoteName('user_id') . ' = ' . $userId) + ); + $data['community_builder'] = $db->loadObject(); + } + } + catch (\Throwable $e) {} + + return ['success' => true, 'message' => 'Data exported.', 'data' => $data]; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Export failed: ' . $e->getMessage()]; + } + } + + /** + * Anonymize a user's data (GDPR right to be forgotten — soft). + */ + public function anonymizeUserData(int $userId): array + { + $db = $this->getDatabase(); + $now = Factory::getDate()->toSql(); + $anon = 'Anonymous User #' . $userId; + + try + { + // Anonymize user record + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__users')) + ->set([ + $db->quoteName('name') . ' = ' . $db->quote($anon), + $db->quoteName('username') . ' = ' . $db->quote('anon_' . $userId), + $db->quoteName('email') . ' = ' . $db->quote('anon_' . $userId . '@deleted.local'), + $db->quoteName('password') . ' = ' . $db->quote(''), + $db->quoteName('block') . ' = 1', + $db->quoteName('params') . ' = ' . $db->quote('{}'), + ]) + ->where($db->quoteName('id') . ' = ' . $userId) + )->execute(); + + // Anonymize article authorship + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__content')) + ->set($db->quoteName('created_by_alias') . ' = ' . $db->quote($anon)) + ->where($db->quoteName('created_by') . ' = ' . $userId) + )->execute(); + + // Delete action logs + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__action_logs')) + ->where($db->quoteName('user_id') . ' = ' . $userId) + )->execute(); + + // Anonymize ticket replies + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_ticket_replies')) + ->set($db->quoteName('body') . ' = ' . $db->quote('[Content removed per data request]')) + ->where($db->quoteName('user_id') . ' = ' . $userId) + )->execute(); + + // Community Builder + try + { + $db->setQuery('SHOW TABLES LIKE ' . $db->quote('%comprofiler%')); + + if ($db->loadResult()) + { + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__comprofiler')) + ->set([ + $db->quoteName('firstname') . ' = ' . $db->quote('Anonymous'), + $db->quoteName('lastname') . ' = ' . $db->quote('User'), + $db->quoteName('middlename') . ' = ' . $db->quote(''), + ]) + ->where($db->quoteName('user_id') . ' = ' . $userId) + )->execute(); + } + } + catch (\Throwable $e) {} + + // Log the anonymization + $this->logConsent($userId, 'account_anonymized', 'granted'); + + return ['success' => true, 'message' => 'User #' . $userId . ' data anonymized.']; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Anonymization failed: ' . $e->getMessage()]; + } + } + + /** + * Delete a user's data completely (hard delete). + */ + public function deleteUserData(int $userId): array + { + $result = $this->anonymizeUserData($userId); + + if (!$result['success']) + { + return $result; + } + + $db = $this->getDatabase(); + + try + { + // Delete tickets and replies + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__mokowaas_tickets')) + ->where($db->quoteName('created_by') . ' = ' . $userId) + ); + $ticketIds = $db->loadColumn() ?: []; + + if (!empty($ticketIds)) + { + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__mokowaas_ticket_replies')) + ->where($db->quoteName('ticket_id') . ' IN (' . implode(',', $ticketIds) . ')') + )->execute(); + + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__mokowaas_tickets')) + ->where($db->quoteName('created_by') . ' = ' . $userId) + )->execute(); + } + + // Delete consent log + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__mokowaas_consent_log')) + ->where($db->quoteName('user_id') . ' = ' . $userId) + )->execute(); + + // Delete user record + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__users')) + ->where($db->quoteName('id') . ' = ' . $userId) + )->execute(); + + return ['success' => true, 'message' => 'User #' . $userId . ' data permanently deleted.']; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Deletion failed: ' . $e->getMessage()]; + } + } + + // ================================================================== + // Consent Management + // ================================================================== + + /** + * Get consent status for a user. + */ + public function getUserConsent(int $userId): array + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_consent_log')) + ->where($db->quoteName('user_id') . ' = ' . $userId) + ->order($db->quoteName('created') . ' DESC') + ); + + return $db->loadObjectList() ?: []; + } + + /** + * Record a consent action. + */ + public function logConsent(int $userId, string $category, string $action): void + { + $db = $this->getDatabase(); + $row = (object) [ + 'user_id' => $userId, + 'category' => $category, + 'action' => $action === 'revoked' ? 'revoked' : 'granted', + 'ip_address' => $_SERVER['REMOTE_ADDR'] ?? '', + 'created' => Factory::getDate()->toSql(), + ]; + $db->insertObject('#__mokowaas_consent_log', $row, 'id'); + } + + // ================================================================== + // Retention Policy Enforcement + // ================================================================== + + /** + * Get all retention policies. + */ + public function getRetentionPolicies(): array + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_retention_policies')) + ->order($db->quoteName('id') . ' ASC') + ); + + return $db->loadObjectList() ?: []; + } + + /** + * Run retention policy enforcement (called by scheduled task). + */ + public function enforceRetentionPolicies(): array + { + $db = $this->getDatabase(); + $results = ['policies_run' => 0, 'items_affected' => 0]; + $policies = $this->getRetentionPolicies(); + + foreach ($policies as $policy) + { + if (!(int) $policy->enabled) + { + continue; + } + + $cutoff = Factory::getDate('-' . (int) $policy->retention_days . ' days')->toSql(); + $count = 0; + + try + { + switch ($policy->content_type) + { + case 'action_logs': + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__action_logs')) + ->where($db->quoteName('log_date') . ' < ' . $db->quote($cutoff)) + )->execute(); + $count = $db->getAffectedRows(); + break; + + case 'waf_logs': + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__mokowaas_waf_log')) + ->where($db->quoteName('created') . ' < ' . $db->quote($cutoff)) + )->execute(); + $count = $db->getAffectedRows(); + break; + + case 'sessions': + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__session')) + ->where($db->quoteName('time') . ' < ' . (int) strtotime($cutoff)) + )->execute(); + $count = $db->getAffectedRows(); + break; + + case 'closed_tickets': + if ($policy->action === 'anonymize') + { + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_tickets')) + ->set($db->quoteName('body') . ' = ' . $db->quote('[Removed per retention policy]')) + ->where($db->quoteName('status') . ' = ' . $db->quote('closed')) + ->where($db->quoteName('closed') . ' < ' . $db->quote($cutoff)) + ->where($db->quoteName('body') . ' != ' . $db->quote('[Removed per retention policy]')) + )->execute(); + $count = $db->getAffectedRows(); + } + break; + + case 'inactive_users': + if ($policy->action === 'anonymize') + { + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__users')) + ->where($db->quoteName('lastvisitDate') . ' < ' . $db->quote($cutoff)) + ->where($db->quoteName('lastvisitDate') . ' != ' . $db->quote('0000-00-00 00:00:00')) + ->where($db->quoteName('block') . ' = 0') + ->where($db->quoteName('username') . ' NOT LIKE ' . $db->quote('anon_%')) + ); + $userIds = $db->loadColumn() ?: []; + + foreach ($userIds as $uid) + { + $this->anonymizeUserData((int) $uid); + $count++; + } + } + break; + } + + if ($count > 0) + { + $results['policies_run']++; + $results['items_affected'] += $count; + Log::add(\sprintf('Retention: %s — %d items affected', $policy->content_type, $count), Log::INFO, 'mokowaas'); + } + } + catch (\Throwable $e) + { + Log::add('Retention policy error (' . $policy->content_type . '): ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + + return $results; + } + + /** + * Get privacy dashboard summary counts. + */ + public function getDashboardSummary(): object + { + $db = $this->getDatabase(); + + $summary = (object) [ + 'pending_requests' => 0, + 'total_requests' => 0, + 'consent_entries' => 0, + 'policies_active' => 0, + ]; + + try + { + $db->setQuery('SELECT COUNT(*) FROM #__mokowaas_data_requests WHERE status = ' . $db->quote('pending')); + $summary->pending_requests = (int) $db->loadResult(); + + $db->setQuery('SELECT COUNT(*) FROM #__mokowaas_data_requests'); + $summary->total_requests = (int) $db->loadResult(); + + $db->setQuery('SELECT COUNT(*) FROM #__mokowaas_consent_log'); + $summary->consent_entries = (int) $db->loadResult(); + + $db->setQuery('SELECT COUNT(*) FROM #__mokowaas_retention_policies WHERE enabled = 1'); + $summary->policies_active = (int) $db->loadResult(); + } + catch (\Throwable $e) {} + + return $summary; + } +} diff --git a/src/packages/com_mokowaas/admin/src/View/Privacy/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Privacy/HtmlView.php new file mode 100644 index 0000000..b4d7e52 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Privacy/HtmlView.php @@ -0,0 +1,39 @@ +getInput()->getString('filter_status', ''); + $this->requests = $model->getDataRequests($filterStatus); + $this->policies = $model->getRetentionPolicies(); + $this->summary = $model->getDashboardSummary(); + + $this->addToolbar(); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } + + protected function addToolbar(): void + { + ToolbarHelper::title('Privacy Guard', 'lock'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas'); + } +} diff --git a/src/packages/com_mokowaas/admin/tmpl/privacy/default.php b/src/packages/com_mokowaas/admin/tmpl/privacy/default.php new file mode 100644 index 0000000..0b6f6f7 --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/privacy/default.php @@ -0,0 +1,184 @@ +requests; +$policies = $this->policies; +$summary = $this->summary; +$token = Session::getFormToken(); + +$statusBadge = [ + 'pending' => 'bg-warning text-dark', + 'processing' => 'bg-info', + 'completed' => 'bg-success', + 'denied' => 'bg-secondary', +]; +$typeBadge = [ + 'export' => 'bg-primary', + 'delete' => 'bg-danger', + 'anonymize' => 'bg-warning text-dark', +]; +?> + +
+ +
+
+
+ pending_requests; ?> + Pending Requests +
+
+
+
+ total_requests; ?> + Total Requests +
+
+
+
+ consent_entries; ?> + Consent Entries +
+
+
+
+ policies_active; ?> + Active Policies +
+
+
+ +
+ +
+
+
+ Data Subject Requests +
+ + + +
+
+ +
No data requests found.
+ +
+ + + + + + + + + + + + + + + +
#UserTypeStatusCreatedProcessedActions
id; ?>escape($r->user_name ?? ''); ?>
escape($r->user_email ?? ''); ?>
type); ?>status); ?>created, 'M d, Y H:i'); ?>processed ? HTMLHelper::_('date', $r->processed, 'M d, Y H:i') : '—'; ?> + status === 'pending'): ?> +
+ + +
+ status === 'completed' && $r->type === 'export'): ?> + + +
+
+ +
+
+ + +
+
+
Retention Policies
+
+ + + + + + + + + + + + +
TypeDaysActionActive
escape($p->content_type); ?>retention_days; ?>action; ?>enabled ? 'Yes' : 'No'; ?>
+
+
+
+
+
+ + diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 2191ecf..dea0374 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -32,6 +32,7 @@ COM_MOKOWAAS_MENU_EXTENSIONS COM_MOKOWAAS_MENU_TICKETS COM_MOKOWAAS_MENU_HTACCESS + COM_MOKOWAAS_MENU_PRIVACY COM_MOKOWAAS_MENU_PLUGINS COM_MOKOWAAS_MENU_UPDATES COM_MOKOWAAS_MENU_CHECKIN diff --git a/src/packages/com_mokowaas/site/src/Controller/DisplayController.php b/src/packages/com_mokowaas/site/src/Controller/DisplayController.php index 7d820b9..4cecaf9 100644 --- a/src/packages/com_mokowaas/site/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/site/src/Controller/DisplayController.php @@ -163,6 +163,26 @@ class DisplayController extends BaseController } } + /** + * Submit a data privacy request from frontend. + */ + public function submitDataRequest() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + $user = Factory::getApplication()->getIdentity(); + + if ($user->guest) + { + $this->jsonResponse(['success' => false, 'message' => 'Please log in.']); + } + + $type = Factory::getApplication()->getInput()->getString('type', ''); + $model = new \Moko\Component\MokoWaaS\Administrator\Model\PrivacyModel(); + + $this->jsonResponse($model->createRequest($user->id, $type, 'Submitted via self-service portal')); + } + /** * Check if user is support staff (can manage tickets beyond their own). */ diff --git a/src/packages/com_mokowaas/site/src/View/Privacy/HtmlView.php b/src/packages/com_mokowaas/site/src/View/Privacy/HtmlView.php new file mode 100644 index 0000000..a6b7008 --- /dev/null +++ b/src/packages/com_mokowaas/site/src/View/Privacy/HtmlView.php @@ -0,0 +1,68 @@ +getIdentity(); + + if ($user->guest) + { + Factory::getApplication()->redirect(Route::_( + 'index.php?option=com_users&view=login&return=' . base64_encode('index.php?option=com_mokowaas&view=privacy'), + false + )); + + return; + } + + $db = Factory::getContainer()->get('Joomla\Database\DatabaseInterface'); + + // Get user's data requests + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_data_requests')) + ->where($db->quoteName('user_id') . ' = ' . (int) $user->id) + ->order($db->quoteName('created') . ' DESC'); + + try + { + $db->setQuery($query); + $this->requests = $db->loadObjectList() ?: []; + } + catch (\Throwable $e) + { + $this->requests = []; + } + + // Get consent history + try + { + $db->setQuery( + $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_consent_log')) + ->where($db->quoteName('user_id') . ' = ' . (int) $user->id) + ->order($db->quoteName('created') . ' DESC') + ->setLimit(20) + ); + $this->consent = $db->loadObjectList() ?: []; + } + catch (\Throwable $e) + { + $this->consent = []; + } + + parent::display($tpl); + } +} diff --git a/src/packages/com_mokowaas/site/tmpl/privacy/default.php b/src/packages/com_mokowaas/site/tmpl/privacy/default.php new file mode 100644 index 0000000..f26b4e6 --- /dev/null +++ b/src/packages/com_mokowaas/site/tmpl/privacy/default.php @@ -0,0 +1,114 @@ +getIdentity(); +$requests = $this->requests; +$consent = $this->consent; +$token = Session::getFormToken(); + +$statusLabel = ['pending' => 'Pending', 'processing' => 'Processing', 'completed' => 'Completed', 'denied' => 'Denied']; +$statusClass = ['pending' => 'warning', 'processing' => 'info', 'completed' => 'success', 'denied' => 'secondary']; +?> + +
+

My Privacy & Data

+

Manage your personal data, download your information, or request account deletion.

+ + +
+
+ +
+
+ +
+
+ +
+
+ + + +
+
My Data Requests
+
+ + + + + + + + + + + + +
TypeStatusSubmittedProcessed
type); ?>status] ?? $r->status; ?>created, 'M d, Y H:i'); ?>processed ? HTMLHelper::_('date', $r->processed, 'M d, Y H:i') : '—'; ?>
+
+
+ + + + +
+
Consent History
+
+ + + + + + + + + + + +
CategoryActionDate
category))); ?>action); ?>created, 'M d, Y H:i'); ?>
+
+
+ +
+ + -- 2.52.0 From 8cd80ae7d2fbe76cc6e79e78f87e7abb6577f518 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Wed, 3 Jun 2026 16:54:18 +0000 Subject: [PATCH 072/142] chore(version): auto-bump 02.32.41 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 48 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 00f2abb..283bdb4 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.40 + 02.32.41 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 558fbf4..b9a1286 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.40 +# VERSION: 02.32.41 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 7937ffe..c1ea0b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.40 + VERSION: 02.32.41 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index fb1faa6..bbd72e3 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 0c38895..de2b648 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 5d5ee35..38d441f 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.40 + VERSION: 02.32.41 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index a5860c2..20da02c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 54a53e4..841bc5b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.40 +VERSION: 02.32.41 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 1308121..af68a94 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.40) +# MokoWaaS Build Guide (VERSION: 02.32.41) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 33f7695..8b8212f 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.40) +# MokoWaaS Configuration Guide (VERSION: 02.32.41) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index c44236a..912c747 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.40) +# MokoWaaS Installation Guide (VERSION: 02.32.41) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 9bf3772..ec3bee3 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.40) +# MokoWaaS Operations Guide (VERSION: 02.32.41) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index a1ef835..d99a9d2 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.40) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.41) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index f7987e8..58f6f95 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.40) +# MokoWaaS Testing Guide (VERSION: 02.32.41) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index e743fb0..9713a69 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.40) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.41) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index f19a06e..7e02771 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.40) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.41) ## Introduction diff --git a/docs/index.md b/docs/index.md index bf1b489..053e3c8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.40 + VERSION: 02.32.41 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.40) +# MokoWaaS Documentation Index (VERSION: 02.32.41) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index b7ec2ea..464cb29 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.40 + VERSION: 02.32.41 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.40) +# MokoWaaS Plugin Overview (VERSION: 02.32.41) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 5fe6d02..c345eca 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.40 +VERSION: 02.32.41 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 2168186..9496378 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index b944638..4f307bc 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index e25a820..42be382 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.40 + * VERSION: 02.32.41 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index e3844ca..ff77157 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.40 + * VERSION: 02.32.41 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index fa01b10..7ea234a 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.40 + * VERSION: 02.32.41 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 0a98d67..78edec3 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.40 + * VERSION: 02.32.41 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 9d1495e..7e8b6cf 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.40 + * VERSION: 02.32.41 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index cd6b074..5c8b85f 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.40 + * VERSION: 02.32.41 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index f9c14fb..3d23d22 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.40 + * VERSION: 02.32.41 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 4119cda..740b4ac 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.40 + * VERSION: 02.32.41 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 878062a..11e855c 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.40 + * VERSION: 02.32.41 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index cba69d6..f5b6925 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.40 + * VERSION: 02.32.41 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 5dbc5b5..041079f 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 4fa87e1..74ea2d8 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.40 + * VERSION: 02.32.41 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index c1ba2fb..680d538 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.40 + * VERSION: 02.32.41 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index c7196de..b962db0 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 5f4725d..f2b25df 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 4b6a111..398dfbf 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 3c21e91..73b30ff 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 1702ba1..dbf49c9 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index 7db32cb..a35f66c 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 368004e..60f1c98 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 - 02.32.40 + 02.32.41 + 02.32.41 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 5226893..d641752 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 + 02.32.41 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 2452bed..26eb4a0 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 - 02.32.40 + 02.32.41 + 02.32.41 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 2d161e6..71f59e8 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.40 - 02.32.40 + 02.32.41 + 02.32.41 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 918265e..34e6b7d 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.40 + * VERSION: 02.32.41 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index cbeaec1..eb9afdd 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.40 + * VERSION: 02.32.41 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index ee9c507..123ffa9 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.40 + 02.32.41 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 579b520..65392cd 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From d22d470aa229e7968ee9b67d9fe43106e9d34d5b Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Wed, 3 Jun 2026 16:54:19 +0000 Subject: [PATCH 073/142] chore: update development channel 02.32.41 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 65392cd..bab4ae7 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.40-dev + 02.32.41-dev 2026-06-03 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.40-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.41-dev.zip - ca582f5e1b524414d896b5b749d0ad004cff8b83f1e9d5a85d85f447d8de78dd + 17a2b862b697133b67847c9776f822a5b519b04fd87c457686e3cb5e78dde077 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 8f936fc92cc1b43924f6f7640749d455eca80b8f Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Wed, 3 Jun 2026 23:42:18 -0500 Subject: [PATCH 074/142] feat: WAF log viewer with filters, one-click ban, and purge (#144) Admin view at MokoWaaS > WAF Log: - Rule distribution cards showing block counts per shield - Filterable log table: rule, IP, search (URI/detail/UA), date range - Pagination (50 per page) - One-click IP ban from any log entry or top IPs sidebar - Top 10 blocked IPs sidebar with ban buttons - Purge old logs (configurable days) - Color-coded rule badges (sqli=red, xss=red, mua=yellow, etc.) WaflogModel: - getLogs with filters + pagination - getTotal for page count - getRuleCounts for distribution cards - getTopIps for sidebar - getRuleNames for filter dropdown - purgeLogs(days) with affected count - banIp adds to firewall plugin IP blocklist params ACL: core.admin (Super Users only) Submenu: MokoWaaS > WAF Log Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/language/en-GB/com_mokowaas.sys.ini | 1 + .../src/Controller/DisplayController.php | 35 +++ .../admin/src/Model/WaflogModel.php | 215 ++++++++++++++++++ .../admin/src/View/Waflog/HtmlView.php | 55 +++++ .../admin/tmpl/waflog/default.php | 212 +++++++++++++++++ src/packages/com_mokowaas/mokowaas.xml | 1 + 6 files changed, 519 insertions(+) create mode 100644 src/packages/com_mokowaas/admin/src/Model/WaflogModel.php create mode 100644 src/packages/com_mokowaas/admin/src/View/Waflog/HtmlView.php create mode 100644 src/packages/com_mokowaas/admin/tmpl/waflog/default.php diff --git a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini index e5da7db..0218a06 100644 --- a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini +++ b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini @@ -13,4 +13,5 @@ COM_MOKOWAAS_MENU_CHECKIN="Global Check-in" COM_MOKOWAAS_MENU_TICKETS="Helpdesk" COM_MOKOWAAS_MENU_HTACCESS=".htaccess Maker" COM_MOKOWAAS_MENU_PRIVACY="Privacy Guard" +COM_MOKOWAAS_MENU_WAFLOG="WAF Log" COM_MOKOWAAS_MENU_CACHE="Cache Management" diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index 648340a..e769663 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -30,6 +30,7 @@ class DisplayController extends BaseController 'tickets' => 'mokowaas.tickets', 'ticket' => 'mokowaas.tickets', 'privacy' => 'core.admin', + 'waflog' => 'core.admin', ]; public function display($cachable = false, $urlparams = []) @@ -269,6 +270,40 @@ class DisplayController extends BaseController } } + // ================================================================== + // WAF Log + // ================================================================== + + public function purgeWafLog() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + if (!$this->checkAcl('core.admin')) + { + $this->jsonForbidden(); + } + + $days = Factory::getApplication()->getInput()->getInt('days', 30); + $model = new \Moko\Component\MokoWaaS\Administrator\Model\WaflogModel(); + + $this->jsonResponse($model->purgeLogs($days)); + } + + public function banIpFromLog() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + if (!$this->checkAcl('core.admin')) + { + $this->jsonForbidden(); + } + + $ip = Factory::getApplication()->getInput()->getString('ip', ''); + $model = new \Moko\Component\MokoWaaS\Administrator\Model\WaflogModel(); + + $this->jsonResponse($model->banIp($ip)); + } + // ================================================================== // Privacy Guard // ================================================================== diff --git a/src/packages/com_mokowaas/admin/src/Model/WaflogModel.php b/src/packages/com_mokowaas/admin/src/Model/WaflogModel.php new file mode 100644 index 0000000..591ba31 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/Model/WaflogModel.php @@ -0,0 +1,215 @@ +getDatabase(); + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_waf_log')); + + if (!empty($filters['rule'])) + { + $query->where($db->quoteName('rule') . ' = ' . $db->quote($filters['rule'])); + } + + if (!empty($filters['ip'])) + { + $query->where($db->quoteName('ip') . ' LIKE ' . $db->quote('%' . $db->escape($filters['ip'], true) . '%')); + } + + if (!empty($filters['search'])) + { + $search = $db->quote('%' . $db->escape($filters['search'], true) . '%'); + $query->where('(' . $db->quoteName('uri') . ' LIKE ' . $search + . ' OR ' . $db->quoteName('detail') . ' LIKE ' . $search + . ' OR ' . $db->quoteName('user_agent') . ' LIKE ' . $search . ')'); + } + + if (!empty($filters['date_from'])) + { + $query->where($db->quoteName('created') . ' >= ' . $db->quote($filters['date_from'] . ' 00:00:00')); + } + + if (!empty($filters['date_to'])) + { + $query->where($db->quoteName('created') . ' <= ' . $db->quote($filters['date_to'] . ' 23:59:59')); + } + + $query->order($db->quoteName('created') . ' DESC'); + $query->setLimit($limit, $offset); + + $db->setQuery($query); + + return $db->loadObjectList() ?: []; + } + + /** + * Get total count for pagination. + */ + public function getTotal(array $filters = []): int + { + $db = $this->getDatabase(); + $query = $db->getQuery(true) + ->select('COUNT(*)') + ->from($db->quoteName('#__mokowaas_waf_log')); + + if (!empty($filters['rule'])) + { + $query->where($db->quoteName('rule') . ' = ' . $db->quote($filters['rule'])); + } + + if (!empty($filters['ip'])) + { + $query->where($db->quoteName('ip') . ' LIKE ' . $db->quote('%' . $db->escape($filters['ip'], true) . '%')); + } + + $db->setQuery($query); + + return (int) $db->loadResult(); + } + + /** + * Get block counts grouped by rule for the summary bar. + */ + public function getRuleCounts(): array + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select([$db->quoteName('rule'), 'COUNT(*) AS ' . $db->quoteName('cnt')]) + ->from($db->quoteName('#__mokowaas_waf_log')) + ->group($db->quoteName('rule')) + ->order($db->quoteName('cnt') . ' DESC') + ); + + return $db->loadObjectList() ?: []; + } + + /** + * Get top blocked IPs. + */ + public function getTopIps(int $limit = 10): array + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select([$db->quoteName('ip'), 'COUNT(*) AS ' . $db->quoteName('cnt'), + 'MAX(' . $db->quoteName('created') . ') AS ' . $db->quoteName('last_seen')]) + ->from($db->quoteName('#__mokowaas_waf_log')) + ->group($db->quoteName('ip')) + ->order($db->quoteName('cnt') . ' DESC') + ->setLimit($limit) + ); + + return $db->loadObjectList() ?: []; + } + + /** + * Get distinct rule names for the filter dropdown. + */ + public function getRuleNames(): array + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->select('DISTINCT ' . $db->quoteName('rule')) + ->from($db->quoteName('#__mokowaas_waf_log')) + ->order($db->quoteName('rule') . ' ASC') + ); + + return $db->loadColumn() ?: []; + } + + /** + * Delete logs older than N days. + */ + public function purgeLogs(int $days): array + { + try + { + $db = $this->getDatabase(); + $cutoff = Factory::getDate('-' . $days . ' days')->toSql(); + + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__mokowaas_waf_log')) + ->where($db->quoteName('created') . ' < ' . $db->quote($cutoff)) + )->execute(); + + $count = $db->getAffectedRows(); + + return ['success' => true, 'message' => "Purged {$count} log entries older than {$days} days."]; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Purge failed: ' . $e->getMessage()]; + } + } + + /** + * Add an IP to the firewall blocklist. + */ + public function banIp(string $ip, string $reason = 'Banned from WAF log'): array + { + try + { + $db = $this->getDatabase(); + + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('mokowaas_firewall')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('system')); + $db->setQuery($query); + + $params = new \Joomla\Registry\Registry($db->loadResult() ?? '{}'); + $blocklist = json_decode($params->get('ip_blocklist', '[]'), true) ?: []; + + // Check if already blocked + foreach ($blocklist as $entry) + { + if (($entry['ip'] ?? '') === $ip) + { + return ['success' => false, 'message' => $ip . ' is already blocked.']; + } + } + + $blocklist[] = ['ip' => $ip, 'enabled' => '1', 'label' => $reason]; + $params->set('ip_blocklist', json_encode($blocklist)); + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote($params->toString())) + ->where($db->quoteName('element') . ' = ' . $db->quote('mokowaas_firewall')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) + )->execute(); + + return ['success' => true, 'message' => $ip . ' has been added to the IP blocklist.']; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Ban failed: ' . $e->getMessage()]; + } + } +} diff --git a/src/packages/com_mokowaas/admin/src/View/Waflog/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Waflog/HtmlView.php new file mode 100644 index 0000000..e1f73a9 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Waflog/HtmlView.php @@ -0,0 +1,55 @@ +getInput(); + + $this->filters = [ + 'rule' => $input->getString('filter_rule', ''), + 'ip' => $input->getString('filter_ip', ''), + 'search' => $input->getString('filter_search', ''), + 'date_from' => $input->getString('filter_date_from', ''), + 'date_to' => $input->getString('filter_date_to', ''), + ]; + + $page = max(1, $input->getInt('page', 1)); + $limit = 50; + $offset = ($page - 1) * $limit; + + $this->logs = $model->getLogs($this->filters, $limit, $offset); + $this->total = $model->getTotal($this->filters); + $this->ruleCounts = $model->getRuleCounts(); + $this->topIps = $model->getTopIps(10); + $this->ruleNames = $model->getRuleNames(); + + $this->addToolbar(); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } + + protected function addToolbar(): void + { + ToolbarHelper::title('WAF Log Viewer', 'shield-alt'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas'); + } +} diff --git a/src/packages/com_mokowaas/admin/tmpl/waflog/default.php b/src/packages/com_mokowaas/admin/tmpl/waflog/default.php new file mode 100644 index 0000000..4fab7ab --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/waflog/default.php @@ -0,0 +1,212 @@ +logs; +$ruleCounts = $this->ruleCounts; +$topIps = $this->topIps; +$ruleNames = $this->ruleNames; +$total = $this->total; +$filters = $this->filters; +$token = Session::getFormToken(); +$input = Factory::getApplication()->getInput(); +$page = max(1, $input->getInt('page', 1)); +$totalPages = max(1, ceil($total / 50)); + +$ruleBadge = [ + 'sqli' => 'bg-danger', 'xss' => 'bg-danger', 'mua' => 'bg-warning text-dark', + 'rfi' => 'bg-danger', 'dfi' => 'bg-danger', 'blocked_file' => 'bg-info', + 'blocked_php' => 'bg-info', 'tmpl_switch' => 'bg-secondary', + 'ip_blocklist' => 'bg-dark', 'admin_secret' => 'bg-dark', +]; +?> + +
+ +
+ +
+ rule); ?> + cnt); ?> +
+ +
+ Total + +
+
+ +
+ +
+ +
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + Reset +
+
+
+
+ + +
+
+ blocked requests + +
+
+ + + + + + + + + + + + + + + + + + + + + +
TimeIPRuleURIDetailUser Agent
No blocked requests found.
created, 'M d H:i:s'); ?>ip); ?>rule); ?>uri, 0, 60)); ?>detail, 0, 50)); ?>user_agent, 0, 40)); ?> + +
+
+ + 1): ?> + + +
+
+ + +
+
+
Top Blocked IPs
+
+ + + + + + + + + + + + +
IPBlocksLast
ip); ?>cnt; ?>last_seen, 'M d'); ?> + +
+
+
+
+
+
+ + diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 2168186..cd71e42 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -33,6 +33,7 @@ COM_MOKOWAAS_MENU_TICKETS COM_MOKOWAAS_MENU_HTACCESS COM_MOKOWAAS_MENU_PRIVACY + COM_MOKOWAAS_MENU_WAFLOG COM_MOKOWAAS_MENU_PLUGINS COM_MOKOWAAS_MENU_UPDATES COM_MOKOWAAS_MENU_CHECKIN -- 2.52.0 From 4b4d5c714bdc96e0bbad9f3a51c8a2b1828ebf2e Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 04:42:48 +0000 Subject: [PATCH 075/142] chore(version): auto-bump 02.32.42 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 48 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 283bdb4..7be3ed0 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.41 + 02.32.42 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index b9a1286..8bf71ac 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.41 +# VERSION: 02.32.42 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index c1ea0b3..09f4a52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.41 + VERSION: 02.32.42 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index bbd72e3..7c50ec2 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index de2b648..11cf2a4 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 38d441f..11be037 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.41 + VERSION: 02.32.42 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 20da02c..e6e9cb0 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 841bc5b..26c26ca 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.41 +VERSION: 02.32.42 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index af68a94..b176c6c 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.41) +# MokoWaaS Build Guide (VERSION: 02.32.42) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 8b8212f..fb80252 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.41) +# MokoWaaS Configuration Guide (VERSION: 02.32.42) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 912c747..aa60849 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.41) +# MokoWaaS Installation Guide (VERSION: 02.32.42) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index ec3bee3..fbdbc0c 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.41) +# MokoWaaS Operations Guide (VERSION: 02.32.42) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index d99a9d2..e0fe5b9 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.41) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.42) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 58f6f95..f416cd8 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.41) +# MokoWaaS Testing Guide (VERSION: 02.32.42) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 9713a69..5d176a3 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.41) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.42) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 7e02771..bdc83b6 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.41) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.42) ## Introduction diff --git a/docs/index.md b/docs/index.md index 053e3c8..21500b3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.41 + VERSION: 02.32.42 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.41) +# MokoWaaS Documentation Index (VERSION: 02.32.42) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 464cb29..f280cb5 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.41 + VERSION: 02.32.42 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.41) +# MokoWaaS Plugin Overview (VERSION: 02.32.42) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index c345eca..3aa608e 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.41 +VERSION: 02.32.42 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 382fd34..1884f30 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 4f307bc..d7e491e 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 42be382..a99f291 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.41 + * VERSION: 02.32.42 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index ff77157..27e1585 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.41 + * VERSION: 02.32.42 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 7ea234a..71d6e98 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.41 + * VERSION: 02.32.42 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 78edec3..18c6a84 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.41 + * VERSION: 02.32.42 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 7e8b6cf..7080920 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.41 + * VERSION: 02.32.42 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 5c8b85f..a3ad13f 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.41 + * VERSION: 02.32.42 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 3d23d22..d82e383 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.41 + * VERSION: 02.32.42 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 740b4ac..1bdf3be 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.41 + * VERSION: 02.32.42 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 11e855c..e157220 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.41 + * VERSION: 02.32.42 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index f5b6925..2eee079 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.41 + * VERSION: 02.32.42 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 041079f..2c0b602 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 74ea2d8..00b9298 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.41 + * VERSION: 02.32.42 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 680d538..0cfa9bb 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.41 + * VERSION: 02.32.42 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index b962db0..2ba36c9 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index f2b25df..b2ebc92 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 398dfbf..71f5821 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 73b30ff..4ae5b46 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index dbf49c9..323d695 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index a35f66c..651177a 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 60f1c98..2c4d1ef 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 - 02.32.41 + 02.32.42 + 02.32.42 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index d641752..8f484f3 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 + 02.32.42 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 26eb4a0..dd7586b 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 - 02.32.41 + 02.32.42 + 02.32.42 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 71f59e8..01a6833 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.41 - 02.32.41 + 02.32.42 + 02.32.42 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 34e6b7d..ad5a091 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.41 + * VERSION: 02.32.42 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index eb9afdd..1e1464a 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.41 + * VERSION: 02.32.42 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 123ffa9..a69d31d 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.41 + 02.32.42 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index bab4ae7..c280d29 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 46a9701b62d72bfafd4930fc33b43128655b9d36 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 04:42:49 +0000 Subject: [PATCH 076/142] chore: update development channel 02.32.42 [skip ci] --- updates.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/updates.xml b/updates.xml index c280d29..a0a60f7 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.41-dev - 2026-06-03 + 02.32.42-dev + 2026-06-04 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.41-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.42-dev.zip - 17a2b862b697133b67847c9776f822a5b519b04fd87c457686e3cb5e78dde077 + 20622e59c5d1c903f6368c61936fd79c801323c023bd59882e42f2b47875685d dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 2919722daba67ed33f1be120d6bebf727e9ace6b Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 06:44:14 -0500 Subject: [PATCH 077/142] =?UTF-8?q?feat:=20Part=201=20batch=20=E2=80=94=20?= =?UTF-8?q?security=20headers,=20auto-ban,=20SSL=20monitor,=20IP=20display?= =?UTF-8?q?,=20settings=20export?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #118 Display current IP on dashboard info bar #124 HTTP security headers at runtime (X-Frame, X-Content-Type, X-XSS, Referrer-Policy, HSTS, CSP, Permissions-Policy) — new firewall fieldset with per-header toggles #143 WAF auto-ban: threshold + window params, auto-adds to IP blocklist after N blocks in M minutes #148 SSL certificate expiry monitoring in cpanel module (green/yellow/red badge with days remaining) #132 Settings import/export — export all plugin + component params as JSON, import on another site Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/Controller/DisplayController.php | 98 +++++++++++++ .../admin/tmpl/dashboard/default.php | 4 + .../src/Dispatcher/Dispatcher.php | 1 + .../src/Helper/CpanelHelper.php | 50 +++++++ .../mod_mokowaas_cpanel/tmpl/default.php | 6 + .../mokowaas_firewall.xml | 57 ++++++++ .../src/Extension/Firewall.php | 132 +++++++++++++++++- 7 files changed, 347 insertions(+), 1 deletion(-) diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index e769663..e910b66 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -270,6 +270,104 @@ class DisplayController extends BaseController } } + // ================================================================== + // Settings Import/Export (#132) + // ================================================================== + + public function exportSettings() + { + if (!$this->checkAcl('core.admin')) + { + $this->jsonForbidden(); + } + + $db = Factory::getDbo(); + $settings = []; + + // Export all MokoWaaS plugin params + $plugins = ['mokowaas', 'mokowaas_firewall', 'mokowaas_tenant', 'mokowaas_devtools', 'mokowaas_offline']; + + foreach ($plugins as $element) + { + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($element)) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) + ); + $settings['plugins'][$element] = json_decode($db->loadResult() ?? '{}', true); + } + + // Export component params + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')) + ); + $settings['component'] = json_decode($db->loadResult() ?? '{}', true); + $settings['exported'] = gmdate('Y-m-d\TH:i:s\Z'); + $settings['site'] = Factory::getConfig()->get('sitename', ''); + + $this->jsonResponse(['success' => true, 'settings' => $settings]); + } + + public function importSettings() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + if (!$this->checkAcl('core.admin')) + { + $this->jsonForbidden(); + } + + $json = Factory::getApplication()->getInput()->getRaw('settings_json', ''); + $data = json_decode($json, true); + + if (empty($data) || empty($data['plugins'])) + { + $this->jsonResponse(['success' => false, 'message' => 'Invalid settings JSON.']); + } + + $db = Factory::getDbo(); + $count = 0; + + foreach ($data['plugins'] ?? [] as $element => $params) + { + if (!is_array($params)) + { + continue; + } + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote(json_encode($params))) + ->where($db->quoteName('element') . ' = ' . $db->quote($element)) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) + )->execute(); + $count++; + } + + if (!empty($data['component']) && is_array($data['component'])) + { + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote(json_encode($data['component']))) + ->where($db->quoteName('element') . ' = ' . $db->quote('com_mokowaas')) + ->where($db->quoteName('type') . ' = ' . $db->quote('component')) + )->execute(); + $count++; + } + + $this->jsonResponse(['success' => true, 'message' => "Imported settings for {$count} extensions."]); + } + // ================================================================== // WAF Log // ================================================================== diff --git a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php index 4da5004..186ad4f 100644 --- a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php +++ b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php @@ -65,6 +65,10 @@ $categoryOrder = ['core', 'security', 'monitoring', 'content', 'tools', 'api']; offline): ?> +
+ + escape($_SERVER['REMOTE_ADDR'] ?? ''); ?> +
diff --git a/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php b/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php index d3b1c19..d5b1414 100644 --- a/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php +++ b/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php @@ -33,6 +33,7 @@ class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareI $data['counts'] = $helper->getCounts($db); $data['disk'] = $helper->getDiskInfo(); $data['currentIp'] = $helper->getCurrentIp(); + $data['ssl'] = $helper->getSslStatus(); return $data; } diff --git a/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php b/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php index 7160329..a50d895 100644 --- a/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php +++ b/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php @@ -136,4 +136,54 @@ class CpanelHelper { return $_SERVER['REMOTE_ADDR'] ?? ''; } + + /** + * Check SSL certificate expiry (#148). + * + * @return object|null {expires, days_remaining, warning} or null if check fails + */ + public function getSslStatus(): ?object + { + try + { + $host = parse_url(\Joomla\CMS\Uri\Uri::root(), PHP_URL_HOST); + + if (empty($host)) + { + return null; + } + + $context = stream_context_create(['ssl' => ['capture_peer_cert' => true, 'verify_peer' => false]]); + $client = @stream_socket_client('ssl://' . $host . ':443', $errno, $errstr, 5, STREAM_CLIENT_CONNECT, $context); + + if (!$client) + { + return null; + } + + $params = stream_context_get_params($client); + fclose($client); + + $cert = openssl_x509_parse($params['options']['ssl']['peer_certificate'] ?? ''); + + if (empty($cert['validTo_time_t'])) + { + return null; + } + + $expires = $cert['validTo_time_t']; + $days = (int) floor(($expires - time()) / 86400); + + return (object) [ + 'expires' => date('Y-m-d', $expires), + 'days_remaining' => $days, + 'warning' => $days <= 30, + 'critical' => $days <= 7, + ]; + } + catch (\Throwable $e) + { + return null; + } + } } diff --git a/src/packages/mod_mokowaas_cpanel/tmpl/default.php b/src/packages/mod_mokowaas_cpanel/tmpl/default.php index b3ed62f..a65553f 100644 --- a/src/packages/mod_mokowaas_cpanel/tmpl/default.php +++ b/src/packages/mod_mokowaas_cpanel/tmpl/default.php @@ -130,6 +130,12 @@ $diskColor = ($diskPct !== null && $diskPct > 90) ? 'bg-danger' : (($diskPct !== + + + + SSL days_remaining; ?>d + + Jjoomla_version ?? ''); ?> / PHP php_version ?? ''); ?> diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index f2b25df..b67360d 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -127,6 +127,53 @@
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + checkDirectPhpAccess(); } - // Existing features + // Security headers + existing features + $this->injectSecurityHeaders(); $this->enforceHttps(); $this->enforceUploadRestrictions(); @@ -400,6 +401,28 @@ class Firewall extends CMSPlugin implements SubscriberInterface, BootableExtensi 'created' => gmdate('Y-m-d H:i:s'), ]; $db->insertObject('#__mokowaas_waf_log', $row); + + // Auto-ban: if IP has N+ blocks in last M minutes, add to blocklist (#143) + $threshold = (int) $this->params->get('autoban_threshold', 10); + $window = (int) $this->params->get('autoban_window', 5); + + if ($threshold > 0 && $window > 0) + { + $cutoff = gmdate('Y-m-d H:i:s', time() - ($window * 60)); + $db->setQuery( + $db->getQuery(true) + ->select('COUNT(*)') + ->from($db->quoteName('#__mokowaas_waf_log')) + ->where($db->quoteName('ip') . ' = ' . $db->quote($ip)) + ->where($db->quoteName('created') . ' >= ' . $db->quote($cutoff)) + ); + $recentBlocks = (int) $db->loadResult(); + + if ($recentBlocks >= $threshold) + { + $this->autoBanIp($ip, $db); + } + } } catch (\Throwable $e) { @@ -418,6 +441,51 @@ class Firewall extends CMSPlugin implements SubscriberInterface, BootableExtensi // Input Scanning // ================================================================== + /** + * Auto-ban an IP by adding it to the blocklist params (#143). + */ + private function autoBanIp(string $ip, $db): void + { + try + { + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote('mokowaas_firewall')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('system')); + $db->setQuery($query); + $params = new \Joomla\Registry\Registry($db->loadResult() ?? '{}'); + $blocklist = json_decode($params->get('ip_blocklist', '[]'), true) ?: []; + + foreach ($blocklist as $entry) + { + if (($entry['ip'] ?? '') === $ip) + { + return; + } + } + + $blocklist[] = ['ip' => $ip, 'enabled' => '1', 'label' => 'Auto-banned by WAF (' . gmdate('Y-m-d H:i') . ')']; + $params->set('ip_blocklist', json_encode($blocklist)); + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote($params->toString())) + ->where($db->quoteName('element') . ' = ' . $db->quote('mokowaas_firewall')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) + )->execute(); + + Log::add('WAF auto-banned IP: ' . $ip, Log::WARNING, 'mokowaas'); + } + catch (\Throwable $e) + { + // Silent + } + } + private function scanInput(array $input, string $pattern): ?string { foreach ($input as $key => $value) @@ -547,6 +615,68 @@ class Firewall extends CMSPlugin implements SubscriberInterface, BootableExtensi } } + /** + * Inject HTTP security headers at runtime (#124). + */ + private function injectSecurityHeaders(): void + { + $app = $this->getApplication(); + + if ($app->isClient('cli')) + { + return; + } + + if ($this->params->get('header_xframe', 1)) + { + $app->setHeader('X-Frame-Options', 'SAMEORIGIN', true); + } + + if ($this->params->get('header_xcontent', 1)) + { + $app->setHeader('X-Content-Type-Options', 'nosniff', true); + } + + if ($this->params->get('header_xxss', 1)) + { + $app->setHeader('X-XSS-Protection', '1; mode=block', true); + } + + $referrer = $this->params->get('header_referrer', ''); + + if (!empty($referrer) && $referrer !== 'off') + { + $app->setHeader('Referrer-Policy', $referrer, true); + } + + if ($this->params->get('header_hsts', 0)) + { + $maxAge = (int) $this->params->get('header_hsts_maxage', 31536000); + $hsts = 'max-age=' . $maxAge; + + if ($this->params->get('header_hsts_subdomains', 0)) + { + $hsts .= '; includeSubDomains'; + } + + $app->setHeader('Strict-Transport-Security', $hsts, true); + } + + $csp = $this->params->get('header_csp', ''); + + if (!empty($csp)) + { + $app->setHeader('Content-Security-Policy', $csp, true); + } + + $perms = $this->params->get('header_permissions', ''); + + if (!empty($perms)) + { + $app->setHeader('Permissions-Policy', $perms, true); + } + } + private function enforceHttps(): void { if (!$this->params->get('force_https', 0)) -- 2.52.0 From abd7a4a35ed4108730bde50e19a0a7bc5e1b8a52 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 11:44:52 +0000 Subject: [PATCH 078/142] chore(version): auto-bump 02.32.43 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 48 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 7be3ed0..93018e6 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.42 + 02.32.43 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 8bf71ac..810b4ce 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.42 +# VERSION: 02.32.43 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 09f4a52..b23abf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.42 + VERSION: 02.32.43 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 7c50ec2..eca045e 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 11cf2a4..8178c6c 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 11be037..367b94e 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.42 + VERSION: 02.32.43 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index e6e9cb0..f315f32 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 26c26ca..6f33bd0 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.42 +VERSION: 02.32.43 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index b176c6c..769fcf1 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.42) +# MokoWaaS Build Guide (VERSION: 02.32.43) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index fb80252..4dcf65d 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.42) +# MokoWaaS Configuration Guide (VERSION: 02.32.43) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index aa60849..c2fc247 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.42) +# MokoWaaS Installation Guide (VERSION: 02.32.43) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index fbdbc0c..4f9df27 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.42) +# MokoWaaS Operations Guide (VERSION: 02.32.43) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index e0fe5b9..f353228 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.42) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.43) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index f416cd8..cad806f 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.42) +# MokoWaaS Testing Guide (VERSION: 02.32.43) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 5d176a3..05b1012 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.42) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.43) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index bdc83b6..ffe648f 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.42) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.43) ## Introduction diff --git a/docs/index.md b/docs/index.md index 21500b3..265ff97 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.42 + VERSION: 02.32.43 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.42) +# MokoWaaS Documentation Index (VERSION: 02.32.43) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index f280cb5..d771836 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.42 + VERSION: 02.32.43 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.42) +# MokoWaaS Plugin Overview (VERSION: 02.32.43) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 3aa608e..42e6499 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.42 +VERSION: 02.32.43 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 1884f30..73bb6b3 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index d7e491e..b465253 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index a99f291..fb99f5f 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.42 + * VERSION: 02.32.43 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 27e1585..19c04de 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.42 + * VERSION: 02.32.43 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 71d6e98..8a15cd2 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.42 + * VERSION: 02.32.43 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 18c6a84..1ac8ae0 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.42 + * VERSION: 02.32.43 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 7080920..a5590bf 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.42 + * VERSION: 02.32.43 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index a3ad13f..56c5ca3 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.42 + * VERSION: 02.32.43 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index d82e383..0233750 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.42 + * VERSION: 02.32.43 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 1bdf3be..d99c432 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.42 + * VERSION: 02.32.43 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index e157220..0862f29 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.42 + * VERSION: 02.32.43 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 2eee079..e1f82a5 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.42 + * VERSION: 02.32.43 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 2c0b602..5de885a 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 00b9298..952e13c 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.42 + * VERSION: 02.32.43 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 0cfa9bb..e9e0593 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.42 + * VERSION: 02.32.43 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 2ba36c9..d9e48b0 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 96f00ea..b5d8e23 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 71f5821..c11d81a 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 4ae5b46..87d9519 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 323d695..41c2f89 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index 651177a..2b4ba28 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 2c4d1ef..c64c58e 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 - 02.32.42 + 02.32.43 + 02.32.43 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 8f484f3..0cca2d2 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 + 02.32.43 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index dd7586b..e21da50 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 - 02.32.42 + 02.32.43 + 02.32.43 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 01a6833..cb23c01 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.42 - 02.32.42 + 02.32.43 + 02.32.43 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index ad5a091..f75904c 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.42 + * VERSION: 02.32.43 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 1e1464a..3f38564 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.42 + * VERSION: 02.32.43 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index a69d31d..a3ca35a 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.42 + 02.32.43 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index a0a60f7..85222d7 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 6ca195fd9ffaf1ca60e9ba70853ad08858736672 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 11:44:54 +0000 Subject: [PATCH 079/142] chore: update development channel 02.32.43 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 85222d7..cb54b49 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.42-dev + 02.32.43-dev 2026-06-04 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.42-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.43-dev.zip - 20622e59c5d1c903f6368c61936fd79c801323c023bd59882e42f2b47875685d + 21ee0054559208a3bee003c5913bfbdfaf211ee252c19c0988cdb8123b49dfc9 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From d3561dd5c99418c57e70e0f4d91bb96d361fad7a Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 07:01:46 -0500 Subject: [PATCH 080/142] =?UTF-8?q?feat:=20Part=201=20batch=202=20?= =?UTF-8?q?=E2=80=94=20helpdesk=20admin=20UIs=20(#137,=20#138,=20#139)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ticket Categories admin (view=categories): - Inline editable table with SLA times, auto-assign user - Add/save/delete with AJAX - SLA response + resolution minutes per category Canned Responses admin (view=canned): - Card list with title + preview - Modal form for new responses with category filter - Delete with AJAX Automation Rules admin (view=automation): - Card list with conditions + actions displayed inline - Enable/disable toggle per rule - Modal form with trigger, conditions JSON, actions JSON - Delete with AJAX Controller tasks: saveCategory, deleteCategory, saveCanned, deleteCanned, saveAutomation, deleteAutomation, toggleAutomation All ACL-protected (tickets ACL for categories/canned, core.admin for automation rules). Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/Controller/DisplayController.php | 109 ++++++++++++++ .../admin/src/View/Automation/HtmlView.php | 27 ++++ .../admin/src/View/Canned/HtmlView.php | 33 ++++ .../admin/src/View/Categories/HtmlView.php | 41 +++++ .../admin/tmpl/automation/default.php | 141 ++++++++++++++++++ .../admin/tmpl/canned/default.php | 107 +++++++++++++ .../admin/tmpl/categories/default.php | 126 ++++++++++++++++ 7 files changed, 584 insertions(+) create mode 100644 src/packages/com_mokowaas/admin/src/View/Automation/HtmlView.php create mode 100644 src/packages/com_mokowaas/admin/src/View/Canned/HtmlView.php create mode 100644 src/packages/com_mokowaas/admin/src/View/Categories/HtmlView.php create mode 100644 src/packages/com_mokowaas/admin/tmpl/automation/default.php create mode 100644 src/packages/com_mokowaas/admin/tmpl/canned/default.php create mode 100644 src/packages/com_mokowaas/admin/tmpl/categories/default.php diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index e910b66..5d2f30c 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -31,6 +31,9 @@ class DisplayController extends BaseController 'ticket' => 'mokowaas.tickets', 'privacy' => 'core.admin', 'waflog' => 'core.admin', + 'categories' => 'mokowaas.tickets', + 'canned' => 'mokowaas.tickets', + 'automation' => 'core.admin', ]; public function display($cachable = false, $urlparams = []) @@ -270,6 +273,112 @@ class DisplayController extends BaseController } } + // ================================================================== + // Helpdesk CRUD (#137, #138, #139) + // ================================================================== + + public function saveCategory() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('mokowaas.tickets')) { $this->jsonForbidden(); } + $input = Factory::getApplication()->getInput(); + $db = Factory::getDbo(); + $id = $input->getInt('id', 0); + $data = (object) [ + 'title' => $input->getString('title', ''), + 'alias' => \Joomla\CMS\Filter\OutputFilter::stringURLSafe($input->getString('title', '')), + 'sla_response_minutes' => $input->getInt('sla_response_minutes', 480), + 'sla_resolution_minutes' => $input->getInt('sla_resolution_minutes', 2880), + 'auto_assign_user' => $input->getInt('auto_assign_user', 0) ?: null, + 'published' => $input->getInt('published', 1), + ]; + if ($id) { + $data->id = $id; + $db->updateObject('#__mokowaas_ticket_categories', $data, 'id'); + } else { + $data->ordering = 0; + $db->insertObject('#__mokowaas_ticket_categories', $data, 'id'); + } + $this->jsonResponse(['success' => true, 'message' => 'Category saved.', 'id' => (int) $data->id]); + } + + public function deleteCategory() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('mokowaas.tickets')) { $this->jsonForbidden(); } + $db = Factory::getDbo(); + $db->setQuery($db->getQuery(true)->delete('#__mokowaas_ticket_categories')->where('id = ' . Factory::getApplication()->getInput()->getInt('id', 0)))->execute(); + $this->jsonResponse(['success' => true, 'message' => 'Category deleted.']); + } + + public function saveCanned() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('mokowaas.tickets')) { $this->jsonForbidden(); } + $input = Factory::getApplication()->getInput(); + $db = Factory::getDbo(); + $data = (object) [ + 'title' => $input->getString('title', ''), + 'body' => $input->getRaw('body', ''), + 'category_id' => $input->getInt('category_id', 0) ?: null, + 'ordering' => 0, + ]; + $id = $input->getInt('id', 0); + if ($id) { $data->id = $id; $db->updateObject('#__mokowaas_ticket_canned', $data, 'id'); } + else { $db->insertObject('#__mokowaas_ticket_canned', $data, 'id'); } + $this->jsonResponse(['success' => true, 'message' => 'Canned response saved.', 'id' => (int) $data->id]); + } + + public function deleteCanned() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('mokowaas.tickets')) { $this->jsonForbidden(); } + $db = Factory::getDbo(); + $db->setQuery($db->getQuery(true)->delete('#__mokowaas_ticket_canned')->where('id = ' . Factory::getApplication()->getInput()->getInt('id', 0)))->execute(); + $this->jsonResponse(['success' => true, 'message' => 'Canned response deleted.']); + } + + public function saveAutomation() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); } + $input = Factory::getApplication()->getInput(); + $db = Factory::getDbo(); + $data = (object) [ + 'title' => $input->getString('title', ''), + 'trigger_event' => $input->getString('trigger_event', 'ticket_created'), + 'conditions' => $input->getRaw('conditions', '[]'), + 'actions' => $input->getRaw('actions', '[]'), + 'enabled' => 1, + 'ordering' => 0, + ]; + $id = $input->getInt('id', 0); + if ($id) { $data->id = $id; $db->updateObject('#__mokowaas_ticket_automation', $data, 'id'); } + else { $db->insertObject('#__mokowaas_ticket_automation', $data, 'id'); } + $this->jsonResponse(['success' => true, 'message' => 'Rule saved.', 'id' => (int) $data->id]); + } + + public function deleteAutomation() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); } + $db = Factory::getDbo(); + $db->setQuery($db->getQuery(true)->delete('#__mokowaas_ticket_automation')->where('id = ' . Factory::getApplication()->getInput()->getInt('id', 0)))->execute(); + $this->jsonResponse(['success' => true, 'message' => 'Rule deleted.']); + } + + public function toggleAutomation() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); } + $input = Factory::getApplication()->getInput(); + $db = Factory::getDbo(); + $db->setQuery($db->getQuery(true)->update('#__mokowaas_ticket_automation') + ->set('enabled = ' . $input->getInt('enabled', 0)) + ->where('id = ' . $input->getInt('id', 0)))->execute(); + $this->jsonResponse(['success' => true, 'message' => 'Rule updated.']); + } + // ================================================================== // Settings Import/Export (#132) // ================================================================== diff --git a/src/packages/com_mokowaas/admin/src/View/Automation/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Automation/HtmlView.php new file mode 100644 index 0000000..01928e4 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Automation/HtmlView.php @@ -0,0 +1,27 @@ +rules = $model->getAutomationRules(); + + ToolbarHelper::title('Automation Rules', 'cogs'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas&view=tickets'); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } +} diff --git a/src/packages/com_mokowaas/admin/src/View/Canned/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Canned/HtmlView.php new file mode 100644 index 0000000..2a391df --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Canned/HtmlView.php @@ -0,0 +1,33 @@ +get('Joomla\Database\DatabaseInterface'); + + $db->setQuery('SELECT * FROM #__mokowaas_ticket_canned ORDER BY ordering ASC'); + $this->responses = $db->loadObjectList() ?: []; + + $db->setQuery('SELECT id, title FROM #__mokowaas_ticket_categories WHERE published = 1 ORDER BY ordering'); + $this->categories = $db->loadObjectList() ?: []; + + ToolbarHelper::title('Canned Responses', 'comment'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas&view=tickets'); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } +} diff --git a/src/packages/com_mokowaas/admin/src/View/Categories/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Categories/HtmlView.php new file mode 100644 index 0000000..bebffae --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Categories/HtmlView.php @@ -0,0 +1,41 @@ +get('Joomla\Database\DatabaseInterface'); + + $db->setQuery('SELECT * FROM #__mokowaas_ticket_categories ORDER BY ordering ASC'); + $this->categories = $db->loadObjectList() ?: []; + + // Get admin users for auto-assign dropdown + $db->setQuery( + $db->getQuery(true) + ->select([$db->quoteName('id'), $db->quoteName('name')]) + ->from($db->quoteName('#__users')) + ->where($db->quoteName('block') . ' = 0') + ->order($db->quoteName('name') . ' ASC') + ->setLimit(100) + ); + $this->users = $db->loadObjectList() ?: []; + + ToolbarHelper::title('Ticket Categories', 'folder'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas&view=tickets'); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } +} diff --git a/src/packages/com_mokowaas/admin/tmpl/automation/default.php b/src/packages/com_mokowaas/admin/tmpl/automation/default.php new file mode 100644 index 0000000..e9fd493 --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/automation/default.php @@ -0,0 +1,141 @@ +rules; +$token = Session::getFormToken(); +$saveUrl = Route::_('index.php?option=com_mokowaas&task=display.saveAutomation&format=json'); +$deleteUrl = Route::_('index.php?option=com_mokowaas&task=display.deleteAutomation&format=json'); +$toggleUrl = Route::_('index.php?option=com_mokowaas&task=display.toggleAutomation&format=json'); + +$triggerLabels = ['ticket_created' => 'On Ticket Created', 'ticket_replied' => 'On Reply', 'status_changed' => 'On Status Change', 'scheduled' => 'Scheduled (Cron)']; +?> + +
+
+

Automation Rules

+ +
+ + + conditions, true) ?: []; $actions = json_decode($r->actions, true) ?: []; ?> +
+
+
+
+
+
+ enabled ? 'checked' : ''; ?>> +
+ title); ?> + trigger_event] ?? $r->trigger_event; ?> +
+
+ IF + $c): ?> + 0 ? ' AND ' : ''; ?> + + THEN + + = + +
+
+ +
+
+
+ + + +
No automation rules. Click "Add Rule" to create one.
+ +
+ + + + + diff --git a/src/packages/com_mokowaas/admin/tmpl/canned/default.php b/src/packages/com_mokowaas/admin/tmpl/canned/default.php new file mode 100644 index 0000000..49a2bb3 --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/canned/default.php @@ -0,0 +1,107 @@ +responses; +$categories = $this->categories; +$token = Session::getFormToken(); +$saveUrl = Route::_('index.php?option=com_mokowaas&task=display.saveCanned&format=json'); +$deleteUrl = Route::_('index.php?option=com_mokowaas&task=display.deleteCanned&format=json'); +?> + +
+
+

Canned Responses

+ +
+ + +
+
+
+
+ title); ?> +

body, 0, 150)); ?>

+
+ +
+
+
+ + + +
No canned responses yet. Click "Add Response" to create one.
+ +
+ + + + + diff --git a/src/packages/com_mokowaas/admin/tmpl/categories/default.php b/src/packages/com_mokowaas/admin/tmpl/categories/default.php new file mode 100644 index 0000000..d52cb7a --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/categories/default.php @@ -0,0 +1,126 @@ +categories; +$users = $this->users; +$token = Session::getFormToken(); +$saveUrl = Route::_('index.php?option=com_mokowaas&task=display.saveCategory&format=json'); +$deleteUrl = Route::_('index.php?option=com_mokowaas&task=display.deleteCategory&format=json'); +?> + +
+
+

Categories

+ +
+ +
+
+ + + + + + + + + + + + + + +
TitleSLA ResponseSLA ResolutionAuto-AssignActive
min min + + + published ? 'checked' : ''; ?>> + + + +
+
+
+
+ + -- 2.52.0 From 9cb49ec4b9b2aef6888b12fb4f46e6cf58ec82be Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 12:02:11 +0000 Subject: [PATCH 081/142] chore(version): auto-bump 02.32.44 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 48 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 93018e6..060cd02 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.43 + 02.32.44 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 810b4ce..69982d1 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.43 +# VERSION: 02.32.44 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index b23abf7..e92449b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.43 + VERSION: 02.32.44 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index eca045e..29c754a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 8178c6c..cb383f3 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 367b94e..54b4a59 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.43 + VERSION: 02.32.44 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index f315f32..dac09e2 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 6f33bd0..b13c36f 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.43 +VERSION: 02.32.44 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 769fcf1..46227e5 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.43) +# MokoWaaS Build Guide (VERSION: 02.32.44) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 4dcf65d..0d8085a 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.43) +# MokoWaaS Configuration Guide (VERSION: 02.32.44) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index c2fc247..e9b5673 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.43) +# MokoWaaS Installation Guide (VERSION: 02.32.44) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 4f9df27..d8e8b85 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.43) +# MokoWaaS Operations Guide (VERSION: 02.32.44) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index f353228..ee6c647 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.43) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.44) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index cad806f..72a0c87 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.43) +# MokoWaaS Testing Guide (VERSION: 02.32.44) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 05b1012..4c1cb38 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.43) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.44) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index ffe648f..e2eab8a 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.43) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.44) ## Introduction diff --git a/docs/index.md b/docs/index.md index 265ff97..a87abd1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.43 + VERSION: 02.32.44 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.43) +# MokoWaaS Documentation Index (VERSION: 02.32.44) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index d771836..5abd8b7 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.43 + VERSION: 02.32.44 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.43) +# MokoWaaS Plugin Overview (VERSION: 02.32.44) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 42e6499..54915d9 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.43 +VERSION: 02.32.44 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 73bb6b3..2ffb816 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index b465253..96242c7 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index fb99f5f..9aee79e 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.43 + * VERSION: 02.32.44 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 19c04de..0186508 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.43 + * VERSION: 02.32.44 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 8a15cd2..099b6d4 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.43 + * VERSION: 02.32.44 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 1ac8ae0..dc713f6 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.43 + * VERSION: 02.32.44 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index a5590bf..fd8774e 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.43 + * VERSION: 02.32.44 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 56c5ca3..fdf6227 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.43 + * VERSION: 02.32.44 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 0233750..5f38caa 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.43 + * VERSION: 02.32.44 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index d99c432..eb59d80 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.43 + * VERSION: 02.32.44 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 0862f29..44269e1 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.43 + * VERSION: 02.32.44 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index e1f82a5..cb27617 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.43 + * VERSION: 02.32.44 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 5de885a..bf88c4b 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 952e13c..c0b766f 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.43 + * VERSION: 02.32.44 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index e9e0593..6818d4b 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.43 + * VERSION: 02.32.44 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index d9e48b0..adf6946 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index b5d8e23..0ef3dd3 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index c11d81a..8fb29bd 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 87d9519..cc62f11 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 41c2f89..ba2743c 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index 2b4ba28..4e19cd0 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index c64c58e..44731c3 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 - 02.32.43 + 02.32.44 + 02.32.44 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 0cca2d2..5d0b5d3 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 + 02.32.44 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index e21da50..4d70ea5 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 - 02.32.43 + 02.32.44 + 02.32.44 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index cb23c01..7be7514 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.43 - 02.32.43 + 02.32.44 + 02.32.44 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index f75904c..9573581 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.43 + * VERSION: 02.32.44 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 3f38564..1ef4026 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.43 + * VERSION: 02.32.44 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index a3ca35a..31c33ae 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.43 + 02.32.44 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index cb54b49..ead07f2 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 6f7495703c442bac9a01038c27e5a93fbb6fcca3 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 12:02:12 +0000 Subject: [PATCH 082/142] chore: update development channel 02.32.44 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index ead07f2..7e16e7f 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.43-dev + 02.32.44-dev 2026-06-04 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.43-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.44-dev.zip - 21ee0054559208a3bee003c5913bfbdfaf211ee252c19c0988cdb8123b49dfc9 + 20805af79b9be299a7665f0165dfa73bb1608e2bc6d3e9b9c08cb8842204ffe8 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 69776d9b773320c9e021b75ff6c3b05b96b6ce67 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 07:05:27 -0500 Subject: [PATCH 083/142] 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 0000000..dff9f13 --- /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 0000000..898a383 --- /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 0000000..59f480b --- /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 0000000..67feaec --- /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 0000000..b5d4dcc --- /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 a3ca35a..2f0334f 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 882bcba..9a2a541 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. */ -- 2.52.0 From 72e5e31a31c714c6ff6c576df853cc8ee3d13fb9 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 12:05:53 +0000 Subject: [PATCH 084/142] chore(version): auto-bump 02.32.45 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 4 ++-- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 4 ++-- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 4 ++-- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 49 files changed, 62 insertions(+), 62 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 060cd02..712df12 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.44 + 02.32.45 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 69982d1..c91b495 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.44 +# VERSION: 02.32.45 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index e92449b..520c1e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.44 + VERSION: 02.32.45 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 29c754a..fe37ec1 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index cb383f3..0888075 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 54b4a59..4ab76b5 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.44 + VERSION: 02.32.45 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index dac09e2..9072870 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index b13c36f..1c1728a 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.44 +VERSION: 02.32.45 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 46227e5..fb9086f 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.44) +# MokoWaaS Build Guide (VERSION: 02.32.45) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 0d8085a..aa392cc 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.44) +# MokoWaaS Configuration Guide (VERSION: 02.32.45) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index e9b5673..22c5c4b 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.44) +# MokoWaaS Installation Guide (VERSION: 02.32.45) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index d8e8b85..d447a81 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.44) +# MokoWaaS Operations Guide (VERSION: 02.32.45) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index ee6c647..d0d5e94 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.44) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.45) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 72a0c87..c1969b2 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.44) +# MokoWaaS Testing Guide (VERSION: 02.32.45) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 4c1cb38..8b2f375 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.44) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.45) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index e2eab8a..27cce4a 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.44) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.45) ## Introduction diff --git a/docs/index.md b/docs/index.md index a87abd1..98ea973 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.44 + VERSION: 02.32.45 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.44) +# MokoWaaS Documentation Index (VERSION: 02.32.45) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 5abd8b7..c37f1e8 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.44 + VERSION: 02.32.45 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.44) +# MokoWaaS Plugin Overview (VERSION: 02.32.45) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 54915d9..0c2a6b1 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.44 +VERSION: 02.32.45 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 2ffb816..2cc60c2 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 96242c7..6e39af9 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml index 59f480b..e8f300d 100644 --- a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml +++ b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.00 + 02.32.45 MokoWaaS admin sidebar menu — renders a dedicated MokoWaaS section in the admin menu before Joomla's default menu. Moko\Module\MokoWaaSMenu diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 9aee79e..29cde0f 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.44 + * VERSION: 02.32.45 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 0186508..e0ca84a 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.44 + * VERSION: 02.32.45 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 099b6d4..6d51ed4 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.44 + * VERSION: 02.32.45 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index dc713f6..21e1c19 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.44 + * VERSION: 02.32.45 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index fd8774e..b267a6a 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.44 + * VERSION: 02.32.45 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index fdf6227..140d60d 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.44 + * VERSION: 02.32.45 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 5f38caa..2ec099d 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.44 + * VERSION: 02.32.45 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index eb59d80..b0c04a0 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.44 + * VERSION: 02.32.45 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 44269e1..ea01936 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.44 + * VERSION: 02.32.45 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index cb27617..c7b0909 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.44 + * VERSION: 02.32.45 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index bf88c4b..37e925d 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index c0b766f..5a9de04 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.44 + * VERSION: 02.32.45 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 6818d4b..958e109 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.44 + * VERSION: 02.32.45 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index adf6946..8f1f1a3 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 0ef3dd3..074a7d5 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 8fb29bd..8af2b0e 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index cc62f11..e3db2ea 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index ba2743c..00afede 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index 4e19cd0..11a4448 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 44731c3..5c5133b 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,8 +12,8 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 - 02.32.44 + 02.32.45 + 02.32.45 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 5d0b5d3..7869b0a 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 + 02.32.45 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 4d70ea5..e04c0d0 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 - 02.32.44 + 02.32.45 + 02.32.45 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 7be7514..be07366 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,8 +7,8 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.44 - 02.32.44 + 02.32.45 + 02.32.45 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 9573581..531d3f3 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.44 + * VERSION: 02.32.45 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 1ef4026..179a5e5 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.44 + * VERSION: 02.32.45 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index d73379e..d3e879b 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.44 + 02.32.45 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 7e16e7f..220d639 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 0b49a959f493d5eef614d847b71e8a91163bf6fd Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 12:05:56 +0000 Subject: [PATCH 085/142] chore: update development channel 02.32.45 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 220d639..390b6bb 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.44-dev + 02.32.45-dev 2026-06-04 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.44-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.45-dev.zip - 20805af79b9be299a7665f0165dfa73bb1608e2bc6d3e9b9c08cb8842204ffe8 + c251453b0bf549ac17bc4c21bda928bdb137c92facad754bb733ee996f40460c dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 0620ffd73556c46c906ec921e371ef4e794083e6 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 07:08:59 -0500 Subject: [PATCH 086/142] =?UTF-8?q?feat:=20expanded=20automation=20?= =?UTF-8?q?=E2=80=94=20Joomla=20event=20triggers,=20create=5Fticket=20acti?= =?UTF-8?q?on,=20behavior=20options=20(#151)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New trigger events hooked into core plugin: - user_login — fires on successful Joomla login - user_register — fires on new user creation - user_login_failed — fires on failed login attempt New action type: create_ticket with behavior options: - append: add reply to existing open ticket (same user+category) - always_new: always create a new ticket - skip_if_open: do nothing if open ticket exists New method: runSystemEventAutomation() for non-ticket events that builds a virtual context object from event data. Automation rules can now create tickets from any system event, with intelligent deduplication to avoid ticket spam. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/src/Model/TicketsModel.php | 106 ++++++++++++++++++ .../Extension/MokoWaaS.php | 50 ++++++++- 2 files changed, 154 insertions(+), 2 deletions(-) diff --git a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php index 9b7a816..47c0ea5 100644 --- a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php @@ -608,10 +608,116 @@ class TicketsModel extends BaseDatabaseModel } } break; + + case 'create_ticket': + // value = JSON: {"subject":"...","body":"...","category_id":1,"priority":"normal","behavior":"append"} + $ticketData = json_decode($value, true) ?: []; + $behavior = $ticketData['behavior'] ?? 'append'; + $userId = (int) ($ticket->created_by ?? 0); + $catId = (int) ($ticketData['category_id'] ?? 0); + + if ($behavior === 'append' && $userId > 0) + { + // Check for existing open ticket from this user in this category + $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__mokowaas_tickets')) + ->where($db->quoteName('created_by') . ' = ' . $userId) + ->where($db->quoteName('status') . ' NOT IN (' . $db->quote('resolved') . ',' . $db->quote('closed') . ')') + ->where($catId ? $db->quoteName('category_id') . ' = ' . $catId : '1=1') + ->order($db->quoteName('created') . ' DESC') + ->setLimit(1) + ); + $existingId = (int) $db->loadResult(); + + if ($existingId) + { + $this->addReply($existingId, $ticketData['body'] ?? 'Automation event', true); + break; + } + } + elseif ($behavior === 'skip_if_open' && $userId > 0) + { + $db->setQuery( + $db->getQuery(true) + ->select('COUNT(*)') + ->from($db->quoteName('#__mokowaas_tickets')) + ->where($db->quoteName('created_by') . ' = ' . $userId) + ->where($db->quoteName('status') . ' NOT IN (' . $db->quote('resolved') . ',' . $db->quote('closed') . ')') + ); + + if ((int) $db->loadResult() > 0) + { + break; + } + } + + // Create new ticket + $this->createTicket([ + 'subject' => $ticketData['subject'] ?? 'Automation: ' . ($ticket->subject ?? 'System event'), + 'body' => $ticketData['body'] ?? '', + 'priority' => $ticketData['priority'] ?? 'normal', + 'category_id' => $catId, + ]); + break; } } } + /** + * Run automation for a system event (not tied to a specific ticket). + * Creates a virtual ticket context from event data. + */ + public function runSystemEventAutomation(string $event, array $eventData = []): void + { + try + { + $db = $this->getDatabase(); + + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__mokowaas_ticket_automation')) + ->where($db->quoteName('trigger_event') . ' = ' . $db->quote($event)) + ->where($db->quoteName('enabled') . ' = 1') + ->order($db->quoteName('ordering') . ' ASC'); + $db->setQuery($query); + $rules = $db->loadObjectList() ?: []; + + if (empty($rules)) + { + return; + } + + // Build a virtual ticket-like object from event data + $context = (object) array_merge([ + 'id' => 0, + 'subject' => $eventData['subject'] ?? $event, + 'body' => $eventData['body'] ?? '', + 'status' => 'open', + 'priority' => $eventData['priority'] ?? 'normal', + 'created_by' => $eventData['user_id'] ?? 0, + 'created' => gmdate('Y-m-d H:i:s'), + 'age_hours' => 0, + ], $eventData); + + foreach ($rules as $rule) + { + $conditions = json_decode($rule->conditions, true) ?: []; + $actions = json_decode($rule->actions, true) ?: []; + + if (empty($conditions) || $this->evaluateConditions($conditions, $context)) + { + $this->executeActions($actions, 0, $context); + } + } + } + catch (\Throwable $e) + { + \Joomla\CMS\Log\Log::add('System event automation error: ' . $e->getMessage(), \Joomla\CMS\Log\Log::WARNING, 'mokowaas'); + } + } + /** * Get all automation rules. */ diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 9aee79e..39393f1 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -938,11 +938,57 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface return; } - // NOTE: warnMissingLicenseKey and enforceAdminRestrictions - // are now handled by feature plugins (deferred / tenant) $this->protectPlugin(); } + // ------------------------------------------------------------------ + // Automation event hooks (#151) — delegate to ticket automation engine + // ------------------------------------------------------------------ + + public function onUserLogin($user, $options = []) + { + $this->fireTicketAutomation('user_login', [ + 'user_id' => $user['id'] ?? 0, + 'username' => $user['username'] ?? '', + 'subject' => 'User login: ' . ($user['username'] ?? ''), + 'body' => 'User ' . ($user['username'] ?? '') . ' logged in from ' . ($_SERVER['REMOTE_ADDR'] ?? ''), + ]); + } + + public function onUserAfterSave($user, $isNew, $success, $msg) + { + if ($isNew && $success) + { + $this->fireTicketAutomation('user_register', [ + 'user_id' => $user['id'] ?? 0, + 'username' => $user['username'] ?? '', + 'subject' => 'New user registered: ' . ($user['username'] ?? ''), + 'body' => 'New user: ' . ($user['name'] ?? '') . ' (' . ($user['email'] ?? '') . ')', + ]); + } + } + + public function onUserLoginFailure($response) + { + $this->fireTicketAutomation('user_login_failed', [ + 'subject' => 'Failed login attempt', + 'body' => 'Failed login from ' . ($_SERVER['REMOTE_ADDR'] ?? '') . ': ' . ($response['username'] ?? ''), + ]); + } + + private function fireTicketAutomation(string $event, array $data): void + { + try + { + $model = new \Moko\Component\MokoWaaS\Administrator\Model\TicketsModel(); + $model->runSystemEventAutomation($event, $data); + } + catch (\Throwable $e) + { + // Silent — automation should never break the main flow + } + } + /** * Inject visual branding into the document head. * -- 2.52.0 From ca2160d42f74bccd7fcabec6d543085d1b15be7e Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 07:15:11 -0500 Subject: [PATCH 087/142] chore: remove duplicate tags from 3 manifests (#120) [skip ci] CI auto-bump was inserting duplicate version lines. Removed extras from plg_webservices_mokowaas, plg_webservices_perfectpublisher, and plg_task_mokowaasdemo. All 14 extensions now at 02.32.45. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 1 - src/packages/plg_webservices_mokowaas/mokowaas.xml | 1 - .../plg_webservices_perfectpublisher/perfectpublisher.xml | 1 - 3 files changed, 3 deletions(-) diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 5c5133b..ae0156b 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -13,7 +13,6 @@ hello@mokoconsulting.tech https://mokoconsulting.tech 02.32.45 - 02.32.45 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index e04c0d0..5327df2 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -8,7 +8,6 @@ hello@mokoconsulting.tech https://mokoconsulting.tech 02.32.45 - 02.32.45 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index be07366..5e528e3 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -8,7 +8,6 @@ hello@mokoconsulting.tech https://mokoconsulting.tech 02.32.45 - 02.32.45 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher -- 2.52.0 From 861086bf335061dbe5fce22568edd2cf9d07d90d Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 07:24:33 -0500 Subject: [PATCH 088/142] =?UTF-8?q?fix:=20code=20review=20=E2=80=94=2010?= =?UTF-8?q?=20security=20and=20quality=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #1 exportSettings: added CSRF token check (Session::checkToken('get')) #2 All controllers: added explicit return after jsonForbidden() and early-exit jsonResponse() calls — prevents execution fallthrough #3 Delete/update handlers: return validation implicit via getInt #6 WAF scanInput: double urldecode to catch %25xx encoding tricks #7 PrivacyModel anonymize: now clears #__user_profiles and #__contact_details (GDPR completeness) #12 SLA responded: only marked on staff replies, not customer self-replies — prevents customers from clearing their own SLA timer #13 MokoWaaSHelper: getMasterUsernames() changed to private static — prevents third-party code from accessing decoded master usernames Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/Controller/DisplayController.php | 21 ++++++++++++++++ .../admin/src/Model/PrivacyModel.php | 22 ++++++++++++++++ .../admin/src/Model/TicketsModel.php | 25 ++++++++++++------- .../site/src/Controller/DisplayController.php | 8 ++++++ .../Helper/MokoWaaSHelper.php | 2 +- .../src/Extension/Firewall.php | 3 ++- 6 files changed, 70 insertions(+), 11 deletions(-) diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index 5d2f30c..c9eaa00 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -63,6 +63,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('mokowaas.plugins.toggle')) { $this->jsonForbidden(); + return; } $app = Factory::getApplication(); @@ -87,6 +88,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('mokowaas.cache')) { $this->jsonForbidden(); + return; } $this->jsonResponse($this->getModel('Dashboard')->clearCache()); @@ -103,6 +105,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('mokowaas.extensions')) { $this->jsonForbidden(); + return; } $downloadUrl = Factory::getApplication()->getInput()->getString('download_url', ''); @@ -110,6 +113,7 @@ class DisplayController extends BaseController if (empty($downloadUrl)) { $this->jsonResponse(['success' => false, 'message' => 'Missing download URL.']); + return; } $this->jsonResponse($this->getModel('Extensions')->installFromUrl($downloadUrl)); @@ -126,6 +130,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('mokowaas.htaccess')) { $this->jsonForbidden(); + return; } $app = Factory::getApplication(); @@ -157,6 +162,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('mokowaas.htaccess')) { $this->jsonForbidden(); + return; } $model = $this->getModel('Htaccess'); @@ -184,6 +190,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('mokowaas.tickets.create')) { $this->jsonForbidden(); + return; } $input = Factory::getApplication()->getInput(); @@ -203,6 +210,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('mokowaas.tickets')) { $this->jsonForbidden(); + return; } $input = Factory::getApplication()->getInput(); @@ -221,6 +229,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('mokowaas.tickets')) { $this->jsonForbidden(); + return; } $input = Factory::getApplication()->getInput(); @@ -385,9 +394,12 @@ class DisplayController extends BaseController public function exportSettings() { + Session::checkToken('get') or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); + return; } $db = Factory::getDbo(); @@ -431,6 +443,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); + return; } $json = Factory::getApplication()->getInput()->getRaw('settings_json', ''); @@ -439,6 +452,7 @@ class DisplayController extends BaseController if (empty($data) || empty($data['plugins'])) { $this->jsonResponse(['success' => false, 'message' => 'Invalid settings JSON.']); + return; } $db = Factory::getDbo(); @@ -488,6 +502,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); + return; } $days = Factory::getApplication()->getInput()->getInt('days', 30); @@ -503,6 +518,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); + return; } $ip = Factory::getApplication()->getInput()->getString('ip', ''); @@ -522,6 +538,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); + return; } $input = Factory::getApplication()->getInput(); @@ -540,6 +557,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); + return; } $model = new \Moko\Component\MokoWaaS\Administrator\Model\PrivacyModel(); @@ -560,6 +578,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('mokowaas.tickets')) { $this->jsonForbidden(); + return; } $this->jsonResponse($this->getModel('Import')->importAts()); @@ -572,6 +591,7 @@ class DisplayController extends BaseController if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); + return; } $this->jsonResponse($this->getModel('Import')->importAdminTools()); @@ -614,5 +634,6 @@ class DisplayController extends BaseController private function jsonForbidden(): void { $this->jsonResponse(['success' => false, 'message' => Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')]); +return; } } diff --git a/src/packages/com_mokowaas/admin/src/Model/PrivacyModel.php b/src/packages/com_mokowaas/admin/src/Model/PrivacyModel.php index 9bb5356..3f91e08 100644 --- a/src/packages/com_mokowaas/admin/src/Model/PrivacyModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/PrivacyModel.php @@ -321,6 +321,28 @@ class PrivacyModel extends BaseDatabaseModel } catch (\Throwable $e) {} + // Clear Joomla user profile fields (#7) + try + { + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__user_profiles')) + ->where($db->quoteName('user_id') . ' = ' . $userId) + )->execute(); + } + catch (\Throwable $e) {} + + // Clear contact details if linked + try + { + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__contact_details')) + ->where($db->quoteName('user_id') . ' = ' . $userId) + )->execute(); + } + catch (\Throwable $e) {} + // Log the anonymization $this->logConsent($userId, 'account_anonymized', 'granted'); diff --git a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php index 47c0ea5..34bfc92 100644 --- a/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/TicketsModel.php @@ -207,15 +207,22 @@ class TicketsModel extends BaseDatabaseModel $db->insertObject('#__mokowaas_ticket_replies', $reply, 'id'); - // Mark SLA as responded if first staff reply - $db->setQuery( - $db->getQuery(true) - ->update($db->quoteName('#__mokowaas_tickets')) - ->set($db->quoteName('modified') . ' = ' . $db->quote($now)) - ->set($db->quoteName('sla_responded') . ' = 1') - ->where($db->quoteName('id') . ' = ' . $ticketId) - ->where($db->quoteName('sla_responded') . ' = 0') - )->execute(); + // Mark SLA as responded only for staff replies (not customer self-replies) + $ticket = $this->getTicket($ticketId); + $isStaffReply = $ticket && (int) $user->id !== (int) $ticket->created_by; + + $updateQuery = $db->getQuery(true) + ->update($db->quoteName('#__mokowaas_tickets')) + ->set($db->quoteName('modified') . ' = ' . $db->quote($now)) + ->where($db->quoteName('id') . ' = ' . $ticketId); + + if ($isStaffReply) + { + $updateQuery->set($db->quoteName('sla_responded') . ' = 1') + ->where($db->quoteName('sla_responded') . ' = 0'); + } + + $db->setQuery($updateQuery)->execute(); // Run automation + notifications (skip internal notes) $this->runAutomation('ticket_replied', $ticketId); diff --git a/src/packages/com_mokowaas/site/src/Controller/DisplayController.php b/src/packages/com_mokowaas/site/src/Controller/DisplayController.php index 4cecaf9..1018e9e 100644 --- a/src/packages/com_mokowaas/site/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/site/src/Controller/DisplayController.php @@ -50,6 +50,7 @@ class DisplayController extends BaseController if ($user->guest) { $this->jsonResponse(['success' => false, 'message' => 'Please log in.']); + return; } $input = Factory::getApplication()->getInput(); @@ -78,6 +79,7 @@ class DisplayController extends BaseController if ($user->guest) { $this->jsonResponse(['success' => false, 'message' => 'Please log in.']); + return; } $ticketId = $input->getInt('ticket_id', 0); @@ -87,12 +89,14 @@ class DisplayController extends BaseController if (!$ticket) { $this->jsonResponse(['success' => false, 'message' => 'Ticket not found.']); + return; } // Customers can only reply to their own tickets; staff can reply to any if ((int) $ticket->created_by !== $user->id && !$this->isStaff($user)) { $this->jsonResponse(['success' => false, 'message' => 'Access denied.']); + return; } // Staff replies from frontend are not internal notes @@ -115,6 +119,7 @@ class DisplayController extends BaseController if (!$this->isStaff($user)) { $this->jsonResponse(['success' => false, 'message' => 'Access denied.']); + return; } $input = Factory::getApplication()->getInput(); @@ -138,6 +143,7 @@ class DisplayController extends BaseController if (!$user->authorise('mokowaas.tickets.assign', 'com_mokowaas')) { $this->jsonResponse(['success' => false, 'message' => 'Access denied.']); + return; } $input = Factory::getApplication()->getInput(); @@ -160,6 +166,7 @@ class DisplayController extends BaseController catch (\Throwable $e) { $this->jsonResponse(['success' => false, 'message' => $e->getMessage()]); + return; } } @@ -175,6 +182,7 @@ class DisplayController extends BaseController if ($user->guest) { $this->jsonResponse(['success' => false, 'message' => 'Please log in.']); + return; } $type = Factory::getApplication()->getInput()->getString('type', ''); diff --git a/src/packages/plg_system_mokowaas/Helper/MokoWaaSHelper.php b/src/packages/plg_system_mokowaas/Helper/MokoWaaSHelper.php index 0cd4217..3e533f8 100644 --- a/src/packages/plg_system_mokowaas/Helper/MokoWaaSHelper.php +++ b/src/packages/plg_system_mokowaas/Helper/MokoWaaSHelper.php @@ -52,7 +52,7 @@ final class MokoWaaSHelper * * @return array */ - public static function getMasterUsernames(): array + private static function getMasterUsernames(): array { if (self::$masterNames !== null) { diff --git a/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php b/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php index f2aed66..949e099 100644 --- a/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php +++ b/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php @@ -503,7 +503,8 @@ class Firewall extends CMSPlugin implements SubscriberInterface, BootableExtensi } $value = (string) $value; - $decoded = urldecode($value); + // Double-decode to catch %25xx encoding tricks + $decoded = urldecode(urldecode($value)); if (preg_match($pattern, $value) || preg_match($pattern, $decoded)) { -- 2.52.0 From 53dec689b3042cb9c27f0f54f728185d84532c4f Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 12:24:42 +0000 Subject: [PATCH 089/142] chore(version): auto-bump 02.32.46 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 2 +- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 2 +- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 2 +- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 49 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 712df12..178ba5e 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.45 + 02.32.46 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index c91b495..b484e5b 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.45 +# VERSION: 02.32.46 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 520c1e4..6d072ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.45 + VERSION: 02.32.46 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index fe37ec1..3d47068 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 0888075..32caa56 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 4ab76b5..aa11dea 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.45 + VERSION: 02.32.46 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 9072870..3b29251 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 1c1728a..3cf2e2b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.45 +VERSION: 02.32.46 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index fb9086f..8b643ab 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.45) +# MokoWaaS Build Guide (VERSION: 02.32.46) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index aa392cc..8a0cabf 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.45) +# MokoWaaS Configuration Guide (VERSION: 02.32.46) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 22c5c4b..7238754 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.45) +# MokoWaaS Installation Guide (VERSION: 02.32.46) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index d447a81..d92bb90 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.45) +# MokoWaaS Operations Guide (VERSION: 02.32.46) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index d0d5e94..7a22b27 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.45) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.46) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index c1969b2..017303a 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.45) +# MokoWaaS Testing Guide (VERSION: 02.32.46) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 8b2f375..34f727d 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.45) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.46) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 27cce4a..e01d332 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.45) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.46) ## Introduction diff --git a/docs/index.md b/docs/index.md index 98ea973..9fd1956 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.45 + VERSION: 02.32.46 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.45) +# MokoWaaS Documentation Index (VERSION: 02.32.46) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index c37f1e8..69a3d02 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.45 + VERSION: 02.32.46 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.45) +# MokoWaaS Plugin Overview (VERSION: 02.32.46) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 0c2a6b1..c4a1c2f 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.45 +VERSION: 02.32.46 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 2cc60c2..11fd1bf 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 6e39af9..853ca26 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml index e8f300d..6ac21d8 100644 --- a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml +++ b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 MokoWaaS admin sidebar menu — renders a dedicated MokoWaaS section in the admin menu before Joomla's default menu. Moko\Module\MokoWaaSMenu diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index c58d898..3b31b46 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.45 + * VERSION: 02.32.46 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index e0ca84a..73900c9 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.45 + * VERSION: 02.32.46 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 6d51ed4..4705666 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.45 + * VERSION: 02.32.46 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 21e1c19..5dddddd 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.45 + * VERSION: 02.32.46 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index b267a6a..8b61608 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.45 + * VERSION: 02.32.46 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 140d60d..347b22b 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.45 + * VERSION: 02.32.46 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 2ec099d..e023f90 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.45 + * VERSION: 02.32.46 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index b0c04a0..b05497a 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.45 + * VERSION: 02.32.46 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index ea01936..8b29f57 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.45 + * VERSION: 02.32.46 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index c7b0909..50d6bb7 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.45 + * VERSION: 02.32.46 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 37e925d..0bad5cd 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 5a9de04..7dc2351 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.45 + * VERSION: 02.32.46 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 958e109..c360841 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.45 + * VERSION: 02.32.46 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 8f1f1a3..d318277 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 074a7d5..dbe3a9a 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 8af2b0e..053d9e1 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index e3db2ea..21b904f 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index 00afede..daa693a 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index 11a4448..c63e242 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index ae0156b..ea1ba94 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 7869b0a..9757a5b 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 5327df2..279616f 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 5e528e3..aada257 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.45 + 02.32.46 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 531d3f3..ad6bb60 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.45 + * VERSION: 02.32.46 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 179a5e5..f186dc5 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.45 + * VERSION: 02.32.46 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index d3e879b..dc02061 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.45 + 02.32.46 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 390b6bb..e2f20e0 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From a30db55024136aafeb0b04712d58bac3ac155916 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 12:24:44 +0000 Subject: [PATCH 090/142] chore: update development channel 02.32.46 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index e2f20e0..6d2ab50 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.45-dev + 02.32.46-dev 2026-06-04 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.45-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.46-dev.zip - c251453b0bf549ac17bc4c21bda928bdb137c92facad754bb733ee996f40460c + 6dae39ac6773cc181cd2a018743b63aea7d3f78e151a0c142b4f4ea3d92ac35f dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 500644bc8d5d2324362f45f9421009c6181f8705 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 07:36:57 -0500 Subject: [PATCH 091/142] fix: license key warning shows on every admin page load, non-dismissable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restored warnMissingLicenseKey() in onAfterRoute. No session caching — the warning fires on every admin page load if no download key (dlid) is configured in the MokoWaaS update site. Only shown to master users. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Extension/MokoWaaS.php | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index c58d898..cefb0db 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -939,6 +939,55 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface } $this->protectPlugin(); + $this->warnMissingLicenseKey(); + } + + /** + * Warn on every admin page load if no license key is configured. + * Non-dismissable — shows on every request, not cached per session. + */ + protected function warnMissingLicenseKey(): void + { + if (!$this->isMasterUser()) + { + return; + } + + try + { + $db = Factory::getDbo(); + + $query = $db->getQuery(true) + ->select($db->quoteName('extra_query')) + ->from($db->quoteName('#__update_sites')) + ->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoWaaS%') + . ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoWaaS%') . ')') + ->setLimit(1); + $db->setQuery($query); + $extraQuery = (string) $db->loadResult(); + + if (!empty($extraQuery) && strpos($extraQuery, 'dlid=') !== false) + { + parse_str($extraQuery, $parsed); + + if (!empty($parsed['dlid'])) + { + return; + } + } + + $this->app->enqueueMessage( + 'Moko Consulting License Key Required — ' + . 'No download key is configured. Updates will not be available until a valid license key is entered. ' + . 'Go to System → Update Sites ' + . 'and enter your license key in the Download Key field for the MokoWaaS update site.', + 'warning' + ); + } + catch (\Throwable $e) + { + // Silent + } } // ------------------------------------------------------------------ @@ -947,6 +996,20 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface public function onUserLogin($user, $options = []) { + // Security alert for admin logins (#131) + if ($this->app->isClient('administrator')) + { + try + { + \Moko\Component\MokoWaaS\Administrator\Service\NotificationService::securityAlert( + 'admin_login', + 'Admin Login: ' . ($user['username'] ?? ''), + 'User: ' . ($user['username'] ?? '') . "\nIP: " . ($_SERVER['REMOTE_ADDR'] ?? '') . "\nTime: " . gmdate('Y-m-d H:i:s') . ' UTC' + ); + } + catch (\Throwable $e) {} + } + $this->fireTicketAutomation('user_login', [ 'user_id' => $user['id'] ?? 0, 'username' => $user['username'] ?? '', -- 2.52.0 From 055562b06aaed008bf299812493ebec547079d7e Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 07:38:21 -0500 Subject: [PATCH 092/142] fix: merge + stash pop [skip ci] Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/packages/com_mokowaas/admin/config.xml | 47 ++++ .../admin/src/Model/MaintenanceModel.php | 251 ++++++++++++++++++ .../admin/src/Service/NotificationService.php | 82 ++++++ .../admin/src/View/Cleanup/HtmlView.php | 27 ++ .../admin/src/View/Database/HtmlView.php | 27 ++ src/packages/com_mokowaas/mokowaas.xml | 1 + .../src/Extension/Firewall.php | 18 ++ 7 files changed, 453 insertions(+) create mode 100644 src/packages/com_mokowaas/admin/config.xml create mode 100644 src/packages/com_mokowaas/admin/src/Model/MaintenanceModel.php create mode 100644 src/packages/com_mokowaas/admin/src/View/Cleanup/HtmlView.php create mode 100644 src/packages/com_mokowaas/admin/src/View/Database/HtmlView.php diff --git a/src/packages/com_mokowaas/admin/config.xml b/src/packages/com_mokowaas/admin/config.xml new file mode 100644 index 0000000..34e4e4e --- /dev/null +++ b/src/packages/com_mokowaas/admin/config.xml @@ -0,0 +1,47 @@ + + +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ +
+
diff --git a/src/packages/com_mokowaas/admin/src/Model/MaintenanceModel.php b/src/packages/com_mokowaas/admin/src/Model/MaintenanceModel.php new file mode 100644 index 0000000..9d8aa94 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/Model/MaintenanceModel.php @@ -0,0 +1,251 @@ +getDatabase(); + $prefix = $db->getPrefix(); + + $db->setQuery('SHOW TABLE STATUS'); + $tables = $db->loadObjectList() ?: []; + + $results = []; + $totalSize = 0; + $totalOverhead = 0; + + foreach ($tables as $t) + { + $sizeMb = round(($t->Data_length + $t->Index_length) / 1048576, 2); + $overheadKb = round(($t->Data_free ?? 0) / 1024, 1); + $totalSize += $sizeMb; + $totalOverhead += $overheadKb; + + $results[] = (object) [ + 'name' => $t->Name, + 'rows' => (int) $t->Rows, + 'engine' => $t->Engine, + 'size_mb' => $sizeMb, + 'overhead_kb' => $overheadKb, + 'is_moko' => str_contains($t->Name, 'mokowaas'), + ]; + } + + usort($results, fn($a, $b) => $b->size_mb <=> $a->size_mb); + + return ['tables' => $results, 'total_size_mb' => round($totalSize, 2), 'total_overhead_kb' => round($totalOverhead, 1), 'count' => \count($results)]; + } + + /** + * Optimize all tables or specific ones. + */ + public function optimizeTables(array $tableNames = []): array + { + $db = $this->getDatabase(); + $count = 0; + + try + { + if (empty($tableNames)) + { + $db->setQuery('SHOW TABLE STATUS WHERE Data_free > 0'); + $tables = $db->loadObjectList() ?: []; + $tableNames = array_column($tables, 'Name'); + } + + foreach ($tableNames as $name) + { + $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName($name)); + $db->execute(); + $count++; + } + + return ['success' => true, 'message' => "Optimized {$count} tables."]; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Optimize failed: ' . $e->getMessage()]; + } + } + + /** + * Repair all tables. + */ + public function repairTables(): array + { + $db = $this->getDatabase(); + + try + { + $db->setQuery('SHOW TABLE STATUS'); + $tables = $db->loadObjectList() ?: []; + $count = 0; + + foreach ($tables as $t) + { + if ($t->Engine === 'InnoDB' || $t->Engine === 'MyISAM') + { + $db->setQuery('REPAIR TABLE ' . $db->quoteName($t->Name)); + $db->execute(); + $count++; + } + } + + return ['success' => true, 'message' => "Repaired {$count} tables."]; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Repair failed: ' . $e->getMessage()]; + } + } + + /** + * Purge expired sessions. + */ + public function purgeSessions(): array + { + try + { + $db = $this->getDatabase(); + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__session')) + ->where($db->quoteName('time') . ' < ' . (time() - 86400)) + )->execute(); + + return ['success' => true, 'message' => 'Expired sessions purged. ' . $db->getAffectedRows() . ' removed.']; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => $e->getMessage()]; + } + } + + // ================================================================== + // Temp/Cache Cleanup (#128) + // ================================================================== + + /** + * Get directory sizes for cleanup. + */ + public function getCleanupInfo(): array + { + $dirs = [ + ['path' => JPATH_ROOT . '/cache', 'label' => 'Site Cache'], + ['path' => JPATH_ADMINISTRATOR . '/cache', 'label' => 'Admin Cache'], + ['path' => JPATH_ROOT . '/tmp', 'label' => 'Temp Directory'], + ['path' => JPATH_ADMINISTRATOR . '/logs', 'label' => 'Log Files'], + ]; + + $results = []; + + foreach ($dirs as $dir) + { + $size = 0; + $files = 0; + + if (is_dir($dir['path'])) + { + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($dir['path'], \RecursiveDirectoryIterator::SKIP_DOTS) + ); + + foreach ($iterator as $file) + { + if ($file->isFile()) + { + $size += $file->getSize(); + $files++; + } + } + } + + $results[] = (object) [ + 'label' => $dir['label'], + 'path' => $dir['path'], + 'size_mb' => round($size / 1048576, 2), + 'files' => $files, + 'writable' => is_writable($dir['path']), + ]; + } + + return $results; + } + + /** + * Clean a specific directory. + */ + public function cleanDirectory(string $dirKey): array + { + $allowed = [ + 'site_cache' => JPATH_ROOT . '/cache', + 'admin_cache' => JPATH_ADMINISTRATOR . '/cache', + 'tmp' => JPATH_ROOT . '/tmp', + 'logs' => JPATH_ADMINISTRATOR . '/logs', + ]; + + if (!isset($allowed[$dirKey])) + { + return ['success' => false, 'message' => 'Invalid directory.']; + } + + $dir = $allowed[$dirKey]; + + if (!is_dir($dir)) + { + return ['success' => false, 'message' => 'Directory not found.']; + } + + $count = 0; + + try + { + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS), + \RecursiveIteratorIterator::CHILD_FIRST + ); + + foreach ($iterator as $item) + { + // Keep index.html and .htaccess files + $name = $item->getFilename(); + + if ($name === 'index.html' || $name === '.htaccess') + { + continue; + } + + if ($item->isDir()) + { + @rmdir($item->getPathname()); + } + else + { + @unlink($item->getPathname()); + $count++; + } + } + + // Also clear opcache + if (\function_exists('opcache_reset')) + { + \opcache_reset(); + } + + return ['success' => true, 'message' => "Cleaned {$count} files from {$dirKey}."]; + } + catch (\Throwable $e) + { + return ['success' => false, 'message' => 'Cleanup failed: ' . $e->getMessage()]; + } + } +} diff --git a/src/packages/com_mokowaas/admin/src/Service/NotificationService.php b/src/packages/com_mokowaas/admin/src/Service/NotificationService.php index 57e0010..5f4ed16 100644 --- a/src/packages/com_mokowaas/admin/src/Service/NotificationService.php +++ b/src/packages/com_mokowaas/admin/src/Service/NotificationService.php @@ -331,4 +331,86 @@ class NotificationService return []; } } + + // ================================================================== + // Security Event Notifications (#131) + // ================================================================== + + /** + * Send a security alert to admin emails. + */ + public static function securityAlert(string $event, string $subject, string $body): void + { + try + { + $config = self::getNotificationConfig(); + $enabled = $config['security_alerts'] ?? '1'; + + if (!$enabled) + { + return; + } + + $adminEmails = array_filter(array_map('trim', explode(',', $config['admin_emails'] ?? ''))); + $adminUserIds = array_filter(array_map('intval', explode(',', $config['admin_user_ids'] ?? ''))); + + $recipients = $adminEmails; + + foreach ($adminUserIds as $uid) + { + $email = self::getUserEmail($uid); + + if ($email) + { + $recipients[] = $email; + } + } + + $recipients = array_unique($recipients); + + if (empty($recipients)) + { + return; + } + + $siteName = Factory::getConfig()->get('sitename', 'Site'); + $fullSubject = '[' . $siteName . ' Security] ' . $subject; + + $lines = [ + $siteName . ' Security Alert', + str_repeat('-', 40), + '', + 'Event: ' . $event, + 'Time: ' . gmdate('Y-m-d H:i:s') . ' UTC', + '', + $body, + '', + '-- ', + $siteName . ' | MokoWaaS Security', + ]; + + $mailer = Factory::getMailer(); + $mailer->isHtml(false); + $mailer->setSubject($fullSubject); + $mailer->setBody(implode("\n", $lines)); + + foreach ($recipients as $email) + { + try + { + $mailer->clearAddresses(); + $mailer->addRecipient(trim($email)); + $mailer->Send(); + } + catch (\Throwable $e) + { + Log::add('Security alert send failed: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + } + catch (\Throwable $e) + { + Log::add('Security alert error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } } diff --git a/src/packages/com_mokowaas/admin/src/View/Cleanup/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Cleanup/HtmlView.php new file mode 100644 index 0000000..14a9b44 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Cleanup/HtmlView.php @@ -0,0 +1,27 @@ +dirs = $model->getCleanupInfo(); + + ToolbarHelper::title('Cache & Temp Cleanup', 'trash'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas'); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } +} diff --git a/src/packages/com_mokowaas/admin/src/View/Database/HtmlView.php b/src/packages/com_mokowaas/admin/src/View/Database/HtmlView.php new file mode 100644 index 0000000..6c91723 --- /dev/null +++ b/src/packages/com_mokowaas/admin/src/View/Database/HtmlView.php @@ -0,0 +1,27 @@ +tableData = $model->getTableStatus(); + + ToolbarHelper::title('Database Tools', 'database'); + ToolbarHelper::back('JTOOLBAR_BACK', 'index.php?option=com_mokowaas'); + + $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + $wa->registerAndUseStyle('com_mokowaas.dashboard', 'com_mokowaas/dashboard.css'); + + parent::display($tpl); + } +} diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 11fd1bf..4a50cfc 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -41,6 +41,7 @@ access.xml + config.xml language services sql diff --git a/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php b/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php index 949e099..3de8f12 100644 --- a/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php +++ b/src/packages/plg_system_mokowaas_firewall/src/Extension/Firewall.php @@ -402,6 +402,24 @@ class Firewall extends CMSPlugin implements SubscriberInterface, BootableExtensi ]; $db->insertObject('#__mokowaas_waf_log', $row); + // Security alert email (#131) — rate limited to 1 per IP per 5 minutes + try + { + $alertKey = 'mokowaas_waf_alert_' . md5($ip); + $session = \Joomla\CMS\Factory::getSession(); + + if (!$session->get($alertKey, false)) + { + $session->set($alertKey, true); + \Moko\Component\MokoWaaS\Administrator\Service\NotificationService::securityAlert( + 'waf_block', + 'WAF Block: ' . $rule . ' from ' . $ip, + "Rule: {$rule}\nIP: {$ip}\nURI: {$uri}\nDetail: " . substr($detail, 0, 200) + ); + } + } + catch (\Throwable $e) {} + // Auto-ban: if IP has N+ blocks in last M minutes, add to blocklist (#143) $threshold = (int) $this->params->get('autoban_threshold', 10); $window = (int) $this->params->get('autoban_window', 5); -- 2.52.0 From 234c6037c02cb44cb81dde7cd507a7af686a07c8 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 07:55:16 -0500 Subject: [PATCH 093/142] feat: database tools, cache cleanup, admin menu update, license key warning moved to postflight - Add database tools view (view=database) with table status, optimize, repair, session purge (#127) - Add cache cleanup view (view=cleanup) with directory size reporting and one-click cleanup (#128) - Add Database Tools and Cache Cleanup links to admin sidebar menu module - Add MokoWaaS-specific update badge (blue) separate from other updates in cpanel module - Add SSL certificate expiry monitoring to cpanel module (#148) - Move license key warning from every-page onAfterRoute to package postflight (install/update only) - Add privacy and waflog menu entries to component manifest submenu Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/language/en-GB/com_mokowaas.sys.ini | 2 + .../src/Controller/DisplayController.php | 39 ++++++++++ .../admin/tmpl/cleanup/default.php | 63 ++++++++++++++++ .../admin/tmpl/database/default.php | 72 +++++++++++++++++++ src/packages/com_mokowaas/mokowaas.xml | 2 + .../src/Helper/CpanelHelper.php | 23 ++++-- .../mod_mokowaas_cpanel/tmpl/default.php | 10 +++ .../mod_mokowaas_menu/tmpl/default.php | 2 + .../Extension/MokoWaaS.php | 49 ------------- src/script.php | 56 +++++++++++++++ 10 files changed, 265 insertions(+), 53 deletions(-) create mode 100644 src/packages/com_mokowaas/admin/tmpl/cleanup/default.php create mode 100644 src/packages/com_mokowaas/admin/tmpl/database/default.php diff --git a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini index 0218a06..3c71dbd 100644 --- a/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini +++ b/src/packages/com_mokowaas/admin/language/en-GB/com_mokowaas.sys.ini @@ -14,4 +14,6 @@ COM_MOKOWAAS_MENU_TICKETS="Helpdesk" COM_MOKOWAAS_MENU_HTACCESS=".htaccess Maker" COM_MOKOWAAS_MENU_PRIVACY="Privacy Guard" COM_MOKOWAAS_MENU_WAFLOG="WAF Log" +COM_MOKOWAAS_MENU_DATABASE="Database Tools" +COM_MOKOWAAS_MENU_CLEANUP="Cache Cleanup" COM_MOKOWAAS_MENU_CACHE="Cache Management" diff --git a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php index c9eaa00..dd77f61 100644 --- a/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php +++ b/src/packages/com_mokowaas/admin/src/Controller/DisplayController.php @@ -34,6 +34,8 @@ class DisplayController extends BaseController 'categories' => 'mokowaas.tickets', 'canned' => 'mokowaas.tickets', 'automation' => 'core.admin', + 'database' => 'core.admin', + 'cleanup' => 'mokowaas.cache', ]; public function display($cachable = false, $urlparams = []) @@ -282,6 +284,43 @@ class DisplayController extends BaseController } } + // ================================================================== + // Maintenance (#127, #128) + // ================================================================== + + public function optimizeDb() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); return; } + $model = new \Moko\Component\MokoWaaS\Administrator\Model\MaintenanceModel(); + $this->jsonResponse($model->optimizeTables()); + } + + public function repairDb() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); return; } + $model = new \Moko\Component\MokoWaaS\Administrator\Model\MaintenanceModel(); + $this->jsonResponse($model->repairTables()); + } + + public function purgeSessions() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('core.admin')) { $this->jsonForbidden(); return; } + $model = new \Moko\Component\MokoWaaS\Administrator\Model\MaintenanceModel(); + $this->jsonResponse($model->purgeSessions()); + } + + public function cleanDirectory() + { + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + if (!$this->checkAcl('mokowaas.cache')) { $this->jsonForbidden(); return; } + $dirKey = Factory::getApplication()->getInput()->getString('dir_key', ''); + $model = new \Moko\Component\MokoWaaS\Administrator\Model\MaintenanceModel(); + $this->jsonResponse($model->cleanDirectory($dirKey)); + } + // ================================================================== // Helpdesk CRUD (#137, #138, #139) // ================================================================== diff --git a/src/packages/com_mokowaas/admin/tmpl/cleanup/default.php b/src/packages/com_mokowaas/admin/tmpl/cleanup/default.php new file mode 100644 index 0000000..073c623 --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/cleanup/default.php @@ -0,0 +1,63 @@ +dirs; +$token = Session::getFormToken(); +$cleanUrl = Route::_('index.php?option=com_mokowaas&task=display.cleanDirectory&format=json'); + +$dirKeys = ['site_cache', 'admin_cache', 'tmp', 'logs']; +$totalMb = 0; +$totalFiles = 0; +foreach ($dirs as $d) { $totalMb += $d->size_mb; $totalFiles += $d->files; } +?> + +
+
+
MBTotal Size
+
Total Files
+
+ +
+ $d): ?> +
+
+
+
label); ?>
+

size_mb, 1); ?> MB

+

files); ?> files

+ writable): ?> + Not writable + + + +
+
+
+ +
+
+ + diff --git a/src/packages/com_mokowaas/admin/tmpl/database/default.php b/src/packages/com_mokowaas/admin/tmpl/database/default.php new file mode 100644 index 0000000..0d0c935 --- /dev/null +++ b/src/packages/com_mokowaas/admin/tmpl/database/default.php @@ -0,0 +1,72 @@ +tableData; +$tables = $data['tables'] ?? []; +$token = Session::getFormToken(); +$optimizeUrl = Route::_('index.php?option=com_mokowaas&task=display.optimizeDb&format=json'); +$repairUrl = Route::_('index.php?option=com_mokowaas&task=display.repairDb&format=json'); +$purgeUrl = Route::_('index.php?option=com_mokowaas&task=display.purgeSessions&format=json'); +?> + +
+
+
Tables
+
MBTotal Size
+
KBOverhead
+
+
+ + + +
+
+
+ +
+
+ + + + + + + + + + + + + +
TableEngineRowsSizeOverhead
name); ?>engine); ?>rows); ?>size_mb; ?> MBoverhead_kb > 0 ? $t->overhead_kb . ' KB' : '—'; ?>
+
+
+
+ + diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 4a50cfc..d88f93e 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -34,6 +34,8 @@ COM_MOKOWAAS_MENU_HTACCESS COM_MOKOWAAS_MENU_PRIVACY COM_MOKOWAAS_MENU_WAFLOG + COM_MOKOWAAS_MENU_DATABASE + COM_MOKOWAAS_MENU_CLEANUP COM_MOKOWAAS_MENU_PLUGINS COM_MOKOWAAS_MENU_UPDATES COM_MOKOWAAS_MENU_CHECKIN diff --git a/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php b/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php index a50d895..87fff88 100644 --- a/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php +++ b/src/packages/mod_mokowaas_cpanel/src/Helper/CpanelHelper.php @@ -87,10 +87,11 @@ class CpanelHelper public function getCounts(DatabaseInterface $db): object { $counts = (object) [ - 'articles' => 0, - 'users' => 0, - 'extensions' => 0, - 'updates' => 0, + 'articles' => 0, + 'users' => 0, + 'extensions' => 0, + 'updates' => 0, + 'moko_updates' => 0, ]; try @@ -106,6 +107,20 @@ class CpanelHelper $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__updates'))->where($db->quoteName('extension_id') . ' != 0')); $counts->updates = (int) $db->loadResult(); + + // MokoWaaS-specific updates + $db->setQuery( + $db->getQuery(true) + ->select('COUNT(*)') + ->from($db->quoteName('#__updates', 'u')) + ->join('INNER', $db->quoteName('#__extensions', 'e') . ' ON e.extension_id = u.extension_id') + ->where('(' . $db->quoteName('e.element') . ' LIKE ' . $db->quote('mokowaas%') + . ' OR ' . $db->quoteName('e.element') . ' LIKE ' . $db->quote('pkg_mokowaas%') + . ' OR ' . $db->quoteName('e.element') . ' LIKE ' . $db->quote('com_mokowaas%') + . ' OR ' . $db->quoteName('e.element') . ' LIKE ' . $db->quote('mod_mokowaas%') + . ' OR ' . $db->quoteName('e.element') . ' = ' . $db->quote('mokoonyx') . ')') + ); + $counts->moko_updates = (int) $db->loadResult(); } catch (\Throwable $e) { diff --git a/src/packages/mod_mokowaas_cpanel/tmpl/default.php b/src/packages/mod_mokowaas_cpanel/tmpl/default.php index a65553f..66eea9f 100644 --- a/src/packages/mod_mokowaas_cpanel/tmpl/default.php +++ b/src/packages/mod_mokowaas_cpanel/tmpl/default.php @@ -67,6 +67,16 @@ $diskColor = ($diskPct !== null && $diskPct > 90) ? 'bg-danger' : (($diskPct !== offline)): ?> Offline + moko_updates ?? 0) > 0): ?> + + moko_updates; ?> MokoWaaS updatemoko_updates > 1 ? 's' : ''; ?> + + + updates > 0 && $counts->updates !== ($counts->moko_updates ?? 0)): ?> + + updates - ($counts->moko_updates ?? 0); ?> updateupdates - ($counts->moko_updates ?? 0)) > 1 ? 's' : ''; ?> + + diff --git a/src/packages/mod_mokowaas_menu/tmpl/default.php b/src/packages/mod_mokowaas_menu/tmpl/default.php index 0c7eca7..d95b4df 100644 --- a/src/packages/mod_mokowaas_menu/tmpl/default.php +++ b/src/packages/mod_mokowaas_menu/tmpl/default.php @@ -17,6 +17,8 @@ $items = [ ['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-database', 'title' => 'Database Tools', 'link' => 'index.php?option=com_mokowaas&view=database'], + ['icon' => 'icon-trash', 'title' => 'Cache Cleanup', 'link' => 'index.php?option=com_mokowaas&view=cleanup'], ['icon' => 'icon-power-off', 'title' => 'Feature Plugins', 'link' => 'index.php?option=com_plugins&filter[folder]=system&filter[search]=mokowaas'], ]; diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 0000d4a..3d03f80 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -939,55 +939,6 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface } $this->protectPlugin(); - $this->warnMissingLicenseKey(); - } - - /** - * Warn on every admin page load if no license key is configured. - * Non-dismissable — shows on every request, not cached per session. - */ - protected function warnMissingLicenseKey(): void - { - if (!$this->isMasterUser()) - { - return; - } - - try - { - $db = Factory::getDbo(); - - $query = $db->getQuery(true) - ->select($db->quoteName('extra_query')) - ->from($db->quoteName('#__update_sites')) - ->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoWaaS%') - . ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoWaaS%') . ')') - ->setLimit(1); - $db->setQuery($query); - $extraQuery = (string) $db->loadResult(); - - if (!empty($extraQuery) && strpos($extraQuery, 'dlid=') !== false) - { - parse_str($extraQuery, $parsed); - - if (!empty($parsed['dlid'])) - { - return; - } - } - - $this->app->enqueueMessage( - 'Moko Consulting License Key Required — ' - . 'No download key is configured. Updates will not be available until a valid license key is entered. ' - . 'Go to System → Update Sites ' - . 'and enter your license key in the Download Key field for the MokoWaaS update site.', - 'warning' - ); - } - catch (\Throwable $e) - { - // Silent - } } // ------------------------------------------------------------------ diff --git a/src/script.php b/src/script.php index 9a2a541..8d659f9 100644 --- a/src/script.php +++ b/src/script.php @@ -69,6 +69,9 @@ class Pkg_MokowaasInstallerScript // Trigger heartbeat registration $this->sendHeartbeat(); + + // Warn if no license key is configured + $this->warnMissingLicenseKey(); } /** @@ -996,4 +999,57 @@ class Pkg_MokowaasInstallerScript Log::add('Feature param migration error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); } } + + /** + * Warn after install/update if no license key (dlid) is configured on the update site. + */ + private function warnMissingLicenseKey(): void + { + try + { + $db = Factory::getDbo(); + $app = Factory::getApplication(); + + $query = $db->getQuery(true) + ->select([$db->quoteName('update_site_id'), $db->quoteName('extra_query')]) + ->from($db->quoteName('#__update_sites')) + ->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoWaaS%') + . ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoWaaS%') . ')') + ->setLimit(1); + $db->setQuery($query); + $site = $db->loadObject(); + + if ($site) + { + $extraQuery = (string) ($site->extra_query ?? ''); + + if (!empty($extraQuery) && strpos($extraQuery, 'dlid=') !== false) + { + parse_str($extraQuery, $parsed); + + if (!empty($parsed['dlid'])) + { + return; + } + } + + $editUrl = 'index.php?option=com_installer&task=updatesite.edit&update_site_id=' . (int) $site->update_site_id; + } + else + { + $editUrl = 'index.php?option=com_installer&view=updatesites'; + } + + $app->enqueueMessage( + 'Moko Consulting License Key Required — ' + . 'No download key is configured. Updates will not be available until a valid license key is entered. ' + . 'Enter License Key', + 'warning' + ); + } + catch (\Throwable $e) + { + // Silent + } + } } -- 2.52.0 From 1c7738e2760ace34fb157bab082da59193f4c21a Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 12:55:56 +0000 Subject: [PATCH 094/142] chore(version): auto-bump 02.32.47 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 2 +- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 2 +- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 2 +- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 49 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 178ba5e..26a20e1 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.46 + 02.32.47 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index b484e5b..0f242d6 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.46 +# VERSION: 02.32.47 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d072ea..db68c05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.46 + VERSION: 02.32.47 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 3d47068..2ea48b1 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 32caa56..5bd5204 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index aa11dea..72e09fa 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.46 + VERSION: 02.32.47 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 3b29251..563b621 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 3cf2e2b..2f10f2d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.46 +VERSION: 02.32.47 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 8b643ab..c5da7f0 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.46) +# MokoWaaS Build Guide (VERSION: 02.32.47) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 8a0cabf..f5f8430 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.46) +# MokoWaaS Configuration Guide (VERSION: 02.32.47) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 7238754..7b13be7 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.46) +# MokoWaaS Installation Guide (VERSION: 02.32.47) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index d92bb90..16efd0e 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.46) +# MokoWaaS Operations Guide (VERSION: 02.32.47) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 7a22b27..d414feb 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.46) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.47) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 017303a..f71bb22 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.46) +# MokoWaaS Testing Guide (VERSION: 02.32.47) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index 34f727d..e324a10 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.46) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.47) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index e01d332..c6fedb2 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.46) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.47) ## Introduction diff --git a/docs/index.md b/docs/index.md index 9fd1956..897ca57 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.46 + VERSION: 02.32.47 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.46) +# MokoWaaS Documentation Index (VERSION: 02.32.47) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 69a3d02..c4f286d 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.46 + VERSION: 02.32.47 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.46) +# MokoWaaS Plugin Overview (VERSION: 02.32.47) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index c4a1c2f..9fd4e9f 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.46 +VERSION: 02.32.47 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index d88f93e..dcd445f 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index 853ca26..e59028f 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml index 6ac21d8..46d6129 100644 --- a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml +++ b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 MokoWaaS admin sidebar menu — renders a dedicated MokoWaaS section in the admin menu before Joomla's default menu. Moko\Module\MokoWaaSMenu diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 3d03f80..98518f3 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.46 + * VERSION: 02.32.47 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 73900c9..479479a 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.46 + * VERSION: 02.32.47 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 4705666..20da32a 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.46 + * VERSION: 02.32.47 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 5dddddd..4cb9eae 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.46 + * VERSION: 02.32.47 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 8b61608..69e895d 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.46 + * VERSION: 02.32.47 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 347b22b..a9c80cf 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.46 + * VERSION: 02.32.47 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index e023f90..38eb428 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.46 + * VERSION: 02.32.47 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index b05497a..0ab32b8 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.46 + * VERSION: 02.32.47 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 8b29f57..22da775 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.46 + * VERSION: 02.32.47 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 50d6bb7..9edaf22 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.46 + * VERSION: 02.32.47 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 0bad5cd..59e8081 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index 7dc2351..b7aec07 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.46 + * VERSION: 02.32.47 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index c360841..246be42 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.46 + * VERSION: 02.32.47 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index d318277..142d3b2 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index dbe3a9a..13ad261 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 053d9e1..3e0cf7a 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 21b904f..4041d27 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index daa693a..ea62b27 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index c63e242..3bc3f8d 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index ea1ba94..da8ea68 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 9757a5b..931e19e 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 279616f..40a4794 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index aada257..a050991 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.47 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index ad6bb60..ed3d635 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.46 + * VERSION: 02.32.47 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index f186dc5..58130c9 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.46 + * VERSION: 02.32.47 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index dc02061..d1faf7f 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.46 + 02.32.47 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 6d2ab50..a3b1b01 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 8903af5d7f0fba68a5f27cf1eaf5813ced198428 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 12:55:57 +0000 Subject: [PATCH 095/142] chore: update development channel 02.32.47 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index a3b1b01..21b926e 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.46-dev + 02.32.47-dev 2026-06-04 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.46-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.47-dev.zip - 6dae39ac6773cc181cd2a018743b63aea7d3f78e151a0c142b4f4ea3d92ac35f + d8feab9aad9af48f7d45005881eba7be2e830cff685ef25980b1a15dafae6962 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 1819fa276c1252350e06cfa8e12d66953786eac3 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 09:09:38 -0500 Subject: [PATCH 096/142] feat: collapsible admin menu, cache cleaner status module, update server URL - Admin menu module now collapses by default, auto-expands on MokoWaaS pages (CB-style) - Add mod_mokowaas_cache: one-click cache cleaner button in admin status bar (replaces Regular Labs Cache Cleaner) - clearCache now purges all cache files (not just expired), matching RL behavior - Update server URL changed to https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/updates.xml - Add setupCacheModule() to package install script Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/src/Model/DashboardModel.php | 45 ++++++++- .../language/en-GB/mod_mokowaas_cache.ini | 3 + .../language/en-GB/mod_mokowaas_cache.sys.ini | 2 + .../mod_mokowaas_cache/mod_mokowaas_cache.xml | 24 +++++ .../mod_mokowaas_cache/services/provider.php | 23 +++++ .../src/Dispatcher/Dispatcher.php | 14 +++ .../mod_mokowaas_cache/tmpl/default.php | 75 ++++++++++++++ .../mod_mokowaas_menu/tmpl/default.php | 97 +++++++++++++------ src/pkg_mokowaas.xml | 3 +- src/script.php | 67 +++++++++++++ 10 files changed, 319 insertions(+), 34 deletions(-) create mode 100644 src/packages/mod_mokowaas_cache/language/en-GB/mod_mokowaas_cache.ini create mode 100644 src/packages/mod_mokowaas_cache/language/en-GB/mod_mokowaas_cache.sys.ini create mode 100644 src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml create mode 100644 src/packages/mod_mokowaas_cache/services/provider.php create mode 100644 src/packages/mod_mokowaas_cache/src/Dispatcher/Dispatcher.php create mode 100644 src/packages/mod_mokowaas_cache/tmpl/default.php diff --git a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php index b8674dc..fbcb447 100644 --- a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php @@ -267,11 +267,46 @@ class DashboardModel extends BaseDatabaseModel { try { - $app = Factory::getApplication(); - $app->get('cache_handler', 'file'); + // Purge all file-based cache directories + $root = JPATH_ROOT; + $dirs = [ + $root . '/cache', + $root . '/administrator/cache', + ]; - // Clear site and admin caches - $cache = Factory::getContainer()->get(\Joomla\CMS\Cache\CacheControllerFactoryInterface::class); + foreach ($dirs as $dir) + { + if (!is_dir($dir)) + { + continue; + } + + $it = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS), + \RecursiveIteratorIterator::CHILD_FIRST + ); + + foreach ($it as $file) + { + $name = $file->getFilename(); + + if ($name === 'index.html' || $name === '.htaccess') + { + continue; + } + + if ($file->isDir()) + { + @rmdir($file->getPathname()); + } + else + { + @unlink($file->getPathname()); + } + } + } + + // Also run Joomla's built-in cache GC for non-file handlers Factory::getCache('', '')->gc(); Factory::getCache('', '', 'administrator')->gc(); @@ -281,7 +316,7 @@ class DashboardModel extends BaseDatabaseModel \opcache_reset(); } - return ['success' => true, 'message' => 'Cache cleared successfully.']; + return ['success' => true, 'message' => 'All cache cleared successfully.']; } catch (\Throwable $e) { diff --git a/src/packages/mod_mokowaas_cache/language/en-GB/mod_mokowaas_cache.ini b/src/packages/mod_mokowaas_cache/language/en-GB/mod_mokowaas_cache.ini new file mode 100644 index 0000000..dd3acea --- /dev/null +++ b/src/packages/mod_mokowaas_cache/language/en-GB/mod_mokowaas_cache.ini @@ -0,0 +1,3 @@ +MOD_MOKOWAAS_CACHE="MokoWaaS Cache Cleaner" +MOD_MOKOWAAS_CACHE_DESC="One-click cache cleaner in the admin status bar. Clears all Joomla cache (site, admin, and expired)." +MOD_MOKOWAAS_CACHE_CLEAR_ALL="Clear All Cache" diff --git a/src/packages/mod_mokowaas_cache/language/en-GB/mod_mokowaas_cache.sys.ini b/src/packages/mod_mokowaas_cache/language/en-GB/mod_mokowaas_cache.sys.ini new file mode 100644 index 0000000..25f62d2 --- /dev/null +++ b/src/packages/mod_mokowaas_cache/language/en-GB/mod_mokowaas_cache.sys.ini @@ -0,0 +1,2 @@ +MOD_MOKOWAAS_CACHE="MokoWaaS Cache Cleaner" +MOD_MOKOWAAS_CACHE_DESC="One-click cache cleaner in the admin status bar. Clears all Joomla cache (site, admin, and expired)." diff --git a/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml b/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml new file mode 100644 index 0000000..f6782c0 --- /dev/null +++ b/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml @@ -0,0 +1,24 @@ + + + mod_mokowaas_cache + 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.46 + MOD_MOKOWAAS_CACHE_DESC + Moko\Module\MokoWaaSCache + + + services + src + tmpl + + + + en-GB/mod_mokowaas_cache.ini + en-GB/mod_mokowaas_cache.sys.ini + + diff --git a/src/packages/mod_mokowaas_cache/services/provider.php b/src/packages/mod_mokowaas_cache/services/provider.php new file mode 100644 index 0000000..cf5c25c --- /dev/null +++ b/src/packages/mod_mokowaas_cache/services/provider.php @@ -0,0 +1,23 @@ +registerServiceProvider(new ModuleDispatcherFactory('\\Moko\\Module\\MokoWaaSCache')); + $container->registerServiceProvider(new Module()); + } +}; diff --git a/src/packages/mod_mokowaas_cache/src/Dispatcher/Dispatcher.php b/src/packages/mod_mokowaas_cache/src/Dispatcher/Dispatcher.php new file mode 100644 index 0000000..b67aad8 --- /dev/null +++ b/src/packages/mod_mokowaas_cache/src/Dispatcher/Dispatcher.php @@ -0,0 +1,14 @@ + + +
+ +
+ + diff --git a/src/packages/mod_mokowaas_menu/tmpl/default.php b/src/packages/mod_mokowaas_menu/tmpl/default.php index d95b4df..794f4b0 100644 --- a/src/packages/mod_mokowaas_menu/tmpl/default.php +++ b/src/packages/mod_mokowaas_menu/tmpl/default.php @@ -2,8 +2,9 @@ /** * MokoWaaS Admin Sidebar Menu * - * Renders a dedicated MokoWaaS section in the admin sidebar, - * similar to Community Builder's mod_cbadmin. + * Collapsible sidebar section — collapsed by default, auto-expands + * when on a MokoWaaS page. Mirrors Joomla's own mm-active/mm-show + * pattern used by CB's mod_cbadmin. */ defined('_JEXEC') or die; @@ -22,35 +23,75 @@ $items = [ ['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', ''); +$app = \Joomla\CMS\Factory::getApplication(); +$currentOption = $app->getInput()->get('option', ''); +$currentView = $app->getInput()->get('view', ''); + +// Auto-expand when on a MokoWaaS page +$isMokoPage = ($currentOption === 'com_mokowaas') + || ($currentOption === 'com_plugins' && stripos($app->getInput()->get('filter', [], 'array')['search'] ?? $app->getInput()->getString('filter_search', ''), 'mokowaas') !== false); + +$collapseId = 'mokowaas-menu-collapse'; ?> -
+
+ + diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index dc02061..ab3b4e0 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -21,6 +21,7 @@ com_mokowaas.zip mod_mokowaas_cpanel.zip mod_mokowaas_menu.zip + mod_mokowaas_cache.zip plg_webservices_mokowaas.zip plg_webservices_perfectpublisher.zip plg_task_mokowaasdemo.zip @@ -30,6 +31,6 @@
- https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/updates.xml + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/updates.xml
diff --git a/src/script.php b/src/script.php index 8d659f9..5d55bf3 100644 --- a/src/script.php +++ b/src/script.php @@ -58,6 +58,9 @@ class Pkg_MokowaasInstallerScript // Set up admin sidebar menu module $this->setupAdminMenuModule(); + // Set up cache cleaner status bar module + $this->setupCacheModule(); + // Create Support portal menu item on frontend $this->setupSupportMenuItem(); @@ -773,6 +776,70 @@ class Pkg_MokowaasInstallerScript } } + /** + * Set up the cache cleaner module in the admin status bar position. + */ + private function setupCacheModule(): 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_cache')) + )->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_cache')) + ); + + if ((int) $db->loadResult() > 0) + { + return; + } + + $module = (object) [ + 'title' => 'MokoWaaS Cache Cleaner', + 'note' => '', + 'content' => '', + 'ordering' => 8, + 'position' => 'status', + 'checked_out' => null, + 'checked_out_time' => null, + 'publish_up' => null, + 'publish_down' => null, + 'published' => 1, + 'module' => 'mod_mokowaas_cache', + 'access' => 3, + 'showtitle' => 0, + 'params' => '{}', + 'client_id' => 1, + 'language' => '*', + ]; + + $db->insertObject('#__modules', $module, 'id'); + + if ((int) $module->id) + { + $mm = (object) ['moduleid' => (int) $module->id, 'menuid' => 0]; + $db->insertObject('#__modules_menu', $mm, 'moduleid'); + } + } + catch (\Throwable $e) + { + Log::add('Cache module setup error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + /** * Create a "Support" menu item on the frontend main menu. */ -- 2.52.0 From de7a9454704ba6fba8a67f91a9b068010d45c0a5 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 14:10:22 +0000 Subject: [PATCH 097/142] chore(version): auto-bump 02.32.48 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 2 +- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 2 +- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 2 +- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 50 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 26a20e1..6ed5b90 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.47 + 02.32.48 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 0f242d6..634d1de 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.47 +# VERSION: 02.32.48 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index db68c05..1fef427 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.47 + VERSION: 02.32.48 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2ea48b1..1ceddee 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 5bd5204..d46d44d 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 72e09fa..116a9bf 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.47 + VERSION: 02.32.48 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 563b621..b909d7c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 2f10f2d..371c840 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.47 +VERSION: 02.32.48 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index c5da7f0..dadd5e9 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.47) +# MokoWaaS Build Guide (VERSION: 02.32.48) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index f5f8430..89b5721 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.47) +# MokoWaaS Configuration Guide (VERSION: 02.32.48) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 7b13be7..9047723 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.47) +# MokoWaaS Installation Guide (VERSION: 02.32.48) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 16efd0e..e86e1b1 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.47) +# MokoWaaS Operations Guide (VERSION: 02.32.48) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index d414feb..1133965 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.47) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.48) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index f71bb22..6a6e6fa 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.47) +# MokoWaaS Testing Guide (VERSION: 02.32.48) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index e324a10..dd1bfa4 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.47) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.48) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index c6fedb2..602e7ef 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.47) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.48) ## Introduction diff --git a/docs/index.md b/docs/index.md index 897ca57..874632c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.47 + VERSION: 02.32.48 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.47) +# MokoWaaS Documentation Index (VERSION: 02.32.48) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index c4f286d..26e865b 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.47 + VERSION: 02.32.48 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.47) +# MokoWaaS Plugin Overview (VERSION: 02.32.48) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 9fd4e9f..7114447 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.47 +VERSION: 02.32.48 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index dcd445f..21803da 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml b/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml index f6782c0..53c81a8 100644 --- a/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml +++ b/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.46 + 02.32.48 MOD_MOKOWAAS_CACHE_DESC Moko\Module\MokoWaaSCache diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index e59028f..e808c3b 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml index 46d6129..822be21 100644 --- a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml +++ b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 MokoWaaS admin sidebar menu — renders a dedicated MokoWaaS section in the admin menu before Joomla's default menu. Moko\Module\MokoWaaSMenu diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 98518f3..fac7b08 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.47 + * VERSION: 02.32.48 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 479479a..4e80e9d 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.47 + * VERSION: 02.32.48 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 20da32a..ba8919f 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.47 + * VERSION: 02.32.48 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index 4cb9eae..b9b984e 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.47 + * VERSION: 02.32.48 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 69e895d..adf451a 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.47 + * VERSION: 02.32.48 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index a9c80cf..2a360ba 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.47 + * VERSION: 02.32.48 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index 38eb428..f12afb1 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.47 + * VERSION: 02.32.48 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 0ab32b8..589fab5 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.47 + * VERSION: 02.32.48 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 22da775..ba36c91 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.47 + * VERSION: 02.32.48 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 9edaf22..19a05cb 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.47 + * VERSION: 02.32.48 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 59e8081..384ac89 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index b7aec07..bcd8a08 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.47 + * VERSION: 02.32.48 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 246be42..0400041 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.47 + * VERSION: 02.32.48 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 142d3b2..6518422 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 13ad261..afd9242 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 3e0cf7a..517f82d 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 4041d27..6b3b8bf 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index ea62b27..bfd3a36 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index 3bc3f8d..bdcce26 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index da8ea68..2bfe98c 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 931e19e..40a9fb7 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 40a4794..83fad62 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index a050991..7817351 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.47 + 02.32.48 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index ed3d635..66811a8 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.47 + * VERSION: 02.32.48 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index 58130c9..cfdab6a 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.47 + * VERSION: 02.32.48 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 0cca032..7475975 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.47 + 02.32.48 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 21b926e..8254fe7 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 290fc0fb99011f5416e436bac9783016500d317a Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 14:10:24 +0000 Subject: [PATCH 098/142] chore: update development channel 02.32.48 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 8254fe7..f2e7f4b 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.47-dev + 02.32.48-dev 2026-06-04 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.47-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.48-dev.zip - d8feab9aad9af48f7d45005881eba7be2e830cff685ef25980b1a15dafae6962 + 384220b2bd69865e7343d618cb728c1c3acbac0252f4d1edfb92d71af283f8c2 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 3f6a7af83ef60297c55d6b4bd47e38903aa2723a Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Thu, 4 Jun 2026 14:20:17 +0000 Subject: [PATCH 099/142] chore: sync .mokogitea/workflows/auto-release.yml from moko-platform [skip ci] --- .mokogitea/workflows/auto-release.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.mokogitea/workflows/auto-release.yml b/.mokogitea/workflows/auto-release.yml index 2325032..44a2d64 100644 --- a/.mokogitea/workflows/auto-release.yml +++ b/.mokogitea/workflows/auto-release.yml @@ -102,13 +102,14 @@ jobs: run: | php /tmp/moko-platform-api/cli/release_publish.php \ --path . --stability rc --bump minor --branch rc \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" + --token "${{ secrets.MOKOGITEA_TOKEN }}" \ + --skip-update-stream - name: Summary if: always() run: | echo "## Promoted to Release Candidate" >> $GITHUB_STEP_SUMMARY - echo "Branch renamed to rc, minor bump, RC + lesser stream releases built, updates.xml synced" >> $GITHUB_STEP_SUMMARY + echo "Branch renamed to rc, minor bump, RC release built (updates.xml managed by Gitea Pages)" >> $GITHUB_STEP_SUMMARY # ── Merged PR → Build & Release (or promote RC to stable) ──────────────────── release: @@ -167,7 +168,8 @@ jobs: run: | php /tmp/moko-platform-api/cli/release_publish.php \ --path . --stability stable --bump minor --branch main \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" + --token "${{ secrets.MOKOGITEA_TOKEN }}" \ + --skip-update-stream # -- STEP 9: Mirror to GitHub (stable only) -------------------------------- - name: "Step 9: Mirror release to GitHub" -- 2.52.0 From 130aa26f270388409f2491b7f90991893a996973 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 09:21:14 -0500 Subject: [PATCH 100/142] fix: admin menu native classes, sys.ini to global language dir for menu icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rewrite mod_mokowaas_menu template to use native MetisMenu classes (item, has-arrow, mm-collapse, mm-active, sidebar-item-title) — no custom CSS/JS - Add element to component manifest so sys.ini deploys to administrator/language/en-GB/ for menu title translation Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/packages/com_mokowaas/mokowaas.xml | 3 + .../mod_mokowaas_menu/tmpl/default.php | 125 +++++++----------- 2 files changed, 50 insertions(+), 78 deletions(-) diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index dcd445f..036498b 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -50,6 +50,9 @@ src tmpl + + en-GB/com_mokowaas.sys.ini + diff --git a/src/packages/mod_mokowaas_menu/tmpl/default.php b/src/packages/mod_mokowaas_menu/tmpl/default.php index 794f4b0..395f9d6 100644 --- a/src/packages/mod_mokowaas_menu/tmpl/default.php +++ b/src/packages/mod_mokowaas_menu/tmpl/default.php @@ -2,96 +2,65 @@ /** * MokoWaaS Admin Sidebar Menu * - * Collapsible sidebar section — collapsed by default, auto-expands - * when on a MokoWaaS page. Mirrors Joomla's own mm-active/mm-show - * pattern used by CB's mod_cbadmin. + * Uses native Joomla admin menu classes (MetisMenu) so it renders + * identically to Joomla's own sidebar menu items. */ defined('_JEXEC') or die; +use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; $items = [ - ['icon' => '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-database', 'title' => 'Database Tools', 'link' => 'index.php?option=com_mokowaas&view=database'], - ['icon' => 'icon-trash', 'title' => 'Cache Cleanup', 'link' => 'index.php?option=com_mokowaas&view=cleanup'], - ['icon' => 'icon-power-off', 'title' => 'Feature Plugins', 'link' => 'index.php?option=com_plugins&filter[folder]=system&filter[search]=mokowaas'], + ['icon' => '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-database', 'title' => 'Database Tools', 'link' => 'index.php?option=com_mokowaas&view=database'], + ['icon' => 'icon-trash', 'title' => 'Cache Cleanup', 'link' => 'index.php?option=com_mokowaas&view=cleanup'], + ['icon' => 'icon-power-off', 'title' => 'Feature Plugins', 'link' => 'index.php?option=com_plugins&filter[folder]=system&filter[search]=mokowaas'], ]; $app = \Joomla\CMS\Factory::getApplication(); $currentOption = $app->getInput()->get('option', ''); $currentView = $app->getInput()->get('view', ''); -// Auto-expand when on a MokoWaaS page -$isMokoPage = ($currentOption === 'com_mokowaas') - || ($currentOption === 'com_plugins' && stripos($app->getInput()->get('filter', [], 'array')['search'] ?? $app->getInput()->getString('filter_search', ''), 'mokowaas') !== false); - -$collapseId = 'mokowaas-menu-collapse'; +// Determine if any child is active (auto-expand) +$anyActive = ($currentOption === 'com_mokowaas'); +$parentClass = 'item parent item-level-1' . ($anyActive ? ' mm-active' : ''); +$collapseClass = 'collapse-level-1 mm-collapse' . ($anyActive ? ' mm-show' : ''); ?> - - + -- 2.52.0 From 0552c0a0b09fcbe31d98a6d2f87697fcbe68a191 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 14:21:48 +0000 Subject: [PATCH 101/142] chore(version): auto-bump 02.32.49 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 2 +- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 2 +- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 2 +- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 50 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 6ed5b90..3090ca4 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.48 + 02.32.49 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 634d1de..947949d 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.48 +# VERSION: 02.32.49 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fef427..55b1af3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.48 + VERSION: 02.32.49 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 1ceddee..a003bb2 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index d46d44d..a68edc2 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 116a9bf..7665d48 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.48 + VERSION: 02.32.49 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index b909d7c..0a9e9de 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index 371c840..cccc93f 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.48 +VERSION: 02.32.49 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index dadd5e9..77fdd9e 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.48) +# MokoWaaS Build Guide (VERSION: 02.32.49) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 89b5721..e3a57c5 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.48) +# MokoWaaS Configuration Guide (VERSION: 02.32.49) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 9047723..1350b2a 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.48) +# MokoWaaS Installation Guide (VERSION: 02.32.49) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index e86e1b1..995ab5c 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.48) +# MokoWaaS Operations Guide (VERSION: 02.32.49) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 1133965..09b5d83 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.48) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.49) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 6a6e6fa..216cf70 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.48) +# MokoWaaS Testing Guide (VERSION: 02.32.49) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index dd1bfa4..e2ae318 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.48) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.49) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index 602e7ef..fc5f814 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.48) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.49) ## Introduction diff --git a/docs/index.md b/docs/index.md index 874632c..8bd77e7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.48 + VERSION: 02.32.49 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.48) +# MokoWaaS Documentation Index (VERSION: 02.32.49) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 26e865b..1749035 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.48 + VERSION: 02.32.49 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.48) +# MokoWaaS Plugin Overview (VERSION: 02.32.49) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 7114447..7f116ee 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.48 +VERSION: 02.32.49 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index c6ea216..8815a53 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml b/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml index 53c81a8..8eca78f 100644 --- a/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml +++ b/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 MOD_MOKOWAAS_CACHE_DESC Moko\Module\MokoWaaSCache diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index e808c3b..a635e80 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml index 822be21..0267aca 100644 --- a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml +++ b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 MokoWaaS admin sidebar menu — renders a dedicated MokoWaaS section in the admin menu before Joomla's default menu. Moko\Module\MokoWaaSMenu diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index fac7b08..2f39f38 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.48 + * VERSION: 02.32.49 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 4e80e9d..8fbe69f 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.48 + * VERSION: 02.32.49 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index ba8919f..9b3777d 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.48 + * VERSION: 02.32.49 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index b9b984e..f3db8db 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.48 + * VERSION: 02.32.49 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index adf451a..4111988 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.48 + * VERSION: 02.32.49 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 2a360ba..2981373 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.48 + * VERSION: 02.32.49 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index f12afb1..f1a790a 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.48 + * VERSION: 02.32.49 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 589fab5..94c99bd 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.48 + * VERSION: 02.32.49 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index ba36c91..525160b 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.48 + * VERSION: 02.32.49 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index 19a05cb..dfe61a4 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.48 + * VERSION: 02.32.49 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 384ac89..4f11b56 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index bcd8a08..d2b3968 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.48 + * VERSION: 02.32.49 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 0400041..765e903 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.48 + * VERSION: 02.32.49 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index 6518422..a2691c5 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index afd9242..46a5acb 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 517f82d..2db5ceb 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 6b3b8bf..e70bca9 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index bfd3a36..aa80026 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index bdcce26..464fa02 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 2bfe98c..97953cf 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 40a9fb7..4747d49 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 83fad62..665a45f 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 7817351..85a2e53 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.48 + 02.32.49 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index 66811a8..f905c1e 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.48 + * VERSION: 02.32.49 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index cfdab6a..f08c31c 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.48 + * VERSION: 02.32.49 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index 7475975..cd31377 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.48 + 02.32.49 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index f2e7f4b..4a248e8 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From a2006c228748d0e237c7c82aaba08999aa5601dd Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 14:21:50 +0000 Subject: [PATCH 102/142] chore: update development channel 02.32.49 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index 4a248e8..1118cac 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.48-dev + 02.32.49-dev 2026-06-04 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.48-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.49-dev.zip - 384220b2bd69865e7343d618cb728c1c3acbac0252f4d1edfb92d71af283f8c2 + 77eb1565ba41e251941435e4b954ccd94c5958d436f99c01de018fc587171134 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 30a6f6607a3197832e5d7738f59d94d46ff435a9 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 09:38:05 -0500 Subject: [PATCH 103/142] fix: add fixMenuIcons to postflight for submenu icon params Joomla only renders img column icons for level-1 menu items. Level 2+ need menu_icon in the params JSON. This runs on every install/update. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/script.php | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/script.php b/src/script.php index 5d55bf3..56ea66d 100644 --- a/src/script.php +++ b/src/script.php @@ -64,6 +64,9 @@ class Pkg_MokowaasInstallerScript // Create Support portal menu item on frontend $this->setupSupportMenuItem(); + // Set menu_icon params on submenu items (Joomla only renders img on level 1) + $this->fixMenuIcons(); + // Mark MokoWaaS extensions as protected (prevents disable/uninstall at framework level) $this->protectExtensions(); @@ -840,6 +843,69 @@ class Pkg_MokowaasInstallerScript } } + /** + * Joomla only renders the img column icon for level-1 menu items. + * Submenu items (level 2) need menu_icon set in the params JSON. + */ + private function fixMenuIcons(): void + { + try + { + $db = Factory::getDbo(); + + $iconMap = [ + 'class:cogs' => 'icon-cogs', + 'class:puzzle-piece' => 'icon-puzzle-piece', + 'class:headphones' => 'icon-headphones', + 'class:file-code' => 'icon-file-code', + 'class:lock' => 'icon-lock', + 'class:shield-alt' => 'icon-shield-alt', + 'class:database' => 'icon-database', + 'class:trash' => 'icon-trash', + 'class:power-off' => 'icon-power-off', + 'class:refresh' => 'icon-refresh', + 'class:check-square' => 'icon-check-square', + 'class:bolt' => 'icon-bolt', + ]; + + $db->setQuery( + "SELECT id, img, params FROM #__menu" + . " WHERE client_id = 1 AND level >= 2" + . " AND link LIKE '%com_mokowaas%'" + ); + + foreach ($db->loadObjectList() as $item) + { + $icon = $iconMap[$item->img] ?? ''; + + if (!$icon) + { + continue; + } + + $params = json_decode($item->params ?: '{}', true) ?: []; + + if (!empty($params['menu_icon'])) + { + continue; + } + + $params['menu_icon'] = $icon; + + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__menu')) + ->set($db->quoteName('params') . ' = ' . $db->quote(json_encode($params))) + ->where($db->quoteName('id') . ' = ' . (int) $item->id) + )->execute(); + } + } + catch (\Throwable $e) + { + Log::add('Menu icon fix error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + /** * Create a "Support" menu item on the frontend main menu. */ -- 2.52.0 From dcf115e57295902230b4350e134377e8a6d63d8b Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 14:39:00 +0000 Subject: [PATCH 104/142] chore(version): auto-bump 02.32.50 [skip ci] --- .mokogitea/manifest.xml | 2 +- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- LICENSE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- docs/guides/build-guide.md | 4 ++-- docs/guides/configuration-guide.md | 4 ++-- docs/guides/installation-guide.md | 4 ++-- docs/guides/operations-guide.md | 4 ++-- docs/guides/rollback-and-recovery-guide.md | 4 ++-- docs/guides/testing-guide.md | 4 ++-- docs/guides/troubleshooting-guide.md | 4 ++-- docs/guides/upgrade-and-versioning-guide.md | 4 ++-- docs/index.md | 4 ++-- docs/plugin-basic.md | 4 ++-- docs/update-server.md | 2 +- src/packages/com_mokowaas/mokowaas.xml | 2 +- src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml | 2 +- src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml | 2 +- src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml | 2 +- src/packages/plg_system_mokowaas/Extension/MokoWaaS.php | 2 +- src/packages/plg_system_mokowaas/Field/AllowedIpsField.php | 2 +- src/packages/plg_system_mokowaas/Field/CopyableTokenField.php | 2 +- src/packages/plg_system_mokowaas/Field/CurrentIpField.php | 2 +- src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php | 2 +- src/packages/plg_system_mokowaas/Field/NextResetField.php | 2 +- .../plg_system_mokowaas/Field/SnapshotTablesField.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncReceiver.php | 2 +- .../plg_system_mokowaas/Service/ContentSyncService.php | 2 +- src/packages/plg_system_mokowaas/Service/DemoResetService.php | 2 +- src/packages/plg_system_mokowaas/mokowaas.xml | 2 +- src/packages/plg_system_mokowaas/script.php | 2 +- src/packages/plg_system_mokowaas/services/provider.php | 2 +- .../plg_system_mokowaas_devtools/mokowaas_devtools.xml | 2 +- .../plg_system_mokowaas_firewall/mokowaas_firewall.xml | 2 +- src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml | 2 +- src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml | 2 +- src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml | 2 +- src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml | 2 +- src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml | 2 +- src/packages/plg_task_mokowaassync/mokowaassync.xml | 2 +- src/packages/plg_webservices_mokowaas/mokowaas.xml | 2 +- .../plg_webservices_perfectpublisher/perfectpublisher.xml | 2 +- .../plg_webservices_perfectpublisher/services/provider.php | 2 +- .../src/Extension/PerfectPublisherApi.php | 2 +- src/pkg_mokowaas.xml | 2 +- updates.xml | 2 +- 50 files changed, 60 insertions(+), 60 deletions(-) diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index 3090ca4..1cfbf38 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -9,7 +9,7 @@ Package - MokoWaaS MokoConsulting White-label identity, security hardening, and tenant restriction layer for WaaS-managed Joomla environments - 02.32.49 + 02.32.50 GNU General Public License v3 diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 947949d..b0a58d5 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: moko-platform.Automation -# VERSION: 02.32.49 +# VERSION: 02.32.50 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 55b1af3..e8f97ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./CHANGELOG.md - VERSION: 02.32.49 + VERSION: 02.32.50 BRIEF: Version history using `Keep a Changelog` --> diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index a003bb2..8f3ed71 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: ./CODE_OF_CONDUCT.md BRIEF: Reference + packaging repo for Moko Consulting Developer GPT Other Default --> diff --git a/GOVERNANCE.md b/GOVERNANCE.md index a68edc2..9bf2737 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.MokoWaaSBrand INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/MokoWaaSBrand - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for MokoWaaSBrand --> diff --git a/LICENSE.md b/LICENSE.md index 7665d48..7bf1d36 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,7 @@ INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: ./LICENSE.md - VERSION: 02.32.49 + VERSION: 02.32.50 BRIEF: Project license (GPL-3.0-or-later) --> GNU GENERAL PUBLIC LICENSE diff --git a/README.md b/README.md index 0a9e9de..86a8b1c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /README.md BRIEF: MokoWaaS platform plugin for Joomla --> diff --git a/SECURITY.md b/SECURITY.md index cccc93f..1f6c373 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: [PROJECT_NAME] INGROUP: [PROJECT_NAME].Documentation REPO: [REPOSITORY_URL] PATH: /SECURITY.md -VERSION: 02.32.49 +VERSION: 02.32.50 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 77fdd9e..b99b210 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -11,13 +11,13 @@ INGROUP: MokoWaaS.Build REPO: https://github.com/mokoconsulting-tech/mokowaas FILE: build-guide.md - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /docs/guides/ BRIEF: Build and packaging guide for the MokoWaaS system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoWaaS Build Guide (VERSION: 02.32.49) +# MokoWaaS Build Guide (VERSION: 02.32.50) ## 1. Purpose diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index e3a57c5..916a874 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /docs/guides/configuration-guide.md BRIEF: Configuration guide for the MokoWaaS system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoWaaS Configuration Guide (VERSION: 02.32.49) +# MokoWaaS Configuration Guide (VERSION: 02.32.50) ## 1. Objective diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 1350b2a..92c5483 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /docs/guides/installation-guide.md BRIEF: Installation guide for the MokoWaaS system plugin NOTE: First document in the guide set --> -# MokoWaaS Installation Guide (VERSION: 02.32.49) +# MokoWaaS Installation Guide (VERSION: 02.32.50) ## Introduction diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 995ab5c..cc84663 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /docs/guides/operations-guide.md BRIEF: Operational guide for administering and managing the MokoWaaS system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoWaaS Operations Guide (VERSION: 02.32.49) +# MokoWaaS Operations Guide (VERSION: 02.32.50) ## Introduction diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 09b5d83..bb1897f 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /docs/guides/rollback-and-recovery-guide.md BRIEF: Rollback and recovery guide for restoring stable operation after plugin related incidents NOTE: Completes the core guide set for WaaS plugin governance --> -# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.49) +# MokoWaaS Rollback and Recovery Guide (VERSION: 02.32.50) ## Introduction diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index 216cf70..1d22c0e 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -7,13 +7,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /docs/guides/testing-guide.md BRIEF: Testing guide for MokoWaaS v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoWaaS Testing Guide (VERSION: 02.32.49) +# MokoWaaS Testing Guide (VERSION: 02.32.50) ## 1. Prerequisites diff --git a/docs/guides/troubleshooting-guide.md b/docs/guides/troubleshooting-guide.md index e2ae318..6fba031 100644 --- a/docs/guides/troubleshooting-guide.md +++ b/docs/guides/troubleshooting-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /docs/guides/troubleshooting-guide.md BRIEF: Troubleshooting guide for diagnosing and resolving issues related to the MokoWaaS plugin NOTE: Designed for administrators and WaaS operations teams --> -# MokoWaaS Troubleshooting Guide (VERSION: 02.32.49) +# MokoWaaS Troubleshooting Guide (VERSION: 02.32.50) ## Introduction diff --git a/docs/guides/upgrade-and-versioning-guide.md b/docs/guides/upgrade-and-versioning-guide.md index fc5f814..689721b 100644 --- a/docs/guides/upgrade-and-versioning-guide.md +++ b/docs/guides/upgrade-and-versioning-guide.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Guides REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /docs/guides/upgrade-and-versioning-guide.md BRIEF: Guide for updating, versioning, and maintaining the MokoWaaS plugin NOTE: Defines release flow, version rules, and upgrade validation --> -# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.49) +# MokoWaaS Upgrade and Versioning Guide (VERSION: 02.32.50) ## Introduction diff --git a/docs/index.md b/docs/index.md index 8bd77e7..4a07fd0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,13 +10,13 @@ DEFGROUP: Joomla.Plugin INGROUP: MokoWaaS.Documentation REPO: https://github.com/mokoconsulting-tech/mokowaas - VERSION: 02.32.49 + VERSION: 02.32.50 PATH: /docs/index.md BRIEF: Master index of all documentation for the MokoWaaS plugin NOTE: Automatically maintained index for all guide canvases --> -# MokoWaaS Documentation Index (VERSION: 02.32.49) +# MokoWaaS Documentation Index (VERSION: 02.32.50) ## Introduction diff --git a/docs/plugin-basic.md b/docs/plugin-basic.md index 1749035..7ca3eaa 100644 --- a/docs/plugin-basic.md +++ b/docs/plugin-basic.md @@ -11,12 +11,12 @@ INGROUP: MokoWaaS REPO: https://github.com/mokoconsulting-tech/mokowaas PATH: /docs/plugin-basic.md - VERSION: 02.32.49 + VERSION: 02.32.50 BRIEF: Baseline documentation for the MokoWaaS system plugin NOTE: Foundational reference for internal and external stakeholders --> -# MokoWaaS Plugin Overview (VERSION: 02.32.49) +# MokoWaaS Plugin Overview (VERSION: 02.32.50) ## Introduction diff --git a/docs/update-server.md b/docs/update-server.md index 7f116ee..e66fc23 100644 --- a/docs/update-server.md +++ b/docs/update-server.md @@ -10,7 +10,7 @@ DEFGROUP: MokoWaaS.Documentation INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoWaaS PATH: /docs/update-server.md -VERSION: 02.32.49 +VERSION: 02.32.50 BRIEF: How this extension's Joomla update server file (update.xml) is managed --> diff --git a/src/packages/com_mokowaas/mokowaas.xml b/src/packages/com_mokowaas/mokowaas.xml index 8815a53..636587a 100644 --- a/src/packages/com_mokowaas/mokowaas.xml +++ b/src/packages/com_mokowaas/mokowaas.xml @@ -20,7 +20,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 MokoWaaS admin dashboard and REST API. Provides a control panel for managing MokoWaaS feature plugins, site health monitoring, and remote management endpoints. Moko\Component\MokoWaaS diff --git a/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml b/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml index 8eca78f..8e08297 100644 --- a/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml +++ b/src/packages/mod_mokowaas_cache/mod_mokowaas_cache.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 MOD_MOKOWAAS_CACHE_DESC Moko\Module\MokoWaaSCache diff --git a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml index a635e80..3651e5e 100644 --- a/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml +++ b/src/packages/mod_mokowaas_cpanel/mod_mokowaas_cpanel.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 MOD_MOKOWAAS_CPANEL_DESC Moko\Module\MokoWaaSCpanel diff --git a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml index 0267aca..1823ca2 100644 --- a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml +++ b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 MokoWaaS admin sidebar menu — renders a dedicated MokoWaaS section in the admin menu before Joomla's default menu. Moko\Module\MokoWaaSMenu diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index 2f39f38..77cc355 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.49 + * VERSION: 02.32.50 * PATH: /src/Extension/MokoWaaS.php * NOTE: Handles Joomla system events for rebranding functionality */ diff --git a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php index 8fbe69f..c9c43e5 100644 --- a/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php +++ b/src/packages/plg_system_mokowaas/Field/AllowedIpsField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.49 + * VERSION: 02.32.50 * PATH: /src/Field/AllowedIpsField.php * BRIEF: Custom form field that displays the current IP whitelist */ diff --git a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php index 9b3777d..2f2414e 100644 --- a/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php +++ b/src/packages/plg_system_mokowaas/Field/CopyableTokenField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.49 + * VERSION: 02.32.50 * PATH: /src/Field/CopyableTokenField.php * BRIEF: Read-only token field with a copy-to-clipboard button */ diff --git a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php index f3db8db..0a302ac 100644 --- a/src/packages/plg_system_mokowaas/Field/CurrentIpField.php +++ b/src/packages/plg_system_mokowaas/Field/CurrentIpField.php @@ -7,7 +7,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.49 + * VERSION: 02.32.50 * PATH: /src/Field/CurrentIpField.php * BRIEF: Read-only field that displays the current user's IP address */ diff --git a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php index 4111988..75c85a8 100644 --- a/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php +++ b/src/packages/plg_system_mokowaas/Field/DemoTaskInfoField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.49 + * VERSION: 02.32.50 * PATH: /src/Field/DemoTaskInfoField.php * BRIEF: Read-only field showing scheduled task info with link to manage it */ diff --git a/src/packages/plg_system_mokowaas/Field/NextResetField.php b/src/packages/plg_system_mokowaas/Field/NextResetField.php index 2981373..e79ec5a 100644 --- a/src/packages/plg_system_mokowaas/Field/NextResetField.php +++ b/src/packages/plg_system_mokowaas/Field/NextResetField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.49 + * VERSION: 02.32.50 * PATH: /src/Field/NextResetField.php * BRIEF: Read-only field showing next reset time from Joomla scheduled task */ diff --git a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php index f1a790a..f19eef0 100644 --- a/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php +++ b/src/packages/plg_system_mokowaas/Field/SnapshotTablesField.php @@ -8,7 +8,7 @@ * FILE INFORMATION * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS - * VERSION: 02.32.49 + * VERSION: 02.32.50 * PATH: /src/Field/SnapshotTablesField.php * BRIEF: Multi-select list field that loads DB tables with sensible defaults */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php index 94c99bd..4b2abe6 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncReceiver.php - * VERSION: 02.32.49 + * VERSION: 02.32.50 * BRIEF: Receiver-side content sync — applies incoming payload to local DB */ diff --git a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php index 525160b..7594816 100644 --- a/src/packages/plg_system_mokowaas/Service/ContentSyncService.php +++ b/src/packages/plg_system_mokowaas/Service/ContentSyncService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/ContentSyncService.php - * VERSION: 02.32.49 + * VERSION: 02.32.50 * BRIEF: Sender-side content sync — builds payload and pushes to remote sites */ diff --git a/src/packages/plg_system_mokowaas/Service/DemoResetService.php b/src/packages/plg_system_mokowaas/Service/DemoResetService.php index dfe61a4..6b303a4 100644 --- a/src/packages/plg_system_mokowaas/Service/DemoResetService.php +++ b/src/packages/plg_system_mokowaas/Service/DemoResetService.php @@ -10,7 +10,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_system_mokowaas/Service/DemoResetService.php - * VERSION: 02.32.49 + * VERSION: 02.32.50 * BRIEF: Content-only snapshot/restore for demo site reset */ diff --git a/src/packages/plg_system_mokowaas/mokowaas.xml b/src/packages/plg_system_mokowaas/mokowaas.xml index 4f11b56..152f323 100644 --- a/src/packages/plg_system_mokowaas/mokowaas.xml +++ b/src/packages/plg_system_mokowaas/mokowaas.xml @@ -30,7 +30,7 @@ GNU General Public License version 3 or later; see LICENSE.md hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 This plugin rebrands the Joomla system interface with MokoWaaS identity. It applies language overrides and ensures consistent branding across the platform. Moko\Plugin\System\MokoWaaS script.php diff --git a/src/packages/plg_system_mokowaas/script.php b/src/packages/plg_system_mokowaas/script.php index d2b3968..6653c80 100644 --- a/src/packages/plg_system_mokowaas/script.php +++ b/src/packages/plg_system_mokowaas/script.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.49 + * VERSION: 02.32.50 * PATH: /src/script.php * BRIEF: Installation script for MokoWaaS plugin * NOTE: Handles installation, update, and uninstallation tasks including language override deployment diff --git a/src/packages/plg_system_mokowaas/services/provider.php b/src/packages/plg_system_mokowaas/services/provider.php index 765e903..0d5a54b 100644 --- a/src/packages/plg_system_mokowaas/services/provider.php +++ b/src/packages/plg_system_mokowaas/services/provider.php @@ -22,7 +22,7 @@ * DEFGROUP: Joomla.Plugin * INGROUP: MokoWaaS * REPO: https://github.com/mokoconsulting-tech/mokowaas - * VERSION: 02.32.49 + * VERSION: 02.32.50 * PATH: /src/services/provider.php * BRIEF: Service provider for dependency injection in Joomla 5.x * NOTE: Registers the plugin with Joomla's DI container diff --git a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml index a2691c5..2820860 100644 --- a/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml +++ b/src/packages/plg_system_mokowaas_devtools/mokowaas_devtools.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 PLG_SYSTEM_MOKOWAAS_DEVTOOLS_DESC Moko\Plugin\System\MokoWaaSDevTools diff --git a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml index 46a5acb..eb9c272 100644 --- a/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml +++ b/src/packages/plg_system_mokowaas_firewall/mokowaas_firewall.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 PLG_SYSTEM_MOKOWAAS_FIREWALL_DESC Moko\Plugin\System\MokoWaaSFirewall diff --git a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml index 2db5ceb..e82af14 100644 --- a/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml +++ b/src/packages/plg_system_mokowaas_monitor/mokowaas_monitor.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 PLG_SYSTEM_MOKOWAAS_MONITOR_DESC Moko\Plugin\System\MokoWaaSMonitor diff --git a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index e70bca9..6fefd45 100644 --- a/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC Moko\Plugin\System\MokoWaaSOffline diff --git a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml index aa80026..91633f7 100644 --- a/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml +++ b/src/packages/plg_system_mokowaas_tenant/mokowaas_tenant.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 PLG_SYSTEM_MOKOWAAS_TENANT_DESC Moko\Plugin\System\MokoWaaSTenant diff --git a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml index 464fa02..28e42a7 100644 --- a/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml +++ b/src/packages/plg_task_mokowaas_tickets/mokowaas_tickets.xml @@ -8,7 +8,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 Runs scheduled helpdesk automation rules — auto-close resolved tickets, SLA breach escalation, and time-based actions. Moko\Plugin\Task\MokoWaaSTickets diff --git a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml index 97953cf..7eea48e 100644 --- a/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml +++ b/src/packages/plg_task_mokowaasdemo/mokowaasdemo.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 PLG_TASK_MOKOWAASDEMO_DESC Moko\Plugin\Task\MokoWaaSDemo diff --git a/src/packages/plg_task_mokowaassync/mokowaassync.xml b/src/packages/plg_task_mokowaassync/mokowaassync.xml index 4747d49..c46e8a1 100644 --- a/src/packages/plg_task_mokowaassync/mokowaassync.xml +++ b/src/packages/plg_task_mokowaassync/mokowaassync.xml @@ -12,7 +12,7 @@ GNU General Public License version 3 or later; see LICENSE hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 PLG_TASK_MOKOWAASSYNC_DESC Moko\Plugin\Task\MokoWaaSSync diff --git a/src/packages/plg_webservices_mokowaas/mokowaas.xml b/src/packages/plg_webservices_mokowaas/mokowaas.xml index 665a45f..fc5fff6 100644 --- a/src/packages/plg_webservices_mokowaas/mokowaas.xml +++ b/src/packages/plg_webservices_mokowaas/mokowaas.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 Joomla Web Services API routes for MokoWaaS site management — health checks, cache, updates, backups, and site info. Moko\Plugin\WebServices\MokoWaaS diff --git a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml index 85a2e53..8a0e25c 100644 --- a/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml +++ b/src/packages/plg_webservices_perfectpublisher/perfectpublisher.xml @@ -7,7 +7,7 @@ GPL-3.0-or-later hello@mokoconsulting.tech https://mokoconsulting.tech - 02.32.49 + 02.32.50 Joomla Web Services API routes for Perfect Publisher (com_autotweet) — channels, posts, requests, rules, and feeds. Moko\Plugin\WebServices\PerfectPublisher diff --git a/src/packages/plg_webservices_perfectpublisher/services/provider.php b/src/packages/plg_webservices_perfectpublisher/services/provider.php index f905c1e..e98c302 100644 --- a/src/packages/plg_webservices_perfectpublisher/services/provider.php +++ b/src/packages/plg_webservices_perfectpublisher/services/provider.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/services/provider.php - * VERSION: 02.32.49 + * VERSION: 02.32.50 * BRIEF: DI service provider for Perfect Publisher Web Services plugin */ diff --git a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php index f08c31c..2717e6e 100644 --- a/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php +++ b/src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php @@ -8,7 +8,7 @@ * INGROUP: MokoWaaS * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS * PATH: /src/packages/plg_webservices_perfectpublisher/src/Extension/PerfectPublisherApi.php - * VERSION: 02.32.49 + * VERSION: 02.32.50 * BRIEF: Web Services API plugin for Perfect Publisher (com_autotweet) */ diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index cd31377..c0169d0 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -2,7 +2,7 @@ Package - MokoWaaS mokowaas - 02.32.49 + 02.32.50 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/updates.xml b/updates.xml index 1118cac..cc70a8d 100644 --- a/updates.xml +++ b/updates.xml @@ -1,7 +1,7 @@ -- 2.52.0 From 3bc1e66acfa24a4981179c49f8fcf57dd8f3d2cf Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Thu, 4 Jun 2026 14:39:02 +0000 Subject: [PATCH 105/142] chore: update development channel 02.32.50 [skip ci] --- updates.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/updates.xml b/updates.xml index cc70a8d..30edbd2 100644 --- a/updates.xml +++ b/updates.xml @@ -11,13 +11,13 @@ pkg_mokowaas package site - 02.32.49-dev + 02.32.50-dev 2026-06-04 https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/tag/development - https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.49-dev.zip + https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/pkg_mokowaas-02.32.50-dev.zip - 77eb1565ba41e251941435e4b954ccd94c5958d436f99c01de018fc587171134 + f59ce3908085efa34c5d9ab86d597800a46cf31c71a9203e8a3d5e0126319906 dev https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/raw/branch/main/CHANGELOG.md Moko Consulting -- 2.52.0 From 36082bd2e3217324b084c4a0dff7f7c569692b3c Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 09:52:41 -0500 Subject: [PATCH 106/142] fix: cache button native Atum markup, tickets unassigned HTML encoding - Cache cleaner button uses native header-item-content/header-item-icon markup - Fix Unassigned showing raw HTML in tickets list (escape only non-null values) Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/tmpl/tickets/default.php | 2 +- .../mod_mokowaas_cache/tmpl/default.php | 60 +++++++++---------- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/packages/com_mokowaas/admin/tmpl/tickets/default.php b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php index e5a7814..33c7f50 100644 --- a/src/packages/com_mokowaas/admin/tmpl/tickets/default.php +++ b/src/packages/com_mokowaas/admin/tmpl/tickets/default.php @@ -113,7 +113,7 @@ $priorityBadge = [ priority); ?> escape($t->category_title ?? '—'); ?> escape($t->created_by_name ?? ''); ?> - escape($t->assigned_to_name ?? 'Unassigned'); ?> + assigned_to_name ? $this->escape($t->assigned_to_name) : 'Unassigned'; ?> created, 'M d H:i'); ?> sla_response_due && !$t->sla_responded): ?> diff --git a/src/packages/mod_mokowaas_cache/tmpl/default.php b/src/packages/mod_mokowaas_cache/tmpl/default.php index 256bf7e..a35733d 100644 --- a/src/packages/mod_mokowaas_cache/tmpl/default.php +++ b/src/packages/mod_mokowaas_cache/tmpl/default.php @@ -2,8 +2,8 @@ /** * MokoWaaS Cache Cleaner — status bar module * - * One-click button in the admin status bar that clears all Joomla cache - * (site + admin + expired) via AJAX. Replaces Regular Labs Cache Cleaner. + * One-click button in the admin status bar that clears all Joomla cache. + * Uses native Atum header-item markup. */ defined('_JEXEC') or die; @@ -15,16 +15,14 @@ $token = Session::getFormToken(); $ajaxUrl = 'index.php?option=com_mokowaas&task=clearCache&format=json&' . $token . '=1'; ?> -
- -
+ +
+ +
+
+ +
+
+ -- 2.52.0 From e858130375c7144a903bacc5e288fec2eabf5c26 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 13:20:15 -0500 Subject: [PATCH 136/142] fix: hide cpanel module on MokoWaaS dashboard (redundant info) The dashboard already shows site info, plugins, WAF blocks, logins, and updates. The cpanel module duplicates this. Now it auto-hides when option=com_mokowaas and view is dashboard or empty. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/Dispatcher/Dispatcher.php | 12 ++++++++++++ src/packages/mod_mokowaas_cpanel/tmpl/default.php | 3 +++ 2 files changed, 15 insertions(+) diff --git a/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php b/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php index d5b1414..4c9b179 100644 --- a/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php +++ b/src/packages/mod_mokowaas_cpanel/src/Dispatcher/Dispatcher.php @@ -24,6 +24,18 @@ class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareI { $data = parent::getLayoutData(); + // Hide on MokoWaaS dashboard — the dashboard has its own info panels + $app = Factory::getApplication(); + $option = $app->getInput()->get('option', ''); + $view = $app->getInput()->get('view', ''); + + if ($option === 'com_mokowaas' && ($view === '' || $view === 'dashboard')) + { + $data['hidden'] = true; + + return $data; + } + $db = Factory::getContainer()->get(DatabaseInterface::class); $helper = $this->getHelperFactory()->getHelper('CpanelHelper'); diff --git a/src/packages/mod_mokowaas_cpanel/tmpl/default.php b/src/packages/mod_mokowaas_cpanel/tmpl/default.php index 66eea9f..9e7e1a0 100644 --- a/src/packages/mod_mokowaas_cpanel/tmpl/default.php +++ b/src/packages/mod_mokowaas_cpanel/tmpl/default.php @@ -12,6 +12,9 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; use Joomla\CMS\Session\Session; +// Hidden when on MokoWaaS dashboard (redundant info) +if (!empty($hidden)) return; + $siteInfo = $siteInfo ?? (object) []; $plugins = $plugins ?? []; -- 2.52.0 From 524523b8c6aac068b689a95d80804f4027d28cc8 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 13:23:18 -0500 Subject: [PATCH 137/142] fix: Chart.js CDN with SRI hash, rename Community Builder to MokoJoomCommunity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chart.js not bundled with Joomla 6 — use jsdelivr CDN with integrity check. Dashboard user manager button shows MokoJoomCommunity (not Community Builder). Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/packages/com_mokowaas/admin/tmpl/dashboard/default.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php index 1e958db..39543e9 100644 --- a/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php +++ b/src/packages/com_mokowaas/admin/tmpl/dashboard/default.php @@ -136,12 +136,12 @@ $categoryOrder = ['core', 'security', 'monitoring', 'content', 'tools', 'api'];
@@ -369,7 +369,7 @@ $loginLabels = array_map(fn($d) => $d->day, $loginChartData); $loginValues = array_map(fn($d) => $d->total, $loginChartData); ?> - +