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) <noreply@anthropic.com>
This commit is contained in:
+115
-2
@@ -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'),
|
||||
|
||||
Reference in New Issue
Block a user