diff --git a/source/packages/com_mokosuitebackup/sql/install.mysql.sql b/source/packages/com_mokosuitebackup/sql/install.mysql.sql index 8767c04..76be0f7 100644 --- a/source/packages/com_mokosuitebackup/sql/install.mysql.sql +++ b/source/packages/com_mokosuitebackup/sql/install.mysql.sql @@ -40,6 +40,7 @@ CREATE TABLE IF NOT EXISTS `#__mokosuitebackup_profiles` ( `remote_keep_local` TINYINT(1) NOT NULL DEFAULT 1 COMMENT 'Keep local copy after upload', `encryption_password` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'AES-256 archive encryption password (blank = no encryption)', `include_mokorestore` VARCHAR(20) NOT NULL DEFAULT '0' COMMENT 'MokoRestore mode: 0=none, 1=wrapped, standalone', + `restore_script_name` VARCHAR(100) NOT NULL DEFAULT 'restore.php' COMMENT 'Custom restore script filename', `sanitize_passwords` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Replace user password hashes with invalid value', `preserve_super_admin` TINYINT(1) NOT NULL DEFAULT 1 COMMENT 'Keep super admin password when sanitizing', `sanitize_emails` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Replace user emails with dummy values', @@ -113,14 +114,13 @@ CREATE TABLE IF NOT EXISTS `#__mokosuitebackup_remotes` ( `title` VARCHAR(255) NOT NULL DEFAULT '', `type` VARCHAR(20) NOT NULL DEFAULT 'sftp' COMMENT 'sftp, s3, google_drive', `enabled` TINYINT(1) NOT NULL DEFAULT 1, - `keep_local` TINYINT(1) NOT NULL DEFAULT 1 COMMENT 'Keep local copy after upload', - `config` MEDIUMTEXT NOT NULL COMMENT 'JSON — type-specific settings', + `params` MEDIUMTEXT COMMENT 'JSON: type-specific settings', `ordering` INT(11) NOT NULL DEFAULT 0, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`), KEY `idx_profile` (`profile_id`), - KEY `idx_enabled` (`enabled`) + KEY `idx_enabled` (`profile_id`, `enabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Insert default backup profile (IGNORE prevents duplicate key error on update) diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/01.43.22.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.43.22.sql new file mode 100644 index 0000000..01f1e95 --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.43.22.sql @@ -0,0 +1,5 @@ +-- 01.43.22 — Add restore_script_name to profiles, align remotes schema + +ALTER TABLE `#__mokosuitebackup_profiles` + ADD COLUMN `restore_script_name` VARCHAR(100) NOT NULL DEFAULT 'restore.php' COMMENT 'Custom restore script filename' + AFTER `include_mokorestore`; diff --git a/source/packages/com_mokosuitebackup/src/Engine/SteppedBackupEngine.php b/source/packages/com_mokosuitebackup/src/Engine/SteppedBackupEngine.php index 0901d09..9e18d04 100644 --- a/source/packages/com_mokosuitebackup/src/Engine/SteppedBackupEngine.php +++ b/source/packages/com_mokosuitebackup/src/Engine/SteppedBackupEngine.php @@ -394,8 +394,14 @@ class SteppedBackupEngine $restoreScriptName = MokoRestore::sanitizeScriptName($restoreScriptName); $restoreDir = dirname($session->archivePath); $session->restoreScriptPath = $restoreDir . '/' . $restoreScriptName; - MokoRestore::generateStandalone($session->restoreScriptPath); - $session->log('Standalone ' . $restoreScriptName . ' generated'); + + try { + MokoRestore::generateStandalone($session->restoreScriptPath); + $session->log('Standalone ' . $restoreScriptName . ' generated'); + } catch (\Throwable $e) { + $session->log('MokoRestore error: ' . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine()); + $session->log('Stack trace: ' . $e->getTraceAsString()); + } } // Update record diff --git a/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php b/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php index b378f0a..ae85d6e 100644 --- a/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php +++ b/source/packages/com_mokosuitebackup/src/Model/DashboardModel.php @@ -294,7 +294,7 @@ class DashboardModel extends BaseDatabaseModel ->select($db->quoteName(['id', 'title', 'backup_type'])) ->from($db->quoteName('#__mokosuitebackup_profiles')) ->where($db->quoteName('published') . ' = 1') - ->order($db->quoteName('ordering') . ' ASC'); + ->order($db->quoteName('id') . ' ASC'); $db->setQuery($query); return $db->loadObjectList() ?: [];