Revert "fix(script): auto-remove duplicate MokoOnyx and stale MokoCassiopeia extensions"
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled

This reverts commit 4c6d9396f8.
This commit is contained in:
Jonathan Miller
2026-06-04 08:11:34 -05:00
parent 4c6d9396f8
commit fd359ae7f7
-96
View File
@@ -96,7 +96,6 @@ class Tpl_MokoonyxInstallerScript implements InstallerScriptInterface
$this->clearFaviconStamp();
$this->cleanMediaFolder();
$this->removeDeletedFiles();
$this->removeDuplicateExtensions();
$this->lockExtension();
}
@@ -487,101 +486,6 @@ class Tpl_MokoonyxInstallerScript implements InstallerScriptInterface
}
}
/**
* Remove duplicate MokoOnyx extension entries from #__extensions.
*
* Re-installs or migrations can leave ghost rows. We keep the one
* that is locked (the active template) and delete any extras.
* Also removes stale MokoCassiopeia entries if present.
*/
private function removeDuplicateExtensions(): void
{
$db = Factory::getDbo();
// Find all MokoOnyx template entries
$rows = $db->setQuery(
$db->getQuery(true)
->select(['extension_id', 'locked'])
->from('#__extensions')
->where($db->quoteName('element') . ' = ' . $db->quote(self::NEW_NAME))
->where($db->quoteName('type') . ' = ' . $db->quote('template'))
->order('locked DESC, extension_id ASC')
)->loadObjectList();
if (count($rows) > 1) {
// Keep the first (locked/lowest ID), remove the rest
$keep = (int) $rows[0]->extension_id;
$removed = 0;
for ($i = 1; $i < count($rows); $i++) {
$staleId = (int) $rows[$i]->extension_id;
// Remove from update_sites_extensions
$db->setQuery(
$db->getQuery(true)
->delete('#__update_sites_extensions')
->where('extension_id = ' . $staleId)
)->execute();
// Remove from extensions
$db->setQuery(
$db->getQuery(true)
->delete('#__extensions')
->where('extension_id = ' . $staleId)
)->execute();
$removed++;
}
if ($removed > 0) {
$this->logMessage("Removed {$removed} duplicate MokoOnyx extension(s). Kept ID {$keep}.");
}
}
// Also remove stale MokoCassiopeia if it exists
$oldExt = (int) $db->setQuery(
$db->getQuery(true)
->select('extension_id')
->from('#__extensions')
->where($db->quoteName('element') . ' = ' . $db->quote(self::OLD_NAME))
->where($db->quoteName('type') . ' = ' . $db->quote('template'))
)->loadResult();
if ($oldExt) {
// Only remove if no template styles reference it
$styleCount = (int) $db->setQuery(
$db->getQuery(true)
->select('COUNT(*)')
->from('#__template_styles')
->where($db->quoteName('template') . ' = ' . $db->quote(self::OLD_NAME))
->where($db->quoteName('home') . ' = 1')
)->loadResult();
if ($styleCount === 0) {
$db->setQuery(
$db->getQuery(true)
->delete('#__update_sites_extensions')
->where('extension_id = ' . $oldExt)
)->execute();
$db->setQuery(
$db->getQuery(true)
->delete('#__extensions')
->where('extension_id = ' . $oldExt)
)->execute();
// Remove non-default styles too
$db->setQuery(
$db->getQuery(true)
->delete('#__template_styles')
->where($db->quoteName('template') . ' = ' . $db->quote(self::OLD_NAME))
)->execute();
$this->logMessage('Removed stale MokoCassiopeia extension and styles.');
}
}
}
// ====================================================================
// LICENSE & UPDATE SERVER MIGRATION
// ====================================================================