From 77c11e295153e6630752f7c849fc4eb5512ed9f6 Mon Sep 17 00:00:00 2001 From: ditsuke Date: Sun, 15 Aug 2021 11:28:56 +0530 Subject: [PATCH] Add one-way jobs to plgJobToggleOffline Add jobs setOffline and setOnline. These jobs enable a single directive rather than the blind toggle in toggleOffline. --- .../en-GB/en-GB.plg_job_toggleoffline.ini | 18 ++++++--- plugins/job/toggleoffline/toggleoffline.php | 38 +++++++++++++++---- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/plugins/job/toggleoffline/language/en-GB/en-GB.plg_job_toggleoffline.ini b/plugins/job/toggleoffline/language/en-GB/en-GB.plg_job_toggleoffline.ini index 6cf2a925d26..87a02387168 100644 --- a/plugins/job/toggleoffline/language/en-GB/en-GB.plg_job_toggleoffline.ini +++ b/plugins/job/toggleoffline/language/en-GB/en-GB.plg_job_toggleoffline.ini @@ -1,9 +1,15 @@ PLG_JOB_TOGGLE_OFFLINE="Job - Toggle Offline" -PLG_JOB_TOGGLE_OFFLINE_DESC="Toggles the site's offline status on each run" +PLG_JOB_TOGGLE_OFFLINE_DESC="Toggles the site's status on each run." PLG_JOB_TOGGLE_OFFLINE_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE="Could not make configuration.php un-writable." -PLG_JOB_TOGGLE_OFFLINE_ERROR_CONFIGURATION_PHP_NOTWRITABLE="Could not make configuration.php writable" +PLG_JOB_TOGGLE_OFFLINE_ERROR_CONFIGURATION_PHP_NOTWRITABLE="Could not make configuration.php writable." PLG_JOB_TOGGLE_OFFLINE_ERROR_WRITE_FAILED="Could not write to the configuration file!" -PLG_JOB_TOGGLE_OFFLINE_JOB_LOG_MESSAGE="Job> ToggleOffline return code is: %1$d. Processing Time: %2$.2f seconds" -PLG_JOB_TOGGLE_OFFLINE_JOB_LOG_SITE_STATUS="Site is now: %1$s" -PLG_JOB_TOGGLE_OFFLINE_TITLE="Toggle Offline" -PLG_JOB_TOGGLE_OFFLINE_XML_DESCRIPTION="Toggles the site's offline status on each run" +PLG_JOB_TOGGLE_OFFLINE_JOB_LOG_MESSAGE="Job> ToggleOffline return code is: %1$d. Processing Time: %2$.2f seconds." +PLG_JOB_TOGGLE_OFFLINE_JOB_LOG_SITE_STATUS="Site was %1$s, is now %2$s." +PLG_JOB_TOGGLE_OFFLINE_SET_OFFLINE_DESC="Sets site offline to online on each run." +PLG_JOB_TOGGLE_OFFLINE_SET_OFFLINE_JOB_LOG_MESSAGE="Job> SetOffline return code is: %1$d. Processing Time: %2$.2f seconds." +PLG_JOB_TOGGLE_OFFLINE_SET_OFFLINE_TITLE="Get Site Offline." +PLG_JOB_TOGGLE_OFFLINE_SET_ONLINE_DESC="Sets site status to online on each run." +PLG_JOB_TOGGLE_OFFLINE_SET_ONLINE_JOB_LOG_MESSAGE="Job> SetOnline return code is: %1$d. Processing Time: %2$.2f seconds." +PLG_JOB_TOGGLE_OFFLINE_SET_ONLINE_TITLE="Get Site Online." +PLG_JOB_TOGGLE_OFFLINE_TITLE="Toggle Offline." +PLG_JOB_TOGGLE_OFFLINE_XML_DESCRIPTION="Toggles the site's offline status on each run." diff --git a/plugins/job/toggleoffline/toggleoffline.php b/plugins/job/toggleoffline/toggleoffline.php index 9126284b10b..143d44de185 100644 --- a/plugins/job/toggleoffline/toggleoffline.php +++ b/plugins/job/toggleoffline/toggleoffline.php @@ -38,8 +38,20 @@ class PlgJobToggleoffline extends CMSPlugin implements SubscriberInterface */ protected const JOBS_MAP = [ 'plg_job_toggle_offline' => [ - 'langConstPrefix' => 'PLG_JOB_TOGGLE_OFFLINE' - ] + 'langConstPrefix' => 'PLG_JOB_TOGGLE_OFFLINE', + 'toggle' => true + ], + 'plg_job_toggle_offline_set_online' => [ + 'langConstPrefix' => 'PLG_JOB_TOGGLE_OFFLINE_SET_ONLINE', + 'toggle' => false, + 'offline' => false + ], + 'plg_job_toggle_offline_set_offline' => [ + 'langConstPrefix' => 'PLG_JOB_TOGGLE_OFFLINE_SET_OFFLINE', + 'toggle' => false, + 'offline' => true + ], + ]; /** @@ -101,12 +113,24 @@ public function toggleOffline(CronRunEvent $event): void $config = ArrayHelper::fromObject(new JConfig); - $config['offline'] = !$config['offline']; - $status = $config['offline'] ? 'offline' : 'online'; - $this->writeConfigFile(new Registry($config)); - $this->addJobLog(Text::sprintf('PLG_JOB_TOGGLE_OFFLINE_JOB_LOG_SITE_STATUS', $status)); + $toggle = self::JOBS_MAP[$event->getJobId()]['toggle']; + $oldStatus = $config['offline'] ? 'offline' : 'online'; + + if ($toggle) + { + $config['offline'] = !$config['offline']; + } + else + { + $offline = self::JOBS_MAP[$event->getJobId()]['offline']; + $config['offline'] = $offline; + } + + $newStatus = $config['offline'] ? 'offline' : 'online'; + $exit = $this->writeConfigFile(new Registry($config)); + $this->addJobLog(Text::sprintf('PLG_JOB_TOGGLE_OFFLINE_JOB_LOG_SITE_STATUS', $oldStatus, $newStatus)); - $this->jobEnd($event, 0); + $this->jobEnd($event, $exit); } /**