From 368461577e23e20c4e4c8edeff86e9fc16051897 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 4 Jun 2026 20:15:52 -0500 Subject: [PATCH] fix: CLI exit codes and SQL schema defaults - Console commands: replace self::SUCCESS/FAILURE with 0/1 (Joomla's AbstractCommand doesn't define these Symfony constants) - SQL: make manifest and log columns DEFAULT NULL to prevent "doesn't have a default value" on INSERT Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/packages/com_mokobackup/sql/install.mysql.sql | 4 ++-- .../com_mokobackup/sql/updates/mysql/01.01.08.sql | 4 ++++ .../src/Command/CleanupCommand.php | 2 +- .../src/Command/ListCommand.php | 4 ++-- .../src/Command/ProfilesCommand.php | 4 ++-- .../src/Command/RestoreCommand.php | 14 +++++++------- .../src/Command/RunCommand.php | 6 +++--- 7 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 src/packages/com_mokobackup/sql/updates/mysql/01.01.08.sql diff --git a/src/packages/com_mokobackup/sql/install.mysql.sql b/src/packages/com_mokobackup/sql/install.mysql.sql index b565a01..877e5f2 100644 --- a/src/packages/com_mokobackup/sql/install.mysql.sql +++ b/src/packages/com_mokobackup/sql/install.mysql.sql @@ -63,8 +63,8 @@ CREATE TABLE IF NOT EXISTS `#__mokobackup_records` ( `remote_filename` VARCHAR(512) NOT NULL DEFAULT '', `checksum` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'SHA-256 hash of archive', `base_record_id` INT(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Base full backup ID for differential', - `manifest` LONGTEXT NOT NULL COMMENT 'JSON file manifest for differential comparison', - `log` MEDIUMTEXT NOT NULL COMMENT 'Step-by-step backup log', + `manifest` LONGTEXT DEFAULT NULL COMMENT 'JSON file manifest for differential comparison', + `log` MEDIUMTEXT DEFAULT NULL COMMENT 'Step-by-step backup log', PRIMARY KEY (`id`), KEY `idx_profile` (`profile_id`), KEY `idx_status` (`status`), diff --git a/src/packages/com_mokobackup/sql/updates/mysql/01.01.08.sql b/src/packages/com_mokobackup/sql/updates/mysql/01.01.08.sql new file mode 100644 index 0000000..29716e0 --- /dev/null +++ b/src/packages/com_mokobackup/sql/updates/mysql/01.01.08.sql @@ -0,0 +1,4 @@ +-- MokoJoomBackup 01.01.08 +-- Fix: allow NULL defaults for manifest and log columns +ALTER TABLE `#__mokobackup_records` MODIFY `manifest` LONGTEXT DEFAULT NULL; +ALTER TABLE `#__mokobackup_records` MODIFY `log` MEDIUMTEXT DEFAULT NULL; diff --git a/src/packages/plg_console_mokobackup/src/Command/CleanupCommand.php b/src/packages/plg_console_mokobackup/src/Command/CleanupCommand.php index b26a2a5..1a8509a 100644 --- a/src/packages/plg_console_mokobackup/src/Command/CleanupCommand.php +++ b/src/packages/plg_console_mokobackup/src/Command/CleanupCommand.php @@ -120,6 +120,6 @@ class CleanupCommand extends AbstractCommand $io->success(($dryRun ? 'Would delete ' : 'Deleted ') . $deleted . ' backup record(s).'); } - return self::SUCCESS; + return 0; } } diff --git a/src/packages/plg_console_mokobackup/src/Command/ListCommand.php b/src/packages/plg_console_mokobackup/src/Command/ListCommand.php index 8fcdddd..9586339 100644 --- a/src/packages/plg_console_mokobackup/src/Command/ListCommand.php +++ b/src/packages/plg_console_mokobackup/src/Command/ListCommand.php @@ -56,7 +56,7 @@ class ListCommand extends AbstractCommand if (empty($records)) { $io->info('No backup records found.'); - return self::SUCCESS; + return 0; } $rows = []; @@ -82,6 +82,6 @@ class ListCommand extends AbstractCommand $rows ); - return self::SUCCESS; + return 0; } } diff --git a/src/packages/plg_console_mokobackup/src/Command/ProfilesCommand.php b/src/packages/plg_console_mokobackup/src/Command/ProfilesCommand.php index 4d81616..8f4b21c 100644 --- a/src/packages/plg_console_mokobackup/src/Command/ProfilesCommand.php +++ b/src/packages/plg_console_mokobackup/src/Command/ProfilesCommand.php @@ -44,7 +44,7 @@ class ProfilesCommand extends AbstractCommand if (empty($profiles)) { $io->info('No backup profiles found.'); - return self::SUCCESS; + return 0; } $rows = []; @@ -63,6 +63,6 @@ class ProfilesCommand extends AbstractCommand $rows ); - return self::SUCCESS; + return 0; } } diff --git a/src/packages/plg_console_mokobackup/src/Command/RestoreCommand.php b/src/packages/plg_console_mokobackup/src/Command/RestoreCommand.php index fb857d4..e5f9082 100644 --- a/src/packages/plg_console_mokobackup/src/Command/RestoreCommand.php +++ b/src/packages/plg_console_mokobackup/src/Command/RestoreCommand.php @@ -48,19 +48,19 @@ class RestoreCommand extends AbstractCommand if (!$record) { $io->error('Backup record not found: ' . $recordId); - return self::FAILURE; + return 1; } if ($record->status !== 'complete') { $io->error('Cannot restore — backup status is: ' . $record->status); - return self::FAILURE; + return 1; } if (empty($record->absolute_path) || !is_file($record->absolute_path)) { $io->error('Backup archive not found: ' . ($record->absolute_path ?: 'no path')); - return self::FAILURE; + return 1; } $io->warning('This will overwrite the current site files and/or database.'); @@ -70,7 +70,7 @@ class RestoreCommand extends AbstractCommand if (!$io->confirm('Are you sure you want to continue?', false)) { $io->info('Restore cancelled.'); - return self::SUCCESS; + return 0; } $engineFile = JPATH_ADMINISTRATOR . '/components/com_mokobackup/src/Engine/RestoreEngine.php'; @@ -78,7 +78,7 @@ class RestoreCommand extends AbstractCommand if (!file_exists($engineFile)) { $io->error('RestoreEngine not found. Is the component fully installed?'); - return self::FAILURE; + return 1; } if (!class_exists(RestoreEngine::class)) { @@ -91,11 +91,11 @@ class RestoreCommand extends AbstractCommand if ($result['success']) { $io->success($result['message']); - return self::SUCCESS; + return 0; } $io->error($result['message']); - return self::FAILURE; + return 1; } } diff --git a/src/packages/plg_console_mokobackup/src/Command/RunCommand.php b/src/packages/plg_console_mokobackup/src/Command/RunCommand.php index 52185b9..d187737 100644 --- a/src/packages/plg_console_mokobackup/src/Command/RunCommand.php +++ b/src/packages/plg_console_mokobackup/src/Command/RunCommand.php @@ -45,7 +45,7 @@ class RunCommand extends AbstractCommand if (!file_exists($engineFile)) { $io->error('MokoJoomBackup component not installed.'); - return self::FAILURE; + return 1; } if (!class_exists(BackupEngine::class)) { @@ -58,11 +58,11 @@ class RunCommand extends AbstractCommand if ($result['success']) { $io->success($result['message']); - return self::SUCCESS; + return 0; } $io->error($result['message']); - return self::FAILURE; + return 1; } }