Index: branches/5.2.x/core/install/upgrades.php =================================================================== diff -u -N -r15448 -r15449 --- branches/5.2.x/core/install/upgrades.php (.../upgrades.php) (revision 15448) +++ branches/5.2.x/core/install/upgrades.php (.../upgrades.php) (revision 15449) @@ -1,6 +1,6 @@ Conn->Query($sql); + + $this->_updateScheduledTaskRunSchedule(); } + + /** + * Transforms RunInterval into RunSchedule column for Scheduled Tasks + * + * @return void + * @access protected + */ + protected function _updateScheduledTaskRunSchedule() + { + // minute hour day_of_month month day_of_week + $id_field = $this->Application->getUnitOption('scheduled-task', 'IDField'); + $table_name = $this->Application->getUnitOption('scheduled-task', 'TableName'); + + $sql = 'SELECT RunInterval, ' . $id_field . ' + FROM ' . $table_name; + $run_intervals = $this->Conn->GetCol($sql, $id_field); + + $ranges = Array (0 => 'min', 1 => 'hour', 2 => 'day', 3 => 'month'); + $range_values = Array ('min' => 60, 'hour' => 60, 'day' => 24, 'month' => 30); + $range_masks = Array ('min' => '*/%s * * * *', 'hour' => '0 */%s * * *', 'day' => '0 0 */%s * *', 'month' => '0 0 1 */%s *'); + + foreach ($run_intervals as $scheduled_task_id => $interval) { + $mask_index = 'month'; + + foreach ($ranges as $range_index => $range_name) { + $range_value = $range_values[$range_name]; + + if ( $interval >= $range_value ) { + $interval = ceil($interval / $range_value); + } + else { + $mask_index = $ranges[$range_index - 1]; + break; + } + } + + $run_schedule = sprintf($range_masks[$mask_index], $interval); + + if ( $run_schedule == '0 0 */7 * *' ) { + // once in 7 days = once in a week + $run_schedule = '0 0 * * 0'; + } + + $run_schedule = preg_replace('/(\*\/1( |$))/', '*\\2', $run_schedule); + + $fields_hash = Array ('RunSchedule' => $run_schedule); + $this->Conn->doUpdate($fields_hash, $table_name, $id_field . ' = ' . $scheduled_task_id); + } + + // drop RunInterval column + $this->Conn->Query('ALTER TABLE ' . $table_name . ' DROP RunInterval'); + } } \ No newline at end of file