fix: address PR review — remove dead code, consistent warnings key
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Blocked by required conditions
Joomla: Extension CI / PHPStan Analysis (pull_request) Blocked by required conditions
Joomla: Extension CI / Build RC Pre-Release (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Failing after 1s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 4s
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 7s
Universal: PR Check / Validate PR (pull_request) Failing after 5s
Universal: PR Check / Secret Scan (pull_request) Successful in 6s
Universal: Auto Version Bump / Version Bump (push) Successful in 12s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 35s

- Remove dead checkRequiredExtensions() method (superseded by PreflightCheck)
- Add 'warnings' key to ALL return paths in BackupEngine::run() and
  SteppedBackupEngine::init() to prevent undefined key access on PHP 8.x
- Include preflight warnings in success, failure, and early-exit returns
This commit is contained in:
Jonathan Miller
2026-06-21 17:53:52 -05:00
parent 617c103055
commit dbed0d0da7
2 changed files with 5 additions and 33 deletions
@@ -58,7 +58,7 @@ class BackupEngine
$profile = $db->loadObject();
if (!$profile) {
return ['success' => false, 'message' => 'Profile not found: ' . $profileId];
return ['success' => false, 'message' => 'Profile not found: ' . $profileId, 'warnings' => []];
}
// Log any preflight warnings
@@ -78,7 +78,7 @@ class BackupEngine
$this->backupDir = BackupDirectory::resolve($resolver->resolve($configuredDir));
if (!BackupDirectory::ensureReady($this->backupDir)) {
return ['success' => false, 'message' => 'Cannot create backup directory: ' . $this->backupDir, 'record_id' => 0];
return ['success' => false, 'message' => 'Cannot create backup directory: ' . $this->backupDir, 'record_id' => 0, 'warnings' => $preflightResult['warnings']];
}
// Create backup record
@@ -310,6 +310,7 @@ class BackupEngine
'success' => true,
'message' => 'Backup complete: ' . $archiveName . ' (' . $sizeHuman . ')',
'record_id' => $recordId,
'warnings' => $preflightResult['warnings'],
];
} catch (\Throwable $e) {
$this->log('FATAL: ' . $e->getMessage());
@@ -338,7 +339,7 @@ class BackupEngine
// Dispatch event for actionlog and other listeners
$this->dispatchAfterRun(false, $recordId, $description, $profileId, $origin);
return ['success' => false, 'message' => 'Backup failed: ' . $e->getMessage(), 'record_id' => $recordId];
return ['success' => false, 'message' => 'Backup failed: ' . $e->getMessage(), 'record_id' => $recordId, 'warnings' => $preflightResult['warnings'] ?? []];
}
}
@@ -393,35 +394,6 @@ class BackupEngine
};
}
/**
* Verify required PHP extensions are loaded.
*
* @return true|string True if all ok, or error message string
*/
private function checkRequiredExtensions(): true|string
{
$required = [
'zip' => 'ext-zip (required for archive creation)',
'pdo' => 'ext-pdo (required for database operations)',
'pdo_mysql' => 'ext-pdo_mysql (required for MySQL database dumps)',
'mbstring' => 'ext-mbstring (required for binary-safe operations)',
];
$missing = [];
foreach ($required as $ext => $label) {
if (!extension_loaded($ext)) {
$missing[] = $label;
}
}
if (!empty($missing)) {
return 'Missing PHP extensions: ' . implode(', ', $missing);
}
return true;
}
/**
* Create the appropriate archiver based on the archive format.
*/
@@ -55,7 +55,7 @@ class SteppedBackupEngine
$profile = $db->loadObject();
if (!$profile) {
return ['error' => true, 'message' => 'Profile not found: ' . $profileId];
return ['error' => true, 'message' => 'Profile not found: ' . $profileId, 'warnings' => []];
}
// Create session