diff --git a/pandora_console/godmode/massive/massive_edit_agents.php b/pandora_console/godmode/massive/massive_edit_agents.php
index a06e9ec055..84ff1d1d09 100755
--- a/pandora_console/godmode/massive/massive_edit_agents.php
+++ b/pandora_console/godmode/massive/massive_edit_agents.php
@@ -216,7 +216,7 @@ if ($update_agents) {
}
$n_edited = 0;
- $result = false;
+ $result = [];
foreach ($id_agents as $id_agent) {
$old_interval_value = db_get_value_filter('intervalo', 'tagente', ['id_agente' => $id_agent]);
@@ -234,20 +234,20 @@ if ($update_agents) {
$values['safe_mode_module'] = $id_module_safe[$id_agent];
}
- $result = db_process_sql_update(
+ $result[$id_agent]['db'] = db_process_sql_update(
'tagente',
$values,
['id_agente' => $id_agent]
);
- if ($result && $config['metaconsole_agent_cache'] == 1) {
+ if ($result[$id_agent]['db'] && $config['metaconsole_agent_cache'] == 1) {
$server_name['server_name'] = db_get_sql('SELECT server_name FROM tagente WHERE id_agente ='.$id_agent);
// Force an update of the agent cache.
$result_metaconsole = agent_update_from_cache($id_agent, $values, $server_name);
}
// Update the configuration files.
- if ($result && ($old_interval_value != $values['intervalo']) && !empty($values['intervalo'])) {
+ if ($result[$id_agent]['db'] && ($old_interval_value != $values['intervalo']) && !empty($values['intervalo'])) {
enterprise_hook(
'config_agents_update_config_token',
[
@@ -291,7 +291,7 @@ if ($update_agents) {
if ($old_value === false) {
// Create custom field if not exist.
- $result = db_process_sql_insert(
+ $result[$id_agent]['fields'][$field['id_field']] = db_process_sql_insert(
'tagent_custom_data',
[
'id_field' => $key,
@@ -301,7 +301,7 @@ if ($update_agents) {
);
} else {
if ($old_value[0]['description'] !== $value) {
- $result = db_process_sql_update(
+ $result[$id_agent]['fields'][$field['id_field']] = db_process_sql_update(
'tagent_custom_data',
['description' => $value],
[
@@ -318,45 +318,156 @@ if ($update_agents) {
if (empty($secondary_groups_added) === false
|| empty($secondary_groups_removed) === false
) {
- $result = enterprise_hook(
+ $result[$id_agent]['secondary'] = enterprise_hook(
'agents_update_secondary_groups',
[
$id_agent,
$secondary_groups_added,
$secondary_groups_removed,
+ true,
]
);
}
- $n_edited += (int) $result;
- }
-
- if ($result !== false) {
- db_pandora_audit(
- AUDIT_LOG_MASSIVE_MANAGEMENT,
- 'Update agent '.$id_agent,
- false,
- false,
- json_encode($info)
- );
- } else {
- if (isset($id_agent) === true) {
+ if ($result['db'] !== false) {
db_pandora_audit(
AUDIT_LOG_MASSIVE_MANAGEMENT,
- 'Try to update agent '.$id_agent,
+ 'Update agent '.$id_agent,
false,
false,
json_encode($info)
);
+ } else {
+ if (isset($id_agent) === true) {
+ db_pandora_audit(
+ AUDIT_LOG_MASSIVE_MANAGEMENT,
+ 'Try to update agent '.$id_agent,
+ false,
+ false,
+ json_encode($info)
+ );
+ }
}
}
+ $ret = [];
+ foreach ($result as $id_agent => $item) {
+ if ($item['db'] !== false) {
+ $ret['db']['edited'] += 1;
+ $ret['db']['edited_agent'][] = $id_agent;
+ } else {
+ $ret['db']['failed'] += 1;
+ $ret['db']['failed_agent'][] = $id_agent;
+ }
- ui_print_result_message(
- $result !== false,
- __('Agents updated successfully (%d)', $n_edited),
- __('Agents cannot be updated (maybe there was no field to update)')
- );
+ if (isset($item['fields']) === true
+ && empty($item['fields']) === false
+ ) {
+ foreach ($item['fields'] as $kfield => $vfield) {
+ if ($vfield !== false) {
+ $ret['fields'][$id_agent]['edited'] += 1;
+ $ret['fields'][$id_agent]['edited_field'][] = $kfield;
+ } else {
+ $ret['fields'][$id_agent]['failed'] += 1;
+ $ret['fields'][$id_agent]['failed_field'][] = $kfield;
+ }
+ }
+ }
+
+ if (isset($item['secondary']) === true
+ && empty($item['secondary']) === false
+ ) {
+ foreach ($item['secondary'] as $type_action => $values_secondary) {
+ foreach ($values_secondary as $kgr => $vgr) {
+ if ($vgr !== false) {
+ $ret['secondary'][$type_action][$id_agent]['edited'] += 1;
+ $ret['secondary'][$type_action][$id_agent]['edited_gr'][] = $kgr;
+ } else {
+ $ret['secondary'][$type_action][$id_agent]['failed'] += 1;
+ $ret['secondary'][$type_action][$id_agent]['failed_gr'][] = $kgr;
+ }
+ }
+ }
+ }
+ }
+
+ foreach ($ret as $type => $ret_val) {
+ switch ($type) {
+ case 'db':
+ if (isset($ret_val['edited']) === true
+ && $ret_val['edited'] > 0
+ ) {
+ ui_print_success_message(
+ __(
+ 'Agents updated successfully (%d)',
+ $ret_val['edited'],
+ implode(
+ ',',
+ $ret_val['edited_agent']
+ )
+ )
+ );
+ }
+
+ if (isset($ret_val['failed']) === true
+ && $ret_val['failed'] > 0
+ ) {
+ ui_print_error_message(
+ __(
+ 'Agents cannot be updated (%d), ids (%s)',
+ $ret_val['failed'],
+ implode(',', $ret_val['failed_agent'])
+ )
+ );
+ }
+ break;
+
+ case 'fields':
+ $str = '';
+ foreach ($ret_val as $kag => $vag) {
+ if (isset($vag['failed']) === true
+ && $vag['failed'] > 0
+ ) {
+ $str .= __(
+ 'Agent ID: %s cannot be updated custom fields (%s)',
+ $kag,
+ implode(',', $vag['failed_field'])
+ ).'
';
+ }
+ }
+
+ if (empty($str) === false) {
+ ui_print_error_message($str);
+ }
+ break;
+
+ case 'secondary':
+ $str = '';
+ foreach ($ret_val as $type => $values_secondary) {
+ foreach ($values_secondary as $kag => $vag) {
+ if (isset($vag['failed']) === true
+ && $vag['failed'] > 0
+ ) {
+ $str .= __(
+ 'Agent ID: %s cannot be updated %s secondary groups (%s)',
+ $kag,
+ $type,
+ implode(',', $vag['failed_gr'])
+ ).'
';
+ }
+ }
+ }
+
+ if (empty($str) === false) {
+ ui_print_error_message($str);
+ }
+ break;
+
+ default:
+ // Not posible.
+ break;
+ }
+ }
}
$id_group = 0;
diff --git a/pandora_console/operation/agentes/estado_generalagente.php b/pandora_console/operation/agentes/estado_generalagente.php
index ac2e112347..26775a9315 100755
--- a/pandora_console/operation/agentes/estado_generalagente.php
+++ b/pandora_console/operation/agentes/estado_generalagente.php
@@ -365,7 +365,7 @@ $data[1] = ui_progress(
($agent['intervalo'] - (strtotime('now') - strtotime($agent['ultimo_contacto']))).' s',
[
'page' => 'operation/agentes/ver_agente',
- 'interval' => (100 / $agent['intervalo']),
+ 'interval' => (empty($agent['intervalo']) === true) ? 0 : (100 / $agent['intervalo']),
'data' => [
'id_agente' => $id_agente,
'refresh_contact' => 1,