Index: branches/5.2.x/core/kernel/managers/scheduled_task_manager.php =================================================================== diff -u -N -r15137 -r15433 --- branches/5.2.x/core/kernel/managers/scheduled_task_manager.php (.../scheduled_task_manager.php) (revision 15137) +++ branches/5.2.x/core/kernel/managers/scheduled_task_manager.php (.../scheduled_task_manager.php) (revision 15433) @@ -1,6 +1,6 @@ tasks[$short_name] = Array ( - 'Event' => $event_string, 'RunInterval' => $run_interval, 'Status' => $status + 'Event' => $event_string, 'RunSchedule' => $run_schedule, 'Status' => $status ); } @@ -162,13 +162,16 @@ return false; } + $cron_helper = $this->Application->recallObject('kCronHelper'); + /* @var $cron_helper kCronHelper */ + $start_time = adodb_mktime(); // remember, when scheduled task execution started $fields_hash = Array ( 'LastRunOn' => $start_time, 'LastRunStatus' => ScheduledTask::LAST_RUN_RUNNING, - 'NextRunOn' => $start_time + $scheduled_task_data['RunInterval'], + 'NextRunOn' => $cron_helper->getMatch($scheduled_task_data['RunSchedule'], $start_time), ); $this->update($scheduled_task_data['Name'], $fields_hash); @@ -177,11 +180,11 @@ $this->Application->HandleEvent($event); $now = adodb_mktime(); - $next_run = $scheduled_task_data['RunInterval'] ? $start_time + $scheduled_task_data['RunInterval'] : $now; + $next_run = $cron_helper->getMatch($scheduled_task_data['RunSchedule'], $start_time); while ($next_run < $now) { - // in case event execution took longer, then RunInterval (don't use <=, because RunInterval can be 0) - $next_run += $scheduled_task_data['RunInterval']; + // in case event execution took longer, then RunSchedule (don't use <=, because RunSchedule can be 0) + $next_run = $cron_helper->getMatch($scheduled_task_data['RunSchedule'], $next_run); } // remember, when scheduled task execution ended