diff --git a/source/packages/com_mokowaas/admin/sql/updates/mysql/02.35.00.sql b/source/packages/com_mokowaas/admin/sql/updates/mysql/02.35.00.sql new file mode 100644 index 00000000..44aad811 --- /dev/null +++ b/source/packages/com_mokowaas/admin/sql/updates/mysql/02.35.00.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS `#__mokowaas_download_keys` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `element` VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'Extension element name', + `location` VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'Update server URL', + `dlid` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Download key value', + `created` DATETIME NOT NULL, + `modified` DATETIME NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `idx_dlkey_element` (`element`), + KEY `idx_dlkey_location` (`location`(191)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/source/packages/com_mokowaas/mokowaas.xml b/source/packages/com_mokowaas/mokowaas.xml index 08379c3c..160a64c6 100644 --- a/source/packages/com_mokowaas/mokowaas.xml +++ b/source/packages/com_mokowaas/mokowaas.xml @@ -25,6 +25,12 @@ Moko\Component\MokoWaaS + + + sql/updates/mysql + + + MokoWaaS diff --git a/source/script.php b/source/script.php index 6d581090..f9739a46 100644 --- a/source/script.php +++ b/source/script.php @@ -109,6 +109,9 @@ class Pkg_MokowaasInstallerScript // Clean up stale/duplicate update sites $this->cleanupStaleUpdateSites(); + // Ensure download keys table exists (belt-and-suspenders with schema update) + $this->ensureDownloadKeysTable(); + // Restore download keys: first from preflight backup, then from DB table $this->restoreDownloadKeys($this->savedDownloadKeys); $this->reapplyKeysFromDatabase(); @@ -673,6 +676,33 @@ class Pkg_MokowaasInstallerScript * * @return array Map of update_site_id => extra_query */ + /** + * Ensure the download keys table exists. + */ + private function ensureDownloadKeysTable(): void + { + try + { + $db = Factory::getDbo(); + $db->setQuery("CREATE TABLE IF NOT EXISTS `#__mokowaas_download_keys` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `element` VARCHAR(100) NOT NULL DEFAULT '', + `location` VARCHAR(512) NOT NULL DEFAULT '', + `dlid` VARCHAR(255) NOT NULL DEFAULT '', + `created` DATETIME NOT NULL, + `modified` DATETIME NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `idx_dlkey_element` (`element`), + KEY `idx_dlkey_location` (`location`(191)) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); + $db->execute(); + } + catch (\Throwable $e) + { + // Non-critical + } + } + private function backupDownloadKeys(): array { $keys = [];