diff --git a/src/script.php b/src/script.php index 6dc76a8..8672367 100644 --- a/src/script.php +++ b/src/script.php @@ -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 // ====================================================================