chore: merge main, resolve conflicts, remove stale files
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 2s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 5s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 8s
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: PR Check / Validate PR (pull_request) Failing after 6s
Universal: PR Check / Secret Scan (pull_request) Successful in 7s
Branch Cleanup / Delete merged branch (pull_request) Failing after 2s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Universal: Workflow Sync Trigger / Sync workflows to live repos (pull_request) Failing after 7s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 58s
Universal: Build & Release / Build & Release Pipeline (pull_request) Failing after 5s

This commit is contained in:
Jonathan Miller
2026-06-23 12:37:29 -05:00
parent da52a9d2f9
commit 114995242d
5 changed files with 1462 additions and 1313 deletions
+150
View File
@@ -114,6 +114,7 @@ class Pkg_MokoSuiteBackupInstallerScript
if (!empty($key)) {
$this->savedDownloadKey = $key;
}
<<<<<<< Updated upstream
} catch (\Exception $e) {
error_log('MokoSuiteBackup: Could not save download key: ' . $e->getMessage());
Factory::getApplication()->enqueueMessage(
@@ -121,6 +122,10 @@ class Pkg_MokoSuiteBackupInstallerScript
. 'Please verify your license key is still configured in System &rarr; Update Sites after this update completes.',
'warning'
);
=======
} catch (\Throwable $e) {
error_log('MokoSuiteBackup: Could not save download key: ' . $e->getMessage());
>>>>>>> Stashed changes
}
}
@@ -144,16 +149,118 @@ class Pkg_MokoSuiteBackupInstallerScript
}
if ($type === 'install') {
<<<<<<< Updated upstream
/* Enable all bundled plugins on fresh install */
$this->enableBundledPlugins();
=======
// Enable the system plugin automatically on fresh install
$db = Factory::getDbo();
$query = $db->getQuery(true)
->update($db->quoteName('#__extensions'))
->set($db->quoteName('enabled') . ' = 1')
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
>>>>>>> Stashed changes
/* Create default backup directory in site root */
$this->createBackupDirectory();
<<<<<<< Updated upstream
/* Generate a random webcron secret word */
$this->generateWebcronSecret();
/* Create default scheduled task for backup automation */
=======
// Enable the quickicon plugin automatically
$query = $db->getQuery(true)
->update($db->quoteName('#__extensions'))
->set($db->quoteName('enabled') . ' = 1')
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
->where($db->quoteName('folder') . ' = ' . $db->quote('quickicon'))
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
$db->setQuery($query);
$db->execute();
// Enable the task plugin automatically
$query = $db->getQuery(true)
->update($db->quoteName('#__extensions'))
->set($db->quoteName('enabled') . ' = 1')
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
->where($db->quoteName('folder') . ' = ' . $db->quote('task'))
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
$db->setQuery($query);
$db->execute();
// Enable the webservices plugin automatically
$query = $db->getQuery(true)
->update($db->quoteName('#__extensions'))
->set($db->quoteName('enabled') . ' = 1')
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
->where($db->quoteName('folder') . ' = ' . $db->quote('webservices'))
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
$db->setQuery($query);
$db->execute();
// Enable the console plugin automatically
$query = $db->getQuery(true)
->update($db->quoteName('#__extensions'))
->set($db->quoteName('enabled') . ' = 1')
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
->where($db->quoteName('folder') . ' = ' . $db->quote('console'))
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
$db->setQuery($query);
$db->execute();
// Enable the content plugin automatically
$query = $db->getQuery(true)
->update($db->quoteName('#__extensions'))
->set($db->quoteName('enabled') . ' = 1')
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
->where($db->quoteName('folder') . ' = ' . $db->quote('content'))
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
$db->setQuery($query);
$db->execute();
// Enable the actionlog plugin automatically
$query = $db->getQuery(true)
->update($db->quoteName('#__extensions'))
->set($db->quoteName('enabled') . ' = 1')
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
->where($db->quoteName('folder') . ' = ' . $db->quote('actionlog'))
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
$db->setQuery($query);
$db->execute();
// Create and protect default backup directory
$backupDir = JPATH_ADMINISTRATOR . '/components/com_mokosuitebackup/backups';
if (!is_dir($backupDir)) {
mkdir($backupDir, 0755, true);
}
if (is_dir($backupDir)) {
$htaccess = $backupDir . '/.htaccess';
if (!is_file($htaccess)) {
file_put_contents($htaccess, "# Apache 2.4+\n<IfModule mod_authz_core.c>\n Require all denied\n</IfModule>\n# Apache 2.2\n<IfModule !mod_authz_core.c>\n Order deny,allow\n Deny from all\n</IfModule>\n");
}
$index = $backupDir . '/index.html';
if (!is_file($index)) {
file_put_contents($index, '<!DOCTYPE html><title></title>');
}
}
// Create default scheduled task — every 30 days, profile 1
>>>>>>> Stashed changes
$this->createDefaultScheduledTask();
}
@@ -323,13 +430,20 @@ class Pkg_MokoSuiteBackupInstallerScript
->select('COUNT(*)')
->from($db->quoteName('#__mokosuitebackup_profiles'))
->where($db->quoteName('published') . ' = 1')
<<<<<<< Updated upstream
->where('(' . $db->quoteName('backup_dir') . ' IN ('
. implode(',', array_map([$db, 'quote'], $oldDefaults))
. ') OR ' . $db->quoteName('backup_dir') . ' = ' . $db->quote('')
=======
->where('(' . $db->quoteName('backup_dir') . ' = ' . $db->quote('administrator/components/com_mokosuitebackup/backups')
. ' OR ' . $db->quoteName('backup_dir') . ' = ' . $db->quote('[DEFAULT_DIR]')
. ' OR ' . $db->quoteName('backup_dir') . ' = ' . $db->quote('')
>>>>>>> Stashed changes
. ' OR ' . $db->quoteName('backup_dir') . ' IS NULL)');
$db->setQuery($query);
if ((int) $db->loadResult() > 0) {
<<<<<<< Updated upstream
$update = $db->getQuery(true)
->update($db->quoteName('#__mokosuitebackup_profiles'))
->set($db->quoteName('backup_dir') . ' = ' . $db->quote('[DEFAULT_DIR]'))
@@ -339,6 +453,9 @@ class Pkg_MokoSuiteBackupInstallerScript
. ' OR ' . $db->quoteName('backup_dir') . ' IS NULL)');
$db->setQuery($update);
$db->execute();
=======
$profileUrl = Route::_('index.php?option=com_mokosuitebackup&view=profiles');
>>>>>>> Stashed changes
$migrated = $db->getAffectedRows();
@@ -346,6 +463,7 @@ class Pkg_MokoSuiteBackupInstallerScript
error_log('MokoSuiteBackup: Migrated ' . $migrated . ' profile(s) from legacy backup_dir to [DEFAULT_DIR]');
}
}
<<<<<<< Updated upstream
} catch (\Exception $e) {
error_log('MokoSuiteBackup: migrateDefaultBackupDir() failed: ' . $e->getMessage());
Factory::getApplication()->enqueueMessage(
@@ -353,6 +471,10 @@ class Pkg_MokoSuiteBackupInstallerScript
. 'Please review your backup profiles and ensure the backup directory is set correctly.',
'warning'
);
=======
} catch (\Throwable $e) {
error_log('MokoSuiteBackup: warnDefaultBackupDir() failed: ' . $e->getMessage());
>>>>>>> Stashed changes
}
}
@@ -361,7 +483,11 @@ class Pkg_MokoSuiteBackupInstallerScript
try {
$db = Factory::getDbo();
<<<<<<< Updated upstream
/* Check if a MokoSuiteBackup task already exists */
=======
// Check if a MokoSuiteBackup task already exists
>>>>>>> Stashed changes
$query = $db->getQuery(true)
->select('COUNT(*)')
->from($db->quoteName('#__scheduler_tasks'))
@@ -411,6 +537,7 @@ class Pkg_MokoSuiteBackupInstallerScript
];
$db->insertObject('#__scheduler_tasks', $task);
<<<<<<< Updated upstream
} catch (\Exception $e) {
error_log('MokoSuiteBackup: createDefaultScheduledTask() failed: ' . $e->getMessage());
Factory::getApplication()->enqueueMessage(
@@ -575,6 +702,10 @@ class Pkg_MokoSuiteBackupInstallerScript
. 'please reinstall the package.',
'warning'
);
=======
} catch (\Throwable $e) {
error_log('MokoSuiteBackup: createDefaultScheduledTask() failed: ' . $e->getMessage());
>>>>>>> Stashed changes
}
}
@@ -595,7 +726,11 @@ class Pkg_MokoSuiteBackupInstallerScript
->update($db->quoteName('#__menu'))
->set($db->quoteName('img') . ' = ' . $db->quote($icon))
->where($db->quoteName('client_id') . ' = 1')
<<<<<<< Updated upstream
->where($db->quoteName('link') . ' LIKE ' . $db->quote('index.php?option=com_mokosuitebackup%' . $linkFragment . '%'));
=======
->where($db->quoteName('link') . ' LIKE ' . $db->quote('%com_mokosuitebackup%' . $linkFragment . '%'));
>>>>>>> Stashed changes
$db->setQuery($query);
$db->execute();
}
@@ -608,12 +743,17 @@ class Pkg_MokoSuiteBackupInstallerScript
->where($db->quoteName('level') . ' = 1');
$db->setQuery($query);
$db->execute();
<<<<<<< Updated upstream
} catch (\Exception $e) {
error_log('MokoSuiteBackup: syncMenuIcons() failed: ' . $e->getMessage());
Factory::getApplication()->enqueueMessage(
'MokoSuiteBackup could not update sidebar menu icons. This is cosmetic and does not affect functionality.',
'notice'
);
=======
} catch (\Throwable $e) {
error_log('MokoSuiteBackup: syncMenuIcons() failed: ' . $e->getMessage());
>>>>>>> Stashed changes
}
}
@@ -651,6 +791,7 @@ class Pkg_MokoSuiteBackupInstallerScript
$db->setQuery($query);
$db->execute();
}
<<<<<<< Updated upstream
} catch (\Exception $e) {
error_log('MokoSuiteBackup: Could not restore download key: ' . $e->getMessage());
Factory::getApplication()->enqueueMessage(
@@ -658,6 +799,10 @@ class Pkg_MokoSuiteBackupInstallerScript
. 'Please re-enter it in the Update Sites configuration to continue receiving updates.',
'warning'
);
=======
} catch (\Throwable $e) {
error_log('MokoSuiteBackup: Could not restore download key: ' . $e->getMessage());
>>>>>>> Stashed changes
}
}
@@ -693,6 +838,7 @@ class Pkg_MokoSuiteBackupInstallerScript
'warning'
);
}
<<<<<<< Updated upstream
catch (\Exception $e) {
error_log('MokoSuiteBackup: License key check failed: ' . $e->getMessage());
Factory::getApplication()->enqueueMessage(
@@ -700,6 +846,10 @@ class Pkg_MokoSuiteBackupInstallerScript
. 'Please check System &rarr; Update Sites to ensure a valid license key is configured.',
'warning'
);
=======
catch (\Throwable $e) {
error_log('MokoSuiteBackup: License key check failed: ' . $e->getMessage());
>>>>>>> Stashed changes
}
}
}