feat: migrate params from MokoWaaS extensions and remove old entries

Copies params from all mokowaas_* extension entries to their mokosuite_*
equivalents (plugins, modules, component, package), then unprotects and
deletes old extension records, update sites, and filesystem remnants.
This commit is contained in:
Jonathan Miller
2026-06-07 09:38:16 -05:00
parent 49dd26ef0a
commit 2d9454ea3f
2 changed files with 195 additions and 0 deletions
+194
View File
@@ -64,6 +64,9 @@ class Pkg_MokosuiteInstallerScript
// Migrate MokoWaaS database tables to MokoSuite naming
$this->migrateWaasTables();
// Migrate params from old mokowaas extensions to mokosuite equivalents
$this->migrateWaasExtensionParams();
// Remove legacy extensions and migrate settings before retiring
$this->cleanupLegacyExtensions();
$this->migrateStandalonePlugins();
@@ -1728,4 +1731,195 @@ class Pkg_MokosuiteInstallerScript
Log::add('Table migration error: ' . $e->getMessage(), Log::WARNING, 'mokosuite');
}
}
/**
* Migrate params from old mokowaas extension entries to mokosuite equivalents.
*
* Copies params where the new extension has empty/default params, then deletes
* the old extension entries and their filesystem remnants.
*
* @return void
*
* @since 02.35.00
*/
private function migrateWaasExtensionParams(): void
{
// [old_element, old_folder, new_element, new_folder, type]
$map = [
['mokowaas', 'system', 'mokosuite', 'system', 'plugin'],
['mokowaas_firewall', 'system', 'mokosuite_firewall', 'system', 'plugin'],
['mokowaas_tenant', 'system', 'mokosuite_tenant', 'system', 'plugin'],
['mokowaas_devtools', 'system', 'mokosuite_devtools', 'system', 'plugin'],
['mokowaas_offline', 'system', 'mokosuite_offline', 'system', 'plugin'],
['mokowaas_monitor', 'system', 'mokosuite_monitor', 'system', 'plugin'],
['mokowaas', 'webservices', 'mokosuite', 'webservices', 'plugin'],
['mokowaassync', 'task', 'mokosuitesync', 'task', 'plugin'],
['mokowaasdemo', 'task', 'mokosuitedemo', 'task', 'plugin'],
['mokowaas_tickets', 'task', 'mokosuite_tickets', 'task', 'plugin'],
['com_mokowaas', '', 'com_mokosuite', '', 'component'],
['mod_mokowaas_cpanel', '', 'mod_mokosuite_cpanel', '', 'module'],
['mod_mokowaas_menu', '', 'mod_mokosuite_menu', '', 'module'],
['mod_mokowaas_cache', '', 'mod_mokosuite_cache', '', 'module'],
['mod_mokowaas_categories', '', 'mod_mokosuite_categories', '', 'module'],
['pkg_mokowaas', '', 'pkg_mokosuite', '', 'package'],
];
try
{
$db = Factory::getDbo();
$migrated = 0;
foreach ($map as [$oldEl, $oldFolder, $newEl, $newFolder, $type])
{
// Find old extension
$query = $db->getQuery(true)
->select([$db->quoteName('extension_id'), $db->quoteName('params')])
->from($db->quoteName('#__extensions'))
->where($db->quoteName('element') . ' = ' . $db->quote($oldEl))
->where($db->quoteName('type') . ' = ' . $db->quote($type));
if ($type === 'plugin')
{
$query->where($db->quoteName('folder') . ' = ' . $db->quote($oldFolder));
}
$db->setQuery($query);
$old = $db->loadObject();
if (!$old)
{
continue;
}
$oldParams = (string) ($old->params ?? '{}');
// Copy params to new extension only if new has empty params
if ($oldParams !== '' && $oldParams !== '{}' && $oldParams !== '[]')
{
$newQuery = $db->getQuery(true)
->select($db->quoteName('params'))
->from($db->quoteName('#__extensions'))
->where($db->quoteName('element') . ' = ' . $db->quote($newEl))
->where($db->quoteName('type') . ' = ' . $db->quote($type));
if ($type === 'plugin')
{
$newQuery->where($db->quoteName('folder') . ' = ' . $db->quote($newFolder));
}
$db->setQuery($newQuery);
$newParams = (string) $db->loadResult();
if (empty($newParams) || $newParams === '{}' || $newParams === '[]')
{
$updateQuery = $db->getQuery(true)
->update($db->quoteName('#__extensions'))
->set($db->quoteName('params') . ' = ' . $db->quote($oldParams))
->where($db->quoteName('element') . ' = ' . $db->quote($newEl))
->where($db->quoteName('type') . ' = ' . $db->quote($type));
if ($type === 'plugin')
{
$updateQuery->where($db->quoteName('folder') . ' = ' . $db->quote($newFolder));
}
$db->setQuery($updateQuery)->execute();
Log::add(
sprintf('Migrated params from %s to %s', $oldEl, $newEl),
Log::INFO,
'mokosuite'
);
}
}
// Unprotect old extension
$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 update site links
$db->setQuery(
$db->getQuery(true)
->select($db->quoteName('update_site_id'))
->from($db->quoteName('#__update_sites_extensions'))
->where($db->quoteName('extension_id') . ' = ' . (int) $old->extension_id)
);
$siteIds = $db->loadColumn();
$db->setQuery(
$db->getQuery(true)
->delete($db->quoteName('#__update_sites_extensions'))
->where($db->quoteName('extension_id') . ' = ' . (int) $old->extension_id)
)->execute();
if (!empty($siteIds))
{
$db->setQuery(
$db->getQuery(true)
->delete($db->quoteName('#__updates'))
->where($db->quoteName('update_site_id') . ' IN (' . implode(',', array_map('intval', $siteIds)) . ')')
)->execute();
$db->setQuery(
$db->getQuery(true)
->delete($db->quoteName('#__update_sites'))
->where($db->quoteName('update_site_id') . ' IN (' . implode(',', array_map('intval', $siteIds)) . ')')
)->execute();
}
// Delete old extension entry
$db->setQuery(
$db->getQuery(true)
->delete($db->quoteName('#__extensions'))
->where($db->quoteName('extension_id') . ' = ' . (int) $old->extension_id)
)->execute();
// Remove old plugin/module filesystem remnants
$dir = null;
if ($type === 'plugin')
{
$dir = JPATH_PLUGINS . '/' . $oldFolder . '/' . $oldEl;
}
elseif ($type === 'module')
{
$dir = JPATH_ADMINISTRATOR . '/modules/' . $oldEl;
}
elseif ($type === 'component')
{
// Components have admin + site dirs
foreach ([JPATH_ADMINISTRATOR . '/components/' . $oldEl, JPATH_SITE . '/components/' . $oldEl] as $cDir)
{
if (is_dir($cDir))
{
$this->rmdirRecursive($cDir);
}
}
}
if ($dir && is_dir($dir))
{
$this->rmdirRecursive($dir);
}
$migrated++;
}
if ($migrated > 0)
{
Factory::getApplication()->enqueueMessage(
sprintf('Migrated params from %d MokoWaaS extension(s) and removed old entries.', $migrated),
'message'
);
}
}
catch (\Throwable $e)
{
Log::add('Extension param migration error: ' . $e->getMessage(), Log::WARNING, 'mokosuite');
}
}
}