From adccf3bd2ad35eaf9b8cbcb83c3857537ee4d012 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 2 Jun 2026 15:39:04 -0500 Subject: [PATCH] feat: rename mokowaas_tos to mokowaas_offline + auto-migrate from standalone MokoJoomTOS Renamed plugin element from mokowaas_tos to mokowaas_offline to better reflect its purpose (offline bypass, not just TOS). Added migrateStandalonePlugins() to package script: - Detects if standalone mokojoomtos plugin is installed - Copies its params (configured slugs) to mokowaas_offline - Removes old extension record, update sites, and files - Logs the migration Future standalone-to-MokoWaaS migrations can be added to the $migrations array. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- .../admin/src/Model/DashboardModel.php | 2 +- .../Extension/MokoWaaS.php | 2 +- .../en-GB/plg_system_mokowaas_offline.ini | 13 ++ .../en-GB/plg_system_mokowaas_offline.sys.ini | 3 + .../mokowaas_offline.xml} | 22 ++-- .../services/provider.php | 6 +- .../src/Extension/Tos.php | 4 +- .../src/Field/MenuslugField.php | 6 +- .../en-GB/plg_system_mokowaas_tos.ini | 13 -- .../en-GB/plg_system_mokowaas_tos.sys.ini | 3 - src/pkg_mokowaas.xml | 2 +- src/script.php | 117 +++++++++++++++++- 12 files changed, 153 insertions(+), 40 deletions(-) create mode 100644 src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.ini create mode 100644 src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.sys.ini rename src/packages/{plg_system_mokowaas_tos/mokowaas_tos.xml => plg_system_mokowaas_offline/mokowaas_offline.xml} (61%) rename src/packages/{plg_system_mokowaas_tos => plg_system_mokowaas_offline}/services/provider.php (85%) rename src/packages/{plg_system_mokowaas_tos => plg_system_mokowaas_offline}/src/Extension/Tos.php (96%) rename src/packages/{plg_system_mokowaas_tos => plg_system_mokowaas_offline}/src/Field/MenuslugField.php (91%) delete mode 100644 src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini delete mode 100644 src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini diff --git a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php index fbc9ab57..b8674dc5 100644 --- a/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php +++ b/src/packages/com_mokowaas/admin/src/Model/DashboardModel.php @@ -45,7 +45,7 @@ class DashboardModel extends BaseDatabaseModel 'protected' => false, 'configure_only' => false, ], - 'mokowaas_tos' => [ + 'mokowaas_offline' => [ 'icon' => 'icon-globe', 'category' => 'security', 'label' => 'Offline Bypass', diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index a36066cd..29dcdc96 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -1411,7 +1411,7 @@ class MokoWaaS extends CMSPlugin implements BootableExtensionInterface $db->quote('mokowaas_firewall'), $db->quote('mokowaas_tenant'), $db->quote('mokowaas_devtools'), - $db->quote('mokowaas_tos'), + $db->quote('mokowaas_offline'), $db->quote('mod_mokowaas_cpanel'), ]; diff --git a/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.ini b/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.ini new file mode 100644 index 00000000..65517993 --- /dev/null +++ b/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.ini @@ -0,0 +1,13 @@ +; MokoWaaS Terms of Service Plugin +; Copyright (C) 2026 Moko Consulting. All rights reserved. +; License: GPL-3.0-or-later + +PLG_SYSTEM_MOKOWAAS_OFFLINE="System - MokoWaaS Offline Bypass" +PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." + +PLG_SYSTEM_MOKOWAAS_OFFLINE_FIELDSET_BASIC="Offline-Accessible Pages" +PLG_SYSTEM_MOKOWAAS_OFFLINE_SLUG_LABEL="Menu Items to Keep Online" +PLG_SYSTEM_MOKOWAAS_OFFLINE_SLUG_DESC="Select menu items that remain accessible during offline mode. Hold Ctrl/Cmd for multiple." +PLG_SYSTEM_MOKOWAAS_OFFLINE_CHILDREN_LABEL="Include Child Menu Items" +PLG_SYSTEM_MOKOWAAS_OFFLINE_CHILDREN_DESC="Also allow access to child pages under the selected items." +PLG_SYSTEM_MOKOWAAS_OFFLINE_SEF_WARNING="SEF URLs are disabled - path matching requires SEF. Itemid fallback is active." diff --git a/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.sys.ini b/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.sys.ini new file mode 100644 index 00000000..7b6f1ef3 --- /dev/null +++ b/src/packages/plg_system_mokowaas_offline/language/en-GB/plg_system_mokowaas_offline.sys.ini @@ -0,0 +1,3 @@ +; MokoWaaS Terms of Service Plugin - System strings +PLG_SYSTEM_MOKOWAAS_OFFLINE="System - MokoWaaS Offline Bypass" +PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." diff --git a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml similarity index 61% rename from src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml rename to src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml index 1cf673c2..b24656f6 100644 --- a/src/packages/plg_system_mokowaas_tos/mokowaas_tos.xml +++ b/src/packages/plg_system_mokowaas_offline/mokowaas_offline.xml @@ -1,7 +1,7 @@ System - MokoWaaS Offline Bypass - mokowaas_tos + mokowaas_offline Moko Consulting 2026-06-02 Copyright (C) 2026 Moko Consulting. All rights reserved. @@ -9,8 +9,8 @@ hello@mokoconsulting.tech https://mokoconsulting.tech 02.32.32 - PLG_SYSTEM_MOKOWAAS_TOS_DESC - Moko\Plugin\System\MokoWaaSTos + PLG_SYSTEM_MOKOWAAS_OFFLINE_DESC + Moko\Plugin\System\MokoWaaSOffline src @@ -19,21 +19,21 @@ - en-GB/plg_system_mokowaas_tos.ini - en-GB/plg_system_mokowaas_tos.sys.ini + en-GB/plg_system_mokowaas_offline.ini + en-GB/plg_system_mokowaas_offline.sys.ini - -
+ +
diff --git a/src/packages/plg_system_mokowaas_tos/services/provider.php b/src/packages/plg_system_mokowaas_offline/services/provider.php similarity index 85% rename from src/packages/plg_system_mokowaas_tos/services/provider.php rename to src/packages/plg_system_mokowaas_offline/services/provider.php index 8a7f163e..c45e733d 100644 --- a/src/packages/plg_system_mokowaas_tos/services/provider.php +++ b/src/packages/plg_system_mokowaas_offline/services/provider.php @@ -1,7 +1,7 @@ get(DispatcherInterface::class); - $plugin = new Tos($dispatcher, (array) PluginHelper::getPlugin('system', 'mokowaas_tos')); + $plugin = new Tos($dispatcher, (array) PluginHelper::getPlugin('system', 'mokowaas_offline')); $plugin->setApplication(Factory::getApplication()); return $plugin; diff --git a/src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php b/src/packages/plg_system_mokowaas_offline/src/Extension/Tos.php similarity index 96% rename from src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php rename to src/packages/plg_system_mokowaas_offline/src/Extension/Tos.php index 8ef01ed0..1ab84cf6 100644 --- a/src/packages/plg_system_mokowaas_tos/src/Extension/Tos.php +++ b/src/packages/plg_system_mokowaas_offline/src/Extension/Tos.php @@ -1,12 +1,12 @@ '', - 'text' => Text::_('PLG_SYSTEM_MOKOWAAS_TOS_SEF_WARNING'), + 'text' => Text::_('PLG_SYSTEM_MOKOWAAS_OFFLINE_SEF_WARNING'), 'disabled' => true, ]; } diff --git a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini b/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini deleted file mode 100644 index 7b75c1e1..00000000 --- a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.ini +++ /dev/null @@ -1,13 +0,0 @@ -; MokoWaaS Terms of Service Plugin -; Copyright (C) 2026 Moko Consulting. All rights reserved. -; License: GPL-3.0-or-later - -PLG_SYSTEM_MOKOWAAS_TOS="System - MokoWaaS Offline Bypass" -PLG_SYSTEM_MOKOWAAS_TOS_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." - -PLG_SYSTEM_MOKOWAAS_TOS_FIELDSET_BASIC="Offline-Accessible Pages" -PLG_SYSTEM_MOKOWAAS_TOS_SLUG_LABEL="Menu Items to Keep Online" -PLG_SYSTEM_MOKOWAAS_TOS_SLUG_DESC="Select menu items that remain accessible during offline mode. Hold Ctrl/Cmd for multiple." -PLG_SYSTEM_MOKOWAAS_TOS_CHILDREN_LABEL="Include Child Menu Items" -PLG_SYSTEM_MOKOWAAS_TOS_CHILDREN_DESC="Also allow access to child pages under the selected items." -PLG_SYSTEM_MOKOWAAS_TOS_SEF_WARNING="SEF URLs are disabled - path matching requires SEF. Itemid fallback is active." diff --git a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini b/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini deleted file mode 100644 index cf84d46a..00000000 --- a/src/packages/plg_system_mokowaas_tos/language/en-GB/plg_system_mokowaas_tos.sys.ini +++ /dev/null @@ -1,3 +0,0 @@ -; MokoWaaS Terms of Service Plugin - System strings -PLG_SYSTEM_MOKOWAAS_TOS="System - MokoWaaS Offline Bypass" -PLG_SYSTEM_MOKOWAAS_TOS_DESC="Keep selected pages (Terms of Service, Privacy Policy, etc.) accessible when the site is in offline mode." diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml index ffa16076..112dec43 100644 --- a/src/pkg_mokowaas.xml +++ b/src/pkg_mokowaas.xml @@ -17,7 +17,7 @@ plg_system_mokowaas_firewall.zip plg_system_mokowaas_tenant.zip plg_system_mokowaas_devtools.zip - plg_system_mokowaas_tos.zip + plg_system_mokowaas_offline.zip com_mokowaas.zip mod_mokowaas_cpanel.zip plg_webservices_mokowaas.zip diff --git a/src/script.php b/src/script.php index 7bf3d369..c6a598c1 100644 --- a/src/script.php +++ b/src/script.php @@ -37,12 +37,13 @@ class Pkg_MokowaasInstallerScript // Remove legacy and retired extensions $this->cleanupLegacyExtensions(); $this->removeRetiredExtensions(); + $this->migrateStandalonePlugins(); $this->enablePlugin('system', 'mokowaas'); $this->enablePlugin('system', 'mokowaas_firewall'); $this->enablePlugin('system', 'mokowaas_tenant'); $this->enablePlugin('system', 'mokowaas_devtools'); - $this->enablePlugin('system', 'mokowaas_tos'); + $this->enablePlugin('system', 'mokowaas_offline'); $this->enablePlugin('webservices', 'mokowaas'); $this->enablePlugin('task', 'mokowaasdemo'); $this->enablePlugin('task', 'mokowaassync'); @@ -137,6 +138,118 @@ class Pkg_MokowaasInstallerScript * * @since 02.32.00 */ + private function migrateStandalonePlugins(): void + { + // Migrate standalone MokoJoomTOS plugin to MokoWaaS Offline Bypass + $migrations = [ + ['old_element' => 'mokojoomtos', 'old_folder' => 'system', 'new_element' => 'mokowaas_offline', 'new_folder' => 'system'], + ]; + + try + { + $db = Factory::getDbo(); + + foreach ($migrations as $m) + { + // Check if old plugin exists + $query = $db->getQuery(true) + ->select([$db->quoteName('extension_id'), $db->quoteName('params')]) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($m['old_element'])) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote($m['old_folder'])); + $db->setQuery($query); + $old = $db->loadObject(); + + if (!$old) + { + continue; + } + + $oldParams = $old->params ?? '{}'; + + // Copy params to new plugin (only if new plugin has empty params) + $query = $db->getQuery(true) + ->select($db->quoteName('params')) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($m['new_element'])) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote($m['new_folder'])); + $db->setQuery($query); + $newParams = (string) $db->loadResult(); + + if (empty($newParams) || $newParams === '{}' || $newParams === '[]') + { + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('params') . ' = ' . $db->quote($oldParams)) + ->where($db->quoteName('element') . ' = ' . $db->quote($m['new_element'])) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote($m['new_folder'])) + )->execute(); + + Factory::getApplication()->enqueueMessage( + sprintf('Migrated settings from %s to %s.', $m['old_element'], $m['new_element']), + 'message' + ); + } + + // Unprotect old plugin + $db->setQuery( + $db->getQuery(true) + ->update($db->quoteName('#__extensions')) + ->set($db->quoteName('protected') . ' = 0') + ->where($db->quoteName('extension_id') . ' = ' . (int) $old->extension_id) + )->execute(); + + // Remove old extension record + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__extensions')) + ->where($db->quoteName('extension_id') . ' = ' . (int) $old->extension_id) + )->execute(); + + // Remove old update site entries + $db->setQuery( + $db->getQuery(true) + ->delete($db->quoteName('#__update_sites_extensions')) + ->where($db->quoteName('extension_id') . ' = ' . (int) $old->extension_id) + )->execute(); + + // Remove old files + $dir = JPATH_PLUGINS . '/' . $m['old_folder'] . '/' . $m['old_element']; + + if (is_dir($dir)) + { + $this->rmdirRecursive($dir); + } + + Factory::getApplication()->enqueueMessage( + sprintf('Removed standalone %s plugin (replaced by %s).', $m['old_element'], $m['new_element']), + 'message' + ); + + Log::add( + sprintf('Migrated %s → %s and removed old plugin', $m['old_element'], $m['new_element']), + Log::INFO, + 'mokowaas' + ); + } + } + catch (\Throwable $e) + { + Log::add('Standalone plugin migration error: ' . $e->getMessage(), Log::WARNING, 'mokowaas'); + } + } + + /** + * Remove extensions that have been retired and merged into core. + * + * @return void + * + * @since 02.32.00 + */ private function removeRetiredExtensions(): void { $retired = [ @@ -290,7 +403,7 @@ class Pkg_MokowaasInstallerScript $db->quote('mokowaas_firewall'), $db->quote('mokowaas_tenant'), $db->quote('mokowaas_devtools'), - $db->quote('mokowaas_tos'), + $db->quote('mokowaas_offline'), $db->quote('com_mokowaas'), $db->quote('mod_mokowaas_cpanel'), $db->quote('mokowaasdemo'),