Changeset View
Changeset View
Standalone View
Standalone View
branches/5.2.x/core/units/scheduled_tasks/scheduled_task_eh.php
Show All 40 Lines | |||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function OnBeforeItemValidate(kEvent $event) | protected function OnBeforeItemValidate(kEvent $event) | ||||
{ | { | ||||
parent::OnBeforeItemValidate($event); | parent::OnBeforeItemValidate($event); | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject(); | $object = $event->getObject(); | ||||
/* @var $object kDBItem */ | |||||
$event_string = $object->GetDBField('Event'); | $event_string = $object->GetDBField('Event'); | ||||
if ( !$event_string ) { | if ( !$event_string ) { | ||||
return; | return; | ||||
} | } | ||||
try { | try { | ||||
$this->Application->eventImplemented(new kEvent($event_string)); | $this->Application->eventImplemented(new kEvent($event_string)); | ||||
} | } | ||||
catch (Exception $e) { | catch (Exception $e) { | ||||
$object->SetError('Event', 'invalid_event', '+' . $e->getMessage()); | $object->SetError('Event', 'invalid_event', '+' . $e->getMessage()); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* [HOOK] Refreshes scheduled task list in database based on cached data from unit configs | * [HOOK] Refreshes scheduled task list in database based on cached data from unit configs | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
*/ | */ | ||||
function OnRefresh($event) | function OnRefresh($event) | ||||
{ | { | ||||
$scheduled_tasks_from_cache = $this->Application->EventManager->getScheduledTasks(true); | $scheduled_tasks_from_cache = $this->Application->EventManager->getScheduledTasks(true); | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject( Array ('skip_autoload' => true) ); | $object = $event->getObject( Array ('skip_autoload' => true) ); | ||||
/* @var $object kDBItem */ | |||||
$processed_ids = Array (); | $processed_ids = Array (); | ||||
$scheduled_tasks_from_db = $this->Conn->Query($object->GetSelectSQL(), 'Name'); | $scheduled_tasks_from_db = $this->Conn->Query($object->GetSelectSQL(), 'Name'); | ||||
/** @var kCronHelper $cron_helper */ | |||||
$cron_helper = $this->Application->recallObject('kCronHelper'); | $cron_helper = $this->Application->recallObject('kCronHelper'); | ||||
/* @var $cron_helper kCronHelper */ | |||||
foreach ($scheduled_tasks_from_cache as $scheduled_task_name => $scheduled_task_params) { | foreach ($scheduled_tasks_from_cache as $scheduled_task_name => $scheduled_task_params) { | ||||
if ( !isset($scheduled_tasks_from_db[$scheduled_task_name]) ) { | if ( !isset($scheduled_tasks_from_db[$scheduled_task_name]) ) { | ||||
$fields_hash = Array ( | $fields_hash = Array ( | ||||
'Event' => $scheduled_task_params['Event'], | 'Event' => $scheduled_task_params['Event'], | ||||
'Name' => $scheduled_task_name, | 'Name' => $scheduled_task_name, | ||||
'Type' => ScheduledTask::TYPE_SYSTEM, | 'Type' => ScheduledTask::TYPE_SYSTEM, | ||||
'Status' => isset($scheduled_task_params['Status']) ? $scheduled_task_params['Status'] : STATUS_ACTIVE, | 'Status' => isset($scheduled_task_params['Status']) ? $scheduled_task_params['Status'] : STATUS_ACTIVE, | ||||
Show All 14 Lines | |||||
// delete all non-processed scheduled tasks (ones, that were deleted from unit configs) | // delete all non-processed scheduled tasks (ones, that were deleted from unit configs) | ||||
$sql = 'SELECT ' . $object->IDField . ' | $sql = 'SELECT ' . $object->IDField . ' | ||||
FROM ' . $object->TableName . ' | FROM ' . $object->TableName . ' | ||||
WHERE (Type = ' . ScheduledTask::TYPE_SYSTEM . ') AND (' . $object->IDField . ' NOT IN (' . implode(',', $processed_ids) . '))'; | WHERE (Type = ' . ScheduledTask::TYPE_SYSTEM . ') AND (' . $object->IDField . ' NOT IN (' . implode(',', $processed_ids) . '))'; | ||||
$delete_ids = $this->Conn->GetCol($sql); | $delete_ids = $this->Conn->GetCol($sql); | ||||
if ($delete_ids) { | if ($delete_ids) { | ||||
/** @var kTempTablesHandler $temp_handler */ | |||||
$temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); | $temp_handler = $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); | ||||
/* @var $temp_handler kTempTablesHandler */ | |||||
$temp_handler->DeleteItems($event->Prefix, $event->Special, $delete_ids); | $temp_handler->DeleteItems($event->Prefix, $event->Special, $delete_ids); | ||||
} | } | ||||
$this->Application->removeObject($event->getPrefixSpecial()); | $this->Application->removeObject($event->getPrefixSpecial()); | ||||
} | } | ||||
/** | /** | ||||
Show All 31 Lines | |||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
*/ | */ | ||||
function OnMassCancel($event) | function OnMassCancel($event) | ||||
{ | { | ||||
$ids = $this->StoreSelectedIDs($event); | $ids = $this->StoreSelectedIDs($event); | ||||
if ($ids) { | if ($ids) { | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject( Array ('skip_autoload' => true) ); | $object = $event->getObject( Array ('skip_autoload' => true) ); | ||||
/* @var $object kDBItem */ | |||||
foreach ($ids as $id) { | foreach ($ids as $id) { | ||||
$object->Load($id); | $object->Load($id); | ||||
if ($object->GetDBField('LastRunStatus') == ScheduledTask::LAST_RUN_RUNNING) { | if ($object->GetDBField('LastRunStatus') == ScheduledTask::LAST_RUN_RUNNING) { | ||||
// only changes status, doesn't affect currency running scheduled tasks | // only changes status, doesn't affect currency running scheduled tasks | ||||
$object->SetDBField('LastRunStatus', ScheduledTask::LAST_RUN_FAILED); | $object->SetDBField('LastRunStatus', ScheduledTask::LAST_RUN_FAILED); | ||||
$object->Update(); | $object->Update(); | ||||
Show All 9 Lines | |||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
*/ | */ | ||||
function OnRun($event) | function OnRun($event) | ||||
{ | { | ||||
$ids = $this->StoreSelectedIDs($event); | $ids = $this->StoreSelectedIDs($event); | ||||
if ($ids) { | if ($ids) { | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject( Array ('skip_autoload' => true) ); | $object = $event->getObject( Array ('skip_autoload' => true) ); | ||||
/* @var $object kDBItem */ | |||||
$where_clause = Array ( | $where_clause = Array ( | ||||
$object->TableName . '.' . $object->IDField . ' IN (' . implode(',', $ids) . ')', | $object->TableName . '.' . $object->IDField . ' IN (' . implode(',', $ids) . ')', | ||||
$object->TableName . '.Status = ' . STATUS_ACTIVE, | $object->TableName . '.Status = ' . STATUS_ACTIVE, | ||||
$object->TableName . '.LastRunStatus <> ' . ScheduledTask::LAST_RUN_RUNNING, | $object->TableName . '.LastRunStatus <> ' . ScheduledTask::LAST_RUN_RUNNING, | ||||
); | ); | ||||
$sql = $object->GetSelectSQL() . ' | $sql = $object->GetSelectSQL() . ' | ||||
Show All 15 Lines | |||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function OnAfterItemLoad(kEvent $event) | protected function OnAfterItemLoad(kEvent $event) | ||||
{ | { | ||||
parent::OnAfterItemLoad($event); | parent::OnAfterItemLoad($event); | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject(); | $object = $event->getObject(); | ||||
/* @var $object kDBItem */ | |||||
/** @var kCronHelper $cron_helper */ | |||||
$cron_helper = $this->Application->recallObject('kCronHelper'); | $cron_helper = $this->Application->recallObject('kCronHelper'); | ||||
/* @var $cron_helper kCronHelper */ | |||||
$cron_helper->load($object, 'RunSchedule'); | $cron_helper->load($object, 'RunSchedule'); | ||||
} | } | ||||
/** | /** | ||||
* Validates schedule | * Validates schedule | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
Show All 25 Lines | |||||
* Validates schedule | * Validates schedule | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function _itemChanged(kEvent $event) | protected function _itemChanged(kEvent $event) | ||||
{ | { | ||||
/** @var kDBItem $object */ | |||||
$object = $event->getObject(); | $object = $event->getObject(); | ||||
/* @var $object kDBItem */ | |||||
/** @var kCronHelper $cron_helper */ | |||||
$cron_helper = $this->Application->recallObject('kCronHelper'); | $cron_helper = $this->Application->recallObject('kCronHelper'); | ||||
/* @var $cron_helper kCronHelper */ | |||||
if ( $cron_helper->validateAndSave($object, 'RunSchedule') && !$object->GetDBField('NextRunOn_date') ) { | if ( $cron_helper->validateAndSave($object, 'RunSchedule') && !$object->GetDBField('NextRunOn_date') ) { | ||||
$next_run = $cron_helper->getMatch($object->GetDBField('RunSchedule')); | $next_run = $cron_helper->getMatch($object->GetDBField('RunSchedule')); | ||||
$object->SetDBField('NextRunOn_date', $next_run); | $object->SetDBField('NextRunOn_date', $next_run); | ||||
$object->SetDBField('NextRunOn_time', $next_run); | $object->SetDBField('NextRunOn_time', $next_run); | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Creates schedule fields | * Creates schedule fields | ||||
* | * | ||||
* @param kEvent $event | * @param kEvent $event | ||||
* @return void | * @return void | ||||
* @access protected | * @access protected | ||||
*/ | */ | ||||
protected function OnAfterConfigRead(kEvent $event) | protected function OnAfterConfigRead(kEvent $event) | ||||
{ | { | ||||
parent::OnAfterConfigRead($event); | parent::OnAfterConfigRead($event); | ||||
// Don't initialize 'scheduled-task' unit, because scheduled tasks are not run during install. | // Don't initialize 'scheduled-task' unit, because scheduled tasks are not run during install. | ||||
if ( defined('IS_INSTALL') && IS_INSTALL ) { | if ( defined('IS_INSTALL') && IS_INSTALL ) { | ||||
return; | return; | ||||
} | } | ||||
/** @var kCronHelper $cron_helper */ | |||||
$cron_helper = $this->Application->recallObject('kCronHelper'); | $cron_helper = $this->Application->recallObject('kCronHelper'); | ||||
/* @var $cron_helper kCronHelper */ | |||||
$cron_helper->initUnit($event->Prefix, 'RunSchedule'); | $cron_helper->initUnit($event->Prefix, 'RunSchedule'); | ||||
} | } | ||||
} | } |