From 8488fccfb68ea24c7888aaeab1a5e02abdcdee6d Mon Sep 17 00:00:00 2001 From: following Date: Sat, 15 Dec 2018 15:11:59 +0100 Subject: [PATCH] added cron job admin page; eliminated cronjobs table --- Config/Menu/adminPages.default.php | 3 +- Controllers/Cron/CronAdminController.php | 54 ++++++++++++++++++++++ Controllers/Cron/CronJobsController.php | 20 ++++++++ Controllers/Cron/Jobs/Job.php | 21 ++++----- lib/languages/en.php | 7 +++ sqlAlters/2018-12-10_CronjobController.sql | 9 ---- tpl/stdstyle/cron/cronAdmin.tpl.php | 29 ++++++++++++ 7 files changed, 122 insertions(+), 21 deletions(-) create mode 100644 Controllers/Cron/CronAdminController.php delete mode 100644 sqlAlters/2018-12-10_CronjobController.sql create mode 100644 tpl/stdstyle/cron/cronAdmin.tpl.php diff --git a/Config/Menu/adminPages.default.php b/Config/Menu/adminPages.default.php index ed45cf8198..a6577b10e0 100644 --- a/Config/Menu/adminPages.default.php +++ b/Config/Menu/adminPages.default.php @@ -30,4 +30,5 @@ 'mnu_geoPathAdmin' => '/powerTrailCOG.php', 'mnu_abandonCacheSets' => SimpleRouter::getLink( CacheSetAdminController::class, 'cacheSetsToArchive'), -]; \ No newline at end of file + 'mnu_cronJobs' => SimpleRouter::getLink('Cron.CronAdmin'), +]; diff --git a/Controllers/Cron/CronAdminController.php b/Controllers/Cron/CronAdminController.php new file mode 100644 index 0000000000..b8b33a6b18 --- /dev/null +++ b/Controllers/Cron/CronAdminController.php @@ -0,0 +1,54 @@ +isUserLogged() || !$this->loggedUser->hasSysAdminRole()) { + $this->view->redirect('/'); + exit(); + } + if (isset($_GET['action'])) { + if ($_GET['action'] == 'run') { + if (isset($_GET['job'])) { + $this->runJob($_GET['job']); + } + } + } + $this->showCronAdmin(); + } + + private function showCronAdmin() + { + $cronJobs = new CronJobsController(); + $this->view->setVar('jobs', $cronJobs->getScheduleStatus()); + + $currentUriExploded = explode('?', Uri::getCurrentUri()); + $this->view->setVar('runJobUri', $currentUriExploded[0] . '?action=run&job='); + + $this->view->setTemplate('cron/cronAdmin'); + $this->view->buildView(); + } + + private function runJob($jobName) + { + $cronJobs = new CronJobsController($jobName); + $cronJobs->index(); + } +} diff --git a/Controllers/Cron/CronJobsController.php b/Controllers/Cron/CronJobsController.php index ba061c2f8c..5d4b8012ea 100644 --- a/Controllers/Cron/CronJobsController.php +++ b/Controllers/Cron/CronJobsController.php @@ -85,4 +85,24 @@ private function runJobs($reentrant) } } + public function getScheduleStatus() + { + $result = []; + foreach ($this->ocConfig->getCronjobSchedule() as $jobName => $schedule) { + $jobPath = __DIR__."/Jobs/".$jobName.".php"; + if (!file_exists($jobPath)) { + $lastRun = '?'; + } else { + require_once $jobPath; + $job = new $jobName($this->ocConfig); + $lastRun = $job->getLastRun(); + } + $result[$jobName] = [ + 'shortName' => substr($jobName, 0, strlen($jobName) - 3), + 'schedule' => $schedule, + 'lastRun' => $lastRun // is null if not run yet + ]; + } + return $result; + } } diff --git a/Controllers/Cron/Jobs/Job.php b/Controllers/Cron/Jobs/Job.php index e0ea096ae0..1bd2c7ada2 100644 --- a/Controllers/Cron/Jobs/Job.php +++ b/Controllers/Cron/Jobs/Job.php @@ -1,6 +1,6 @@ 'Show gained', 'prepublication_visits' => 'Visited before publication', 'no_visits' => 'No such visits', + 'admin_cron_title' => 'Cron Jobs', + 'admin_cron_lbl_job' => 'Job', + 'admin_cron_lbl_schedule' => 'Schedule', + 'admin_cron_lbl_lastrun' => 'Last run', + 'admin_cron_run_now' => 'Run now', + 'action' => 'Action', 'loginForm_title' => 'Login', 'loginForm_userOrEmail' => 'User / e-mail', @@ -2737,6 +2743,7 @@ 'mnu_ocTeamNews' => 'News management', 'mnu_additionalMenu' => 'Additional menu', 'mnu_abandonCacheSets' => 'Abandoned GeoPaths', + 'mnu_cronJobs' => 'Cron Jobs', 'mnu_mainPage' => 'Main page', 'mnu_cacheMap' => 'Cache map', 'mnu_abcOfGCaching' => 'Geocaching ABC', diff --git a/sqlAlters/2018-12-10_CronjobController.sql b/sqlAlters/2018-12-10_CronjobController.sql deleted file mode 100644 index 179280b564..0000000000 --- a/sqlAlters/2018-12-10_CronjobController.sql +++ /dev/null @@ -1,9 +0,0 @@ --- following: add table for new cronjob engine - -CREATE TABLE `cronjobs` ( - `name` varchar(60) NOT NULL, - `last_run` datetime NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -ALTER TABLE `cronjobs` - ADD PRIMARY KEY (`name`); diff --git a/tpl/stdstyle/cron/cronAdmin.tpl.php b/tpl/stdstyle/cron/cronAdmin.tpl.php new file mode 100644 index 0000000000..fec468c04f --- /dev/null +++ b/tpl/stdstyle/cron/cronAdmin.tpl.php @@ -0,0 +1,29 @@ + +
+
+ {{admin_cron_title}} +
+ + + + + + + +jobs as $jobName => $jobData) { ?> + + + + + + + +
{{admin_cron_lbl_job}}{{admin_cron_lbl_schedule}}{{admin_cron_lbl_lastrun}}{{action}}
+   + + + {{admin_cron_run_now}} +
+