From 94d85cd873a6f4b1b542bbd9f4f5976bfab35e50 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Wed, 3 Dec 2025 10:41:29 -0700 Subject: [PATCH] add support for environment in grav scheduler Signed-off-by: Andy Miller --- system/blueprints/config/backups.yaml | 9 +++++++++ system/config/backups.yaml | 1 + system/src/Grav/Common/Backup/Backups.php | 12 ++++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/system/blueprints/config/backups.yaml b/system/blueprints/config/backups.yaml index 03c780660..a4e7a59f5 100644 --- a/system/blueprints/config/backups.yaml +++ b/system/blueprints/config/backups.yaml @@ -122,4 +122,13 @@ form: default: '* 3 * * *' validate: required: true + .schedule_environment: + type: select + label: PLUGIN_ADMIN.BACKUPS_PROFILE_ENVIRONMENT + help: PLUGIN_ADMIN.BACKUPS_PROFILE_ENVIRONMENT_HELP + default: '' + options: + '': 'Default (cli)' + localhost: 'Localhost' + cli: 'CLI' diff --git a/system/config/backups.yaml b/system/config/backups.yaml index 0d3c41ebe..3585c985c 100644 --- a/system/config/backups.yaml +++ b/system/config/backups.yaml @@ -10,6 +10,7 @@ profiles: root: '/' schedule: false schedule_at: '0 3 * * *' + schedule_environment: '' exclude_paths: "/backup\r\n/cache\r\n/images\r\n/logs\r\n/tmp" exclude_files: ".DS_Store\r\n.git\r\n.svn\r\n.hg\r\n.idea\r\n.vscode\r\nnode_modules" diff --git a/system/src/Grav/Common/Backup/Backups.php b/system/src/Grav/Common/Backup/Backups.php index 53cc8bec1..bdb2355dc 100644 --- a/system/src/Grav/Common/Backup/Backups.php +++ b/system/src/Grav/Common/Backup/Backups.php @@ -89,8 +89,9 @@ class Backups $at = $profile['schedule_at']; $name = $inflector::hyphenize($profile['name']); $logs = 'logs/backup-' . $name . '.out'; + $environment = $profile['schedule_environment'] ?? null; /** @var Job $job */ - $job = $scheduler->addFunction('Grav\Common\Backup\Backups::backup', [$id], $name); + $job = $scheduler->addFunction('Grav\Common\Backup\Backups::backup', [$id, null, $environment], $name); $job->at($at); $job->output($logs); $job->backlink('/tools/backups'); @@ -192,12 +193,19 @@ class Backups * * @param int $id * @param callable|null $status + * @param string|null $environment Optional environment to load config from * @return string|null */ - public static function backup($id = 0, ?callable $status = null) + public static function backup($id = 0, ?callable $status = null, ?string $environment = null) { $grav = Grav::instance(); + // If environment is specified and different from current, reload config + if ($environment && $environment !== $grav['config']->get('setup.environment')) { + $grav->setup($environment); + $grav['config']->reload(); + } + $profiles = static::getBackupProfiles(); /** @var UniformResourceLocator $locator */ $locator = $grav['locator'];