Index: branches/5.2.x/core/units/scheduled_tasks/agent_eh.php =================================================================== diff -u -N --- branches/5.2.x/core/units/scheduled_tasks/agent_eh.php (revision 14880) +++ branches/5.2.x/core/units/scheduled_tasks/agent_eh.php (revision 0) @@ -1,181 +0,0 @@ - Array ('self' => 'add|edit'), - 'OnRunAgents' => Array ('self' => 'add|edit'), - ); - - $this->permMapping = array_merge($this->permMapping, $permissions); - } - - /** - * [HOOK] Refreshes agents list in database based on cached data from unit configs - * - * @param kEvent $event - */ - function OnRefreshAgents(&$event) - { - $regular_events = $this->Application->EventManager->getAgents(true); - - $object =& $event->getObject( Array ('skip_autoload' => true) ); - /* @var $object kDBItem */ - - $processed_ids = Array (); - $agents = $this->Conn->Query($object->GetSelectSQL(), 'AgentName'); - - foreach ($regular_events as $run_mode => $events) { - - foreach ($events as $agent_name => $agent_params) { - if ( !isset($agents[$agent_name]) ) { - $fields_hash = Array ( - 'Event' => $agent_params['EventName'], - 'AgentName' => $agent_name, - 'AgentType' => Agent::AGENT_TYPE_SYSTEM, - 'Status' => array_key_exists('Status', $agent_params) ? $agent_params['Status'] : STATUS_ACTIVE, - 'RunInterval' => $agent_params['RunInterval'], - 'RunMode' => $run_mode, - ); - - $object->Clear(); - $object->SetDBFieldsFromHash($fields_hash); - $object->Create(); - } - else { - $object->LoadFromHash( $agents[$agent_name] ); - } - - $processed_ids[] = $object->GetID(); - } - - } - - // delete all non-processed agents (ones, that were deleted from unit configs) - $sql = 'SELECT ' . $object->IDField . ' - FROM ' . $object->TableName . ' - WHERE (AgentType = ' . Agent::AGENT_TYPE_SYSTEM . ') AND (' . $object->IDField . ' NOT IN (' . implode(',', $processed_ids) . '))'; - $delete_ids = $this->Conn->GetCol($sql); - - if ($delete_ids) { - $temp_handler =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); - /* @var $temp_handler kTempTablesHandler */ - - $temp_handler->DeleteItems($event->Prefix, $event->Special, $delete_ids); - } - - $this->Application->removeObject($event->getPrefixSpecial()); - } - - /** - * Don't allow to delete other user's messages - * - * @param kEvent $event - * @param string $type - * @return void - * @access protected - */ - protected function customProcessing(&$event, $type) - { - if ($event->Name == 'OnMassDelete' && $type == 'before') { - if ($this->Application->isDebugMode()) { - // allow to delete system agents in debug mode - return ; - } - - $ids = $event->getEventParam('ids'); - if ($ids) { - $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); - $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); - - $sql = 'SELECT ' . $id_field . ' - FROM ' . $table_name . ' - WHERE ' . $id_field . ' IN (' . implode(',', $ids) . ') AND AgentType <> ' . Agent::AGENT_TYPE_SYSTEM; - $allowed_ids = $this->Conn->GetCol($sql); - - $event->setEventParam('ids', $allowed_ids); - } - } - } - - /** - * Cancels agents, that are currently running - * - * @param kEvent $event - */ - function OnMassCancel(&$event) - { - $ids = $this->StoreSelectedIDs($event); - - if ($ids) { - $object =& $event->getObject( Array ('skip_autoload' => true) ); - /* @var $object kDBItem */ - - foreach ($ids as $id) { - $object->Load($id); - - if ($object->GetDBField('LastRunStatus') == Agent::LAST_RUN_RUNNING) { - // only changes status, doesn't affect currency running agents - $object->SetDBField('LastRunStatus', Agent::LAST_RUN_FAILED); - $object->Update(); - } - } - } - - $this->clearSelectedIDs($event); - } - - /** - * Runs selected agents - * - * @param kEvent $event - */ - function OnRunAgents(&$event) - { - $ids = $this->StoreSelectedIDs($event); - - if ($ids) { - $object =& $event->getObject( Array ('skip_autoload' => true) ); - /* @var $object kDBItem */ - - $where_clause = Array ( - $object->TableName . '.' . $object->IDField . ' IN (' . implode(',', $ids) . ')', - $object->TableName . '.Status = ' . STATUS_ACTIVE, - $object->TableName . '.LastRunStatus <> ' . Agent::LAST_RUN_RUNNING, - ); - - $sql = $object->GetSelectSQL() . ' - WHERE (' . implode(') AND (', $where_clause) . ')'; - $agents = $this->Conn->Query($sql); - - foreach ($agents as $agent_data) { - $agent_data['EventName'] = $agent_data['Event']; - $this->Application->EventManager->runAgent($agent_data); - } - } - - $this->clearSelectedIDs($event); - } - } \ No newline at end of file