Index: branches/5.2.x/core/units/scheduled_tasks/scheduled_task_eh.php =================================================================== diff -u -N -r15250 -r15433 --- branches/5.2.x/core/units/scheduled_tasks/scheduled_task_eh.php (.../scheduled_task_eh.php) (revision 15250) +++ branches/5.2.x/core/units/scheduled_tasks/scheduled_task_eh.php (.../scheduled_task_eh.php) (revision 15433) @@ -1,6 +1,6 @@ Conn->Query($object->GetSelectSQL(), 'Name'); + $cron_helper = $this->Application->recallObject('kCronHelper'); + /* @var $cron_helper kCronHelper */ + foreach ($scheduled_tasks_from_cache as $scheduled_task_name => $scheduled_task_params) { if ( !isset($scheduled_tasks_from_db[$scheduled_task_name]) ) { $fields_hash = Array ( 'Event' => $scheduled_task_params['Event'], 'Name' => $scheduled_task_name, 'Type' => ScheduledTask::TYPE_SYSTEM, 'Status' => isset($scheduled_task_params['Status']) ? $scheduled_task_params['Status'] : STATUS_ACTIVE, - 'RunInterval' => $scheduled_task_params['RunInterval'], + 'RunSchedule' => $scheduled_task_params['RunSchedule'], ); $object->Clear(); $object->SetDBFieldsFromHash($fields_hash); + $cron_helper->load($object, 'RunSchedule'); $object->Create(); } else { @@ -203,4 +207,92 @@ $this->clearSelectedIDs($event); } + + /** + * Loads schedule from database to virtual fields + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnAfterItemLoad(kEvent $event) + { + parent::OnAfterItemLoad($event); + + $object = $event->getObject(); + /* @var $object kDBItem */ + + $cron_helper = $this->Application->recallObject('kCronHelper'); + /* @var $cron_helper kCronHelper */ + + $cron_helper->load($object, 'RunSchedule'); + } + + /** + * Validates schedule + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnBeforeItemCreate(kEvent $event) + { + parent::OnBeforeItemCreate($event); + + $this->_itemChanged($event); + } + + /** + * Validates schedule + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnBeforeItemUpdate(kEvent $event) + { + parent::OnBeforeItemUpdate($event); + + $this->_itemChanged($event); + } + + /** + * Validates schedule + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function _itemChanged(kEvent $event) + { + $object = $event->getObject(); + /* @var $object kDBItem */ + + $cron_helper = $this->Application->recallObject('kCronHelper'); + /* @var $cron_helper kCronHelper */ + + if ( $cron_helper->validateAndSave($object, 'RunSchedule') && !$object->GetDBField('NextRunOn_date') ) { + $next_run = $cron_helper->getMatch($object->GetDBField('RunSchedule')); + $object->SetDBField('NextRunOn_date', $next_run); + $object->SetDBField('NextRunOn_time', $next_run); + } + } + + /** + * Creates schedule fields + * + * @param kEvent $event + * @return void + * @access protected + */ + protected function OnAfterConfigRead(kEvent $event) + { + parent::OnAfterConfigRead($event); + + $cron_helper = $this->Application->recallObject('kCronHelper'); + /* @var $cron_helper kCronHelper */ + + $cron_helper->initUnit($event->Prefix, 'RunSchedule'); + + } } \ No newline at end of file