From 6d36d14221045302689e86e9e3d1a0843b9bbca7 Mon Sep 17 00:00:00 2001 From: Rasmus Fuhse Date: Fri, 23 May 2025 12:11:01 +0000 Subject: =?UTF-8?q?Resolve=20"Log-Eintr=C3=A4ge=20f=C3=BCr=20Cronjobs"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #5231 Merge request studip/studip!3921 --- db/migrations/6.1.1_add_cronjob_log_actions.php | 103 ++++++++++++++++++++++++ lib/models/CronjobSchedule.php | 17 ++++ lib/models/CronjobTask.php | 17 ++++ 3 files changed, 137 insertions(+) create mode 100644 db/migrations/6.1.1_add_cronjob_log_actions.php diff --git a/db/migrations/6.1.1_add_cronjob_log_actions.php b/db/migrations/6.1.1_add_cronjob_log_actions.php new file mode 100644 index 0000000..4c0e15c --- /dev/null +++ b/db/migrations/6.1.1_add_cronjob_log_actions.php @@ -0,0 +1,103 @@ +exec(" + INSERT INTO `log_actions` + SET `action_id` = MD5('CRONJOB_TASK_DELETED'), + `name` = 'CRONJOB_TASK_DELETED', + `description` = 'Cronjob-Aufgabe wurde gelöscht.', + `info_template` = '%user löscht Cronjob-Aufgabe %info.', + `active` = 1, + `expires` = 0, + `type` = 'core', + `mkdate` = UNIX_TIMESTAMP(), + `chdate` = UNIX_TIMESTAMP() + "); + DBManager::get()->exec(" + INSERT INTO `log_actions` + SET `action_id` = MD5('CRONJOB_SCHEDULE_DELETED'), + `name` = 'CRONJOB_SCHEDULE_DELETED', + `description` = 'Cronjob wurde gelöscht.', + `info_template` = '%user löscht Cronjob %info.', + `active` = 1, + `expires` = 0, + `type` = 'core', + `mkdate` = UNIX_TIMESTAMP(), + `chdate` = UNIX_TIMESTAMP() + "); + DBManager::get()->exec(" + INSERT INTO `log_actions` + SET `action_id` = MD5('CRONJOB_TASK_DEACTIVATED'), + `name` = 'CRONJOB_TASK_DEACTIVATED', + `description` = 'Cronjob-Aufgabe wurde deaktiviert.', + `info_template` = '%user deaktiviert Cronjob-Aufgabe %info.', + `active` = 1, + `expires` = 0, + `type` = 'core', + `mkdate` = UNIX_TIMESTAMP(), + `chdate` = UNIX_TIMESTAMP() + "); + DBManager::get()->exec(" + INSERT INTO `log_actions` + SET `action_id` = MD5('CRONJOB_SCHEDULE_DEACTIVATED'), + `name` = 'CRONJOB_SCHEDULE_DEACTIVATED', + `description` = 'Cronjob wurde deaktiviert.', + `info_template` = '%user deaktiviert Cronjob %info.', + `active` = 1, + `expires` = 0, + `type` = 'core', + `mkdate` = UNIX_TIMESTAMP(), + `chdate` = UNIX_TIMESTAMP() + "); + DBManager::get()->exec(" + INSERT INTO `log_actions` + SET `action_id` = MD5('CRONJOB_TASK_ACTIVATED'), + `name` = 'CRONJOB_TASK_ACTIVATED', + `description` = 'Cronjob-Aufgabe wurde aktiviert.', + `info_template` = '%user aktiviert Cronjob-Aufgabe %info.', + `active` = 1, + `expires` = 0, + `type` = 'core', + `mkdate` = UNIX_TIMESTAMP(), + `chdate` = UNIX_TIMESTAMP() + "); + DBManager::get()->exec(" + INSERT INTO `log_actions` + SET `action_id` = MD5('CRONJOB_SCHEDULE_ACTIVATED'), + `name` = 'CRONJOB_SCHEDULE_ACTIVATED', + `description` = 'Cronjob wurde aktiviert.', + `info_template` = '%user aktiviert Cronjob %info.', + `active` = 1, + `expires` = 0, + `type` = 'core', + `mkdate` = UNIX_TIMESTAMP(), + `chdate` = UNIX_TIMESTAMP() + "); + } + + public function down() + { + DBManager::get()->exec(" + DELETE `log_actions`, `log_events` + FROM `log_actions` + LEFT JOIN `log_events` USING(`action_id`) + WHERE `name` IN ( + 'CRONJOB_TASK_DELETED', + 'CRONJOB_SCHEDULE_DELETED', + 'CRONJOB_TASK_DEACTIVATED', + 'CRONJOB_SCHEDULE_DEACTIVATED', + 'CRONJOB_TASK_ACTIVATED', + 'CRONJOB_SCHEDULE_ACTIVATED', + ) + "); + } +} diff --git a/lib/models/CronjobSchedule.php b/lib/models/CronjobSchedule.php index 34b2673..fd569b6 100644 --- a/lib/models/CronjobSchedule.php +++ b/lib/models/CronjobSchedule.php @@ -67,6 +67,8 @@ class CronjobSchedule extends SimpleORMap $config['registered_callbacks']['before_store'][] = 'cbJsonifyParameters'; $config['registered_callbacks']['after_store'][] = 'cbJsonifyParameters'; + $config['registered_callbacks']['before_store'][] = 'cbLogActivation'; + $config['registered_callbacks']['before_delete'][] = 'cbLogDeleting'; $config['registered_callbacks']['after_initialize'][] = 'cbJsonifyParameters'; parent::configure($config); @@ -101,6 +103,21 @@ class CronjobSchedule extends SimpleORMap } } + protected function cbLogActivation($type) + { + if ($this->active && !$this->content_db['active']) { + StudipLog::log('CRONJOB_SCHEDULE_ACTIVATED', null, null, $this->getTitle()); + } + if (!$this->active && $this->content_db['active']) { + StudipLog::log('CRONJOB_SCHEDULE_DEACTIVATED', null, null, $this->getTitle()); + } + } + + protected function cbLogDeleting($type) + { + StudipLog::log('CRONJOB_SCHEDULE_DELETED', null, null, $this->getTitle()); + } + /** * Stores the schedule in database. Will bail out with an exception if * the provided task does not exists. Will also nullify the title if it diff --git a/lib/models/CronjobTask.php b/lib/models/CronjobTask.php index b829832..8733876 100644 --- a/lib/models/CronjobTask.php +++ b/lib/models/CronjobTask.php @@ -92,6 +92,8 @@ class CronjobTask extends SimpleORMap ]; $config['registered_callbacks']['after_initialize'][] = 'loadClass'; + $config['registered_callbacks']['before_store'][] = 'cbLogActivation'; + $config['registered_callbacks']['before_delete'][] = 'cbLogDeleting'; parent::configure($config); } @@ -121,6 +123,21 @@ class CronjobTask extends SimpleORMap $this->valid = class_exists($this->class); } + protected function cbLogActivation($type) + { + if ($this->active && !$this->content_db['active']) { + StudipLog::log('CRONJOB_TASK_ACTIVATED', null, null, $this->name); + } + if (!$this->active && $this->content_db['active']) { + StudipLog::log('CRONJOB_TASK_DEACTIVATED', null, null, $this->name); + } + } + + protected function cbLogDeleting($type) + { + StudipLog::log('CRONJOB_TASK_DELETED', null, null, $this->name); + } + /** * Returns whether the task is defined in the core system or via a plugin. * -- cgit v1.0