From 4b9a675d0f42ab928da022a499aa334e3cf01214 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Mon, 15 Jun 2026 05:19:13 -0500 Subject: [PATCH] =?UTF-8?q?Rename=20MokoSuite=20=E2=86=92=20MokoSuiteClien?= =?UTF-8?q?t=20(full=20element=20rename)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All Joomla element names, PHP classes, language files, folder structure, and manifest references renamed from mokosuite to mokosuiteclient. This repo is now the client-facing tracker for the MokoSuite platform. --- .mokogitea/CLAUDE.md | 42 +-- .mokogitea/ISSUE_TEMPLATE/suite_site_issue.md | 2 +- .mokogitea/copilot-instructions.md | 40 +-- .mokogitea/manifest.xml | 4 +- CHANGELOG.md | 71 ++-- CODE_OF_CONDUCT.md | 4 +- GOVERNANCE.md | 14 +- LICENSE.md | 4 +- README.md | 28 +- docs/guides/build-guide.md | 36 +- docs/guides/configuration-guide.md | 38 +- docs/guides/installation-guide.md | 18 +- docs/guides/operations-guide.md | 12 +- docs/guides/rollback-and-recovery-guide.md | 10 +- docs/guides/testing-guide.md | 76 ++-- docs/guides/troubleshooting-guide.md | 16 +- docs/guides/upgrade-and-versioning-guide.md | 10 +- docs/index.md | 10 +- docs/plugin-basic.md | 16 +- docs/reference/plugin-overview.md | 4 +- docs/update-server.md | 6 +- .../packages/com_mokosuite/admin/access.xml | 15 - .../admin/language/en-GB/com_mokosuite.ini | 41 --- .../language/en-GB/com_mokosuite.sys.ini | 19 - .../admin/sql/uninstall.mysql.sql | 13 - source/packages/com_mokosuite/mokosuite.xml | 92 ----- .../site/language/en-GB/com_mokosuite.ini | 11 - .../com_mokosuiteclient/admin/access.xml | 15 + .../admin/catalog.xml | 22 +- .../admin/config.xml | 10 +- .../language/en-GB/com_mokosuiteclient.ini | 41 +++ .../en-GB/com_mokosuiteclient.sys.ini | 19 + .../admin}/services/provider.php | 8 +- .../admin/sql/install.mysql.sql | 36 +- .../admin/sql/uninstall.mysql.sql | 13 + .../admin/sql/updates/mysql/02.34.28.sql | 2 +- .../admin/sql/updates/mysql/02.34.29.sql | 2 +- .../admin/sql/updates/mysql/02.35.01.sql | 28 +- .../src/Controller/DisplayController.php | 118 +++---- .../admin/src/Model/DashboardModel.php | 58 +-- .../admin/src/Model/ErpReportsModel.php | 16 +- .../admin/src/Model/ExtensionsModel.php | 10 +- .../admin/src/Model/HtaccessModel.php | 22 +- .../admin/src/Model/ImportModel.php | 38 +- .../admin/src/Model/MaintenanceModel.php | 4 +- .../admin/src/Model/PrivacyModel.php | 56 +-- .../admin/src/Model/TicketsModel.php | 118 +++---- .../admin/src/Model/WaflogModel.php | 22 +- .../admin/src/Service/NotificationService.php | 22 +- .../admin/src/View/Automation/HtmlView.php | 8 +- .../admin/src/View/Canned/HtmlView.php | 10 +- .../admin/src/View/Categories/HtmlView.php | 8 +- .../admin/src/View/Cleanup/HtmlView.php | 8 +- .../admin/src/View/Dashboard/HtmlView.php | 18 +- .../admin/src/View/Database/HtmlView.php | 8 +- .../admin/src/View/ErpReports/HtmlView.php | 8 +- .../admin/src/View/Extensions/HtmlView.php | 12 +- .../admin/src/View/Htaccess/HtmlView.php | 12 +- .../admin/src/View/Privacy/HtmlView.php | 8 +- .../admin/src/View/Ticket/HtmlView.php | 12 +- .../admin/src/View/Tickets/HtmlView.php | 12 +- .../admin/src/View/Waflog/HtmlView.php | 8 +- .../admin/tmpl/automation/default.php | 8 +- .../admin/tmpl/canned/default.php | 6 +- .../admin/tmpl/categories/default.php | 6 +- .../admin/tmpl/cleanup/default.php | 4 +- .../admin/tmpl/dashboard/default.php | 98 ++--- .../admin/tmpl/database/default.php | 8 +- .../admin/tmpl/erpreports/default.php | 12 +- .../admin/tmpl/extensions/default.php | 20 +- .../admin/tmpl/htaccess/default.php | 14 +- .../admin/tmpl/privacy/default.php | 12 +- .../admin/tmpl/ticket/default.php | 8 +- .../admin/tmpl/tickets/default.php | 16 +- .../admin/tmpl/waflog/default.php | 16 +- .../api/src/Controller/CacheController.php | 8 +- .../src/Controller/DashboardController.php | 16 +- .../src/Controller/ExtensionsController.php | 8 +- .../api/src/Controller/HealthController.php | 16 +- .../api/src/Controller/InstallController.php | 14 +- .../api/src/Controller/PluginsController.php | 26 +- .../src/Controller/ProvisionController.php | 16 +- .../src/Controller/RemoteLoginController.php | 26 +- .../api/src/Controller/ResetController.php | 18 +- .../api/src/Controller/SnapshotController.php | 20 +- .../api/src/Controller/SyncController.php | 16 +- .../src/Controller/SyncReceiveController.php | 16 +- .../api/src/Controller/UpdateController.php | 8 +- .../media/css/dashboard.css | 36 +- .../media/css/portal.css | 18 +- .../media/js/dashboard.js | 18 +- .../media/js/signature-pad.js | 16 +- .../com_mokosuiteclient/mokosuiteclient.xml | 92 +++++ .../language/en-GB/com_mokosuiteclient.ini | 11 + .../site}/services/provider.php | 8 +- .../site/src/Controller/DisplayController.php | 18 +- .../site/src/Model/PortalModel.php | 24 +- .../site/src/View/Invoice/HtmlView.php | 4 +- .../site/src/View/Invoices/HtmlView.php | 4 +- .../site/src/View/License/HtmlView.php | 8 +- .../site/src/View/Order/HtmlView.php | 4 +- .../site/src/View/Orders/HtmlView.php | 4 +- .../site/src/View/Portal/HtmlView.php | 4 +- .../site/src/View/Privacy/HtmlView.php | 8 +- .../site/src/View/Sign/HtmlView.php | 10 +- .../site/src/View/SignVerify/HtmlView.php | 10 +- .../site/src/View/Ticket/HtmlView.php | 18 +- .../site/src/View/Tickets/HtmlView.php | 14 +- .../site/tmpl/invoice/default.php | 4 +- .../site/tmpl/invoices/default.php | 6 +- .../site/tmpl/license/default.php | 6 +- .../site/tmpl/order/default.php | 4 +- .../site/tmpl/orders/default.php | 6 +- .../site/tmpl/portal/default.php | 20 +- .../site/tmpl/privacy/default.php | 4 +- .../site/tmpl/sign/default.php | 2 +- .../site/tmpl/signverify/default.php | 2 +- .../site/tmpl/ticket/default.php | 12 +- .../site/tmpl/tickets/default.php | 10 +- .../site/tmpl/tickets/submit.php | 10 +- .../language/en-GB/mod_mokosuite_cache.ini | 4 - .../en-GB/mod_mokosuite_cache.sys.ini | 2 - .../mod_mokosuite_cache/tmpl/default.php | 89 ----- .../en-GB/mod_mokosuite_categories.ini | 24 -- .../en-GB/mod_mokosuite_categories.sys.ini | 2 - .../mod_mokosuite_categories.xml | 76 ---- .../language/en-GB/mod_mokosuite_cpanel.ini | 29 -- .../en-GB/mod_mokosuite_cpanel.sys.ini | 3 - .../language/en-GB/mod_mokosuite_menu.ini | 1 - .../language/en-GB/mod_mokosuite_menu.sys.ini | 2 - .../en-GB/mod_mokosuiteclient_cache.ini | 4 + .../en-GB/mod_mokosuiteclient_cache.sys.ini | 2 + .../mod_mokosuiteclient_cache.xml} | 12 +- .../services/provider.php | 6 +- .../src/Dispatcher/Dispatcher.php | 2 +- .../tmpl/default.php | 89 +++++ .../en-GB/mod_mokosuiteclient_categories.ini | 24 ++ .../mod_mokosuiteclient_categories.sys.ini | 2 + .../mod_mokosuiteclient_categories.xml | 76 ++++ .../services/provider.php | 8 +- .../src/Dispatcher/Dispatcher.php | 6 +- .../src/Helper/CategoriesHelper.php | 6 +- .../tmpl/default.php | 16 +- .../en-GB/mod_mokosuiteclient_cpanel.ini | 29 ++ .../en-GB/mod_mokosuiteclient_cpanel.sys.ini | 3 + .../mod_mokosuiteclient_cpanel.xml} | 40 +-- .../services/provider.php | 8 +- .../src/Dispatcher/Dispatcher.php | 12 +- .../src/Helper/CpanelHelper.php | 26 +- .../tmpl/default.php | 46 +-- .../en-GB/mod_mokosuiteclient_menu.ini | 1 + .../en-GB/mod_mokosuiteclient_menu.sys.ini | 2 + .../mod_mokosuiteclient_menu.xml} | 12 +- .../services/provider.php | 4 +- .../src/Dispatcher/Dispatcher.php | 2 +- .../tmpl/default.php | 52 +-- .../language/overrides/en-GB.override.ini | 118 ------- .../language/overrides/en-US.override.ini | 118 ------- .../language/en-GB/plg_system_mokosuite.ini | 41 --- .../language/en-US/plg_system_mokosuite.ini | 41 --- .../en-GB/plg_system_mokosuite_devtools.ini | 17 - .../plg_system_mokosuite_devtools.sys.ini | 3 - .../en-GB/plg_system_mokosuite_firewall.ini | 70 ---- .../plg_system_mokosuite_firewall.sys.ini | 3 - .../sql/uninstall.mysql.sql | 1 - .../mokosuite_license.xml | 29 -- .../en-GB/plg_system_mokosuite_monitor.ini | 13 - .../plg_system_mokosuite_monitor.sys.ini | 3 - .../en-GB/plg_system_mokosuite_offline.ini | 13 - .../plg_system_mokosuite_offline.sys.ini | 3 - .../en-GB/plg_system_mokosuite_tenant.ini | 23 -- .../en-GB/plg_system_mokosuite_tenant.sys.ini | 3 - .../Extension/MokoSuiteClient.php} | 88 ++--- .../Field/CopyableTokenField.php | 12 +- .../Helper/MokoSuiteClientHelper.php} | 12 +- .../administrator/language/en-GB/index.html | 0 .../en-GB/plg_system_mokosuiteclient.sys.ini} | 14 +- .../administrator/language/en-US/index.html | 0 .../en-US/plg_system_mokosuiteclient.sys.ini} | 14 +- .../language/overrides/en-GB.override.ini | 118 +++++++ .../language/overrides/en-US.override.ini | 118 +++++++ .../language/overrides/index.html | 0 .../forms/alias_entry.xml | 20 +- .../index.html | 0 .../language/en-GB/index.html | 0 .../en-GB/plg_system_mokosuiteclient.ini | 41 +++ .../en-GB/plg_system_mokosuiteclient.sys.ini} | 14 +- .../language/en-US/index.html | 0 .../en-US/plg_system_mokosuiteclient.ini | 41 +++ .../en-US/plg_system_mokosuiteclient.sys.ini} | 14 +- .../language/overrides/en-GB.override.ini | 46 +-- .../language/overrides/en-US.override.ini | 46 +-- .../language/overrides/index.html | 0 .../mokosuiteclient.xml} | 36 +- .../payload/index.html | 0 .../script.php | 82 ++--- .../services/index.html | 0 .../services/provider.php | 10 +- .../plg_system_mokosuiteclient_devtools.ini | 17 + ...lg_system_mokosuiteclient_devtools.sys.ini | 3 + .../mokosuiteclient_devtools.xml} | 32 +- .../services/provider.php | 8 +- .../src/Extension/DevTools.php | 10 +- .../forms/trusted_ip_entry.xml | 0 .../plg_system_mokosuiteclient_firewall.ini | 70 ++++ ...lg_system_mokosuiteclient_firewall.sys.ini | 3 + .../mokosuiteclient_firewall.xml} | 130 +++---- .../services/provider.php | 8 +- .../sql/install.mysql.sql | 2 +- .../sql/uninstall.mysql.sql | 1 + .../src/Extension/Firewall.php | 72 ++-- .../mokosuiteclient_license.xml | 29 ++ .../services/provider.php | 4 +- .../plg_system_mokosuiteclient_monitor.ini | 13 + ...plg_system_mokosuiteclient_monitor.sys.ini | 3 + .../mokosuiteclient_monitor.xml} | 24 +- .../services/provider.php | 8 +- .../src/Extension/Monitor.php | 44 +-- .../plg_system_mokosuiteclient_offline.ini | 13 + ...plg_system_mokosuiteclient_offline.sys.ini | 3 + .../mokosuiteclient_offline.xml} | 24 +- .../services/provider.php | 8 +- .../src/Extension/Tos.php | 8 +- .../src/Field/MenuslugField.php | 8 +- .../plg_system_mokosuiteclient_tenant.ini | 23 ++ .../plg_system_mokosuiteclient_tenant.sys.ini | 3 + .../mokosuiteclient_tenant.xml} | 44 +-- .../services/provider.php | 8 +- .../src/Extension/Tenant.php | 14 +- .../en-GB/plg_task_mokosuite_tickets.ini | 4 - .../en-GB/plg_task_mokosuite_tickets.sys.ini | 2 - .../plg_task_mokosuiteclient_tickets.ini | 4 + .../plg_task_mokosuiteclient_tickets.sys.ini | 2 + .../mokosuiteclient_tickets.xml} | 10 +- .../services/provider.php | 4 +- .../src/Extension/TicketAutomation.php | 12 +- .../forms/reset_params.xml | 0 .../en-GB/plg_task_mokosuiteclientdemo.ini | 10 + .../plg_task_mokosuiteclientdemo.sys.ini | 6 + .../mokosuiteclientdemo.xml} | 14 +- .../services/provider.php | 8 +- .../src/Extension/DemoReset.php | 18 +- .../src/Service/DemoResetService.php | 22 +- .../forms/sync_params.xml | 2 +- .../en-GB/plg_task_mokosuiteclientsync.ini | 37 ++ .../plg_task_mokosuiteclientsync.sys.ini | 6 + .../mokosuiteclientsync.xml} | 14 +- .../services/provider.php | 8 +- .../src/Extension/ContentSync.php | 30 +- .../src/Service/ContentSyncReceiver.php | 20 +- .../src/Service/ContentSyncService.php | 20 +- .../language/en-GB/plg_task_mokosuitedemo.ini | 10 - .../en-GB/plg_task_mokosuitedemo.sys.ini | 6 - .../language/en-GB/plg_task_mokosuitesync.ini | 37 -- .../en-GB/plg_task_mokosuitesync.sys.ini | 6 - .../mokosuiteclient.xml} | 8 +- .../services/provider.php | 10 +- .../src/Extension/MokoSuiteClientApi.php} | 66 ++-- source/pkg_mokosuite.xml | 37 -- source/pkg_mokosuiteclient.xml | 37 ++ source/script.php | 334 +++++++++--------- wiki/api-endpoints.md | 60 ++-- wiki/configuration.md | 4 +- wiki/grafana-integration.md | 26 +- wiki/health-endpoint.md | 4 +- wiki/health-monitoring.md | 8 +- wiki/home.md | 16 +- wiki/installation.md | 32 +- wiki/plugin-protection.md | 20 +- wiki/site-aliases.md | 8 +- 270 files changed, 2942 insertions(+), 2939 deletions(-) delete mode 100644 source/packages/com_mokosuite/admin/access.xml delete mode 100644 source/packages/com_mokosuite/admin/language/en-GB/com_mokosuite.ini delete mode 100644 source/packages/com_mokosuite/admin/language/en-GB/com_mokosuite.sys.ini delete mode 100644 source/packages/com_mokosuite/admin/sql/uninstall.mysql.sql delete mode 100644 source/packages/com_mokosuite/mokosuite.xml delete mode 100644 source/packages/com_mokosuite/site/language/en-GB/com_mokosuite.ini create mode 100644 source/packages/com_mokosuiteclient/admin/access.xml rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/catalog.xml (91%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/config.xml (84%) create mode 100644 source/packages/com_mokosuiteclient/admin/language/en-GB/com_mokosuiteclient.ini create mode 100644 source/packages/com_mokosuiteclient/admin/language/en-GB/com_mokosuiteclient.sys.ini rename source/packages/{com_mokosuite/site => com_mokosuiteclient/admin}/services/provider.php (88%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/sql/install.mysql.sql (82%) create mode 100644 source/packages/com_mokosuiteclient/admin/sql/uninstall.mysql.sql rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/sql/updates/mysql/02.34.28.sql (60%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/sql/updates/mysql/02.34.29.sql (55%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/sql/updates/mysql/02.35.01.sql (73%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Controller/DisplayController.php (83%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Model/DashboardModel.php (94%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Model/ErpReportsModel.php (84%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Model/ExtensionsModel.php (97%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Model/HtaccessModel.php (96%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Model/ImportModel.php (94%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Model/MaintenanceModel.php (97%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Model/PrivacyModel.php (89%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Model/TicketsModel.php (89%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Model/WaflogModel.php (91%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/Service/NotificationService.php (94%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Automation/HtmlView.php (64%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Canned/HtmlView.php (63%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Categories/HtmlView.php (77%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Cleanup/HtmlView.php (65%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Dashboard/HtmlView.php (73%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Database/HtmlView.php (65%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/ErpReports/HtmlView.php (79%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Extensions/HtmlView.php (68%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Htaccess/HtmlView.php (75%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Privacy/HtmlView.php (76%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Ticket/HtmlView.php (86%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Tickets/HtmlView.php (83%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/src/View/Waflog/HtmlView.php (84%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/automation/default.php (94%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/canned/default.php (94%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/categories/default.php (95%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/cleanup/default.php (94%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/dashboard/default.php (82%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/database/default.php (90%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/erpreports/default.php (92%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/extensions/default.php (93%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/htaccess/default.php (97%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/privacy/default.php (96%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/ticket/default.php (97%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/tickets/default.php (95%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/admin/tmpl/waflog/default.php (93%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/CacheController.php (90%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/DashboardController.php (92%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/ExtensionsController.php (96%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/HealthController.php (88%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/InstallController.php (93%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/PluginsController.php (87%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/ProvisionController.php (94%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/RemoteLoginController.php (80%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/ResetController.php (80%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/SnapshotController.php (81%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/SyncController.php (76%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/SyncReceiveController.php (77%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/api/src/Controller/UpdateController.php (92%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/media/css/dashboard.css (61%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/media/css/portal.css (54%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/media/js/dashboard.js (85%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/media/js/signature-pad.js (89%) create mode 100644 source/packages/com_mokosuiteclient/mokosuiteclient.xml create mode 100644 source/packages/com_mokosuiteclient/site/language/en-GB/com_mokosuiteclient.ini rename source/packages/{com_mokosuite/admin => com_mokosuiteclient/site}/services/provider.php (88%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/Controller/DisplayController.php (91%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/Model/PortalModel.php (55%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/Invoice/HtmlView.php (82%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/Invoices/HtmlView.php (79%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/License/HtmlView.php (70%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/Order/HtmlView.php (82%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/Orders/HtmlView.php (79%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/Portal/HtmlView.php (81%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/Privacy/HtmlView.php (84%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/Sign/HtmlView.php (69%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/SignVerify/HtmlView.php (60%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/Ticket/HtmlView.php (80%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/src/View/Tickets/HtmlView.php (82%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/invoice/default.php (90%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/invoices/default.php (82%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/license/default.php (88%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/order/default.php (87%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/orders/default.php (76%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/portal/default.php (76%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/privacy/default.php (96%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/sign/default.php (98%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/signverify/default.php (98%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/ticket/default.php (93%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/tickets/default.php (86%) rename source/packages/{com_mokosuite => com_mokosuiteclient}/site/tmpl/tickets/submit.php (94%) delete mode 100644 source/packages/mod_mokosuite_cache/language/en-GB/mod_mokosuite_cache.ini delete mode 100644 source/packages/mod_mokosuite_cache/language/en-GB/mod_mokosuite_cache.sys.ini delete mode 100644 source/packages/mod_mokosuite_cache/tmpl/default.php delete mode 100644 source/packages/mod_mokosuite_categories/language/en-GB/mod_mokosuite_categories.ini delete mode 100644 source/packages/mod_mokosuite_categories/language/en-GB/mod_mokosuite_categories.sys.ini delete mode 100644 source/packages/mod_mokosuite_categories/mod_mokosuite_categories.xml delete mode 100644 source/packages/mod_mokosuite_cpanel/language/en-GB/mod_mokosuite_cpanel.ini delete mode 100644 source/packages/mod_mokosuite_cpanel/language/en-GB/mod_mokosuite_cpanel.sys.ini delete mode 100644 source/packages/mod_mokosuite_menu/language/en-GB/mod_mokosuite_menu.ini delete mode 100644 source/packages/mod_mokosuite_menu/language/en-GB/mod_mokosuite_menu.sys.ini create mode 100644 source/packages/mod_mokosuiteclient_cache/language/en-GB/mod_mokosuiteclient_cache.ini create mode 100644 source/packages/mod_mokosuiteclient_cache/language/en-GB/mod_mokosuiteclient_cache.sys.ini rename source/packages/{mod_mokosuite_cache/mod_mokosuite_cache.xml => mod_mokosuiteclient_cache/mod_mokosuiteclient_cache.xml} (59%) rename source/packages/{mod_mokosuite_cache => mod_mokosuiteclient_cache}/services/provider.php (83%) rename source/packages/{mod_mokosuite_menu => mod_mokosuiteclient_cache}/src/Dispatcher/Dispatcher.php (75%) create mode 100644 source/packages/mod_mokosuiteclient_cache/tmpl/default.php create mode 100644 source/packages/mod_mokosuiteclient_categories/language/en-GB/mod_mokosuiteclient_categories.ini create mode 100644 source/packages/mod_mokosuiteclient_categories/language/en-GB/mod_mokosuiteclient_categories.sys.ini create mode 100644 source/packages/mod_mokosuiteclient_categories/mod_mokosuiteclient_categories.xml rename source/packages/{mod_mokosuite_cpanel => mod_mokosuiteclient_categories}/services/provider.php (79%) rename source/packages/{mod_mokosuite_categories => mod_mokosuiteclient_categories}/src/Dispatcher/Dispatcher.php (82%) rename source/packages/{mod_mokosuite_categories => mod_mokosuiteclient_categories}/src/Helper/CategoriesHelper.php (96%) rename source/packages/{mod_mokosuite_categories => mod_mokosuiteclient_categories}/tmpl/default.php (84%) create mode 100644 source/packages/mod_mokosuiteclient_cpanel/language/en-GB/mod_mokosuiteclient_cpanel.ini create mode 100644 source/packages/mod_mokosuiteclient_cpanel/language/en-GB/mod_mokosuiteclient_cpanel.sys.ini rename source/packages/{mod_mokosuite_cpanel/mod_mokosuite_cpanel.xml => mod_mokosuiteclient_cpanel/mod_mokosuiteclient_cpanel.xml} (64%) rename source/packages/{mod_mokosuite_categories => mod_mokosuiteclient_cpanel}/services/provider.php (80%) rename source/packages/{mod_mokosuite_cpanel => mod_mokosuiteclient_cpanel}/src/Dispatcher/Dispatcher.php (85%) rename source/packages/{mod_mokosuite_cpanel => mod_mokosuiteclient_cpanel}/src/Helper/CpanelHelper.php (91%) rename source/packages/{mod_mokosuite_cpanel => mod_mokosuiteclient_cpanel}/tmpl/default.php (85%) create mode 100644 source/packages/mod_mokosuiteclient_menu/language/en-GB/mod_mokosuiteclient_menu.ini create mode 100644 source/packages/mod_mokosuiteclient_menu/language/en-GB/mod_mokosuiteclient_menu.sys.ini rename source/packages/{mod_mokosuite_menu/mod_mokosuite_menu.xml => mod_mokosuiteclient_menu/mod_mokosuiteclient_menu.xml} (54%) rename source/packages/{mod_mokosuite_menu => mod_mokosuiteclient_menu}/services/provider.php (85%) rename source/packages/{mod_mokosuite_cache => mod_mokosuiteclient_menu}/src/Dispatcher/Dispatcher.php (76%) rename source/packages/{mod_mokosuite_menu => mod_mokosuiteclient_menu}/tmpl/default.php (78%) delete mode 100644 source/packages/plg_system_mokosuite/administrator/language/overrides/en-GB.override.ini delete mode 100644 source/packages/plg_system_mokosuite/administrator/language/overrides/en-US.override.ini delete mode 100644 source/packages/plg_system_mokosuite/language/en-GB/plg_system_mokosuite.ini delete mode 100644 source/packages/plg_system_mokosuite/language/en-US/plg_system_mokosuite.ini delete mode 100644 source/packages/plg_system_mokosuite_devtools/language/en-GB/plg_system_mokosuite_devtools.ini delete mode 100644 source/packages/plg_system_mokosuite_devtools/language/en-GB/plg_system_mokosuite_devtools.sys.ini delete mode 100644 source/packages/plg_system_mokosuite_firewall/language/en-GB/plg_system_mokosuite_firewall.ini delete mode 100644 source/packages/plg_system_mokosuite_firewall/language/en-GB/plg_system_mokosuite_firewall.sys.ini delete mode 100644 source/packages/plg_system_mokosuite_firewall/sql/uninstall.mysql.sql delete mode 100644 source/packages/plg_system_mokosuite_license/mokosuite_license.xml delete mode 100644 source/packages/plg_system_mokosuite_monitor/language/en-GB/plg_system_mokosuite_monitor.ini delete mode 100644 source/packages/plg_system_mokosuite_monitor/language/en-GB/plg_system_mokosuite_monitor.sys.ini delete mode 100644 source/packages/plg_system_mokosuite_offline/language/en-GB/plg_system_mokosuite_offline.ini delete mode 100644 source/packages/plg_system_mokosuite_offline/language/en-GB/plg_system_mokosuite_offline.sys.ini delete mode 100644 source/packages/plg_system_mokosuite_tenant/language/en-GB/plg_system_mokosuite_tenant.ini delete mode 100644 source/packages/plg_system_mokosuite_tenant/language/en-GB/plg_system_mokosuite_tenant.sys.ini rename source/packages/{plg_system_mokosuite/Extension/MokoSuite.php => plg_system_mokosuiteclient/Extension/MokoSuiteClient.php} (95%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/Field/CopyableTokenField.php (92%) rename source/packages/{plg_system_mokosuite/Helper/MokoSuiteHelper.php => plg_system_mokosuiteclient/Helper/MokoSuiteClientHelper.php} (85%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/administrator/language/en-GB/index.html (100%) rename source/packages/{plg_system_mokosuite/administrator/language/en-GB/plg_system_mokosuite.sys.ini => plg_system_mokosuiteclient/administrator/language/en-GB/plg_system_mokosuiteclient.sys.ini} (51%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/administrator/language/en-US/index.html (100%) rename source/packages/{plg_system_mokosuite/administrator/language/en-US/plg_system_mokosuite.sys.ini => plg_system_mokosuiteclient/administrator/language/en-US/plg_system_mokosuiteclient.sys.ini} (51%) create mode 100644 source/packages/plg_system_mokosuiteclient/administrator/language/overrides/en-GB.override.ini create mode 100644 source/packages/plg_system_mokosuiteclient/administrator/language/overrides/en-US.override.ini rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/administrator/language/overrides/index.html (100%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/forms/alias_entry.xml (60%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/index.html (100%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/language/en-GB/index.html (100%) create mode 100644 source/packages/plg_system_mokosuiteclient/language/en-GB/plg_system_mokosuiteclient.ini rename source/packages/{plg_system_mokosuite/language/en-GB/plg_system_mokosuite.sys.ini => plg_system_mokosuiteclient/language/en-GB/plg_system_mokosuiteclient.sys.ini} (51%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/language/en-US/index.html (100%) create mode 100644 source/packages/plg_system_mokosuiteclient/language/en-US/plg_system_mokosuiteclient.ini rename source/packages/{plg_system_mokosuite/language/en-US/plg_system_mokosuite.sys.ini => plg_system_mokosuiteclient/language/en-US/plg_system_mokosuiteclient.sys.ini} (51%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/language/overrides/en-GB.override.ini (59%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/language/overrides/en-US.override.ini (59%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/language/overrides/index.html (100%) rename source/packages/{plg_system_mokosuite/mokosuite.xml => plg_system_mokosuiteclient/mokosuiteclient.xml} (64%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/payload/index.html (100%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/script.php (90%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/services/index.html (100%) rename source/packages/{plg_system_mokosuite => plg_system_mokosuiteclient}/services/provider.php (87%) create mode 100644 source/packages/plg_system_mokosuiteclient_devtools/language/en-GB/plg_system_mokosuiteclient_devtools.ini create mode 100644 source/packages/plg_system_mokosuiteclient_devtools/language/en-GB/plg_system_mokosuiteclient_devtools.sys.ini rename source/packages/{plg_system_mokosuite_devtools/mokosuite_devtools.xml => plg_system_mokosuiteclient_devtools/mokosuiteclient_devtools.xml} (56%) rename source/packages/{plg_system_mokosuite_devtools => plg_system_mokosuiteclient_devtools}/services/provider.php (79%) rename source/packages/{plg_system_mokosuite_devtools => plg_system_mokosuiteclient_devtools}/src/Extension/DevTools.php (94%) rename source/packages/{plg_system_mokosuite_firewall => plg_system_mokosuiteclient_firewall}/forms/trusted_ip_entry.xml (100%) create mode 100644 source/packages/plg_system_mokosuiteclient_firewall/language/en-GB/plg_system_mokosuiteclient_firewall.ini create mode 100644 source/packages/plg_system_mokosuiteclient_firewall/language/en-GB/plg_system_mokosuiteclient_firewall.sys.ini rename source/packages/{plg_system_mokosuite_firewall/mokosuite_firewall.xml => plg_system_mokosuiteclient_firewall/mokosuiteclient_firewall.xml} (63%) rename source/packages/{plg_system_mokosuite_firewall => plg_system_mokosuiteclient_firewall}/services/provider.php (79%) rename source/packages/{plg_system_mokosuite_firewall => plg_system_mokosuiteclient_firewall}/sql/install.mysql.sql (87%) create mode 100644 source/packages/plg_system_mokosuiteclient_firewall/sql/uninstall.mysql.sql rename source/packages/{plg_system_mokosuite_firewall => plg_system_mokosuiteclient_firewall}/src/Extension/Firewall.php (92%) create mode 100644 source/packages/plg_system_mokosuiteclient_license/mokosuiteclient_license.xml rename source/packages/{plg_system_mokosuite_license => plg_system_mokosuiteclient_license}/services/provider.php (85%) create mode 100644 source/packages/plg_system_mokosuiteclient_monitor/language/en-GB/plg_system_mokosuiteclient_monitor.ini create mode 100644 source/packages/plg_system_mokosuiteclient_monitor/language/en-GB/plg_system_mokosuiteclient_monitor.sys.ini rename source/packages/{plg_system_mokosuite_monitor/mokosuite_monitor.xml => plg_system_mokosuiteclient_monitor/mokosuiteclient_monitor.xml} (80%) rename source/packages/{plg_system_mokosuite_monitor => plg_system_mokosuiteclient_monitor}/services/provider.php (80%) rename source/packages/{plg_system_mokosuite_monitor => plg_system_mokosuiteclient_monitor}/src/Extension/Monitor.php (83%) create mode 100644 source/packages/plg_system_mokosuiteclient_offline/language/en-GB/plg_system_mokosuiteclient_offline.ini create mode 100644 source/packages/plg_system_mokosuiteclient_offline/language/en-GB/plg_system_mokosuiteclient_offline.sys.ini rename source/packages/{plg_system_mokosuite_offline/mokosuite_offline.xml => plg_system_mokosuiteclient_offline/mokosuiteclient_offline.xml} (55%) rename source/packages/{plg_system_mokosuite_offline => plg_system_mokosuiteclient_offline}/services/provider.php (81%) rename source/packages/{plg_system_mokosuite_offline => plg_system_mokosuiteclient_offline}/src/Extension/Tos.php (94%) rename source/packages/{plg_system_mokosuite_offline => plg_system_mokosuiteclient_offline}/src/Field/MenuslugField.php (88%) create mode 100644 source/packages/plg_system_mokosuiteclient_tenant/language/en-GB/plg_system_mokosuiteclient_tenant.ini create mode 100644 source/packages/plg_system_mokosuiteclient_tenant/language/en-GB/plg_system_mokosuiteclient_tenant.sys.ini rename source/packages/{plg_system_mokosuite_tenant/mokosuite_tenant.xml => plg_system_mokosuiteclient_tenant/mokosuiteclient_tenant.xml} (56%) rename source/packages/{plg_system_mokosuite_tenant => plg_system_mokosuiteclient_tenant}/services/provider.php (80%) rename source/packages/{plg_system_mokosuite_tenant => plg_system_mokosuiteclient_tenant}/src/Extension/Tenant.php (92%) delete mode 100644 source/packages/plg_task_mokosuite_tickets/language/en-GB/plg_task_mokosuite_tickets.ini delete mode 100644 source/packages/plg_task_mokosuite_tickets/language/en-GB/plg_task_mokosuite_tickets.sys.ini create mode 100644 source/packages/plg_task_mokosuiteclient_tickets/language/en-GB/plg_task_mokosuiteclient_tickets.ini create mode 100644 source/packages/plg_task_mokosuiteclient_tickets/language/en-GB/plg_task_mokosuiteclient_tickets.sys.ini rename source/packages/{plg_task_mokosuite_tickets/mokosuite_tickets.xml => plg_task_mokosuiteclient_tickets/mokosuiteclient_tickets.xml} (68%) rename source/packages/{plg_task_mokosuite_tickets => plg_task_mokosuiteclient_tickets}/services/provider.php (83%) rename source/packages/{plg_task_mokosuite_tickets => plg_task_mokosuiteclient_tickets}/src/Extension/TicketAutomation.php (81%) rename source/packages/{plg_task_mokosuitedemo => plg_task_mokosuiteclientdemo}/forms/reset_params.xml (100%) create mode 100644 source/packages/plg_task_mokosuiteclientdemo/language/en-GB/plg_task_mokosuiteclientdemo.ini create mode 100644 source/packages/plg_task_mokosuiteclientdemo/language/en-GB/plg_task_mokosuiteclientdemo.sys.ini rename source/packages/{plg_task_mokosuitesync/mokosuitesync.xml => plg_task_mokosuiteclientdemo/mokosuiteclientdemo.xml} (63%) rename source/packages/{plg_task_mokosuitedemo => plg_task_mokosuiteclientdemo}/services/provider.php (79%) rename source/packages/{plg_task_mokosuitedemo => plg_task_mokosuiteclientdemo}/src/Extension/DemoReset.php (90%) rename source/packages/{plg_task_mokosuitedemo => plg_task_mokosuiteclientdemo}/src/Service/DemoResetService.php (96%) rename source/packages/{plg_task_mokosuitesync => plg_task_mokosuiteclientsync}/forms/sync_params.xml (91%) create mode 100644 source/packages/plg_task_mokosuiteclientsync/language/en-GB/plg_task_mokosuiteclientsync.ini create mode 100644 source/packages/plg_task_mokosuiteclientsync/language/en-GB/plg_task_mokosuiteclientsync.sys.ini rename source/packages/{plg_task_mokosuitedemo/mokosuitedemo.xml => plg_task_mokosuiteclientsync/mokosuiteclientsync.xml} (62%) rename source/packages/{plg_task_mokosuitesync => plg_task_mokosuiteclientsync}/services/provider.php (79%) rename source/packages/{plg_task_mokosuitesync => plg_task_mokosuiteclientsync}/src/Extension/ContentSync.php (92%) rename source/packages/{plg_task_mokosuitesync => plg_task_mokosuiteclientsync}/src/Service/ContentSyncReceiver.php (98%) rename source/packages/{plg_task_mokosuitesync => plg_task_mokosuiteclientsync}/src/Service/ContentSyncService.php (97%) delete mode 100644 source/packages/plg_task_mokosuitedemo/language/en-GB/plg_task_mokosuitedemo.ini delete mode 100644 source/packages/plg_task_mokosuitedemo/language/en-GB/plg_task_mokosuitedemo.sys.ini delete mode 100644 source/packages/plg_task_mokosuitesync/language/en-GB/plg_task_mokosuitesync.ini delete mode 100644 source/packages/plg_task_mokosuitesync/language/en-GB/plg_task_mokosuitesync.sys.ini rename source/packages/{plg_webservices_mokosuite/mokosuite.xml => plg_webservices_mokosuiteclient/mokosuiteclient.xml} (59%) rename source/packages/{plg_webservices_mokosuite => plg_webservices_mokosuiteclient}/services/provider.php (74%) rename source/packages/{plg_webservices_mokosuite/src/Extension/MokoSuiteApi.php => plg_webservices_mokosuiteclient/src/Extension/MokoSuiteClientApi.php} (50%) delete mode 100644 source/pkg_mokosuite.xml create mode 100644 source/pkg_mokosuiteclient.xml diff --git a/.mokogitea/CLAUDE.md b/.mokogitea/CLAUDE.md index 50591f52..ef8175ef 100644 --- a/.mokogitea/CLAUDE.md +++ b/.mokogitea/CLAUDE.md @@ -1,4 +1,4 @@ -# MokoSuite +# MokoSuiteClient Joomla 5/6 admin tools suite — heartbeat health monitoring, extension management, security firewall, tenant restrictions, and site administration. @@ -6,10 +6,10 @@ Joomla 5/6 admin tools suite — heartbeat health monitoring, extension manageme | Field | Value | |---|---| -| **Package** | `pkg_mokosuite` | +| **Package** | `pkg_mokosuiteclient` | | **Language** | PHP 8.1+ | | **Branch** | develop on `dev`, merge to `main` (protected) | -| **Wiki** | [MokoSuite Wiki](https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/wiki) | +| **Wiki** | [MokoSuiteClient Wiki](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/wiki) | ## Commands @@ -19,38 +19,38 @@ composer install # Install PHP dependencies ## Architecture -Joomla **package** (`pkg_mokosuite`) with 17 sub-extensions: +Joomla **package** (`pkg_mokosuiteclient`) with 17 sub-extensions: -### Core Plugin (`plg_system_mokosuite`) -- Heartbeat health endpoint (`/?mokosuite=health`) with 16 diagnostic checks +### Core Plugin (`plg_system_mokosuiteclient`) +- Heartbeat health endpoint (`/?mokosuiteclient=health`) with 16 diagnostic checks - Grafana provisioning and heartbeat sender - Site alias / domain management - Extension cascade (enable/disable coordination) - Download key preservation across Joomla updates -- Namespace: `Moko\Plugin\System\MokoSuite` +- Namespace: `Moko\Plugin\System\MokoSuiteClient` ### Feature Plugins -- `plg_system_mokosuite_firewall` — WAF, IP blocklist, security headers, password policy -- `plg_system_mokosuite_tenant` — admin restrictions for non-master users -- `plg_system_mokosuite_devtools` — dev mode, hit reset, version cleanup, download key reset -- `plg_system_mokosuite_offline` — offline mode bypass for legal pages -- `plg_system_mokosuite_monitor` — Grafana heartbeat registration +- `plg_system_mokosuiteclient_firewall` — WAF, IP blocklist, security headers, password policy +- `plg_system_mokosuiteclient_tenant` — admin restrictions for non-master users +- `plg_system_mokosuiteclient_devtools` — dev mode, hit reset, version cleanup, download key reset +- `plg_system_mokosuiteclient_offline` — offline mode bypass for legal pages +- `plg_system_mokosuiteclient_monitor` — Grafana heartbeat registration -### Component (`com_mokosuite`) +### Component (`com_mokosuiteclient`) - Admin dashboard with plugin management, WAF charts, extension catalog - Helpdesk ticketing system - REST API controllers ### Modules -- `mod_mokosuite_cpanel` — admin dashboard widget -- `mod_mokosuite_menu` — admin sidebar menu -- `mod_mokosuite_cache` — status bar cache/temp cleaner -- `mod_mokosuite_categories` — auto-category tree menu +- `mod_mokosuiteclient_cpanel` — admin dashboard widget +- `mod_mokosuiteclient_menu` — admin sidebar menu +- `mod_mokosuiteclient_cache` — status bar cache/temp cleaner +- `mod_mokosuiteclient_categories` — auto-category tree menu ### Task Plugins -- `plg_task_mokosuitedemo` — scheduled demo site reset -- `plg_task_mokosuitesync` — scheduled content sync -- `plg_task_mokosuite_tickets` — ticket automation +- `plg_task_mokosuiteclientdemo` — scheduled demo site reset +- `plg_task_mokosuiteclientsync` — scheduled content sync +- `plg_task_mokosuiteclient_tickets` — ticket automation ### Update Server @@ -59,7 +59,7 @@ MokoGitea generates update feeds dynamically from releases — no static `update ## Source Directory Source lives in `source/` (not `src/`): -- `source/pkg_mokosuite.xml` — package manifest +- `source/pkg_mokosuiteclient.xml` — package manifest - `source/script.php` — install script - `source/packages/` — all sub-extensions diff --git a/.mokogitea/ISSUE_TEMPLATE/suite_site_issue.md b/.mokogitea/ISSUE_TEMPLATE/suite_site_issue.md index 42b4cd47..2bda0cc8 100644 --- a/.mokogitea/ISSUE_TEMPLATE/suite_site_issue.md +++ b/.mokogitea/ISSUE_TEMPLATE/suite_site_issue.md @@ -52,7 +52,7 @@ Attach screenshots showing the issue (desktop and mobile if relevant). ## Template Details - **Joomla Version**: [e.g., 5.x] - **Template Name**: [e.g., clienttemplate] -- **MokoSuite Plugin**: [Active / Inactive] +- **MokoSuiteClient Plugin**: [Active / Inactive] - **MokoOnyx Admin**: [Active / Inactive] ## CSS Custom Properties diff --git a/.mokogitea/copilot-instructions.md b/.mokogitea/copilot-instructions.md index 7c90aee7..e7c671d2 100644 --- a/.mokogitea/copilot-instructions.md +++ b/.mokogitea/copilot-instructions.md @@ -11,9 +11,9 @@ INGROUP: MokoStandards.Templates REPO: https://github.com/mokoconsulting-tech/MokoStandards PATH: /templates/github/copilot-instructions.joomla.md.template VERSION: XX.YY.ZZ -BRIEF: GitHub Copilot custom instructions template for Joomla/MokoSuite governed repositories +BRIEF: GitHub Copilot custom instructions template for Joomla/MokoSuiteClient governed repositories NOTE: Synced to .github/copilot-instructions.md in all Joomla/Suite repos via bulk sync. - Tokens replaced at sync time: MokoSuite, https://github.com/mokoconsulting-tech/MokoSuite, {{EXTENSION_NAME}}, + Tokens replaced at sync time: MokoSuiteClient, https://github.com/mokoconsulting-tech/MokoSuiteClient, {{EXTENSION_NAME}}, {{EXTENSION_TYPE}}, {{EXTENSION_ELEMENT}} --> @@ -36,24 +36,24 @@ NOTE: Synced to .github/copilot-instructions.md in all Joomla/Suite repos via bu > > | Placeholder | Where to find the value | > |---|---| -> | `MokoSuite` | The GitHub repository name (visible in the URL, `README.md` heading, or `git remote -v`) | -> | `https://github.com/mokoconsulting-tech/MokoSuite` | Full GitHub URL, e.g. `https://github.com/mokoconsulting-tech/` | +> | `MokoSuiteClient` | The GitHub repository name (visible in the URL, `README.md` heading, or `git remote -v`) | +> | `https://github.com/mokoconsulting-tech/MokoSuiteClient` | Full GitHub URL, e.g. `https://github.com/mokoconsulting-tech/` | > | `{{EXTENSION_NAME}}` | The `` element in `manifest.xml` at the repository root | > | `{{EXTENSION_TYPE}}` | The `type` attribute of the `` tag in `manifest.xml` (`component`, `module`, `plugin`, or `template`) | > | `{{EXTENSION_ELEMENT}}` | The `` tag in `manifest.xml`, or the filename prefix (e.g. `com_myextension`, `mod_mymodule`) | > > --- -# MokoSuite — GitHub Copilot Custom Instructions +# MokoSuiteClient — GitHub Copilot Custom Instructions ## What This Repo Is -This is a **Moko Consulting MokoSuite** (Joomla) repository governed by [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards). All coding standards, workflows, and policies are defined there and enforced here via bulk sync. +This is a **Moko Consulting MokoSuiteClient** (Joomla) repository governed by [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards). All coding standards, workflows, and policies are defined there and enforced here via bulk sync. -Repository URL: https://github.com/mokoconsulting-tech/MokoSuite +Repository URL: https://github.com/mokoconsulting-tech/MokoSuiteClient Extension name: **{{EXTENSION_NAME}}** Extension type: **{{EXTENSION_TYPE}}** (`{{EXTENSION_ELEMENT}}`) -Platform: **Joomla 4.x / MokoSuite** +Platform: **Joomla 4.x / MokoSuiteClient** --- @@ -77,9 +77,9 @@ Every new file needs a copyright header as its first content. * SPDX-License-Identifier: GPL-3.0-or-later * * FILE INFORMATION - * DEFGROUP: MokoSuite.{{EXTENSION_TYPE}} - * INGROUP: MokoSuite - * REPO: https://github.com/mokoconsulting-tech/MokoSuite + * DEFGROUP: MokoSuiteClient.{{EXTENSION_TYPE}} + * INGROUP: MokoSuiteClient + * REPO: https://github.com/mokoconsulting-tech/MokoSuiteClient * PATH: /path/to/file.php * VERSION: XX.YY.ZZ * BRIEF: One-line description of purpose @@ -98,9 +98,9 @@ This file is part of a Moko Consulting project. SPDX-License-Identifier: GPL-3.0-or-later # FILE INFORMATION -DEFGROUP: MokoSuite.Documentation -INGROUP: MokoSuite -REPO: https://github.com/mokoconsulting-tech/MokoSuite +DEFGROUP: MokoSuiteClient.Documentation +INGROUP: MokoSuiteClient +REPO: https://github.com/mokoconsulting-tech/MokoSuiteClient PATH: /docs/file.md VERSION: XX.YY.ZZ BRIEF: One-line description @@ -138,7 +138,7 @@ The version in `README.md` **must always match** the `` tag in `manifes 01.02.04 - https://github.com/mokoconsulting-tech/MokoSuite/releases/download/01.02.04/{{EXTENSION_ELEMENT}}-01.02.04.zip + https://github.com/mokoconsulting-tech/MokoSuiteClient/releases/download/01.02.04/{{EXTENSION_ELEMENT}}-01.02.04.zip @@ -152,7 +152,7 @@ The version in `README.md` **must always match** the `` tag in `manifes ## Joomla Extension Structure ``` -MokoSuite/ +MokoSuiteClient/ ├── manifest.xml # Joomla installer manifest (root — required) ├── (no updates.xml) # Update XML is generated dynamically by MokoGitea ├── site/ # Frontend (site) code @@ -191,11 +191,11 @@ MokoSuite/ https://git.mokoconsulting.tech/{Owner}/{Repo}/updates.xml ``` -The package manifest (`pkg_mokosuite.xml`) references it via: +The package manifest (`pkg_mokosuiteclient.xml`) references it via: ```xml - - https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/updates.xml + + https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/updates.xml ``` @@ -257,7 +257,7 @@ This repository is governed by [MokoStandards](https://github.com/mokoconsulting | [branching-strategy.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow | | [merge-strategy.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions | | [changelog-standards.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md | -| [joomla-development-guide.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoSuite Joomla extension development guide | +| [joomla-development-guide.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoSuiteClient Joomla extension development guide | --- diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml index b1bcc1ee..9f102860 100644 --- a/.mokogitea/manifest.xml +++ b/.mokogitea/manifest.xml @@ -5,8 +5,8 @@ --> - MokoSuite - Package - MokoSuite + MokoSuiteClient + Package - MokoSuiteClient MokoConsulting White-label identity, security hardening, and tenant restriction layer for Suite-managed Joomla environments 02.34.50 diff --git a/CHANGELOG.md b/CHANGELOG.md index 79c396ba..f3385b67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,8 +11,8 @@ # FILE INFORMATION DEFGROUP: - INGROUP: MokoSuite.Documentation - REPO: https://github.com/mokoconsulting-tech/mokosuite + INGROUP: MokoSuiteClient.Documentation + REPO: https://github.com/mokoconsulting-tech/mokosuiteclient PATH: ./CHANGELOG.md VERSION: 02.34.50 BRIEF: Version history using `Keep a Changelog` @@ -22,19 +22,22 @@ ## [Unreleased] +### Changed +- **Full rename: MokoSuite → MokoSuiteClient** — repo, all Joomla element names (com_mokosuiteclient, plg_system_mokosuiteclient, mod_mokosuiteclient_*, etc.), PHP classes, language files, folder structure, and manifest references. This is the client tracker for the MokoSuite platform. + ### Added -- RSA-signed heartbeat authentication — private key in monitor plugin manifest, public key on MokoSuiteHQ +- RSA-signed heartbeat authentication — private key in monitor plugin manifest, public key on MokoSuiteClientHQ - Monitor plugin base_url set via manifest (hidden from admin UI), propagated via update server - Send Heartbeat button on health token field for manual heartbeat testing - Font Awesome 7 loaded in admin backend — picks up MokoOnyx Kit code if present, falls back to bundled FA7 Free or FA6 CDN -- MokoWaaS → MokoSuite database table migration in install script (create new, copy data, drop old) -- MokoWaaS → MokoSuite extension param migration — copies params from all old mokowaas plugins/modules/component, then removes old entries and filesystem remnants +- MokoWaaS → MokoSuiteClient database table migration in install script (create new, copy data, drop old) +- MokoWaaS → MokoSuiteClient extension param migration — copies params from all old mokowaas plugins/modules/component, then removes old entries and filesystem remnants - Ticket contact linking — optional FK to Joomla contact records with display in list and detail views - Multi-assignee tickets — junction table supports multiple users and user groups per ticket - Customizable ticket statuses — admin-configurable lookup table replaces hardcoded ENUM (title, color, is_closed flag) - Customizable ticket priorities — admin-configurable lookup table with weight and color -- Joomla custom fields integration for tickets (context: com_mokosuite.ticket) with field groups assignable per category -- MokoWaaS/MokoWaaSHQ migration bridge repos with updates.xml redirecting existing installs to MokoSuite/HQ +- Joomla custom fields integration for tickets (context: com_mokosuiteclient.ticket) with field groups assignable per category +- MokoWaaS/MokoWaaSHQ migration bridge repos with updates.xml redirecting existing installs to MokoSuiteClient/HQ - Pre-release workflow triggers on push to dev/alpha/beta/rc branches (deployed to all 11 repos) ### Removed @@ -49,14 +52,14 @@ - Core plugin stripped to heartbeat-only config (~5,500 lines removed) - Extension catalog (catalog.xml) with update server discovery (#186) - Download key preservation across Joomla updates (#187) -- Remote login endpoint for MokoSuiteHQ auto-login +- Remote login endpoint for MokoSuiteClientHQ auto-login - Provision reset API for new client setup (hits, versions, tokens) - Setup required banner after provision reset - Support verification PIN (MOKO-XXXX-XXXX) -- mod_mokosuite_categories — auto-category tree menu (#184) +- mod_mokosuiteclient_categories — auto-category tree menu (#184) - Cache/temp split button in status bar - Dashboard version tiles for component and modules -- Monitor plugin sends full health payload to MokoSuiteHQ +- Monitor plugin sends full health payload to MokoSuiteClientHQ - Firewall: block_frontend_superuser, own trusted_ip_entry.xml - DevTools: reset download keys toggle @@ -76,17 +79,17 @@ ### Added - Database Tools view — table status, optimize, repair, session purge (#127) - Cache Cleanup view — directory size reporting and one-click cleanup (#128) -- mod_mokosuite_cache — one-click cache cleaner button in admin status bar (replaces Regular Labs Cache Cleaner) -- mod_mokosuite_menu — collapsible admin sidebar menu using native MetisMenu classes (like Community Builder) +- mod_mokosuiteclient_cache — one-click cache cleaner button in admin status bar (replaces Regular Labs Cache Cleaner) +- mod_mokosuiteclient_menu — collapsible admin sidebar menu using native MetisMenu classes (like Community Builder) - SSL certificate expiry monitoring in cpanel module (#148) -- MokoSuite-specific update badge (blue) separate from other updates in cpanel module +- MokoSuiteClient-specific update badge (blue) separate from other updates in cpanel module - migrateUpdateServerUrls() — rewrites all Moko extension update server URLs to clean /updates.xml on install/update - fixMenuIcons() — sets menu_icon params on submenu items (Joomla only renders img on level 1) - setupCacheModule() — registers cache cleaner module in status bar position on install - Component config.xml for Joomla Options modal (#149) - preflight() ALTER for #__extensions.element default (MySQL strict mode fix) - Retire MokoJoomTOS, MokoATS-Automation, MokoDPCalendarAPI, MokoGalleryCalendar on install -- MokoJoomTOS settings auto-migrate to mokosuite_offline before removal +- MokoJoomTOS settings auto-migrate to mokosuiteclient_offline before removal - dev-release and pre-release workflows with changelog extraction into release notes - RC pre-release consolidates dev patches into clean minor version bump @@ -118,20 +121,20 @@ ## [02.32] - 2026-06-02 ### Added -- Admin control panel dashboard in com_mokosuite with site info bar, feature plugin grid, and quick actions -- Feature plugin architecture — MokoSuite features split into toggleable plugins managed from the dashboard -- plg_system_mokosuite_firewall — HTTPS enforcement, trusted IPs, session timeout, upload restrictions, password policy -- plg_system_mokosuite_tenant — Installer, sysinfo, config, template, and menu restrictions for non-master users -- plg_system_mokosuite_devtools — Dev mode, hit counter reset, content version cleanup -- plg_system_mokosuite_monitor — Grafana heartbeat integration and health monitoring -- MokoSuiteHelper utility class for shared master-user detection across feature plugins +- Admin control panel dashboard in com_mokosuiteclient with site info bar, feature plugin grid, and quick actions +- Feature plugin architecture — MokoSuiteClient features split into toggleable plugins managed from the dashboard +- plg_system_mokosuiteclient_firewall — HTTPS enforcement, trusted IPs, session timeout, upload restrictions, password policy +- plg_system_mokosuiteclient_tenant — Installer, sysinfo, config, template, and menu restrictions for non-master users +- plg_system_mokosuiteclient_devtools — Dev mode, hit counter reset, content version cleanup +- plg_system_mokosuiteclient_monitor — Grafana heartbeat integration and health monitoring +- MokoSuiteClientHelper utility class for shared master-user detection across feature plugins - AJAX plugin toggle — enable/disable feature plugins directly from the dashboard - Clear cache quick action on dashboard - Static updates.xml for update server (licensing system deferred) - Automatic param migration from core plugin to feature plugins on upgrade ### Changed -- com_mokosuite upgraded from API-only to full admin component with dashboard views +- com_mokosuiteclient upgraded from API-only to full admin component with dashboard views - Package manifest updated with 4 new feature plugin entries (10 extensions total) - Update server URL changed to static raw file endpoint - Core plugin slimmed — security, tenant, devtools, and monitor features extracted to dedicated plugins @@ -149,7 +152,7 @@ - Persistent admin warning when no license key is configured in Update Sites - Daily heartbeat validation of license key against MokoGitea — warns if key is invalid or expired - Stale/duplicate update site cleanup on install/update (removes old static URL entries and orphaned records) -- Content sync rewritten — bulk MokoSuite API endpoints (syncclear + syncpush) replace per-item Joomla API calls +- Content sync rewritten — bulk MokoSuiteClient API endpoints (syncclear + syncpush) replace per-item Joomla API calls - Sync task per-instance config: target URL, health token, content type checkboxes (articles, categories, menus, modules) - Bulk sync completes in under 5 seconds (clear + push in 2-3 HTTP requests) - Asset table and nested set tree repair after sync push on target site @@ -183,24 +186,24 @@ ### Fixed - Emergency access IP whitelist: empty `allowed_ips` now permits all IPs (was blocking everyone) - Emergency access reads `allowed_ips` from plugin params instead of global config -- `plg_task_mokosuitesync` — Joomla Scheduled Task plugin for automatic content sync to remote sites +- `plg_task_mokosuiteclientsync` — Joomla Scheduled Task plugin for automatic content sync to remote sites - Community Builder tables added to demo reset safe table list -- API endpoint `POST /api/index.php/v1/mokosuite/install` — install extensions from a remote ZIP URL +- API endpoint `POST /api/index.php/v1/mokosuiteclient/install` — install extensions from a remote ZIP URL - Demo Mode with configurable warning banner on frontend when enabled - Demo banner countdown now shows weeks/days/months for longer intervals instead of raw hours - `DemoResetService` — baseline snapshot and restore for DB tables + media files -- API endpoints `POST /?mokosuite=reset` and `POST /?mokosuite=snapshot` (query-string) -- REST endpoints `POST /api/v1/mokosuite/reset` and `GET/POST /api/v1/mokosuite/snapshot` -- `plg_task_mokosuitedemo` — Joomla Scheduled Task plugin for automatic demo site reset +- API endpoints `POST /?mokosuiteclient=reset` and `POST /?mokosuiteclient=snapshot` (query-string) +- REST endpoints `POST /api/v1/mokosuiteclient/reset` and `GET/POST /api/v1/mokosuiteclient/snapshot` +- `plg_task_mokosuiteclientdemo` — Joomla Scheduled Task plugin for automatic demo site reset - Admin toggles: Take Snapshot Now and Restore Baseline Now in plugin config -- Content Sync: one-way push of articles, categories, menus, and modules to remote MokoSuite sites -- Content Sync: API endpoints `POST /?mokosuite=sync` (sender) and `POST /?mokosuite=sync-receive` (receiver) -- Content Sync: REST endpoints `POST /api/v1/mokosuite/sync` and `POST /api/v1/mokosuite/sync-receive` +- Content Sync: one-way push of articles, categories, menus, and modules to remote MokoSuiteClient sites +- Content Sync: API endpoints `POST /?mokosuiteclient=sync` (sender) and `POST /?mokosuiteclient=sync-receive` (receiver) +- Content Sync: REST endpoints `POST /api/v1/mokosuiteclient/sync` and `POST /api/v1/mokosuiteclient/sync-receive` - Content Sync: configurable sync targets with URL + API token in plugin settings -- Package installer: protect all MokoSuite extensions (not just system plugin) and ensure update server stays enabled -- Package installer: clean up legacy `mokosuitebrand` extension entries and files on install/update -- API endpoint `GET /?mokosuite=extensions` and `GET /api/v1/mokosuite/extensions` — list installed extensions with version, status, and update server info +- Package installer: protect all MokoSuiteClient extensions (not just system plugin) and ensure update server stays enabled +- Package installer: clean up legacy `mokosuiteclientbrand` extension entries and files on install/update +- API endpoint `GET /?mokosuiteclient=extensions` and `GET /api/v1/mokosuiteclient/extensions` — list installed extensions with version, status, and update server info ## [02.20] --- 2026-05-28 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index ecad5cb3..cdc790f9 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -12,8 +12,8 @@ # FILE INFORMATION DEFGROUP: Joomla.Plugin - INGROUP: MokoSuite.Documentation - REPO: https://github.com/mokoconsulting-tech/mokosuite + INGROUP: MokoSuiteClient.Documentation + REPO: https://github.com/mokoconsulting-tech/mokosuiteclient VERSION: 02.34.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 2696ef49..355885ec 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -16,12 +16,12 @@ You should have received a copy of the GNU General Public License (./LICENSE). FILE INFORMATION - DEFGROUP: mokoconsulting-tech.MokoSuiteBrand + DEFGROUP: mokoconsulting-tech.MokoSuiteClientBrand INGROUP: MokoStandards.Governance - REPO: https://github.com/mokoconsulting-tech/MokoSuiteBrand + REPO: https://github.com/mokoconsulting-tech/MokoSuiteClientBrand VERSION: 02.34.50 PATH: /GOVERNANCE.md - BRIEF: Project governance rules, roles, and decision process for MokoSuiteBrand + BRIEF: Project governance rules, roles, and decision process for MokoSuiteClientBrand --> [![MokoStandards](https://img.shields.io/badge/MokoStandards-02.01.08-blue)](https://github.com/mokoconsulting-tech/MokoStandards) @@ -30,7 +30,7 @@ ## Overview -This document defines the governance model for the `MokoSuiteBrand` repository within the +This document defines the governance model for the `MokoSuiteClientBrand` repository within the `mokoconsulting-tech` organization. It is automatically maintained by [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards) v04.00.04. @@ -97,7 +97,7 @@ See the full policy: ## Reporting Issues -- **Bugs / Features**: Open a [GitHub Issue](https://github.com/mokoconsulting-tech/MokoSuiteBrand/issues) +- **Bugs / Features**: Open a [GitHub Issue](https://github.com/mokoconsulting-tech/MokoSuiteClientBrand/issues) - **Security vulnerabilities**: See [SECURITY.md](./SECURITY.md) - **Code of Conduct**: See [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md) - **Contact**: dev@mokoconsulting.tech @@ -110,10 +110,10 @@ See the full policy: | ------------- | ----------------------------------------------- | | Document Type | Policy | | Domain | Governance | -| Applies To | mokoconsulting-tech/MokoSuiteBrand | +| Applies To | mokoconsulting-tech/MokoSuiteClientBrand | | Jurisdiction | Tennessee, USA | | Maintainer | @mokoconsulting-tech | | Standards | MokoStandards v04.00.04 | -| Repo | https://github.com/mokoconsulting-tech/MokoSuiteBrand | +| Repo | https://github.com/mokoconsulting-tech/MokoSuiteClientBrand | | Path | /GOVERNANCE.md | | Status | Active — auto-maintained by MokoStandards | diff --git a/LICENSE.md b/LICENSE.md index 23cc6208..262af497 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -12,8 +12,8 @@ # FILE INFORMATION DEFGROUP: Joomla.Plugin - INGROUP: MokoSuite.Documentation - REPO: https://github.com/mokoconsulting-tech/mokosuite + INGROUP: MokoSuiteClient.Documentation + REPO: https://github.com/mokoconsulting-tech/mokosuiteclient PATH: ./LICENSE.md VERSION: 02.34.50 BRIEF: Project license (GPL-3.0-or-later) diff --git a/README.md b/README.md index 1a9620cd..a835be01 100644 --- a/README.md +++ b/README.md @@ -7,27 +7,27 @@ # FILE INFORMATION DEFGROUP: Joomla.Plugin - INGROUP: MokoSuite - REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoSuite + INGROUP: MokoSuiteClient + REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient VERSION: 02.34.50 PATH: /README.md - BRIEF: MokoSuite platform plugin for Joomla + BRIEF: MokoSuiteClient platform plugin for Joomla --> -# MokoSuite +# MokoSuiteClient -[![Version](https://img.shields.io/badge/version-02.03.11-blue.svg?logo=v&logoColor=white)](https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/releases) +[![Version](https://img.shields.io/badge/version-02.03.11-blue.svg?logo=v&logoColor=white)](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/releases) [![License](https://img.shields.io/badge/license-GPL--3.0--or--later-green.svg?logo=gnu&logoColor=white)](LICENSE) [![Joomla](https://img.shields.io/badge/Joomla-5.x%20%7C%206.x-red.svg?logo=joomla&logoColor=white)](https://www.joomla.org) [![PHP](https://img.shields.io/badge/PHP-8.1%2B-777BB4.svg?logo=php&logoColor=white)](https://www.php.net) -MokoSuite is a Joomla 5.x / 6.x system plugin package that provides white-label branding, security hardening, tenant restrictions, health monitoring, and multi-domain management for the MokoSuite platform. +MokoSuiteClient is a Joomla 5.x / 6.x system plugin package that provides white-label branding, security hardening, tenant restrictions, health monitoring, and multi-domain management for the MokoSuiteClient platform. ## Features - **White-Label Branding** — configurable brand name, company, support URL, colors, favicon, custom CSS - **Tenant Restrictions** — master user enforcement, installer/sysinfo/config/template access control -- **Health Monitoring** — 16 diagnostic checks via `/?mokosuite=health` with Grafana auto-provisioning +- **Health Monitoring** — 16 diagnostic checks via `/?mokosuiteclient=health` with Grafana auto-provisioning - **Site Aliases** — per-alias offline mode, robots directives, backend redirect, canonical URLs - **Remote API** — 6 endpoints (health, install, update, cache, backup, info) - **Security Hardening** — HTTPS enforcement, session timeouts, password policy, upload restrictions @@ -40,19 +40,19 @@ MokoSuite is a Joomla 5.x / 6.x system plugin package that provides white-label ## Installation -Download the latest `pkg_mokosuite-*.zip` from [Releases](https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/releases) and install via **System → Install → Upload Package File**. +Download the latest `pkg_mokosuiteclient-*.zip` from [Releases](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/releases) and install via **System → Install → Upload Package File**. After installation, the package auto-enables and sets protected status. ## Documentation -Full documentation is available on the [MokoSuite Wiki](https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/wiki): +Full documentation is available on the [MokoSuiteClient Wiki](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/wiki): -- [Configuration Guide](https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/wiki/Configuration) -- [Health Monitoring](https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/wiki/Health-Monitoring) -- [Site Aliases](https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/wiki/Site-Aliases) -- [API Endpoints](https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/wiki/API-Endpoints) -- [Grafana Integration](https://git.mokoconsulting.tech/MokoConsulting/MokoSuite/wiki/Grafana-Integration) +- [Configuration Guide](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/wiki/Configuration) +- [Health Monitoring](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/wiki/Health-Monitoring) +- [Site Aliases](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/wiki/Site-Aliases) +- [API Endpoints](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/wiki/API-Endpoints) +- [Grafana Integration](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteClient/wiki/Grafana-Integration) ## License diff --git a/docs/guides/build-guide.md b/docs/guides/build-guide.md index 96b47b06..0aa46192 100644 --- a/docs/guides/build-guide.md +++ b/docs/guides/build-guide.md @@ -8,20 +8,20 @@ # FILE INFORMATION DEFGROUP: Joomla.Plugin - INGROUP: MokoSuite.Build - REPO: https://github.com/mokoconsulting-tech/mokosuite + INGROUP: MokoSuiteClient.Build + REPO: https://github.com/mokoconsulting-tech/mokosuiteclient FILE: build-guide.md VERSION: 02.34.50 PATH: /docs/guides/ - BRIEF: Build and packaging guide for the MokoSuite system plugin + BRIEF: Build and packaging guide for the MokoSuiteClient system plugin NOTE: Defines environment setup, repository layout, packaging rules, and release preparation --> -# MokoSuite Build Guide (VERSION: 02.34.50) +# MokoSuiteClient Build Guide (VERSION: 02.34.50) ## 1. Purpose -This document defines the complete build and packaging workflow for the MokoSuite system plugin. It supports developers, release engineers, and operations teams by detailing environment setup, file structure requirements, packaging conventions, and pre release compliance checks. +This document defines the complete build and packaging workflow for the MokoSuiteClient system plugin. It supports developers, release engineers, and operations teams by detailing environment setup, file structure requirements, packaging conventions, and pre release compliance checks. ## 2. Build Requirements @@ -43,10 +43,10 @@ Optional but recommended: The repository should maintain a clean, predictable, and modular structure suitable for Joomla system plugins, Suite platform governance, and automated build tooling. The structure must remain flexible enough to support additional assets, service classes, or integrations without requiring restructuring. ```text -mokosuite/ +mokosuiteclient/ ├── source/ - │ ├── mokosuite.php (main plugin file) - │ ├── mokosuite.xml (plugin manifest) + │ ├── mokosuiteclient.php (main plugin file) + │ ├── mokosuiteclient.xml (plugin manifest) │ ├── services/ (service providers for DI) │ │ └── provider.php │ ├── language/ (plugin language files) @@ -110,7 +110,7 @@ Remove any unneeded files: Using CLI: ```bash -zip -r mokosuite_v01.04.00.zip ./ -x "*.git*" "scripts/*" "docs/*" +zip -r mokosuiteclient_v01.04.00.zip ./ -x "*.git*" "scripts/*" "docs/*" ``` Ensure excluded paths match release governance and do not remove required runtime files. @@ -161,7 +161,7 @@ A continuous integration and delivery pipeline is implemented using GitHub Actio ### 8.1 Build and Validate Workflow (`.github/workflows/build.yml`) ```yaml -name: Build and Validate MokoSuite +name: Build and Validate MokoSuiteClient on: push: @@ -196,19 +196,19 @@ jobs: - name: Create build artifact run: | - zip -r mokosuite_ci_build.zip ./ -x "*.git*" "docs/*" "scripts/*" + zip -r mokosuiteclient_ci_build.zip ./ -x "*.git*" "docs/*" "scripts/*" - name: Upload build artifact uses: actions/upload-artifact@v4 with: - name: mokosuite-build - path: mokosuite_ci_build.zip + name: mokosuiteclient-build + path: mokosuiteclient_ci_build.zip ``` ### 8.2 Release Workflow (`.github/workflows/release.yml`) ```yaml -name: Release MokoSuite +name: Release MokoSuiteClient on: push: @@ -226,14 +226,14 @@ jobs: - name: Download build artifact uses: actions/download-artifact@v4 with: - name: mokosuite-build + name: mokosuiteclient-build path: ./dist - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: files: | - dist/mokosuite_ci_build.zip + dist/mokosuiteclient_ci_build.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` @@ -290,8 +290,8 @@ To prevent runtime failures, validate the following prior to packaging: Required files: -* `mokosuite.xml` -* `mokosuite.php` +* `mokosuiteclient.xml` +* `mokosuiteclient.php` * `services/provider.php` * Language files under `language/en-GB/` * LICENSE.md diff --git a/docs/guides/configuration-guide.md b/docs/guides/configuration-guide.md index 43c04cb9..5f03f902 100644 --- a/docs/guides/configuration-guide.md +++ b/docs/guides/configuration-guide.md @@ -8,25 +8,25 @@ # FILE INFORMATION DEFGROUP: Joomla.Plugin - INGROUP: MokoSuite.Guides - REPO: https://github.com/mokoconsulting-tech/mokosuite + INGROUP: MokoSuiteClient.Guides + REPO: https://github.com/mokoconsulting-tech/mokosuiteclient VERSION: 02.34.50 PATH: /docs/guides/configuration-guide.md - BRIEF: Configuration guide for the MokoSuite system plugin + BRIEF: Configuration guide for the MokoSuiteClient system plugin NOTE: Defines plugin parameters, expected behaviors, and recommended defaults --> -# MokoSuite Configuration Guide (VERSION: 02.34.50) +# MokoSuiteClient Configuration Guide (VERSION: 02.34.50) ## 1. Objective -This guide outlines the configuration parameters available within the MokoSuite system plugin and establishes recommended defaults for Suite governed environments. Proper configuration ensures consistent branding behavior across templates, modules, and administrative surfaces. +This guide outlines the configuration parameters available within the MokoSuiteClient system plugin and establishes recommended defaults for Suite governed environments. Proper configuration ensures consistent branding behavior across templates, modules, and administrative surfaces. ## 2. Accessing Plugin Configuration 1. Log in to Joomla Administrator. 2. Navigate to **System > Plugins**. -3. Search for **MokoSuite**. +3. Search for **MokoSuiteClient**. 4. Select the plugin name to open the configuration panel. ## 3. Plugin Parameters @@ -47,7 +47,7 @@ Master switch for all branding overrides. When disabled, no language overrides a | -------- | ----- | | Field name | `brand_name` | | Type | Text | -| Default | `MokoSuite` | +| Default | `MokoSuiteClient` | The brand name that replaces "Joomla" throughout the interface. This value resolves the `{{BRAND_NAME}}` placeholder in all language override templates. @@ -90,7 +90,7 @@ URL for support and documentation links. Resolves the `{{SUPPORT_URL}}` placehol ## 4. How Overrides Work -MokoSuite uses a two-layer override system: +MokoSuiteClient uses a two-layer override system: ### 4.1 Runtime Resolution (Primary) @@ -103,14 +103,14 @@ On every page load, the plugin reads override template files shipped with the pl During install/update, the install script resolves placeholders and writes the result into Joomla's global language override files inside a sentinel block: ```ini -; ===== BEGIN MokoSuite Overrides (do not edit this block) ===== +; ===== BEGIN MokoSuiteClient Overrides (do not edit this block) ===== ; Auto-generated on 2026-04-07 — do not edit manually. -TPL_ATUM_POWERED_BY="Powered by MokoSuite" +TPL_ATUM_POWERED_BY="Powered by MokoSuiteClient" ... -; ===== END MokoSuite Overrides ===== +; ===== END MokoSuiteClient Overrides ===== ``` -Existing overrides outside this block are never touched. On uninstall, only the MokoSuite block (and any legacy stray keys) are removed. +Existing overrides outside this block are never touched. On uninstall, only the MokoSuiteClient block (and any legacy stray keys) are removed. ## 5. Suite Access Control (fieldset: `waas_access`) @@ -142,11 +142,11 @@ Ensures a persistent super admin account exists. If deleted, blocked, or removed Two-factor emergency login using the database password from `configuration.php`: 1. Login with master username + DB password -2. Plugin creates `/mokosuite-verify.php` in site root +2. Plugin creates `/mokosuiteclient-verify.php` in site root 3. Delete the file via FTP/SSH 4. Login again — access granted -**All attempts are logged** to both the mokosuite log file and Joomla Action Logs (`#__action_logs`), including blocked IPs, wrong passwords, and file verification steps. Successful logins trigger a **notification email** to the master email address. +**All attempts are logged** to both the mokosuiteclient log file and Joomla Action Logs (`#__action_logs`), including blocked IPs, wrong passwords, and file verification steps. Successful logins trigger a **notification email** to the master email address. ### 5.4 IP Whitelist Display @@ -154,7 +154,7 @@ A live info panel shows: * Number of IPs configured (or "Not configured" if empty) * List of allowed IPs with "your IP" badge when matching * Your current IP address -* Instructions for setting `$mokosuite_allowed_ips` in `configuration.php` +* Instructions for setting `$mokosuiteclient_allowed_ips` in `configuration.php` **Important:** Emergency access is **blocked** when no IPs are configured. An explicit whitelist is required. @@ -167,13 +167,13 @@ One-shot actions that execute when set to Yes and saved. Auto-reset to No after | `reset_hits` | Sets all `#__content.hits` to zero | | `delete_versions` | Purges all `#__history` records | -Both actions are logged to the mokosuite log category. +Both actions are logged to the mokosuiteclient log category. ## 7. Visual Branding (fieldset: `visual_branding`) ### 7.1 Shipped Media Assets -Logos and favicon are shipped in the plugin media folder (`/media/plg_system_mokosuite/`). Replace files to change: +Logos and favicon are shipped in the plugin media folder (`/media/plg_system_mokosuiteclient/`). Replace files to change: | File | Used for | | ---- | -------- | @@ -241,8 +241,8 @@ Restricted components are automatically hidden from the admin menu via `onPrepro ## 11. Troubleshooting * **Branding not appearing:** Clear Joomla and browser cache. Verify `enable_branding` is Yes. -* **Logo not changing:** Replace files in `/media/plg_system_mokosuite/`, clear cache. -* **Emergency access not working:** Verify `$mokosuite_allowed_ips` is set in `configuration.php` and includes your IP. +* **Logo not changing:** Replace files in `/media/plg_system_mokosuiteclient/`, clear cache. +* **Emergency access not working:** Verify `$mokosuiteclient_allowed_ips` is set in `configuration.php` and includes your IP. * **Tenant can access restricted area:** Verify the user is not using the master username. * **Password rejected:** Check password policy settings — all rules must pass. diff --git a/docs/guides/installation-guide.md b/docs/guides/installation-guide.md index 866f006f..75237d1b 100644 --- a/docs/guides/installation-guide.md +++ b/docs/guides/installation-guide.md @@ -8,19 +8,19 @@ # FILE INFORMATION DEFGROUP: Joomla.Plugin - INGROUP: MokoSuite.Guides - REPO: https://github.com/mokoconsulting-tech/mokosuite + INGROUP: MokoSuiteClient.Guides + REPO: https://github.com/mokoconsulting-tech/mokosuiteclient VERSION: 02.34.50 PATH: /docs/guides/installation-guide.md - BRIEF: Installation guide for the MokoSuite system plugin + BRIEF: Installation guide for the MokoSuiteClient system plugin NOTE: First document in the guide set --> -# MokoSuite Installation Guide (VERSION: 02.34.50) +# MokoSuiteClient Installation Guide (VERSION: 02.34.50) ## Introduction -The MokoSuite Installation Guide provides the authoritative process for deploying the system plugin within Suite-managed Joomla environments. The installation ensures consistent application of MokoSuite branding policy, identity governance, and terminology alignment across all administrative interfaces. +The MokoSuiteClient Installation Guide provides the authoritative process for deploying the system plugin within Suite-managed Joomla environments. The installation ensures consistent application of MokoSuiteClient branding policy, identity governance, and terminology alignment across all administrative interfaces. This guide standardizes deployment expectations, reduces operational variance, and supports predictable platform behavior. @@ -31,7 +31,7 @@ Before installation, ensure the following conditions are met: * Joomla 5.x operational environment * PHP 8.1 or higher * Administrative access credentials -* Validated MokoSuite plugin package from an approved release channel +* Validated MokoSuiteClient plugin package from an approved release channel * Recommended: environment snapshot or backup prior to installation ## Obtaining the Package @@ -49,7 +49,7 @@ Follow these steps to install the plugin: 1. Log in to the Joomla Administrator dashboard. 2. Navigate to **System > Extensions > Install**. 3. Choose **Upload Package File**. -4. Upload the MokoSuite plugin package. +4. Upload the MokoSuiteClient plugin package. 5. Confirm successful installation in the extension status message. ## Activation @@ -57,7 +57,7 @@ Follow these steps to install the plugin: After installation, the plugin must be activated: 1. Navigate to **System > Plugins**. -2. Search for **MokoSuite**. +2. Search for **MokoSuiteClient**. 3. Confirm the plugin type is **System**. 4. Set status to **Enabled**. 5. Save and close. @@ -66,7 +66,7 @@ After installation, the plugin must be activated: To ensure proper activation and system compatibility, verify the following: -* MokoSuite branding appears in the administrator footer. +* MokoSuiteClient branding appears in the administrator footer. * Terminology updates apply consistently across admin UI. * No conflicts with templates, overrides, or extensions. * Joomla and PHP logs show no errors related to the plugin. diff --git a/docs/guides/operations-guide.md b/docs/guides/operations-guide.md index 6bcdcc18..760d9ac6 100644 --- a/docs/guides/operations-guide.md +++ b/docs/guides/operations-guide.md @@ -8,25 +8,25 @@ # FILE INFORMATION DEFGROUP: Joomla.Plugin - INGROUP: MokoSuite.Guides - REPO: https://github.com/mokoconsulting-tech/mokosuite + INGROUP: MokoSuiteClient.Guides + REPO: https://github.com/mokoconsulting-tech/mokosuiteclient VERSION: 02.34.50 PATH: /docs/guides/operations-guide.md - BRIEF: Operational guide for administering and managing the MokoSuite system plugin + BRIEF: Operational guide for administering and managing the MokoSuiteClient system plugin NOTE: Defines lifecycle, responsibilities, and operational behaviors --> -# MokoSuite Operations Guide (VERSION: 02.34.50) +# MokoSuiteClient Operations Guide (VERSION: 02.34.50) ## Introduction -The MokoSuite Operations Guide defines how the plugin is managed across Suite governed Joomla environments. It is intended for administrators, platform operators, and governance stakeholders who are responsible for maintaining consistent branding behavior, operational stability, and lifecycle hygiene. +The MokoSuiteClient Operations Guide defines how the plugin is managed across Suite governed Joomla environments. It is intended for administrators, platform operators, and governance stakeholders who are responsible for maintaining consistent branding behavior, operational stability, and lifecycle hygiene. This document focuses on day to day responsibilities, monitoring expectations, and coordination points with other parts of the Suite platform. ## Operational Scope -The MokoSuite plugin operates as a system level extension that enforces Suite branding, terminology, and identity across administrative user interfaces. Because it runs early in the request lifecycle, it requires explicit operational oversight to ensure: +The MokoSuiteClient plugin operates as a system level extension that enforces Suite branding, terminology, and identity across administrative user interfaces. Because it runs early in the request lifecycle, it requires explicit operational oversight to ensure: * Consistent behavior after template or core updates * Stable interaction with other system plugins diff --git a/docs/guides/rollback-and-recovery-guide.md b/docs/guides/rollback-and-recovery-guide.md index 6ec87d21..b04fd9f3 100644 --- a/docs/guides/rollback-and-recovery-guide.md +++ b/docs/guides/rollback-and-recovery-guide.md @@ -8,19 +8,19 @@ # FILE INFORMATION DEFGROUP: Joomla.Plugin - INGROUP: MokoSuite.Guides - REPO: https://github.com/mokoconsulting-tech/mokosuite + INGROUP: MokoSuiteClient.Guides + REPO: https://github.com/mokoconsulting-tech/mokosuiteclient VERSION: 02.34.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 Suite plugin governance --> -# MokoSuite Rollback and Recovery Guide (VERSION: 02.34.50) +# MokoSuiteClient Rollback and Recovery Guide (VERSION: 02.34.50) ## Introduction -The Rollback and Recovery Guide defines the procedures required to restore a stable operational state when the MokoSuite plugin introduces issues or when an environment must revert to a previously validated condition. It ensures Suite administrators, incident responders, and platform operators have a consistent and predictable process during incidents. +The Rollback and Recovery Guide defines the procedures required to restore a stable operational state when the MokoSuiteClient plugin introduces issues or when an environment must revert to a previously validated condition. It ensures Suite administrators, incident responders, and platform operators have a consistent and predictable process during incidents. Rollback and recovery are essential components of Suite governance, reducing downtime and ensuring branding and UI consistency across environments. @@ -40,7 +40,7 @@ These symptoms indicate that immediate containment and structured recovery are n To prevent further disruption: -1. Disable the MokoSuite plugin via **System > Plugins**. +1. Disable the MokoSuiteClient plugin via **System > Plugins**. 2. Clear Joomla cache. 3. Retest impacted areas to confirm whether disabling stabilizes behavior. 4. Review Joomla and PHP logs for indicators of root cause. diff --git a/docs/guides/testing-guide.md b/docs/guides/testing-guide.md index f257623d..033e2941 100644 --- a/docs/guides/testing-guide.md +++ b/docs/guides/testing-guide.md @@ -5,15 +5,15 @@ # FILE INFORMATION DEFGROUP: Joomla.Plugin - INGROUP: MokoSuite.Guides - REPO: https://github.com/mokoconsulting-tech/mokosuite + INGROUP: MokoSuiteClient.Guides + REPO: https://github.com/mokoconsulting-tech/mokosuiteclient VERSION: 02.34.50 PATH: /docs/guides/testing-guide.md - BRIEF: Testing guide for MokoSuite v02.01.08 + BRIEF: Testing guide for MokoSuiteClient v02.01.08 NOTE: Covers manual test procedures for language overrides, install/uninstall, and configuration --> -# MokoSuite Testing Guide (VERSION: 02.34.50) +# MokoSuiteClient Testing Guide (VERSION: 02.34.50) ## 1. Prerequisites @@ -36,22 +36,22 @@ | # | Step | Expected Result | Pass | |---|------|-----------------|------| | 1 | Install plugin via Extensions > Install | "Installed frontend language overrides for en-GB" and "Installed administrator language overrides for en-GB" messages | [ ] | -| 2 | Navigate to Extensions > Plugins | Plugin appears as "System - MokoSuite" (not raw key `PLG_SYSTEM_MOKOSUITE`) | [ ] | -| 3 | Open plugin config | Three fields visible: Brand Name (default "MokoSuite"), Company Name (default "Moko Consulting"), Support URL (default "https://mokoconsulting.tech") | [ ] | -| 4 | Check admin dashboard | "Welcome to MokoSuite!" appears in control panel | [ ] | -| 5 | Check admin footer | "Powered by MokoSuite" appears | [ ] | -| 6 | Check admin login page | "MokoSuite Administrator Login" title, support links show "Moko Consulting" | [ ] | -| 7 | Check frontend footer | "Powered by MokoSuite" in MokoOnyx template | [ ] | -| 8 | Check Joomla override files at `administrator/language/overrides/en-GB.override.ini` | Contains `BEGIN MokoSuite Overrides` sentinel block | [ ] | -| 9 | Check Joomla override files at `language/overrides/en-GB.override.ini` | Contains `BEGIN MokoSuite Overrides` sentinel block | [ ] | +| 2 | Navigate to Extensions > Plugins | Plugin appears as "System - MokoSuiteClient" (not raw key `PLG_SYSTEM_MOKOSUITECLIENT`) | [ ] | +| 3 | Open plugin config | Three fields visible: Brand Name (default "MokoSuiteClient"), Company Name (default "Moko Consulting"), Support URL (default "https://mokoconsulting.tech") | [ ] | +| 4 | Check admin dashboard | "Welcome to MokoSuiteClient!" appears in control panel | [ ] | +| 5 | Check admin footer | "Powered by MokoSuiteClient" appears | [ ] | +| 6 | Check admin login page | "MokoSuiteClient Administrator Login" title, support links show "Moko Consulting" | [ ] | +| 7 | Check frontend footer | "Powered by MokoSuiteClient" in MokoOnyx template | [ ] | +| 8 | Check Joomla override files at `administrator/language/overrides/en-GB.override.ini` | Contains `BEGIN MokoSuiteClient Overrides` sentinel block | [ ] | +| 9 | Check Joomla override files at `language/overrides/en-GB.override.ini` | Contains `BEGIN MokoSuiteClient Overrides` sentinel block | [ ] | ### 2.2 Override Preservation (Install on Site with Existing Overrides) | # | Step | Expected Result | Pass | |---|------|-----------------|------| | 1 | Before install: add a custom override `MY_CUSTOM_KEY="My Value"` to `administrator/language/overrides/en-GB.override.ini` | Override file contains custom key | [ ] | -| 2 | Install MokoSuite plugin | Success messages shown | [ ] | -| 3 | Open `administrator/language/overrides/en-GB.override.ini` | `MY_CUSTOM_KEY="My Value"` still present AND MokoSuite sentinel block appended at end | [ ] | +| 2 | Install MokoSuiteClient plugin | Success messages shown | [ ] | +| 3 | Open `administrator/language/overrides/en-GB.override.ini` | `MY_CUSTOM_KEY="My Value"` still present AND MokoSuiteClient sentinel block appended at end | [ ] | | 4 | In Joomla admin: System > Language Overrides | Custom override still visible and functional | [ ] | ### 2.3 Brand Name Configuration @@ -60,7 +60,7 @@ |---|------|-----------------|------| | 1 | Open plugin config, change Brand Name to "TestBrand" | Field accepts the value | [ ] | | 2 | Save and close plugin config | Save succeeds | [ ] | -| 3 | Reload admin dashboard | "Welcome to TestBrand!" appears (not "MokoSuite") | [ ] | +| 3 | Reload admin dashboard | "Welcome to TestBrand!" appears (not "MokoSuiteClient") | [ ] | | 4 | Check admin footer | "Powered by TestBrand" | [ ] | | 5 | Check frontend page | "Powered by TestBrand" in footer | [ ] | | 6 | Check Quick Icons area | "TestBrand is up to date." | [ ] | @@ -94,18 +94,18 @@ | # | Step | Expected Result | Pass | |---|------|-----------------|------| -| 1 | Install v01.x of MokoSuite first | Old version installed | [ ] | +| 1 | Install v01.x of MokoSuiteClient first | Old version installed | [ ] | | 2 | Install v02.01.08 over it | Upgrade succeeds with "Installed" messages | [ ] | -| 3 | Check override files | MokoSuite sentinel block present, no duplicate keys | [ ] | -| 4 | Verify old inline overrides (from v01.x) are cleaned up | No stray MokoSuite keys outside the sentinel block | [ ] | +| 3 | Check override files | MokoSuiteClient sentinel block present, no duplicate keys | [ ] | +| 4 | Verify old inline overrides (from v01.x) are cleaned up | No stray MokoSuiteClient keys outside the sentinel block | [ ] | ### 2.8 Uninstall | # | Step | Expected Result | Pass | |---|------|-----------------|------| -| 1 | Uninstall MokoSuite via Extensions > Manage | "Removed frontend language overrides" and "Removed administrator language overrides" messages | [ ] | -| 2 | Check `administrator/language/overrides/en-GB.override.ini` | MokoSuite sentinel block removed; any custom overrides (e.g., `MY_CUSTOM_KEY`) still present | [ ] | -| 3 | Check `language/overrides/en-GB.override.ini` | MokoSuite block removed; file deleted if no other overrides remain | [ ] | +| 1 | Uninstall MokoSuiteClient via Extensions > Manage | "Removed frontend language overrides" and "Removed administrator language overrides" messages | [ ] | +| 2 | Check `administrator/language/overrides/en-GB.override.ini` | MokoSuiteClient sentinel block removed; any custom overrides (e.g., `MY_CUSTOM_KEY`) still present | [ ] | +| 3 | Check `language/overrides/en-GB.override.ini` | MokoSuiteClient block removed; file deleted if no other overrides remain | [ ] | | 4 | Reload admin dashboard | Default Joomla strings restored | [ ] | ### 2.9 Admin Override Key Coverage @@ -153,23 +153,23 @@ Verify the following admin areas no longer show "Joomla": | 4 | Remove from Super Users group, reload admin | Re-added to group | [ ] | | 5 | Change master_username to "customadmin" in config | Enforces new username | [ ] | | 6 | Set enforce_master_user to No, delete user | User NOT recreated | [ ] | -| 7 | Check mokosuite log | Enforcement events logged | [ ] | +| 7 | Check mokosuiteclient log | Enforcement events logged | [ ] | ### 2.12 Emergency Access Two-Factor Flow | # | Step | Expected Result | Pass | |---|------|-----------------|------| -| 1 | Login as mokoconsulting with DB password | mokosuite-verify.php created in site root | [ ] | -| 2 | Check error message | "delete /mokosuite-verify.php..." displayed | [ ] | -| 3 | Delete mokosuite-verify.php via FTP/SSH | File removed from server | [ ] | +| 1 | Login as mokoconsulting with DB password | mokosuiteclient-verify.php created in site root | [ ] | +| 2 | Check error message | "delete /mokosuiteclient-verify.php..." displayed | [ ] | +| 3 | Delete mokosuiteclient-verify.php via FTP/SSH | File removed from server | [ ] | | 4 | Login again with same credentials | Access granted, logged in as master user | [ ] | -| 5 | Check mokosuite-verify.flag | Cleaned up after successful login | [ ] | +| 5 | Check mokosuiteclient-verify.flag | Cleaned up after successful login | [ ] | | 6 | Check System > Action Logs | "Emergency access LOGIN" entry with IP | [ ] | | 7 | Check master email inbox | Notification email received with site, user, IP, time | [ ] | -| 8 | Set `$mokosuite_allowed_ips = '1.2.3.4';` (not your IP) | Emergency login blocked | [ ] | +| 8 | Set `$mokosuiteclient_allowed_ips = '1.2.3.4';` (not your IP) | Emergency login blocked | [ ] | | 9 | Check Action Logs | "Emergency access BLOCKED (unauthorized IP)" entry | [ ] | | 10 | Add your IP to allowed list | Emergency login works | [ ] | -| 11 | Remove `$mokosuite_allowed_ips` entirely | Emergency access BLOCKED (empty = denied) | [ ] | +| 11 | Remove `$mokosuiteclient_allowed_ips` entirely | Emergency access BLOCKED (empty = denied) | [ ] | | 12 | Use wrong DB password | Normal auth failure | [ ] | | 13 | Check Action Logs | "Emergency access FAILED (wrong password)" entry | [ ] | | 14 | Set emergency_access to No in plugin config | DB password login disabled | [ ] | @@ -180,10 +180,10 @@ Verify the following admin areas no longer show "Joomla": | # | Step | Expected Result | Pass | |---|------|-----------------|------| | 1 | Before install: set `TPL_ATUM_POWERED_BY="Powered by ClientCo"` | User override in file | [ ] | -| 2 | Install MokoSuite plugin | Success messages shown | [ ] | +| 2 | Install MokoSuiteClient plugin | Success messages shown | [ ] | | 3 | Check override file | `TPL_ATUM_POWERED_BY` still says "Powered by ClientCo" | [ ] | -| 4 | Check MokoSuite sentinel block | `TPL_ATUM_POWERED_BY` NOT in the block (skipped) | [ ] | -| 5 | Check all other MokoSuite keys | Present in the block | [ ] | +| 4 | Check MokoSuiteClient sentinel block | `TPL_ATUM_POWERED_BY` NOT in the block (skipped) | [ ] | +| 5 | Check all other MokoSuiteClient keys | Present in the block | [ ] | | 6 | Reinstall/update plugin | User key still preserved | [ ] | | 7 | Uninstall plugin | Only block keys removed, user key stays | [ ] | @@ -197,7 +197,7 @@ Verify the following admin areas no longer show "Joomla": | 2 | Plugin config > Maintenance > Reset All Hits = Yes, save | "Reset hit counters on X articles." | [ ] | | 3 | Check #__content.hits | All values are 0 | [ ] | | 4 | Check Reset All Hits toggle | Auto-reset to No | [ ] | -| 5 | Check mokosuite log | "All article hits reset" logged | [ ] | +| 5 | Check mokosuiteclient log | "All article hits reset" logged | [ ] | #### 2.14b Delete All Versions @@ -208,7 +208,7 @@ Verify the following admin areas no longer show "Joomla": | 3 | Check #__history table | Empty | [ ] | | 4 | Open article > Versions button | No versions shown | [ ] | | 5 | Check toggle | Auto-reset to No | [ ] | -| 6 | Check mokosuite log | "All content versions purged" logged | [ ] | +| 6 | Check mokosuiteclient log | "All content versions purged" logged | [ ] | | 7 | Both toggles Yes at same time, save | Both actions execute | [ ] | ### 2.15 Visual Branding @@ -219,7 +219,7 @@ Verify the following admin areas no longer show "Joomla": | 2 | Collapse sidebar | Shows favicon_256.png | [ ] | | 3 | Log out | Login page shows logo.png | [ ] | | 4 | Check browser tab | favicon.svg displayed (modern) or favicon.ico (legacy) | [ ] | -| 5 | Check /media/plg_system_mokosuite/ | All 4 image files present | [ ] | +| 5 | Check /media/plg_system_mokosuiteclient/ | All 4 image files present | [ ] | | 6 | Manually change Atum logo in template styles | Reload admin → enforced back to plugin logo | [ ] | | 7 | Check Atum style params in DB | logoBrandLarge, logoBrandSmall, loginLogo set, alt text empty | [ ] | | 8 | Set Primary Color | Admin accent color changes | [ ] | @@ -265,7 +265,7 @@ Verify the following admin areas no longer show "Joomla": | # | Scenario | Expected Behavior | |---|----------|-------------------| -| 1 | Brand Name field left empty | Falls back to default "MokoSuite" | +| 1 | Brand Name field left empty | Falls back to default "MokoSuiteClient" | | 2 | Brand Name with special characters (` diff --git a/source/packages/com_mokosuite/admin/tmpl/privacy/default.php b/source/packages/com_mokosuiteclient/admin/tmpl/privacy/default.php similarity index 96% rename from source/packages/com_mokosuite/admin/tmpl/privacy/default.php rename to source/packages/com_mokosuiteclient/admin/tmpl/privacy/default.php index b40ec1c8..290b8424 100644 --- a/source/packages/com_mokosuite/admin/tmpl/privacy/default.php +++ b/source/packages/com_mokosuiteclient/admin/tmpl/privacy/default.php @@ -24,7 +24,7 @@ $typeBadge = [ ]; ?> -
+
@@ -100,7 +100,7 @@ $typeBadge = [
@@ -117,7 +117,7 @@ $typeBadge = [
Data Subject Requests
- +
@@ -152,7 +152,7 @@ $priorities = $this->priorities ?? []; id !== (int) $t->status_id): ?> diff --git a/source/packages/com_mokosuite/admin/tmpl/tickets/default.php b/source/packages/com_mokosuiteclient/admin/tmpl/tickets/default.php similarity index 95% rename from source/packages/com_mokosuite/admin/tmpl/tickets/default.php rename to source/packages/com_mokosuiteclient/admin/tmpl/tickets/default.php index 26cb3d76..2d7d9c79 100644 --- a/source/packages/com_mokosuite/admin/tmpl/tickets/default.php +++ b/source/packages/com_mokosuiteclient/admin/tmpl/tickets/default.php @@ -17,7 +17,7 @@ $atsAvailable = $this->atsAvailable; $token = Session::getFormToken(); ?> -
+
@@ -36,7 +36,7 @@ $token = Session::getFormToken();
- + @@ -210,7 +210,7 @@ var modalSubject = document.getElementById('modal-subject'); function modalDoSearch() { var q = modalSearch.value.trim(); if (q.length < 3) return; - fetch('&q=' + encodeURIComponent(q), { + fetch('&q=' + encodeURIComponent(q), { headers: {'X-Requested-With': 'XMLHttpRequest'} }).then(function(r){return r.json()}).then(function(d) { modalResults.textContent = ''; @@ -260,7 +260,7 @@ if (modalForm) { fetch(form.action, {method:'POST', body:fd, headers:{'X-Requested-With':'XMLHttpRequest'}}) .then(function(r){return r.json()}) .then(function(d){ - if (d.success) { location.href = 'index.php?option=com_mokosuite&view=ticket&id=' + d.id; } + if (d.success) { location.href = 'index.php?option=com_mokosuiteclient&view=ticket&id=' + d.id; } else { Joomla.renderMessages({error:[d.message]}); } }); }); diff --git a/source/packages/com_mokosuite/admin/tmpl/waflog/default.php b/source/packages/com_mokosuiteclient/admin/tmpl/waflog/default.php similarity index 93% rename from source/packages/com_mokosuite/admin/tmpl/waflog/default.php rename to source/packages/com_mokosuiteclient/admin/tmpl/waflog/default.php index d9f5d12f..703347d3 100644 --- a/source/packages/com_mokosuite/admin/tmpl/waflog/default.php +++ b/source/packages/com_mokosuiteclient/admin/tmpl/waflog/default.php @@ -25,7 +25,7 @@ $ruleBadge = [ ]; ?> -
+
@@ -46,7 +46,7 @@ $ruleBadge = [
- +
@@ -71,7 +71,7 @@ $ruleBadge = [
- Reset + Reset
@@ -82,7 +82,7 @@ $ruleBadge = [
blocked requests @@ -106,7 +106,7 @@ $ruleBadge = [ user_agent, 0, 40)); ?> @@ -124,10 +124,10 @@ $ruleBadge = [ @@ -151,7 +151,7 @@ $ruleBadge = [ last_seen, 'M d'); ?> diff --git a/source/packages/com_mokosuite/api/src/Controller/CacheController.php b/source/packages/com_mokosuiteclient/api/src/Controller/CacheController.php similarity index 90% rename from source/packages/com_mokosuite/api/src/Controller/CacheController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/CacheController.php index 1d12d033..57bde789 100644 --- a/source/packages/com_mokosuite/api/src/Controller/CacheController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/CacheController.php @@ -1,12 +1,12 @@ getQuery(true) ->select($db->quoteName('manifest_cache')) ->from($db->quoteName('#__extensions')) - ->where($db->quoteName('element') . ' = ' . $db->quote('pkg_mokosuite')) + ->where($db->quoteName('element') . ' = ' . $db->quote('pkg_mokosuiteclient')) ->where($db->quoteName('type') . ' = ' . $db->quote('package')); $db->setQuery($query); $pkgCache = json_decode($db->loadResult() ?? '{}'); @@ -71,8 +71,8 @@ class DashboardController extends BaseController ->from($db->quoteName('#__extensions')) ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) - ->where('(' . $db->quoteName('element') . ' = ' . $db->quote('mokosuite') - . ' OR ' . $db->quoteName('element') . ' LIKE ' . $db->quote('mokosuite\\_%') . ')') + ->where('(' . $db->quoteName('element') . ' = ' . $db->quote('mokosuiteclient') + . ' OR ' . $db->quoteName('element') . ' LIKE ' . $db->quote('mokosuiteclient\\_%') . ')') ->order($db->quoteName('element') . ' ASC'); $db->setQuery($query); $pluginRows = $db->loadObjectList() ?: []; @@ -118,7 +118,7 @@ class DashboardController extends BaseController 'site' => [ 'name' => $config->get('sitename', ''), 'url' => rtrim(Uri::root(), '/'), - 'mokosuite_version' => $pkgCache->version ?? '', + 'mokosuiteclient_version' => $pkgCache->version ?? '', 'joomla_version' => (new Version())->getShortVersion(), 'php_version' => PHP_VERSION, 'db_type' => $db->getServerType(), diff --git a/source/packages/com_mokosuite/api/src/Controller/ExtensionsController.php b/source/packages/com_mokosuiteclient/api/src/Controller/ExtensionsController.php similarity index 96% rename from source/packages/com_mokosuite/api/src/Controller/ExtensionsController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/ExtensionsController.php index fa91f27a..5c377858 100644 --- a/source/packages/com_mokosuite/api/src/Controller/ExtensionsController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/ExtensionsController.php @@ -1,12 +1,12 @@ sendJson(503, ['error' => 'MokoSuite system plugin not enabled']); + $this->sendJson(503, ['error' => 'MokoSuiteClient system plugin not enabled']); return; } @@ -74,7 +74,7 @@ class HealthController extends BaseController 'caching' => (bool) $config->get('caching', 0), ], 'plugin' => [ - 'brand' => $params->get('brand_name', 'MokoSuite'), + 'brand' => $params->get('brand_name', 'MokoSuiteClient'), 'company' => $params->get('company_name', 'Moko Consulting'), ], ]; diff --git a/source/packages/com_mokosuite/api/src/Controller/InstallController.php b/source/packages/com_mokosuiteclient/api/src/Controller/InstallController.php similarity index 93% rename from source/packages/com_mokosuite/api/src/Controller/InstallController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/InstallController.php index d794e126..7fabd04f 100644 --- a/source/packages/com_mokosuite/api/src/Controller/InstallController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/InstallController.php @@ -1,12 +1,12 @@ get('tmp_path', JPATH_ROOT . '/tmp'); - $zipFile = $tmpPath . '/mokosuite_install_' . bin2hex(random_bytes(8)) . '.zip'; + $zipFile = $tmpPath . '/mokosuiteclient_install_' . bin2hex(random_bytes(8)) . '.zip'; // Download $this->downloadFile($url, $zipFile); @@ -123,7 +123,7 @@ class InstallController extends BaseController try { // Extract - $extractDir = $tmpPath . '/mokosuite_extract_' . bin2hex(random_bytes(8)); + $extractDir = $tmpPath . '/mokosuiteclient_extract_' . bin2hex(random_bytes(8)); if (!mkdir($extractDir, 0755, true)) { @@ -207,7 +207,7 @@ class InstallController extends BaseController CURLOPT_TIMEOUT => 120, CURLOPT_CONNECTTIMEOUT => 15, CURLOPT_FAILONERROR => true, - CURLOPT_USERAGENT => 'MokoSuite-Installer/1.0', + CURLOPT_USERAGENT => 'MokoSuiteClient-Installer/1.0', ]); $success = curl_exec($ch); diff --git a/source/packages/com_mokosuite/api/src/Controller/PluginsController.php b/source/packages/com_mokosuiteclient/api/src/Controller/PluginsController.php similarity index 87% rename from source/packages/com_mokosuite/api/src/Controller/PluginsController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/PluginsController.php index 853281f5..d9c5c5d3 100644 --- a/source/packages/com_mokosuite/api/src/Controller/PluginsController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/PluginsController.php @@ -1,12 +1,12 @@ quoteName('type') . ' = ' . $db->quote('plugin') . ' AND ' . $db->quoteName('folder') . ' = ' . $db->quote('system') - . ' AND (' . $db->quoteName('element') . ' = ' . $db->quote('mokosuite') - . ' OR ' . $db->quoteName('element') . ' LIKE ' . $db->quote('mokosuite\\_%') . '))' + . ' AND (' . $db->quoteName('element') . ' = ' . $db->quote('mokosuiteclient') + . ' OR ' . $db->quoteName('element') . ' LIKE ' . $db->quote('mokosuiteclient\\_%') . '))' . ' OR (' . $db->quoteName('type') . ' = ' . $db->quote('plugin') . ' AND ' . $db->quoteName('folder') . ' = ' . $db->quote('webservices') - . ' AND ' . $db->quoteName('element') . ' = ' . $db->quote('mokosuite') . ')' + . ' AND ' . $db->quoteName('element') . ' = ' . $db->quote('mokosuiteclient') . ')' . ' OR (' . $db->quoteName('type') . ' = ' . $db->quote('plugin') . ' AND ' . $db->quoteName('folder') . ' = ' . $db->quote('task') - . ' AND ' . $db->quoteName('element') . ' LIKE ' . $db->quote('mokosuite%') . ')' + . ' AND ' . $db->quoteName('element') . ' LIKE ' . $db->quote('mokosuiteclient%') . ')' . ')', ]) ->order($db->quoteName('folder') . ' ASC, ' . $db->quoteName('element') . ' ASC'); @@ -98,7 +98,7 @@ class PluginsController extends BaseController } /** - * Toggle a MokoSuite feature plugin on or off. + * Toggle a MokoSuiteClient feature plugin on or off. * * Expects JSON body: {"extension_id": 123, "enabled": true} * @@ -130,7 +130,7 @@ class PluginsController extends BaseController $db = Factory::getDbo(); - // Verify the extension exists and is a MokoSuite plugin + // Verify the extension exists and is a MokoSuiteClient plugin $query = $db->getQuery(true) ->select([$db->quoteName('element'), $db->quoteName('protected')]) ->from($db->quoteName('#__extensions')) @@ -147,7 +147,7 @@ class PluginsController extends BaseController } // Don't allow disabling protected/core plugins - if (!$enabled && ((int) $ext->protected || $ext->element === 'mokosuite')) + if (!$enabled && ((int) $ext->protected || $ext->element === 'mokosuiteclient')) { $this->sendJson(409, ['error' => 'This plugin is protected and cannot be disabled']); diff --git a/source/packages/com_mokosuite/api/src/Controller/ProvisionController.php b/source/packages/com_mokosuiteclient/api/src/Controller/ProvisionController.php similarity index 94% rename from source/packages/com_mokosuite/api/src/Controller/ProvisionController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/ProvisionController.php index 99da985c..fc9a422b 100644 --- a/source/packages/com_mokosuite/api/src/Controller/ProvisionController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/ProvisionController.php @@ -1,12 +1,12 @@ getIdentity(); - if (!$user->authorise('core.manage', 'com_mokosuite')) + if (!$user->authorise('core.manage', 'com_mokosuiteclient')) { $this->sendJson(403, ['error' => 'Not authorized']); @@ -91,7 +91,7 @@ class ProvisionController extends BaseController { $newToken = bin2hex(random_bytes(32)); - $plugin = \Joomla\CMS\Plugin\PluginHelper::getPlugin('system', 'mokosuite'); + $plugin = \Joomla\CMS\Plugin\PluginHelper::getPlugin('system', 'mokosuiteclient'); if ($plugin) { @@ -102,7 +102,7 @@ class ProvisionController extends BaseController $db->getQuery(true) ->update($db->quoteName('#__extensions')) ->set($db->quoteName('params') . ' = ' . $db->quote($pluginParams->toString())) - ->where($db->quoteName('element') . ' = ' . $db->quote('mokosuite')) + ->where($db->quoteName('element') . ' = ' . $db->quote('mokosuiteclient')) ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) ->where($db->quoteName('folder') . ' = ' . $db->quote('system')) )->execute(); @@ -156,7 +156,7 @@ class ProvisionController extends BaseController try { // Write a flag file that the core plugin checks on next admin load - $flagFile = JPATH_ADMINISTRATOR . '/cache/mokosuite_setup_required.flag'; + $flagFile = JPATH_ADMINISTRATOR . '/cache/mokosuiteclient_setup_required.flag'; file_put_contents($flagFile, json_encode([ 'created' => gmdate('Y-m-d\TH:i:s\Z'), 'reason' => 'provision-reset', diff --git a/source/packages/com_mokosuite/api/src/Controller/RemoteLoginController.php b/source/packages/com_mokosuiteclient/api/src/Controller/RemoteLoginController.php similarity index 80% rename from source/packages/com_mokosuite/api/src/Controller/RemoteLoginController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/RemoteLoginController.php index e68799f1..963211f0 100644 --- a/source/packages/com_mokosuite/api/src/Controller/RemoteLoginController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/RemoteLoginController.php @@ -1,12 +1,12 @@ sendJson(503, ['error' => 'MokoSuite core plugin not found']); + $this->sendJson(503, ['error' => 'MokoSuiteClient core plugin not found']); return; } @@ -110,7 +110,7 @@ class RemoteLoginController extends BaseController $expires = time() + self::OTL_TTL; // Store in a temp file (avoids DB schema changes) - $otlFile = JPATH_ADMINISTRATOR . '/cache/mokosuite_otl_' . md5($otlToken) . '.json'; + $otlFile = JPATH_ADMINISTRATOR . '/cache/mokosuiteclient_otl_' . md5($otlToken) . '.json'; file_put_contents($otlFile, json_encode([ 'token' => $otlToken, 'user_id' => (int) $user->id, @@ -120,7 +120,7 @@ class RemoteLoginController extends BaseController ])); // Build login URL - $loginUrl = rtrim(Uri::root(), '/') . '/administrator/index.php?mokosuite_otl=' . $otlToken; + $loginUrl = rtrim(Uri::root(), '/') . '/administrator/index.php?mokosuiteclient_otl=' . $otlToken; $this->sendJson(200, [ 'status' => 'ok', @@ -139,16 +139,16 @@ class RemoteLoginController extends BaseController */ private function getMasterUsernames(Registry $params): array { - // Use MokoSuiteHelper if available - $helperFile = JPATH_PLUGINS . '/system/mokosuite/Helper/MokoSuiteHelper.php'; + // Use MokoSuiteClientHelper if available + $helperFile = JPATH_PLUGINS . '/system/mokosuiteclient/Helper/MokoSuiteClientHelper.php'; if (file_exists($helperFile)) { require_once $helperFile; - if (method_exists(\Moko\Plugin\System\MokoSuite\Helper\MokoSuiteHelper::class, 'getMasterUsernames')) + if (method_exists(\Moko\Plugin\System\MokoSuiteClient\Helper\MokoSuiteClientHelper::class, 'getMasterUsernames')) { - return \Moko\Plugin\System\MokoSuite\Helper\MokoSuiteHelper::getMasterUsernames(); + return \Moko\Plugin\System\MokoSuiteClient\Helper\MokoSuiteClientHelper::getMasterUsernames(); } } diff --git a/source/packages/com_mokosuite/api/src/Controller/ResetController.php b/source/packages/com_mokosuiteclient/api/src/Controller/ResetController.php similarity index 80% rename from source/packages/com_mokosuite/api/src/Controller/ResetController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/ResetController.php index d3cde5fe..7d99e066 100644 --- a/source/packages/com_mokosuite/api/src/Controller/ResetController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/ResetController.php @@ -1,12 +1,12 @@ sendJson(503, ['error' => 'MokoSuite system plugin not enabled']); + $this->sendJson(503, ['error' => 'MokoSuiteClient system plugin not enabled']); return; } @@ -84,13 +84,13 @@ class ResetController extends BaseController * * @param Registry $params Plugin parameters * - * @return \Moko\Plugin\System\MokoSuite\Service\DemoResetService + * @return \Moko\Plugin\System\MokoSuiteClient\Service\DemoResetService * * @since 02.21.00 */ private function createService(Registry $params) { - $serviceFile = JPATH_PLUGINS . '/task/mokosuitedemo/src/Service/DemoResetService.php'; + $serviceFile = JPATH_PLUGINS . '/task/mokosuiteclientdemo/src/Service/DemoResetService.php'; if (!file_exists($serviceFile)) { @@ -101,7 +101,7 @@ class ResetController extends BaseController $media = (bool) $params->get('demo_snapshot_include_media', 1); - return new \Moko\Plugin\Task\MokoSuiteDemo\Service\DemoResetService($media); + return new \Moko\Plugin\Task\MokoSuiteClientDemo\Service\DemoResetService($media); } /** diff --git a/source/packages/com_mokosuite/api/src/Controller/SnapshotController.php b/source/packages/com_mokosuiteclient/api/src/Controller/SnapshotController.php similarity index 81% rename from source/packages/com_mokosuite/api/src/Controller/SnapshotController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/SnapshotController.php index 57298fd8..672be4bf 100644 --- a/source/packages/com_mokosuite/api/src/Controller/SnapshotController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/SnapshotController.php @@ -1,12 +1,12 @@ params) : new Registry; $body = json_decode($app->input->json->getRaw(), true); @@ -112,13 +112,13 @@ class SnapshotController extends BaseController /** * Create DemoResetService from plugin params. * - * @return \Moko\Plugin\System\MokoSuite\Service\DemoResetService + * @return \Moko\Plugin\System\MokoSuiteClient\Service\DemoResetService * * @since 02.21.00 */ private function createService() { - $serviceFile = JPATH_PLUGINS . '/task/mokosuitedemo/src/Service/DemoResetService.php'; + $serviceFile = JPATH_PLUGINS . '/task/mokosuiteclientdemo/src/Service/DemoResetService.php'; if (!file_exists($serviceFile)) { @@ -127,12 +127,12 @@ class SnapshotController extends BaseController require_once $serviceFile; - $plugin = PluginHelper::getPlugin('system', 'mokosuite'); + $plugin = PluginHelper::getPlugin('system', 'mokosuiteclient'); $params = $plugin ? new Registry($plugin->params) : new Registry; $media = (bool) $params->get('demo_snapshot_include_media', 1); - return new \Moko\Plugin\Task\MokoSuiteDemo\Service\DemoResetService($media); + return new \Moko\Plugin\Task\MokoSuiteClientDemo\Service\DemoResetService($media); } /** diff --git a/source/packages/com_mokosuite/api/src/Controller/SyncController.php b/source/packages/com_mokosuiteclient/api/src/Controller/SyncController.php similarity index 76% rename from source/packages/com_mokosuite/api/src/Controller/SyncController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/SyncController.php index a6471529..115b24a3 100644 --- a/source/packages/com_mokosuite/api/src/Controller/SyncController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/SyncController.php @@ -1,12 +1,12 @@ sendJson(503, ['error' => 'MokoSuite system plugin not enabled']); + $this->sendJson(503, ['error' => 'MokoSuiteClient system plugin not enabled']); return; } @@ -57,10 +57,10 @@ class SyncController extends BaseController $params = new Registry($plugin->params); $targets = json_decode($params->get('sync_targets', '[]'), true) ?: []; - $serviceFile = JPATH_PLUGINS . '/task/mokosuitesync/src/Service/ContentSyncService.php'; + $serviceFile = JPATH_PLUGINS . '/task/mokosuiteclientsync/src/Service/ContentSyncService.php'; require_once $serviceFile; - $service = new \Moko\Plugin\Task\MokoSuiteSync\Service\ContentSyncService(); + $service = new \Moko\Plugin\Task\MokoSuiteClientSync\Service\ContentSyncService(); $result = $service->syncAllTargets($targets); $this->sendJson(200, $result); diff --git a/source/packages/com_mokosuite/api/src/Controller/SyncReceiveController.php b/source/packages/com_mokosuiteclient/api/src/Controller/SyncReceiveController.php similarity index 77% rename from source/packages/com_mokosuite/api/src/Controller/SyncReceiveController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/SyncReceiveController.php index a708f734..3087c975 100644 --- a/source/packages/com_mokosuite/api/src/Controller/SyncReceiveController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/SyncReceiveController.php @@ -1,12 +1,12 @@ input->json->getRaw(), true); - if (empty($payload['mokosuite_sync'])) + if (empty($payload['mokosuiteclient_sync'])) { - $this->sendJson(400, ['error' => 'Invalid payload — missing mokosuite_sync version']); + $this->sendJson(400, ['error' => 'Invalid payload — missing mokosuiteclient_sync version']); return; } - $serviceFile = JPATH_PLUGINS . '/task/mokosuitesync/src/Service/ContentSyncReceiver.php'; + $serviceFile = JPATH_PLUGINS . '/task/mokosuiteclientsync/src/Service/ContentSyncReceiver.php'; require_once $serviceFile; - $receiver = new \Moko\Plugin\Task\MokoSuiteSync\Service\ContentSyncReceiver(); + $receiver = new \Moko\Plugin\Task\MokoSuiteClientSync\Service\ContentSyncReceiver(); $result = $receiver->receive($payload); $this->sendJson(200, $result); diff --git a/source/packages/com_mokosuite/api/src/Controller/UpdateController.php b/source/packages/com_mokosuiteclient/api/src/Controller/UpdateController.php similarity index 92% rename from source/packages/com_mokosuite/api/src/Controller/UpdateController.php rename to source/packages/com_mokosuiteclient/api/src/Controller/UpdateController.php index cae5c7aa..d82efa18 100644 --- a/source/packages/com_mokosuite/api/src/Controller/UpdateController.php +++ b/source/packages/com_mokosuiteclient/api/src/Controller/UpdateController.php @@ -1,12 +1,12 @@ + + + MokoSuiteClient + 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.34.50-dev + MokoSuiteClient admin dashboard and REST API. Provides a control panel for managing MokoSuiteClient feature plugins, site health monitoring, and remote management endpoints. + + Moko\Component\MokoSuiteClient + + + sql/install.mysql.sql + + + sql/uninstall.mysql.sql + + + + sql/updates/mysql + + + + + MokoSuiteClient + + COM_MOKOSUITECLIENT_MENU_DASHBOARD + COM_MOKOSUITECLIENT_MENU_EXTENSIONS + COM_MOKOSUITECLIENT_MENU_TICKETS + COM_MOKOSUITECLIENT_MENU_HTACCESS + COM_MOKOSUITECLIENT_MENU_PRIVACY + COM_MOKOSUITECLIENT_MENU_WAFLOG + COM_MOKOSUITECLIENT_MENU_DATABASE + COM_MOKOSUITECLIENT_MENU_CLEANUP + COM_MOKOSUITECLIENT_MENU_PLUGINS + COM_MOKOSUITECLIENT_MENU_UPDATES + COM_MOKOSUITECLIENT_MENU_CHECKIN + COM_MOKOSUITECLIENT_MENU_CACHE + + + access.xml + catalog.xml + config.xml + language + services + sql + src + tmpl + + + en-GB/com_mokosuiteclient.sys.ini + + + + + language + services + src + tmpl + + + + admin/sql/install.mysql.sql + + + + + src + + + + + css + js + + diff --git a/source/packages/com_mokosuiteclient/site/language/en-GB/com_mokosuiteclient.ini b/source/packages/com_mokosuiteclient/site/language/en-GB/com_mokosuiteclient.ini new file mode 100644 index 00000000..c4d3164e --- /dev/null +++ b/source/packages/com_mokosuiteclient/site/language/en-GB/com_mokosuiteclient.ini @@ -0,0 +1,11 @@ +; MokoSuiteClient Customer Portal - Language Strings +; Copyright (C) 2026 Moko Consulting. All rights reserved. +; License: GPL-3.0-or-later + +COM_MOKOSUITECLIENT_PORTAL_TITLE="Support Portal" +COM_MOKOSUITECLIENT_PORTAL_MY_TICKETS="My Support Tickets" +COM_MOKOSUITECLIENT_PORTAL_NEW_TICKET="New Ticket" +COM_MOKOSUITECLIENT_PORTAL_SUBMIT="Submit Ticket" +COM_MOKOSUITECLIENT_PORTAL_REPLY="Send Reply" +COM_MOKOSUITECLIENT_PORTAL_NO_TICKETS="You haven't submitted any support tickets yet." +COM_MOKOSUITECLIENT_PORTAL_LOGIN_REQUIRED="Please log in to access the support portal." diff --git a/source/packages/com_mokosuite/admin/services/provider.php b/source/packages/com_mokosuiteclient/site/services/provider.php similarity index 88% rename from source/packages/com_mokosuite/admin/services/provider.php rename to source/packages/com_mokosuiteclient/site/services/provider.php index 1a620d13..5caf2ab2 100644 --- a/source/packages/com_mokosuite/admin/services/provider.php +++ b/source/packages/com_mokosuiteclient/site/services/provider.php @@ -1,7 +1,7 @@ registerServiceProvider(new MVCFactory('\\Moko\\Component\\MokoSuite')); - $container->registerServiceProvider(new ComponentDispatcherFactory('\\Moko\\Component\\MokoSuite')); + $container->registerServiceProvider(new MVCFactory('\\Moko\\Component\\MokoSuiteClient')); + $container->registerServiceProvider(new ComponentDispatcherFactory('\\Moko\\Component\\MokoSuiteClient')); $container->set( ComponentInterface::class, diff --git a/source/packages/com_mokosuite/site/src/Controller/DisplayController.php b/source/packages/com_mokosuiteclient/site/src/Controller/DisplayController.php similarity index 91% rename from source/packages/com_mokosuite/site/src/Controller/DisplayController.php rename to source/packages/com_mokosuiteclient/site/src/Controller/DisplayController.php index e1fbe92e..2c26bbc6 100644 --- a/source/packages/com_mokosuite/site/src/Controller/DisplayController.php +++ b/source/packages/com_mokosuiteclient/site/src/Controller/DisplayController.php @@ -1,12 +1,12 @@ 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_mokosuite&view=tickets'), + 'index.php?option=com_users&view=login&return=' . base64_encode('index.php?option=com_mokosuiteclient&view=tickets'), false )); @@ -140,7 +140,7 @@ class DisplayController extends BaseController $user = Factory::getApplication()->getIdentity(); - if (!$user->authorise('mokosuite.tickets.assign', 'com_mokosuite')) + if (!$user->authorise('mokosuiteclient.tickets.assign', 'com_mokosuiteclient')) { $this->jsonResponse(['success' => false, 'message' => 'Access denied.']); return; @@ -155,7 +155,7 @@ class DisplayController extends BaseController $db = Factory::getDbo(); $db->setQuery( $db->getQuery(true) - ->update($db->quoteName('#__mokosuite_tickets')) + ->update($db->quoteName('#__mokosuiteclient_tickets')) ->set($db->quoteName('assigned_to') . ' = ' . ($assignTo ?: 'NULL')) ->set($db->quoteName('modified') . ' = ' . $db->quote(Factory::getDate()->toSql())) ->where($db->quoteName('id') . ' = ' . $ticketId) @@ -186,7 +186,7 @@ class DisplayController extends BaseController } $type = Factory::getApplication()->getInput()->getString('type', ''); - $model = new \Moko\Component\MokoSuite\Administrator\Model\PrivacyModel(); + $model = new \Moko\Component\MokoSuiteClient\Administrator\Model\PrivacyModel(); $this->jsonResponse($model->createRequest($user->id, $type, 'Submitted via self-service portal')); } @@ -207,8 +207,8 @@ class DisplayController extends BaseController return true; } - // Anyone with mokosuite.tickets ACL on the component is staff - return $user->authorise('mokosuite.tickets', 'com_mokosuite'); + // Anyone with mokosuiteclient.tickets ACL on the component is staff + return $user->authorise('mokosuiteclient.tickets', 'com_mokosuiteclient'); } /** diff --git a/source/packages/com_mokosuite/site/src/Model/PortalModel.php b/source/packages/com_mokosuiteclient/site/src/Model/PortalModel.php similarity index 55% rename from source/packages/com_mokosuite/site/src/Model/PortalModel.php rename to source/packages/com_mokosuiteclient/site/src/Model/PortalModel.php index 2b85d2b3..31f235fc 100644 --- a/source/packages/com_mokosuite/site/src/Model/PortalModel.php +++ b/source/packages/com_mokosuiteclient/site/src/Model/PortalModel.php @@ -1,5 +1,5 @@ setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__mokosuite_erp_orders'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->where($db->quoteName('status') . ' NOT IN (' . $db->quote('delivered') . ',' . $db->quote('cancelled') . ')')); + $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__mokosuiteclient_erp_orders'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->where($db->quoteName('status') . ' NOT IN (' . $db->quote('delivered') . ',' . $db->quote('cancelled') . ')')); $dash->open_orders = (int) $db->loadResult(); // Unpaid invoices - $db->setQuery($db->getQuery(true)->select('COUNT(*)')->select('COALESCE(SUM(total - amount_paid), 0) AS total_due')->from($db->quoteName('#__mokosuite_erp_invoices'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->where($db->quoteName('status') . ' IN (' . $db->quote('sent') . ',' . $db->quote('partial') . ',' . $db->quote('overdue') . ')')); + $db->setQuery($db->getQuery(true)->select('COUNT(*)')->select('COALESCE(SUM(total - amount_paid), 0) AS total_due')->from($db->quoteName('#__mokosuiteclient_erp_invoices'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->where($db->quoteName('status') . ' IN (' . $db->quote('sent') . ',' . $db->quote('partial') . ',' . $db->quote('overdue') . ')')); $inv = $db->loadObject(); $dash->unpaid_invoices = (int) $inv->{'COUNT(*)'}; $dash->total_due = (float) $inv->total_due; // Open tickets - $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__mokosuite_tickets'))->where($db->quoteName('created_by') . ' = ' . (int) Factory::getUser()->id)->where($db->quoteName('status') . ' NOT IN (' . $db->quote('closed') . ',' . $db->quote('resolved') . ')')); + $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__mokosuiteclient_tickets'))->where($db->quoteName('created_by') . ' = ' . (int) Factory::getUser()->id)->where($db->quoteName('status') . ' NOT IN (' . $db->quote('closed') . ',' . $db->quote('resolved') . ')')); $dash->open_tickets = (int) $db->loadResult(); // Pending signatures - $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__mokosuite_erp_esign_signers'))->where($db->quoteName('email') . ' = ' . $db->quote(Factory::getUser()->email))->where($db->quoteName('status') . ' IN (' . $db->quote('pending') . ',' . $db->quote('viewed') . ')')); + $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from($db->quoteName('#__mokosuiteclient_erp_esign_signers'))->where($db->quoteName('email') . ' = ' . $db->quote(Factory::getUser()->email))->where($db->quoteName('status') . ' IN (' . $db->quote('pending') . ',' . $db->quote('viewed') . ')')); $dash->pending_signatures = (int) $db->loadResult(); // Recent orders - $db->setQuery($db->getQuery(true)->select('id, ref, status, total, created')->from($db->quoteName('#__mokosuite_erp_orders'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->order('created DESC'), 0, 5); + $db->setQuery($db->getQuery(true)->select('id, ref, status, total, created')->from($db->quoteName('#__mokosuiteclient_erp_orders'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->order('created DESC'), 0, 5); $dash->recent_orders = $db->loadObjectList() ?: []; return $dash; @@ -65,18 +65,18 @@ class PortalModel extends BaseDatabaseModel public function getOrders(int $contactId, int $limit = 25): array { $db = $this->getDatabase(); - $db->setQuery($db->getQuery(true)->select('*')->from($db->quoteName('#__mokosuite_erp_orders'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->order('created DESC'), 0, $limit); + $db->setQuery($db->getQuery(true)->select('*')->from($db->quoteName('#__mokosuiteclient_erp_orders'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->order('created DESC'), 0, $limit); return $db->loadObjectList() ?: []; } public function getOrder(int $contactId, int $id): ?object { $db = $this->getDatabase(); - $db->setQuery($db->getQuery(true)->select('*')->from($db->quoteName('#__mokosuite_erp_orders'))->where($db->quoteName('id') . ' = ' . $id)->where($db->quoteName('contact_id') . ' = ' . $contactId)); + $db->setQuery($db->getQuery(true)->select('*')->from($db->quoteName('#__mokosuiteclient_erp_orders'))->where($db->quoteName('id') . ' = ' . $id)->where($db->quoteName('contact_id') . ' = ' . $contactId)); $order = $db->loadObject(); if (!$order) { return null; } - $db->setQuery($db->getQuery(true)->select('oi.*, p.sku')->from($db->quoteName('#__mokosuite_erp_order_items', 'oi'))->join('LEFT', $db->quoteName('#__mokosuite_erp_products', 'p') . ' ON p.id = oi.product_id')->where($db->quoteName('oi.order_id') . ' = ' . $id)->order('oi.position ASC')); + $db->setQuery($db->getQuery(true)->select('oi.*, p.sku')->from($db->quoteName('#__mokosuiteclient_erp_order_items', 'oi'))->join('LEFT', $db->quoteName('#__mokosuiteclient_erp_products', 'p') . ' ON p.id = oi.product_id')->where($db->quoteName('oi.order_id') . ' = ' . $id)->order('oi.position ASC')); $order->items = $db->loadObjectList() ?: []; return $order; } @@ -84,18 +84,18 @@ class PortalModel extends BaseDatabaseModel public function getInvoices(int $contactId, int $limit = 25): array { $db = $this->getDatabase(); - $db->setQuery($db->getQuery(true)->select('*, (total - amount_paid) AS balance_due')->from($db->quoteName('#__mokosuite_erp_invoices'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->order('created DESC'), 0, $limit); + $db->setQuery($db->getQuery(true)->select('*, (total - amount_paid) AS balance_due')->from($db->quoteName('#__mokosuiteclient_erp_invoices'))->where($db->quoteName('contact_id') . ' = ' . $contactId)->order('created DESC'), 0, $limit); return $db->loadObjectList() ?: []; } public function getInvoice(int $contactId, int $id): ?object { $db = $this->getDatabase(); - $db->setQuery($db->getQuery(true)->select('*, (total - amount_paid) AS balance_due')->from($db->quoteName('#__mokosuite_erp_invoices'))->where($db->quoteName('id') . ' = ' . $id)->where($db->quoteName('contact_id') . ' = ' . $contactId)); + $db->setQuery($db->getQuery(true)->select('*, (total - amount_paid) AS balance_due')->from($db->quoteName('#__mokosuiteclient_erp_invoices'))->where($db->quoteName('id') . ' = ' . $id)->where($db->quoteName('contact_id') . ' = ' . $contactId)); $inv = $db->loadObject(); if (!$inv) { return null; } - $db->setQuery($db->getQuery(true)->select('ii.*, p.sku')->from($db->quoteName('#__mokosuite_erp_invoice_items', 'ii'))->join('LEFT', $db->quoteName('#__mokosuite_erp_products', 'p') . ' ON p.id = ii.product_id')->where($db->quoteName('ii.invoice_id') . ' = ' . $id)->order('ii.position ASC')); + $db->setQuery($db->getQuery(true)->select('ii.*, p.sku')->from($db->quoteName('#__mokosuiteclient_erp_invoice_items', 'ii'))->join('LEFT', $db->quoteName('#__mokosuiteclient_erp_products', 'p') . ' ON p.id = ii.product_id')->where($db->quoteName('ii.invoice_id') . ' = ' . $id)->order('ii.position ASC')); $inv->items = $db->loadObjectList() ?: []; return $inv; } diff --git a/source/packages/com_mokosuite/site/src/View/Invoice/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/Invoice/HtmlView.php similarity index 82% rename from source/packages/com_mokosuite/site/src/View/Invoice/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/Invoice/HtmlView.php index 8102b13e..9b89771e 100644 --- a/source/packages/com_mokosuite/site/src/View/Invoice/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/Invoice/HtmlView.php @@ -1,5 +1,5 @@ invoice) { throw new \Exception('Invoice not found', 404); } Factory::getApplication()->getDocument()->getWebAssetManager() - ->registerAndUseStyle('com_mokosuite.portal', 'com_mokosuite/portal.css'); + ->registerAndUseStyle('com_mokosuiteclient.portal', 'com_mokosuiteclient/portal.css'); parent::display($tpl); } } diff --git a/source/packages/com_mokosuite/site/src/View/Invoices/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/Invoices/HtmlView.php similarity index 79% rename from source/packages/com_mokosuite/site/src/View/Invoices/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/Invoices/HtmlView.php index effe3f7d..a0a951c7 100644 --- a/source/packages/com_mokosuite/site/src/View/Invoices/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/Invoices/HtmlView.php @@ -1,5 +1,5 @@ items = $contactId ? $model->getInvoices($contactId) : []; Factory::getApplication()->getDocument()->getWebAssetManager() - ->registerAndUseStyle('com_mokosuite.portal', 'com_mokosuite/portal.css'); + ->registerAndUseStyle('com_mokosuiteclient.portal', 'com_mokosuiteclient/portal.css'); parent::display($tpl); } } diff --git a/source/packages/com_mokosuite/site/src/View/License/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/License/HtmlView.php similarity index 70% rename from source/packages/com_mokosuite/site/src/View/License/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/License/HtmlView.php index f39f7d8f..7bb30798 100644 --- a/source/packages/com_mokosuite/site/src/View/License/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/License/HtmlView.php @@ -1,5 +1,5 @@ guest) { Factory::getApplication()->redirect('index.php?option=com_users&view=login'); return; } - // License data would come from plg_system_mokosuite_license cache + // License data would come from plg_system_mokosuiteclient_license cache // For now, placeholder structure $this->licenseData = (object) [ 'valid' => true, - 'package' => 'MokoSuite+ERP', + 'package' => 'MokoSuiteClient+ERP', 'services' => ['base', 'erp'], 'expiry' => null, 'dlid' => '', ]; Factory::getApplication()->getDocument()->getWebAssetManager() - ->registerAndUseStyle('com_mokosuite.portal', 'com_mokosuite/portal.css'); + ->registerAndUseStyle('com_mokosuiteclient.portal', 'com_mokosuiteclient/portal.css'); parent::display($tpl); } } diff --git a/source/packages/com_mokosuite/site/src/View/Order/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/Order/HtmlView.php similarity index 82% rename from source/packages/com_mokosuite/site/src/View/Order/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/Order/HtmlView.php index 79574f12..7ddf24b8 100644 --- a/source/packages/com_mokosuite/site/src/View/Order/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/Order/HtmlView.php @@ -1,5 +1,5 @@ order) { throw new \Exception('Order not found', 404); } Factory::getApplication()->getDocument()->getWebAssetManager() - ->registerAndUseStyle('com_mokosuite.portal', 'com_mokosuite/portal.css'); + ->registerAndUseStyle('com_mokosuiteclient.portal', 'com_mokosuiteclient/portal.css'); parent::display($tpl); } } diff --git a/source/packages/com_mokosuite/site/src/View/Orders/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/Orders/HtmlView.php similarity index 79% rename from source/packages/com_mokosuite/site/src/View/Orders/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/Orders/HtmlView.php index 5f5967e7..2a16a647 100644 --- a/source/packages/com_mokosuite/site/src/View/Orders/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/Orders/HtmlView.php @@ -1,5 +1,5 @@ items = $contactId ? $model->getOrders($contactId) : []; Factory::getApplication()->getDocument()->getWebAssetManager() - ->registerAndUseStyle('com_mokosuite.portal', 'com_mokosuite/portal.css'); + ->registerAndUseStyle('com_mokosuiteclient.portal', 'com_mokosuiteclient/portal.css'); parent::display($tpl); } } diff --git a/source/packages/com_mokosuite/site/src/View/Portal/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/Portal/HtmlView.php similarity index 81% rename from source/packages/com_mokosuite/site/src/View/Portal/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/Portal/HtmlView.php index 01c09b94..e226bbe4 100644 --- a/source/packages/com_mokosuite/site/src/View/Portal/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/Portal/HtmlView.php @@ -1,5 +1,5 @@ dashboard = $this->contactId ? $model->getDashboard($this->contactId) : null; $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); - $wa->registerAndUseStyle('com_mokosuite.portal', 'com_mokosuite/portal.css'); + $wa->registerAndUseStyle('com_mokosuiteclient.portal', 'com_mokosuiteclient/portal.css'); parent::display($tpl); } diff --git a/source/packages/com_mokosuite/site/src/View/Privacy/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/Privacy/HtmlView.php similarity index 84% rename from source/packages/com_mokosuite/site/src/View/Privacy/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/Privacy/HtmlView.php index b9adffc2..9bfaffde 100644 --- a/source/packages/com_mokosuite/site/src/View/Privacy/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/Privacy/HtmlView.php @@ -1,5 +1,5 @@ guest) { Factory::getApplication()->redirect(Route::_( - 'index.php?option=com_users&view=login&return=' . base64_encode('index.php?option=com_mokosuite&view=privacy'), + 'index.php?option=com_users&view=login&return=' . base64_encode('index.php?option=com_mokosuiteclient&view=privacy'), false )); @@ -31,7 +31,7 @@ class HtmlView extends BaseHtmlView // Get user's data requests $query = $db->getQuery(true) ->select('*') - ->from($db->quoteName('#__mokosuite_data_requests')) + ->from($db->quoteName('#__mokosuiteclient_data_requests')) ->where($db->quoteName('user_id') . ' = ' . (int) $user->id) ->order($db->quoteName('created') . ' DESC'); @@ -51,7 +51,7 @@ class HtmlView extends BaseHtmlView $db->setQuery( $db->getQuery(true) ->select('*') - ->from($db->quoteName('#__mokosuite_consent_log')) + ->from($db->quoteName('#__mokosuiteclient_consent_log')) ->where($db->quoteName('user_id') . ' = ' . (int) $user->id) ->order($db->quoteName('created') . ' DESC') ->setLimit(20) diff --git a/source/packages/com_mokosuite/site/src/View/Sign/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/Sign/HtmlView.php similarity index 69% rename from source/packages/com_mokosuite/site/src/View/Sign/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/Sign/HtmlView.php index d27aeb32..dbf90845 100644 --- a/source/packages/com_mokosuite/site/src/View/Sign/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/Sign/HtmlView.php @@ -1,5 +1,5 @@ setQuery( $db->getQuery(true) ->select('s.*, r.title AS request_title, r.description AS request_description, r.status AS request_status, r.require_selfie, r.require_id, r.require_consent') - ->from($db->quoteName('#__mokosuite_erp_esign_signers', 's')) - ->join('INNER', $db->quoteName('#__mokosuite_erp_esign_requests', 'r') . ' ON r.id = s.request_id') + ->from($db->quoteName('#__mokosuiteclient_erp_esign_signers', 's')) + ->join('INNER', $db->quoteName('#__mokosuiteclient_erp_esign_requests', 'r') . ' ON r.id = s.request_id') ->where($db->quoteName('s.token') . ' = ' . $db->quote($token)) ); $this->signer = $db->loadObject(); @@ -33,8 +33,8 @@ class HtmlView extends BaseHtmlView } $wa = Factory::getApplication()->getDocument()->getWebAssetManager(); - $wa->registerAndUseStyle('com_mokosuite.portal', 'com_mokosuite/portal.css'); - $wa->registerAndUseScript('com_mokosuite.signature-pad', 'com_mokosuite/signature-pad.js', [], ['defer' => true]); + $wa->registerAndUseStyle('com_mokosuiteclient.portal', 'com_mokosuiteclient/portal.css'); + $wa->registerAndUseScript('com_mokosuiteclient.signature-pad', 'com_mokosuiteclient/signature-pad.js', [], ['defer' => true]); parent::display($tpl); } diff --git a/source/packages/com_mokosuite/site/src/View/SignVerify/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/SignVerify/HtmlView.php similarity index 60% rename from source/packages/com_mokosuite/site/src/View/SignVerify/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/SignVerify/HtmlView.php index b77c7284..56532c35 100644 --- a/source/packages/com_mokosuite/site/src/View/SignVerify/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/SignVerify/HtmlView.php @@ -1,5 +1,5 @@ setQuery($db->getQuery(true)->select('id, ref, title, status, date_creation, date_signature')->from($db->quoteName('#__mokosuite_erp_esign_requests'))->where($db->quoteName('verification_hash') . ' = ' . $db->quote($hash))); + $db->setQuery($db->getQuery(true)->select('id, ref, title, status, date_creation, date_signature')->from($db->quoteName('#__mokosuiteclient_erp_esign_requests'))->where($db->quoteName('verification_hash') . ' = ' . $db->quote($hash))); $this->request = $db->loadObject(); if ($this->request) { - $db->setQuery($db->getQuery(true)->select('role, email, firstname, lastname, status, date_signed, ip_address, geo_country, geo_city')->from($db->quoteName('#__mokosuite_erp_esign_signers'))->where($db->quoteName('request_id') . ' = ' . (int) $this->request->id)->order('position ASC')); + $db->setQuery($db->getQuery(true)->select('role, email, firstname, lastname, status, date_signed, ip_address, geo_country, geo_city')->from($db->quoteName('#__mokosuiteclient_erp_esign_signers'))->where($db->quoteName('request_id') . ' = ' . (int) $this->request->id)->order('position ASC')); $this->request->signers = $db->loadObjectList() ?: []; - $db->setQuery($db->getQuery(true)->select('code, label, ip, created')->from($db->quoteName('#__mokosuite_erp_esign_events'))->where($db->quoteName('request_id') . ' = ' . (int) $this->request->id)->order('created ASC')); + $db->setQuery($db->getQuery(true)->select('code, label, ip, created')->from($db->quoteName('#__mokosuiteclient_erp_esign_events'))->where($db->quoteName('request_id') . ' = ' . (int) $this->request->id)->order('created ASC')); $this->request->events = $db->loadObjectList() ?: []; } } Factory::getApplication()->getDocument()->getWebAssetManager() - ->registerAndUseStyle('com_mokosuite.portal', 'com_mokosuite/portal.css'); + ->registerAndUseStyle('com_mokosuiteclient.portal', 'com_mokosuiteclient/portal.css'); parent::display($tpl); } } diff --git a/source/packages/com_mokosuite/site/src/View/Ticket/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/Ticket/HtmlView.php similarity index 80% rename from source/packages/com_mokosuite/site/src/View/Ticket/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/Ticket/HtmlView.php index de882fc5..b0240989 100644 --- a/source/packages/com_mokosuite/site/src/View/Ticket/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/Ticket/HtmlView.php @@ -1,12 +1,12 @@ getIdentity(); $id = Factory::getApplication()->getInput()->getInt('id', 0); - $this->isStaff = $user->authorise('core.admin') || $user->authorise('mokosuite.tickets', 'com_mokosuite'); - $this->canAssign = $user->authorise('core.admin') || $user->authorise('mokosuite.tickets.assign', 'com_mokosuite'); + $this->isStaff = $user->authorise('core.admin') || $user->authorise('mokosuiteclient.tickets', 'com_mokosuiteclient'); + $this->canAssign = $user->authorise('core.admin') || $user->authorise('mokosuiteclient.tickets.assign', 'com_mokosuiteclient'); // Get ticket — staff see any, customers see only their own $query = $db->getQuery(true) @@ -38,8 +38,8 @@ class HtmlView extends BaseHtmlView $db->quoteName('u.email', 'created_by_email'), $db->quoteName('a.name', 'assigned_to_name'), ]) - ->from($db->quoteName('#__mokosuite_tickets', 't')) - ->leftJoin($db->quoteName('#__mokosuite_ticket_categories', 'c') . ' ON c.id = t.category_id') + ->from($db->quoteName('#__mokosuiteclient_tickets', 't')) + ->leftJoin($db->quoteName('#__mokosuiteclient_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); @@ -55,7 +55,7 @@ class HtmlView extends BaseHtmlView if (!$this->ticket) { Factory::getApplication()->enqueueMessage('Ticket not found.', 'error'); - Factory::getApplication()->redirect(Route::_('index.php?option=com_mokosuite&view=tickets', false)); + Factory::getApplication()->redirect(Route::_('index.php?option=com_mokosuiteclient&view=tickets', false)); return; } @@ -66,7 +66,7 @@ class HtmlView extends BaseHtmlView $db->quoteName('r') . '.*', $db->quoteName('u.name', 'user_name'), ]) - ->from($db->quoteName('#__mokosuite_ticket_replies', 'r')) + ->from($db->quoteName('#__mokosuiteclient_ticket_replies', 'r')) ->leftJoin($db->quoteName('#__users', 'u') . ' ON u.id = r.user_id') ->where($db->quoteName('r.ticket_id') . ' = ' . $id); diff --git a/source/packages/com_mokosuite/site/src/View/Tickets/HtmlView.php b/source/packages/com_mokosuiteclient/site/src/View/Tickets/HtmlView.php similarity index 82% rename from source/packages/com_mokosuite/site/src/View/Tickets/HtmlView.php rename to source/packages/com_mokosuiteclient/site/src/View/Tickets/HtmlView.php index d9ebba40..cd97727b 100644 --- a/source/packages/com_mokosuite/site/src/View/Tickets/HtmlView.php +++ b/source/packages/com_mokosuiteclient/site/src/View/Tickets/HtmlView.php @@ -1,12 +1,12 @@ getIdentity(); $this->isStaff = $user->authorise('core.admin') - || $user->authorise('mokosuite.tickets', 'com_mokosuite'); + || $user->authorise('mokosuiteclient.tickets', 'com_mokosuiteclient'); // Staff see all tickets, customers see their own $query = $db->getQuery(true) @@ -40,8 +40,8 @@ class HtmlView extends BaseHtmlView $db->quoteName('u.name', 'created_by_name'), $db->quoteName('a.name', 'assigned_to_name'), ]) - ->from($db->quoteName('#__mokosuite_tickets', 't')) - ->leftJoin($db->quoteName('#__mokosuite_ticket_categories', 'c') . ' ON c.id = t.category_id') + ->from($db->quoteName('#__mokosuiteclient_tickets', 't')) + ->leftJoin($db->quoteName('#__mokosuiteclient_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'); @@ -64,7 +64,7 @@ class HtmlView extends BaseHtmlView // Categories for new ticket form $query = $db->getQuery(true) ->select([$db->quoteName('id'), $db->quoteName('title')]) - ->from($db->quoteName('#__mokosuite_ticket_categories')) + ->from($db->quoteName('#__mokosuiteclient_ticket_categories')) ->where($db->quoteName('published') . ' = 1') ->order($db->quoteName('ordering') . ' ASC'); $db->setQuery($query); diff --git a/source/packages/com_mokosuite/site/tmpl/invoice/default.php b/source/packages/com_mokosuiteclient/site/tmpl/invoice/default.php similarity index 90% rename from source/packages/com_mokosuite/site/tmpl/invoice/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/invoice/default.php index acb5bfa5..34b9f763 100644 --- a/source/packages/com_mokosuite/site/tmpl/invoice/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/invoice/default.php @@ -3,8 +3,8 @@ defined('_JEXEC') or die; use Joomla\CMS\Router\Route; $inv = $this->invoice; ?> -
- My Invoices +
+ My Invoices

escape($inv->ref); ?>

diff --git a/source/packages/com_mokosuite/site/tmpl/invoices/default.php b/source/packages/com_mokosuiteclient/site/tmpl/invoices/default.php similarity index 82% rename from source/packages/com_mokosuite/site/tmpl/invoices/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/invoices/default.php index fa062f06..3dffec72 100644 --- a/source/packages/com_mokosuite/site/tmpl/invoices/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/invoices/default.php @@ -2,10 +2,10 @@ defined('_JEXEC') or die; use Joomla\CMS\Router\Route; ?> -
+

My Invoices

- Portal + Portal
@@ -15,7 +15,7 @@ use Joomla\CMS\Router\Route; $isOverdue = $inv->due_date && $inv->due_date < date('Y-m-d') && \in_array($inv->status, ['sent', 'partial', 'overdue']); ?> - + diff --git a/source/packages/com_mokosuite/site/tmpl/license/default.php b/source/packages/com_mokosuiteclient/site/tmpl/license/default.php similarity index 88% rename from source/packages/com_mokosuite/site/tmpl/license/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/license/default.php index f428c7b0..7de3f674 100644 --- a/source/packages/com_mokosuite/site/tmpl/license/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/license/default.php @@ -5,10 +5,10 @@ use Joomla\CMS\Session\Session; $lic = $this->licenseData; ?> -
+

License & Subscription

- Portal + Portal
@@ -44,7 +44,7 @@ $lic = $this->licenseData;
Update License Key
- +
diff --git a/source/packages/com_mokosuite/site/tmpl/order/default.php b/source/packages/com_mokosuiteclient/site/tmpl/order/default.php similarity index 87% rename from source/packages/com_mokosuite/site/tmpl/order/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/order/default.php index 04191a34..0f3a375a 100644 --- a/source/packages/com_mokosuite/site/tmpl/order/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/order/default.php @@ -3,8 +3,8 @@ defined('_JEXEC') or die; use Joomla\CMS\Router\Route; $o = $this->order; ?> -
- My Orders +
+ My Orders

escape($o->ref); ?>

diff --git a/source/packages/com_mokosuite/site/tmpl/orders/default.php b/source/packages/com_mokosuiteclient/site/tmpl/orders/default.php similarity index 76% rename from source/packages/com_mokosuite/site/tmpl/orders/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/orders/default.php index a7b2771e..da03c6d5 100644 --- a/source/packages/com_mokosuite/site/tmpl/orders/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/orders/default.php @@ -2,10 +2,10 @@ defined('_JEXEC') or die; use Joomla\CMS\Router\Route; ?> -
+

My Orders

- Portal + Portal
escape($inv->ref); ?>escape($inv->ref); ?> status); ?> $total, 2); ?> $amount_paid, 2); ?>
@@ -13,7 +13,7 @@ use Joomla\CMS\Router\Route; items as $order) : ?> - + diff --git a/source/packages/com_mokosuite/site/tmpl/portal/default.php b/source/packages/com_mokosuiteclient/site/tmpl/portal/default.php similarity index 76% rename from source/packages/com_mokosuite/site/tmpl/portal/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/portal/default.php index 091ea59c..0b856c0c 100644 --- a/source/packages/com_mokosuite/site/tmpl/portal/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/portal/default.php @@ -6,7 +6,7 @@ $dash = $this->dashboard; $user = \Joomla\CMS\Factory::getUser(); ?> -
+

Welcome, escape($user->name); ?>

contactId) : ?> @@ -21,7 +21,7 @@ $user = \Joomla\CMS\Factory::getUser();
Open Orders
@@ -33,7 +33,7 @@ $user = \Joomla\CMS\Factory::getUser(); total_due > 0) : ?>
$total_due, 2); ?> due
@@ -44,7 +44,7 @@ $user = \Joomla\CMS\Factory::getUser();
Open Tickets
@@ -55,7 +55,7 @@ $user = \Joomla\CMS\Factory::getUser();
Pending Signatures
@@ -66,7 +66,7 @@ $user = \Joomla\CMS\Factory::getUser();
Recent Orders
- View All + View All
escape($order->ref); ?>escape($order->ref); ?> status); ?> payment_status); ?> $total, 2); ?>
@@ -74,7 +74,7 @@ $user = \Joomla\CMS\Factory::getUser(); recent_orders as $order) : ?> - + @@ -88,9 +88,9 @@ $user = \Joomla\CMS\Factory::getUser(); diff --git a/source/packages/com_mokosuite/site/tmpl/privacy/default.php b/source/packages/com_mokosuiteclient/site/tmpl/privacy/default.php similarity index 96% rename from source/packages/com_mokosuite/site/tmpl/privacy/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/privacy/default.php index 2e140433..67810e34 100644 --- a/source/packages/com_mokosuite/site/tmpl/privacy/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/privacy/default.php @@ -15,7 +15,7 @@ $statusLabel = ['pending' => 'Pending', 'processing' => 'Processing', 'completed $statusClass = ['pending' => 'warning', 'processing' => 'info', 'completed' => 'success', 'denied' => 'secondary']; ?> -
+

My Privacy & Data

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

@@ -99,7 +99,7 @@ document.querySelectorAll('.btn-data-request').forEach(function(btn) { var fd = new FormData(); fd.append('type', type); fd.append('', '1'); - fetch('', { + fetch('', { method: 'POST', body: fd, headers: {'X-Requested-With': 'XMLHttpRequest'} }) .then(function(r) { return r.json(); }) diff --git a/source/packages/com_mokosuite/site/tmpl/sign/default.php b/source/packages/com_mokosuiteclient/site/tmpl/sign/default.php similarity index 98% rename from source/packages/com_mokosuite/site/tmpl/sign/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/sign/default.php index 5550425b..e9cab98c 100644 --- a/source/packages/com_mokosuite/site/tmpl/sign/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/sign/default.php @@ -6,7 +6,7 @@ $request = $this->request; $token = \Joomla\CMS\Factory::getApplication()->getInput()->get('token', '', 'ALNUM'); ?> -
+
Invalid or expired signing link.
status === 'signed') : ?> diff --git a/source/packages/com_mokosuite/site/tmpl/signverify/default.php b/source/packages/com_mokosuiteclient/site/tmpl/signverify/default.php similarity index 98% rename from source/packages/com_mokosuite/site/tmpl/signverify/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/signverify/default.php index fac999f9..9999a1b3 100644 --- a/source/packages/com_mokosuite/site/tmpl/signverify/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/signverify/default.php @@ -2,7 +2,7 @@ defined('_JEXEC') or die; $req = $this->request; ?> -
+
Verification not found. Check the verification link.
diff --git a/source/packages/com_mokosuite/site/tmpl/ticket/default.php b/source/packages/com_mokosuiteclient/site/tmpl/ticket/default.php similarity index 93% rename from source/packages/com_mokosuite/site/tmpl/ticket/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/ticket/default.php index ca7cb7ab..b0971855 100644 --- a/source/packages/com_mokosuite/site/tmpl/ticket/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/ticket/default.php @@ -22,9 +22,9 @@ $statusClass = [ ]; ?> -
+
@@ -107,7 +107,7 @@ $statusClass = [
status === 'closed'): ?>
- This ticket is closed. Open a new ticket if you need further help. + This ticket is closed. Open a new ticket if you need further help.
@@ -197,7 +197,7 @@ document.addEventListener('DOMContentLoaded', function() { fd.append('body', body); fd.append('is_internal', isInternal ? '1' : '0'); fd.append(token, '1'); - fetch('', { + fetch('', { method:'POST', body:fd, headers:{'X-Requested-With':'XMLHttpRequest'} }).then(function(r){return r.json()}).then(function(d){ if (d.success) location.reload(); @@ -212,7 +212,7 @@ document.addEventListener('DOMContentLoaded', function() { fd.append('ticket_id', ticketId); fd.append('status', this.dataset.status); fd.append(token, '1'); - fetch('', { + fetch('', { method:'POST', body:fd, headers:{'X-Requested-With':'XMLHttpRequest'} }).then(function(r){return r.json()}).then(function(d){ if (d.success) location.reload(); @@ -229,7 +229,7 @@ document.addEventListener('DOMContentLoaded', function() { fd.append('ticket_id', ticketId); fd.append('assigned_to', ); fd.append(token, '1'); - fetch('', { + fetch('', { method:'POST', body:fd, headers:{'X-Requested-With':'XMLHttpRequest'} }).then(function(r){return r.json()}).then(function(d){ if (d.success) location.reload(); diff --git a/source/packages/com_mokosuite/site/tmpl/tickets/default.php b/source/packages/com_mokosuiteclient/site/tmpl/tickets/default.php similarity index 86% rename from source/packages/com_mokosuite/site/tmpl/tickets/default.php rename to source/packages/com_mokosuiteclient/site/tmpl/tickets/default.php index 9ed8949e..6537c29d 100644 --- a/source/packages/com_mokosuite/site/tmpl/tickets/default.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/tickets/default.php @@ -20,16 +20,16 @@ $statusClass = [ ]; ?> -
+

- + New Ticket - +
- - + + diff --git a/source/packages/com_mokosuite/site/tmpl/tickets/submit.php b/source/packages/com_mokosuiteclient/site/tmpl/tickets/submit.php similarity index 94% rename from source/packages/com_mokosuite/site/tmpl/tickets/submit.php rename to source/packages/com_mokosuiteclient/site/tmpl/tickets/submit.php index 1c68a703..762fce50 100644 --- a/source/packages/com_mokosuite/site/tmpl/tickets/submit.php +++ b/source/packages/com_mokosuiteclient/site/tmpl/tickets/submit.php @@ -10,10 +10,10 @@ use Joomla\CMS\Session\Session; $categories = $this->categories; $token = Session::getFormToken(); -$searchUrl = Route::_('index.php?option=com_mokosuite&task=display.searchKb&format=json'); -$submitUrl = Route::_('index.php?option=com_mokosuite&task=display.submitTicket&format=json'); -$ticketUrl = Route::_('index.php?option=com_mokosuite&view=ticket&id='); -$ticketsUrl = Route::_('index.php?option=com_mokosuite&view=tickets'); +$searchUrl = Route::_('index.php?option=com_mokosuiteclient&task=display.searchKb&format=json'); +$submitUrl = Route::_('index.php?option=com_mokosuiteclient&task=display.submitTicket&format=json'); +$ticketUrl = Route::_('index.php?option=com_mokosuiteclient&view=ticket&id='); +$ticketsUrl = Route::_('index.php?option=com_mokosuiteclient&view=tickets'); // Check if Smart Search has indexed content $finderEnabled = false; @@ -24,7 +24,7 @@ try { } catch (\Throwable $e) {} ?> -
+

Submit a Support Request

diff --git a/source/packages/mod_mokosuite_cache/language/en-GB/mod_mokosuite_cache.ini b/source/packages/mod_mokosuite_cache/language/en-GB/mod_mokosuite_cache.ini deleted file mode 100644 index 53874be4..00000000 --- a/source/packages/mod_mokosuite_cache/language/en-GB/mod_mokosuite_cache.ini +++ /dev/null @@ -1,4 +0,0 @@ -MOD_MOKOSUITE_CACHE="MokoSuite Cache Cleaner" -MOD_MOKOSUITE_CACHE_DESC="One-click cache and temp cleaner in the admin status bar." -MOD_MOKOSUITE_CACHE_CLEAR_ALL="Clear All Cache" -MOD_MOKOSUITE_CACHE_CLEAR_TEMP="Clear Temp" diff --git a/source/packages/mod_mokosuite_cache/language/en-GB/mod_mokosuite_cache.sys.ini b/source/packages/mod_mokosuite_cache/language/en-GB/mod_mokosuite_cache.sys.ini deleted file mode 100644 index 985e02ff..00000000 --- a/source/packages/mod_mokosuite_cache/language/en-GB/mod_mokosuite_cache.sys.ini +++ /dev/null @@ -1,2 +0,0 @@ -MOD_MOKOSUITE_CACHE="MokoSuite Cache Cleaner" -MOD_MOKOSUITE_CACHE_DESC="One-click cache cleaner in the admin status bar. Clears all Joomla cache (site, admin, and expired)." diff --git a/source/packages/mod_mokosuite_cache/tmpl/default.php b/source/packages/mod_mokosuite_cache/tmpl/default.php deleted file mode 100644 index 2ef70122..00000000 --- a/source/packages/mod_mokosuite_cache/tmpl/default.php +++ /dev/null @@ -1,89 +0,0 @@ - - - - -
- Clear: - - Cache - - | - - Temp - -
- - diff --git a/source/packages/mod_mokosuite_categories/language/en-GB/mod_mokosuite_categories.ini b/source/packages/mod_mokosuite_categories/language/en-GB/mod_mokosuite_categories.ini deleted file mode 100644 index 3a6960fb..00000000 --- a/source/packages/mod_mokosuite_categories/language/en-GB/mod_mokosuite_categories.ini +++ /dev/null @@ -1,24 +0,0 @@ -MOD_MOKOSUITE_CATEGORIES="MokoSuite Categories" -MOD_MOKOSUITE_CATEGORIES_DESC="Auto-discovers article categories and renders them as a collapsible tree menu. Ideal for knowledge base and help sections." - -MOD_MOKOSUITE_CATEGORIES_ROOT_LABEL="Root Category" -MOD_MOKOSUITE_CATEGORIES_ROOT_DESC="Select a parent category. Only its children (and their subcategories) will be displayed. Leave as All to show the entire category tree." -MOD_MOKOSUITE_CATEGORIES_ALL_CATEGORIES="- All Categories -" - -MOD_MOKOSUITE_CATEGORIES_DEPTH_LABEL="Maximum Depth" -MOD_MOKOSUITE_CATEGORIES_DEPTH_DESC="How many levels deep to display. 1 shows only top-level categories, 2 adds one level of subcategories, etc." - -MOD_MOKOSUITE_CATEGORIES_COUNT_LABEL="Show Article Count" -MOD_MOKOSUITE_CATEGORIES_COUNT_DESC="Display the number of published articles next to each category name." - -MOD_MOKOSUITE_CATEGORIES_EMPTY_LABEL="Show Empty Categories" -MOD_MOKOSUITE_CATEGORIES_EMPTY_DESC="Display categories that have no published articles. Only applies when Show Article Count is enabled." - -MOD_MOKOSUITE_CATEGORIES_MENUITEM_LABEL="Target Menu Item" -MOD_MOKOSUITE_CATEGORIES_MENUITEM_DESC="The menu item to use as the base for category links. This sets the Itemid parameter for proper template and menu highlighting." - -MOD_MOKOSUITE_CATEGORIES_ORDER_LABEL="Category Ordering" -MOD_MOKOSUITE_CATEGORIES_ORDER_DESC="How to sort categories within each level." -MOD_MOKOSUITE_CATEGORIES_ORDER_TREE="Tree Order (default)" -MOD_MOKOSUITE_CATEGORIES_ORDER_TITLE="Alphabetical" -MOD_MOKOSUITE_CATEGORIES_ORDER_CREATED="Date Created" diff --git a/source/packages/mod_mokosuite_categories/language/en-GB/mod_mokosuite_categories.sys.ini b/source/packages/mod_mokosuite_categories/language/en-GB/mod_mokosuite_categories.sys.ini deleted file mode 100644 index 8a216c01..00000000 --- a/source/packages/mod_mokosuite_categories/language/en-GB/mod_mokosuite_categories.sys.ini +++ /dev/null @@ -1,2 +0,0 @@ -MOD_MOKOSUITE_CATEGORIES="MokoSuite Categories" -MOD_MOKOSUITE_CATEGORIES_DESC="Auto-discovers article categories and renders them as a collapsible tree menu. Ideal for knowledge base and help sections." diff --git a/source/packages/mod_mokosuite_categories/mod_mokosuite_categories.xml b/source/packages/mod_mokosuite_categories/mod_mokosuite_categories.xml deleted file mode 100644 index 6b9cda2b..00000000 --- a/source/packages/mod_mokosuite_categories/mod_mokosuite_categories.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - mod_mokosuite_categories - Moko Consulting - 2026-06-06 - Copyright (C) 2026 Moko Consulting. All rights reserved. - GPL-3.0-or-later - hello@mokoconsulting.tech - https://mokoconsulting.tech - 02.34.50-dev - MOD_MOKOSUITE_CATEGORIES_DESC - Moko\Module\MokoSuiteCategories - - - services - src - tmpl - - - - en-GB/mod_mokosuite_categories.ini - en-GB/mod_mokosuite_categories.sys.ini - - - - -
- - - - - - - - - - - - - - - - - - -
-
-
-
diff --git a/source/packages/mod_mokosuite_cpanel/language/en-GB/mod_mokosuite_cpanel.ini b/source/packages/mod_mokosuite_cpanel/language/en-GB/mod_mokosuite_cpanel.ini deleted file mode 100644 index 05acb289..00000000 --- a/source/packages/mod_mokosuite_cpanel/language/en-GB/mod_mokosuite_cpanel.ini +++ /dev/null @@ -1,29 +0,0 @@ -; MokoSuite CPanel Module -; Copyright (C) 2026 Moko Consulting. All rights reserved. -; License: GPL-3.0-or-later - -MOD_MOKOSUITE_CPANEL="MokoSuite" -MOD_MOKOSUITE_CPANEL_DESC="Displays MokoSuite feature plugin status and site health on the admin dashboard." - -MOD_MOKOSUITE_CPANEL_FIELDSET_DISPLAY="Display Options" -MOD_MOKOSUITE_CPANEL_FIELDSET_DISPLAY_DESC="Choose which sections to show in the module." - -MOD_MOKOSUITE_CPANEL_COLLAPSED_LABEL="Collapsed by Default" -MOD_MOKOSUITE_CPANEL_COLLAPSED_DESC="Start the module body collapsed. Click the header to expand." -MOD_MOKOSUITE_CPANEL_SHOW_HEALTH_LABEL="Health Status" -MOD_MOKOSUITE_CPANEL_SHOW_STATS_LABEL="Stats Cards" -MOD_MOKOSUITE_CPANEL_SHOW_STATS_DESC="Article count, user count, and pending updates." -MOD_MOKOSUITE_CPANEL_SHOW_DISK_LABEL="Disk Usage" -MOD_MOKOSUITE_CPANEL_SHOW_IP_LABEL="Current IP" -MOD_MOKOSUITE_CPANEL_SHOW_PLUGINS_LABEL="Feature Plugins" -MOD_MOKOSUITE_CPANEL_SHOW_ACTIONS_LABEL="Quick Actions" -MOD_MOKOSUITE_CPANEL_SHOW_ACTIONS_DESC="Clear cache, check updates buttons." -MOD_MOKOSUITE_CPANEL_SHOW_VERSIONS_LABEL="Joomla/PHP Versions" -MOD_MOKOSUITE_CPANEL_SHOW_VERSIONS_DESC="Show Joomla and PHP version numbers." - -MOD_MOKOSUITE_CPANEL_OPEN_DASHBOARD="Control Panel" -MOD_MOKOSUITE_CPANEL_DEBUG="Debug ON" -MOD_MOKOSUITE_CPANEL_OFFLINE="Offline" -MOD_MOKOSUITE_CPANEL_HEALTH_OK="All Systems OK" -MOD_MOKOSUITE_CPANEL_HEALTH_ERROR="Database Error" -MOD_MOKOSUITE_CPANEL_PLUGINS_SUMMARY="%d of %d features enabled" diff --git a/source/packages/mod_mokosuite_cpanel/language/en-GB/mod_mokosuite_cpanel.sys.ini b/source/packages/mod_mokosuite_cpanel/language/en-GB/mod_mokosuite_cpanel.sys.ini deleted file mode 100644 index 1a7fba49..00000000 --- a/source/packages/mod_mokosuite_cpanel/language/en-GB/mod_mokosuite_cpanel.sys.ini +++ /dev/null @@ -1,3 +0,0 @@ -; MokoSuite CPanel Module - System strings -MOD_MOKOSUITE_CPANEL="MokoSuite" -MOD_MOKOSUITE_CPANEL_DESC="Displays MokoSuite feature plugin status and site health on the admin dashboard." diff --git a/source/packages/mod_mokosuite_menu/language/en-GB/mod_mokosuite_menu.ini b/source/packages/mod_mokosuite_menu/language/en-GB/mod_mokosuite_menu.ini deleted file mode 100644 index 0ec532fa..00000000 --- a/source/packages/mod_mokosuite_menu/language/en-GB/mod_mokosuite_menu.ini +++ /dev/null @@ -1 +0,0 @@ -MOD_MOKOSUITE_MENU="MokoSuite Admin Menu" diff --git a/source/packages/mod_mokosuite_menu/language/en-GB/mod_mokosuite_menu.sys.ini b/source/packages/mod_mokosuite_menu/language/en-GB/mod_mokosuite_menu.sys.ini deleted file mode 100644 index 9affe69e..00000000 --- a/source/packages/mod_mokosuite_menu/language/en-GB/mod_mokosuite_menu.sys.ini +++ /dev/null @@ -1,2 +0,0 @@ -MOD_MOKOSUITE_MENU="MokoSuite Admin Menu" -MOD_MOKOSUITE_MENU_DESC="Dedicated MokoSuite section in the admin sidebar menu." diff --git a/source/packages/mod_mokosuiteclient_cache/language/en-GB/mod_mokosuiteclient_cache.ini b/source/packages/mod_mokosuiteclient_cache/language/en-GB/mod_mokosuiteclient_cache.ini new file mode 100644 index 00000000..273f0c7d --- /dev/null +++ b/source/packages/mod_mokosuiteclient_cache/language/en-GB/mod_mokosuiteclient_cache.ini @@ -0,0 +1,4 @@ +MOD_MOKOSUITECLIENT_CACHE="MokoSuiteClient Cache Cleaner" +MOD_MOKOSUITECLIENT_CACHE_DESC="One-click cache and temp cleaner in the admin status bar." +MOD_MOKOSUITECLIENT_CACHE_CLEAR_ALL="Clear All Cache" +MOD_MOKOSUITECLIENT_CACHE_CLEAR_TEMP="Clear Temp" diff --git a/source/packages/mod_mokosuiteclient_cache/language/en-GB/mod_mokosuiteclient_cache.sys.ini b/source/packages/mod_mokosuiteclient_cache/language/en-GB/mod_mokosuiteclient_cache.sys.ini new file mode 100644 index 00000000..d9c1d8e7 --- /dev/null +++ b/source/packages/mod_mokosuiteclient_cache/language/en-GB/mod_mokosuiteclient_cache.sys.ini @@ -0,0 +1,2 @@ +MOD_MOKOSUITECLIENT_CACHE="MokoSuiteClient Cache Cleaner" +MOD_MOKOSUITECLIENT_CACHE_DESC="One-click cache cleaner in the admin status bar. Clears all Joomla cache (site, admin, and expired)." diff --git a/source/packages/mod_mokosuite_cache/mod_mokosuite_cache.xml b/source/packages/mod_mokosuiteclient_cache/mod_mokosuiteclient_cache.xml similarity index 59% rename from source/packages/mod_mokosuite_cache/mod_mokosuite_cache.xml rename to source/packages/mod_mokosuiteclient_cache/mod_mokosuiteclient_cache.xml index 7a89d358..e56005b4 100644 --- a/source/packages/mod_mokosuite_cache/mod_mokosuite_cache.xml +++ b/source/packages/mod_mokosuiteclient_cache/mod_mokosuiteclient_cache.xml @@ -1,6 +1,6 @@ - mod_mokosuite_cache + mod_mokosuiteclient_cache Moko Consulting 2026-06-04 Copyright (C) 2026 Moko Consulting. All rights reserved. @@ -8,17 +8,17 @@ hello@mokoconsulting.tech https://mokoconsulting.tech 02.34.50-dev - MOD_MOKOSUITE_CACHE_DESC - Moko\Module\MokoSuiteCache + MOD_MOKOSUITECLIENT_CACHE_DESC + Moko\Module\MokoSuiteClientCache - services + services src tmpl - en-GB/mod_mokosuite_cache.ini - en-GB/mod_mokosuite_cache.sys.ini + en-GB/mod_mokosuiteclient_cache.ini + en-GB/mod_mokosuiteclient_cache.sys.ini diff --git a/source/packages/mod_mokosuite_cache/services/provider.php b/source/packages/mod_mokosuiteclient_cache/services/provider.php similarity index 83% rename from source/packages/mod_mokosuite_cache/services/provider.php rename to source/packages/mod_mokosuiteclient_cache/services/provider.php index 8f3a8949..92b8d93f 100644 --- a/source/packages/mod_mokosuite_cache/services/provider.php +++ b/source/packages/mod_mokosuiteclient_cache/services/provider.php @@ -1,7 +1,7 @@ registerServiceProvider(new ModuleDispatcherFactory('\\Moko\\Module\\MokoSuiteCache')); + $container->registerServiceProvider(new ModuleDispatcherFactory('\\Moko\\Module\\MokoSuiteClientCache')); $container->registerServiceProvider(new Module()); } }; diff --git a/source/packages/mod_mokosuite_menu/src/Dispatcher/Dispatcher.php b/source/packages/mod_mokosuiteclient_cache/src/Dispatcher/Dispatcher.php similarity index 75% rename from source/packages/mod_mokosuite_menu/src/Dispatcher/Dispatcher.php rename to source/packages/mod_mokosuiteclient_cache/src/Dispatcher/Dispatcher.php index e024b0e2..7020eccf 100644 --- a/source/packages/mod_mokosuite_menu/src/Dispatcher/Dispatcher.php +++ b/source/packages/mod_mokosuiteclient_cache/src/Dispatcher/Dispatcher.php @@ -1,5 +1,5 @@ + + + +
+ Clear: + + Cache + + | + + Temp + +
+ + diff --git a/source/packages/mod_mokosuiteclient_categories/language/en-GB/mod_mokosuiteclient_categories.ini b/source/packages/mod_mokosuiteclient_categories/language/en-GB/mod_mokosuiteclient_categories.ini new file mode 100644 index 00000000..e3cade3d --- /dev/null +++ b/source/packages/mod_mokosuiteclient_categories/language/en-GB/mod_mokosuiteclient_categories.ini @@ -0,0 +1,24 @@ +MOD_MOKOSUITECLIENT_CATEGORIES="MokoSuiteClient Categories" +MOD_MOKOSUITECLIENT_CATEGORIES_DESC="Auto-discovers article categories and renders them as a collapsible tree menu. Ideal for knowledge base and help sections." + +MOD_MOKOSUITECLIENT_CATEGORIES_ROOT_LABEL="Root Category" +MOD_MOKOSUITECLIENT_CATEGORIES_ROOT_DESC="Select a parent category. Only its children (and their subcategories) will be displayed. Leave as All to show the entire category tree." +MOD_MOKOSUITECLIENT_CATEGORIES_ALL_CATEGORIES="- All Categories -" + +MOD_MOKOSUITECLIENT_CATEGORIES_DEPTH_LABEL="Maximum Depth" +MOD_MOKOSUITECLIENT_CATEGORIES_DEPTH_DESC="How many levels deep to display. 1 shows only top-level categories, 2 adds one level of subcategories, etc." + +MOD_MOKOSUITECLIENT_CATEGORIES_COUNT_LABEL="Show Article Count" +MOD_MOKOSUITECLIENT_CATEGORIES_COUNT_DESC="Display the number of published articles next to each category name." + +MOD_MOKOSUITECLIENT_CATEGORIES_EMPTY_LABEL="Show Empty Categories" +MOD_MOKOSUITECLIENT_CATEGORIES_EMPTY_DESC="Display categories that have no published articles. Only applies when Show Article Count is enabled." + +MOD_MOKOSUITECLIENT_CATEGORIES_MENUITEM_LABEL="Target Menu Item" +MOD_MOKOSUITECLIENT_CATEGORIES_MENUITEM_DESC="The menu item to use as the base for category links. This sets the Itemid parameter for proper template and menu highlighting." + +MOD_MOKOSUITECLIENT_CATEGORIES_ORDER_LABEL="Category Ordering" +MOD_MOKOSUITECLIENT_CATEGORIES_ORDER_DESC="How to sort categories within each level." +MOD_MOKOSUITECLIENT_CATEGORIES_ORDER_TREE="Tree Order (default)" +MOD_MOKOSUITECLIENT_CATEGORIES_ORDER_TITLE="Alphabetical" +MOD_MOKOSUITECLIENT_CATEGORIES_ORDER_CREATED="Date Created" diff --git a/source/packages/mod_mokosuiteclient_categories/language/en-GB/mod_mokosuiteclient_categories.sys.ini b/source/packages/mod_mokosuiteclient_categories/language/en-GB/mod_mokosuiteclient_categories.sys.ini new file mode 100644 index 00000000..9f8b25a6 --- /dev/null +++ b/source/packages/mod_mokosuiteclient_categories/language/en-GB/mod_mokosuiteclient_categories.sys.ini @@ -0,0 +1,2 @@ +MOD_MOKOSUITECLIENT_CATEGORIES="MokoSuiteClient Categories" +MOD_MOKOSUITECLIENT_CATEGORIES_DESC="Auto-discovers article categories and renders them as a collapsible tree menu. Ideal for knowledge base and help sections." diff --git a/source/packages/mod_mokosuiteclient_categories/mod_mokosuiteclient_categories.xml b/source/packages/mod_mokosuiteclient_categories/mod_mokosuiteclient_categories.xml new file mode 100644 index 00000000..4f85205d --- /dev/null +++ b/source/packages/mod_mokosuiteclient_categories/mod_mokosuiteclient_categories.xml @@ -0,0 +1,76 @@ + + + mod_mokosuiteclient_categories + Moko Consulting + 2026-06-06 + Copyright (C) 2026 Moko Consulting. All rights reserved. + GPL-3.0-or-later + hello@mokoconsulting.tech + https://mokoconsulting.tech + 02.34.50-dev + MOD_MOKOSUITECLIENT_CATEGORIES_DESC + Moko\Module\MokoSuiteClientCategories + + + services + src + tmpl + + + + en-GB/mod_mokosuiteclient_categories.ini + en-GB/mod_mokosuiteclient_categories.sys.ini + + + + +
+ + + + + + + + + + + + + + + + + + +
+
+
+
diff --git a/source/packages/mod_mokosuite_cpanel/services/provider.php b/source/packages/mod_mokosuiteclient_categories/services/provider.php similarity index 79% rename from source/packages/mod_mokosuite_cpanel/services/provider.php rename to source/packages/mod_mokosuiteclient_categories/services/provider.php index 5c5d9622..1c0674cc 100644 --- a/source/packages/mod_mokosuite_cpanel/services/provider.php +++ b/source/packages/mod_mokosuiteclient_categories/services/provider.php @@ -1,7 +1,7 @@ registerServiceProvider(new ModuleDispatcherFactory('\\Moko\\Module\\MokoSuiteCpanel')); - $container->registerServiceProvider(new HelperFactory('\\Moko\\Module\\MokoSuiteCpanel\\Administrator\\Helper')); + $container->registerServiceProvider(new ModuleDispatcherFactory('\\Moko\\Module\\MokoSuiteClientCategories')); + $container->registerServiceProvider(new HelperFactory('\\Moko\\Module\\MokoSuiteClientCategories\\Administrator\\Helper')); $container->registerServiceProvider(new Module()); } }; diff --git a/source/packages/mod_mokosuite_categories/src/Dispatcher/Dispatcher.php b/source/packages/mod_mokosuiteclient_categories/src/Dispatcher/Dispatcher.php similarity index 82% rename from source/packages/mod_mokosuite_categories/src/Dispatcher/Dispatcher.php rename to source/packages/mod_mokosuiteclient_categories/src/Dispatcher/Dispatcher.php index cc09153f..dbec34f7 100644 --- a/source/packages/mod_mokosuite_categories/src/Dispatcher/Dispatcher.php +++ b/source/packages/mod_mokosuiteclient_categories/src/Dispatcher/Dispatcher.php @@ -1,12 +1,12 @@ children); $isActive = $isCatView && (int) $cat->id === $activeCatId; $isAncestor = $hasChildren && $isActiveOrAncestor($cat); - $liClass = 'item mokosuite-cat-item mokosuite-cat-level-' . $depth; + $liClass = 'item mokosuiteclient-cat-item mokosuiteclient-cat-level-' . $depth; if ($isActive) { @@ -126,11 +126,11 @@ $renderTree = function (array $categories, int $depth = 1) use ( ?>
escape($order->ref); ?>escape($order->ref); ?> status); ?> $total, 2); ?> escape($order->created); ?>
id; ?>subject, 0, 60)); ?>id; ?>subject, 0, 60)); ?> status] ?? $t->status; ?> priority); ?> category_title ?? '—'); ?>