From 4a81288dfcd361c8e970108e0980b6107e4730b5 Mon Sep 17 00:00:00 2001 From: Felix Di Lenarda <dilenarda@tu-berlin.de> Date: Mon, 25 Apr 2022 10:49:28 +0200 Subject: [PATCH] Refined 'specificdate'-trigger, so it works and triggers 'todays'-date. #147 --- .../lang/de/lifecycletrigger_specificdate.php | 1 + .../lang/en/lifecycletrigger_specificdate.php | 1 + trigger/specificdate/lib.php | 40 ++++++------------- 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php b/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php index 7eab683..7fdc5c5 100644 --- a/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php +++ b/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php @@ -27,5 +27,6 @@ $string['privacy:metadata'] = 'Dieses Subplugin speichert keine persönlichen Da $string['dates'] = 'Daten, an denen der Workflow ausgeführt werden soll.'; $string['dates_desc'] = 'Ein Datum pro Zeile in dem Format Tag.Monat'; +$string['dates_desc_help'] = 'Ein Datum pro Zeile z.B.: 04.08 , für den 4. August. Wenn Sie das heutige Datum wählen wird es getriggert'; $string['timelastrun'] = 'Datum, an dem der Trigger zuletzt ausgeführt wurde.'; $string['dates_not_parseable'] = 'Daten müssen in dem Format Tag.Monat sein!'; diff --git a/trigger/specificdate/lang/en/lifecycletrigger_specificdate.php b/trigger/specificdate/lang/en/lifecycletrigger_specificdate.php index 9b7113e..574ebe8 100644 --- a/trigger/specificdate/lang/en/lifecycletrigger_specificdate.php +++ b/trigger/specificdate/lang/en/lifecycletrigger_specificdate.php @@ -27,5 +27,6 @@ $string['privacy:metadata'] = 'This subplugin does not store any personal data.' $string['dates'] = 'Dates at which the workflow should run.'; $string['dates_desc'] = 'Write one date per line with the format Day.Month'; +$string['dates_desc_help'] = 'One date per line for example: 04.08 , for 4th of august. If you are putting todays date it will be triggered'; $string['timelastrun'] = 'Date when the trigger last run.'; $string['dates_not_parseable'] = 'Dates must be of the format Day.Month'; diff --git a/trigger/specificdate/lib.php b/trigger/specificdate/lib.php index 8f8d82a..d0e7769 100644 --- a/trigger/specificdate/lib.php +++ b/trigger/specificdate/lib.php @@ -64,38 +64,24 @@ class specificdate extends base_automatic { */ public function get_course_recordset_where($triggerid) { $settings = settings_manager::get_settings($triggerid, settings_type::TRIGGER); - $lastrun = getdate($settings['timelastrun']); $datesraw = $settings['dates']; $dates = $this->parse_dates($datesraw); + $lastrun = getdate($settings['timelastrun']); + $current = time(); + $today = getdate($current); - $triggerat = array(); - - foreach ($dates as $dateparts) { - if ($dateparts['mon'] > $lastrun['mon']) { - $date = new DateTime($lastrun['year'].'-'.$dateparts['mon'].'-'.$dateparts['day']); - } else if ($dateparts['mon'] === $lastrun['mon']) { - if ($dateparts['day'] > $lastrun['day']) { - $date = new DateTime($lastrun['year'].'-'.$dateparts['mon'].'-'.$dateparts['day']); + foreach ($dates as $date) { + // We want to trigger only if the $date is today. + if ($date['mon'] == $today['mon'] && $date['day'] == $today['mday']) { + // Now only make sure if $lastrun was today -> don't trigger. + if ($lastrun['yday'] == $today['yday'] && $lastrun['year'] == $today['year']) { + continue; } else { - $date = new DateTime(($lastrun['year'] + 1) .'-'.$dateparts['mon'].'-'.$dateparts['day']); + $settings['timelastrun'] = $current; + $trigger = trigger_manager::get_instance($triggerid); + settings_manager::save_settings($triggerid, settings_type::TRIGGER, $trigger->subpluginname, $settings); + return array('true', array()); } - } else { - $date = new DateTime(($lastrun['year'] + 1) .'-'.$dateparts['mon'].'-'.$dateparts['day']); - } - - $triggerat[] = $date->getTimestamp(); - } - - sort($triggerat); - - $current = time(); - - foreach ($triggerat as $timestamp) { - if ($timestamp < $current) { - $settings['timelastrun'] = $current; - $trigger = trigger_manager::get_instance($triggerid); - settings_manager::save_settings($triggerid, settings_type::TRIGGER, $trigger->subpluginname, $settings); - return array('true', array()); } } return array('false', array()); -- GitLab