diff --git a/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php b/trigger/specificdate/lang/de/lifecycletrigger_specificdate.php index 7eab683684dde2ee6baeea54e1c05edfd794a166..7fdc5c513d056ab72753187e242737c57386b355 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 9b7113e8961b100cf03e94fc04f3b1315ee33036..574ebe8753d4a8d3d522639a3bdc53c19e701e1f 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 8f8d82a61c1fbf9bc2a613243a93c33bd1d1596c..d0e77690d840014a90bc98830450776cba945b5f 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());