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:
@@ -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');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user