Index: branches/5.1.x/admin/system_presets/simple/agents_agent.php
===================================================================
diff -u -r13086 -r13934
--- branches/5.1.x/admin/system_presets/simple/agents_agent.php (.../agents_agent.php) (revision 13086)
+++ branches/5.1.x/admin/system_presets/simple/agents_agent.php (.../agents_agent.php) (revision 13934)
@@ -15,7 +15,7 @@
// toolbar buttons
$remove_buttons = Array (
// list of agents
-// 'agent_list' => Array ('new_item', 'edit', 'delete', 'approve', 'decline', 'cancel', 'view', 'dbl-click'),
+// 'agent_list' => Array ('new_item', 'edit', 'delete', 'approve', 'decline', 'process', 'cancel', 'view', 'dbl-click'),
// edit agent
// 'agent_edit' => Array ('select', 'cancel', 'reset_edit', 'prev', 'next'),
Index: branches/5.1.x/core/admin_templates/agents/agent_list.tpl
===================================================================
diff -u -r13545 -r13934
--- branches/5.1.x/core/admin_templates/agents/agent_list.tpl (.../agent_list.tpl) (revision 13545)
+++ branches/5.1.x/core/admin_templates/agents/agent_list.tpl (.../agent_list.tpl) (revision 13934)
@@ -47,8 +47,20 @@
)
);
+ a_toolbar.AddButton( new ToolBarSeparator('sep2') );
+
a_toolbar.AddButton(
new ToolBarButton(
+ 'process',
+ '',
+ function() {
+ submit_event('agent', 'OnRunAgents');
+ }
+ )
+ );
+
+ a_toolbar.AddButton(
+ new ToolBarButton(
'cancel',
'',
function() {
@@ -57,7 +69,7 @@
)
);
- a_toolbar.AddButton( new ToolBarSeparator('sep2') );
+ a_toolbar.AddButton( new ToolBarSeparator('sep3') );
a_toolbar.AddButton( new ToolBarButton('view', '', function() {
show_viewmenu(a_toolbar,'view');
@@ -74,6 +86,6 @@
\ No newline at end of file
Index: branches/5.1.x/core/units/agents/agents_config.php
===================================================================
diff -u -r13159 -r13934
--- branches/5.1.x/core/units/agents/agents_config.php (.../agents_config.php) (revision 13159)
+++ branches/5.1.x/core/units/agents/agents_config.php (.../agents_config.php) (revision 13934)
@@ -1,6 +1,6 @@
Array (
'prefixes' => Array ('agent_List'), 'format' => "!la_title_Agents!",
- 'toolbar_buttons' => Array ('new_item', 'edit', 'delete', 'approve', 'decline', 'cancel', 'view', 'dbl-click'),
+ 'toolbar_buttons' => Array ('new_item', 'edit', 'delete', 'approve', 'decline', 'process', 'cancel', 'view', 'dbl-click'),
),
'agent_edit' => Array ('prefixes' => Array ('agent'), 'format' => "#agent_status# '#agent_titlefield#'",
Index: branches/5.1.x/core/units/agents/agent_eh.php
===================================================================
diff -u -r13086 -r13934
--- branches/5.1.x/core/units/agents/agent_eh.php (.../agent_eh.php) (revision 13086)
+++ branches/5.1.x/core/units/agents/agent_eh.php (.../agent_eh.php) (revision 13934)
@@ -1,6 +1,6 @@
Array ('self' => 'add|edit'),
+ 'OnRunAgents' => Array ('self' => 'add|edit'),
);
$this->permMapping = array_merge($this->permMapping, $permissions);
@@ -136,4 +137,36 @@
$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
Index: branches/5.1.x/core/install/english.lang
===================================================================
diff -u -r13892 -r13934
--- branches/5.1.x/core/install/english.lang (.../english.lang) (revision 13892)
+++ branches/5.1.x/core/install/english.lang (.../english.lang) (revision 13934)
@@ -1412,6 +1412,7 @@
UmVzZXQ=
UmVzZXQgUGVyc2lzdGVudCBTZXR0aW5ncw==
UmVzZXQgVG8gQmFzZQ==
+ UnVu
UnVuIFNRTA==
U2F2ZQ==
U2F2ZSBhcyBEcmFmdA==
Index: branches/5.1.x/core/kernel/event_manager.php
===================================================================
diff -u -r13750 -r13934
--- branches/5.1.x/core/kernel/event_manager.php (.../event_manager.php) (revision 13750)
+++ branches/5.1.x/core/kernel/event_manager.php (.../event_manager.php) (revision 13934)
@@ -1,6 +1,6 @@
Application->ConfigValue('UseCronForRegularEvent')) return ;
+ if (defined('IS_INSTALL')) {
+ return ;
+ }
+ if (!$from_cron && $this->Application->ConfigValue('UseCronForRegularEvent')) {
+ // if RegularEvents are set to run from cron
+ return ;
+ }
+
$agents = $this->getRegularEvents();
$events_source = $agents[$event_type];
@@ -748,57 +753,67 @@
foreach ($events_source as $short_name => $event_data) {
$next_run = $event_data['NextRunOn'];
- $last_run = $event_data['LastRunOn'];
if ($next_run && ($next_run > adodb_mktime())) {
continue;
}
- else {
- $event = new kEvent($event_data['EventName']);
- if (!$this->Application->prefixRegistred($event->Prefix)) {
- // don't process agents, left from disabled modules
- continue;
- }
- $start_time = adodb_mktime();
- $fields_hash = Array (
- 'LastRunOn' => $start_time,
- 'LastRunStatus' => AGENT_LAST_RUN_RUNNING,
- 'NextRunOn' => $start_time + $event_data['RunInterval'],
- );
+ $event_data['AgentName'] = $short_name;
+ $this->runAgent($event_data);
+ }
- $this->Conn->doUpdate(
- $fields_hash,
- $this->Application->getUnitOption('agent', 'TableName'),
- 'AgentName = ' . $this->Conn->qstr($short_name)
- );
+ $this->Application->StoreVar('user_id', $user_id, true); // true for optional
+ }
- $event->redirect = false;
- $this->Application->HandleEvent($event);
+ function runAgent($agent_data)
+ {
+ $event = new kEvent($agent_data['EventName']);
- $now = adodb_mktime();
- $next_run = $event_data['RunInterval'] ? $start_time + $event_data['RunInterval'] : $now;
+ if (!$this->Application->prefixRegistred($event->Prefix)) {
+ // don't process agents, left from disabled modules
+ return false;
+ }
- while ($next_run < $now) {
- // in case event execution took longer, then RunInterval (don't use <=, because RunInterval can be 0)
- $next_run += $event_data['RunInterval'];
- }
+ $start_time = adodb_mktime();
- $fields_hash = Array (
- 'NextRunOn' => $next_run,
- 'RunTime' => round(($now - $start_time) / 60),
- 'LastRunStatus' => $event->status == erSUCCESS ? AGENT_LAST_RUN_SUCCEDED : AGENT_LAST_RUN_FAILED,
- );
+ // remember, when agent execution started
+ $fields_hash = Array (
+ 'LastRunOn' => $start_time,
+ 'LastRunStatus' => AGENT_LAST_RUN_RUNNING,
+ 'NextRunOn' => $start_time + $agent_data['RunInterval'],
+ );
- $this->Conn->doUpdate(
- $fields_hash,
- $this->Application->getUnitOption('agent', 'TableName'),
- 'AgentName = ' . $this->Conn->qstr($short_name)
- );
- }
+ $this->Conn->doUpdate(
+ $fields_hash,
+ $this->Application->getUnitOption('agent', 'TableName'),
+ 'AgentName = ' . $this->Conn->qstr($agent_data['AgentName'])
+ );
+
+ $event->redirect = false;
+ $this->Application->HandleEvent($event);
+
+ $now = adodb_mktime();
+ $next_run = $agent_data['RunInterval'] ? $start_time + $agent_data['RunInterval'] : $now;
+
+ while ($next_run < $now) {
+ // in case event execution took longer, then RunInterval (don't use <=, because RunInterval can be 0)
+ $next_run += $agent_data['RunInterval'];
}
- $this->Application->StoreVar('user_id', $user_id, true); // true for optional
+ // remember, when agent execution ended
+ $fields_hash = Array (
+ 'NextRunOn' => $next_run,
+ 'RunTime' => round(($now - $start_time) / 60),
+ 'LastRunStatus' => $event->status == erSUCCESS ? AGENT_LAST_RUN_SUCCEDED : AGENT_LAST_RUN_FAILED,
+ );
+
+ $this->Conn->doUpdate(
+ $fields_hash,
+ $this->Application->getUnitOption('agent', 'TableName'),
+ 'AgentName = ' . $this->Conn->qstr($agent_data['AgentName'])
+ );
+
+ return true;
}
/**