Merge branch 'ent-9423-respuestas-de-evento-en-metaconsola-usan-configuracion-de-nodo' into 'develop'

fixed response events pandora_enterprise#9423

See merge request artica/pandorafms!5141
This commit is contained in:
Diego Muñoz-Reja 2022-10-17 10:49:01 +00:00
commit 4c74f1bee7
6 changed files with 752 additions and 651 deletions

View File

@ -64,9 +64,9 @@ $add_comment = (bool) get_parameter('add_comment');
$dialogue_event_response = (bool) get_parameter('dialogue_event_response');
$perform_event_response = (bool) get_parameter('perform_event_response');
$get_response = (bool) get_parameter('get_response');
$get_response_target = (bool) get_parameter('get_response_target');
$get_response_params = (bool) get_parameter('get_response_params');
$get_response_description = (bool) get_parameter('get_response_description');
$get_response_massive = (bool) get_parameter('get_response_massive');
$get_row_response_action = (bool) get_parameter('get_row_response_action');
$draw_row_response_info = (bool) get_parameter('draw_row_response_info', false);
$meta = get_parameter('meta', 0);
$history = get_parameter('history', 0);
$table_events = get_parameter('table_events', 0);
@ -1054,87 +1054,6 @@ $(document).ready(function (){
}
if ($get_response_description) {
$response_id = get_parameter('response_id');
$description = db_get_value('description', 'tevent_response', 'id', $response_id);
if ($description === false) {
return;
}
$description = io_safe_output($description);
$description = str_replace("\r\n", '<br>', $description);
echo $description;
return;
}
if ($get_response_params) {
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
return;
}
$response_id = get_parameter('response_id');
$params = db_get_value('params', 'tevent_response', 'id', $response_id);
if ($params === false) {
return;
}
echo json_encode(explode(',', $params));
return;
}
if ($get_response_target === true) {
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
return;
}
$response_id = (int) get_parameter('response_id');
$event_id = (int) get_parameter('event_id');
$server_id = (int) get_parameter('server_id');
try {
if (is_metaconsole() === true
&& $server_id > 0
) {
$node = new Node($server_id);
$node->connect();
}
$event_response = db_get_row('tevent_response', 'id', $response_id);
if (empty($event_response) === true) {
return;
}
echo events_get_response_target($event_id, $response_id);
} catch (\Exception $e) {
// Unexistent agent.
if (is_metaconsole() === true
&& $server_id > 0
) {
$node->disconnect();
}
return;
} finally {
if (is_metaconsole() === true
&& $server_id > 0
) {
$node->disconnect();
}
}
return;
}
if ($get_response === true) {
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
@ -1142,62 +1061,27 @@ if ($get_response === true) {
}
$response_id = get_parameter('response_id');
$server_id = (int) get_parameter('server_id');
$server_id = (int) get_parameter('server_id', 0);
$event_id = (int) get_parameter('event_id', 0);
$response_parameters = json_decode(
io_safe_output(
get_parameter('response_parameters', '')
),
true
);
try {
if (is_metaconsole() === true
&& $server_id > 0
) {
$node = new Node($server_id);
$node->connect();
}
$event_response = db_get_row(
'tevent_response',
'id',
$response_id
);
} catch (\Exception $e) {
// Unexistent agent.
if (is_metaconsole() === true
&& $server_id > 0
) {
$node->disconnect();
}
return;
} finally {
if (is_metaconsole() === true
&& $server_id > 0
) {
$node->disconnect();
}
}
$event_response = db_get_row(
'tevent_response',
'id',
$response_id
);
if (empty($event_response) === true) {
return;
return [];
}
echo json_encode($event_response);
return;
}
if ($perform_event_response === true) {
global $config;
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
return;
}
$target = get_parameter('target', '');
$response_id = get_parameter('response_id');
$event_id = (int) get_parameter('event_id');
$server_id = (int) get_parameter('server_id', 0);
$event_response = false;
if (empty($target) === true) {
if (empty($event_id) === false) {
try {
if (is_metaconsole() === true
&& $server_id > 0
@ -1206,20 +1090,12 @@ if ($perform_event_response === true) {
$node->connect();
}
$event_response = db_get_row(
'tevent_response',
'id',
$response_id
);
if (empty($event_response) === true) {
return;
}
$command = events_get_response_target(
$event_response['target'] = events_get_response_target(
$event_id,
$response_id,
$server_id
$event_response,
$response_parameters,
$server_id,
($server_id !== 0) ? $node->server_name() : 'Metaconsole'
);
} catch (\Exception $e) {
// Unexistent agent.
@ -1237,10 +1113,130 @@ if ($perform_event_response === true) {
$node->disconnect();
}
}
} else {
$command = $target;
}
echo json_encode($event_response);
return;
}
if ($get_response_massive === true) {
if (! check_acl($config['id_user'], 0, 'EW')) {
echo 'unauthorized';
return;
}
$response_id = get_parameter('response_id');
$event_response = db_get_row(
'tevent_response',
'id',
$response_id
);
if (empty($event_response) === true) {
return [];
}
$events = json_decode(
io_safe_output(
get_parameter('events', '')
),
true
);
$response_parameters = json_decode(
io_safe_output(
get_parameter('response_parameters', '')
),
true
);
$event_response_targets = [];
if (is_metaconsole() === true) {
foreach ($events as $server_id => $idEvents) {
foreach ($idEvents as $idEvent) {
$event_response_targets[$idEvent.'|'.$server_id]['target'] = get_events_get_response_target(
$idEvent,
$event_response,
$server_id,
$response_parameters
);
}
}
} else {
foreach ($events as $idEvent) {
$event_response_targets[$idEvent]['target'] = get_events_get_response_target(
$idEvent,
$event_response,
0,
$response_parameters
);
}
}
$result = [
'event_response' => $event_response,
'event_response_targets' => $event_response_targets,
];
echo json_encode($result);
return;
}
if ($get_row_response_action === true) {
$response_id = get_parameter('response_id');
$response = json_decode(
io_safe_output(
get_parameter('response', '')
),
true
);
$end = (bool) get_parameter('end', false);
$index = $response['event_id'];
if (is_metaconsole() === true) {
$index .= '-'.$response['server_id'];
}
echo get_row_response_action(
$response,
$response_id,
$end,
$index
);
return;
}
if ($perform_event_response === true) {
global $config;
if (! check_acl($config['id_user'], 0, 'EW')) {
echo __('unauthorized');
return;
}
$target = get_parameter('target', '');
$response_id = get_parameter('response_id');
$event_id = (int) get_parameter('event_id');
$server_id = (int) get_parameter('server_id', 0);
$response = json_decode(
io_safe_output(
get_parameter('response', '')
),
true
);
$event_response = $response;
if (empty($event_response) === true) {
echo __('No data');
return;
}
$command = $event_response['target'];
$command_timeout = ($event_response !== false) ? $event_response['command_timeout'] : 90;
if (enterprise_installed() === true) {
if ($event_response !== false
@ -1320,7 +1316,7 @@ if ($perform_event_response === true) {
break;
}
system($timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1', $ret_val);
system($timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1', $ret_val);
}
if ($ret_val != 0) {
@ -1343,78 +1339,19 @@ if ($dialogue_event_response) {
$event_id = get_parameter('event_id');
$response_id = get_parameter('response_id');
$command = get_parameter('target');
$massive = get_parameter('massive');
$end = get_parameter('end');
$show_execute_again_btn = get_parameter('show_execute_again_btn');
$out_iterator = get_parameter('out_iterator');
$event_response = db_get_row('tevent_response', 'id', $response_id);
$server_id = get_parameter('server_id');
$event_response = json_decode(
io_safe_output(
get_parameter('response', '')
),
true
);
$event = db_get_row('tevento', 'id_evento', $event_id);
$prompt = '<br>> ';
switch ($event_response['type']) {
case 'command':
$display_command = (bool) $event_response['display_command'];
$command_str = ($display_command === true) ? $command : '';
if ($massive) {
echo "<div class='left'>";
echo $prompt.sprintf(
'(Event #'.$event_id.') '.__(
'Executing command: %s',
$command_str
)
);
echo '</div><br>';
echo "<div id='response_loading_command_".$out_iterator."' style='display: none'>";
echo html_print_image(
'images/spinner.gif',
true
);
echo '</div><br>';
echo "<br><div id='response_out_".$out_iterator."'><br><br></div><br>";
if ($end) {
echo "<br><div id='re_exec_command_".$out_iterator."' style='display: none'><br>";
html_print_button(
__('Execute again'),
'btn_str',
false,
'execute_event_response(false);',
"class='sub next'"
);
echo "<span id='execute_again_loading' style='display: none'>";
echo html_print_image(
'images/spinner.gif',
true
);
echo '</span>';
echo '</div>';
}
} else {
echo "<div class='left'>";
echo $prompt.'Executing command: '.$command_str;
echo '</div><br>';
echo "<div id='response_loading_command' style='display:none'>";
echo html_print_image('images/spinner.gif', true);
echo '</div>';
echo "<br><br><br><div id='response_out' class='left'></div>";
echo "<br><div id='re_exec_command' style='display:none'><br><br>";
html_print_button(
__('Execute again'),
'btn_str',
false,
"perform_response({'target':'".$command."','event_id':".$event_id.",'server_id':".$server_id.'}, '.$response_id.');',
"class='sub next'"
);
echo '</div>';
}
echo get_row_response_action(
$event_response,
$response_id
);
break;
case 'url':
@ -2534,3 +2471,75 @@ if ($get_events_fired) {
echo io_json_mb_encode($return);
return;
}
if ($draw_row_response_info === true) {
$event_response = json_decode(
io_safe_output(
get_parameter('response', '')
),
true
);
$massive = (bool) get_parameter('massive', false);
$output .= '';
if ($massive === true) {
$output .= '<div>';
$output .= '<h5>';
$output .= $event_response['description'];
$output .= '</h5>';
$output .= '</div>';
} else {
$output .= '<tr class="params_rows">';
$output .= '<td>';
$output .= __('Description');
$output .= '</td>';
$output .= '<td class="height_30px" colspan="2">';
$output .= $event_response['description'];
$output .= '</td>';
$output .= '</tr>';
}
if (empty($event_response['params']) === false) {
$response_params = explode(',', $event_response['params']);
if (is_array($response_params) === true) {
if ($massive === true) {
$output .= '<div>';
} else {
$output .= '<tr class="params_rows">';
$output .= '<td class="left pdd_l_20px height_30px" colspan="3">';
$output .= __('Parameters');
$output .= '</td>';
$output .= '</tr>';
}
foreach ($response_params as $param) {
$param = trim(io_safe_output($param));
if ($massive === true) {
$output .= '<div>';
$output .= '<label>';
$output .= $param;
$output .= '</label>';
$output .= '<input type="text" name="values_params_'.$param.'" />';
$output .= '</div>';
} else {
$output .= '<tr class="params_rows">';
$output .= '<td style="text-align:left; padding-left:40px; font-weight: normal; font-style: italic;">';
$output .= $param;
$output .= '</td>';
$output .= '<td style="text-align:left" colspan="2">';
$output .= '<input type="text" name="values_params_'.$param.'" />';
$output .= '</td>';
$output .= '</tr>';
}
}
if ($massive === true) {
$output .= '</div>';
}
}
}
echo $output;
return;
}

View File

@ -3510,7 +3510,7 @@ function events_page_responses($event)
__('Execute'),
'custom_response_button',
false,
'execute_response('.$event['id_evento'].','.$server_id.')',
'execute_response('.$event['id_evento'].','.$server_id.',0)',
"class='sub next w70p'",
true
);
@ -3521,27 +3521,15 @@ function events_page_responses($event)
$responses_js = "<script>
$('#select_custom_response').change(function() {
var id_response = $('#select_custom_response').val();
var params = get_response_params(id_response);
var description = get_response_description(id_response);
$('.params_rows').remove();
$('#responses_table')
.append('<tr class=\"params_rows\"><td>".__('Description')."</td><td class=\"height_30px\" colspan=\"2\">'+description+'</td></tr>');
if (params.length == 1 && params[0] == '') {
return;
}
$('#responses_table')
.append('<tr class=\"params_rows\"><td class=\"left pdd_l_20px height_30px\" colspan=\"3\">".__('Parameters')."</td></tr>');
for (i = 0; i < params.length; i++) {
add_row_param('responses_table',params[i]);
}
table_info_response_event(id_response,".$event['id_evento'].','.$event['server_id'].");
});
$('#select_custom_response').trigger('change');
</script>";
$responses = '<div id="extended_event_responses_page" class="extended_event_pages">'.html_print_table($table_responses, true).$responses_js.'</div>';
$responses = '<div id="extended_event_responses_page" class="extended_event_pages">';
$responses .= html_print_table($table_responses, true);
$responses .= $responses_js;
$responses .= '</div>';
return $responses;
}
@ -3550,14 +3538,20 @@ function events_page_responses($event)
/**
* Replace macros in the target of a response and return it.
*
* @param integer $event_id Event identifier.
* @param integer $response_id Event response identifier.
* @param integer $event_id Event identifier.
* @param array $event_response Event Response.
* @param array|null $response_parameters If parameters response values.
* @param integer|null $server_id Server Id.
* @param string|null $server_name Name server.
*
* @return string The response text with the macros applied.
*/
function events_get_response_target(
int $event_id,
int $response_id
array $event_response,
?array $response_parameters=null,
?int $server_id=0,
?string $server_name=''
) {
global $config;
@ -3570,9 +3564,36 @@ function events_get_response_target(
}
$event = db_get_row('tevento', 'id_evento', $event_id);
$event_response = db_get_row('tevent_response', 'id', $response_id);
$target = io_safe_output($event_response['target']);
// Replace parameters response.
if (isset($response_parameters) === true
&& empty($response_parameters) === false
) {
$response_parameters = array_reduce(
$response_parameters,
function ($carry, $item) {
$carry[$item['name']] = $item['value'];
return $carry;
}
);
}
if (empty($event_response['params']) === false) {
$response_params = explode(',', $event_response['params']);
if (is_array($response_params) === true) {
foreach ($response_params as $param) {
$param = trim(io_safe_output($param));
$target = str_replace(
'_'.$param.'_',
$response_parameters['values_params_'.$param],
$target
);
}
}
}
// Replace macros.
if (strpos($target, '_agent_alias_') !== false) {
$agente_table_name = 'tagente';
$filter = ['id_agente' => $event['id_agente']];
@ -3898,6 +3919,26 @@ function events_get_response_target(
);
}
if (is_metaconsole() === true
&& strpos($target, '_node_id_') !== false
) {
$target = str_replace(
'_node_id_',
$server_id,
$target
);
}
if (is_metaconsole() === true
&& strpos($target, '_node_name_') !== false
) {
$target = str_replace(
'_node_name_',
$server_name,
$target
);
}
return $target;
}
@ -5544,3 +5585,114 @@ function events_get_criticity_class($criticity)
return 'datos_blue';
}
}
/**
* Draw row response events.
*
* @param array $event_response Response.
* @param integer|null $response_id Id .
* @param boolean $end End block.
* @param integer|null $index Index block.
*
* @return string Html output.
*/
function get_row_response_action(
array $event_response,
?int $response_id,
$end=false,
$index=null
) {
$output = '<div class="container-massive-events-response-cell">';
$display_command = (bool) $event_response['display_command'];
$command_str = ($display_command === true) ? $event_response['target'] : '';
// String command.
$output .= '<div class="container-massive-events-response-command">';
$output .= '<b>';
$output .= __('Event # %d', $event_response['event_id']);
if (empty($command_str) === false) {
$output .= ' ';
$output .= __('Executing command: ');
}
$output .= '</b>';
$output .= '<span>'.$command_str.'</span>';
$output .= '</div>';
// Spinner.
$output .= '<div id="response_loading_command'.$index.'" style="display:none">';
$output .= html_print_image(
'images/spinner.gif',
true
);
$output .= '</div>';
// Output.
$output .= '<div id="response_out'.$index.'" class="container-massive-events-response-output"></div>';
// Butom.
$output .= '<div id="re_exec_command'.$index.'" style="display:none" class="container-massive-events-response-execute">';
$output .= html_print_button(
__('Execute again'),
'btn_str',
false,
'perform_response(\''.base64_encode(json_encode($event_response)).'\','.$response_id.',\''.trim($index).'\')',
"class='sub next'",
true
);
$output .= '</div>';
$output .= '</div>';
return $output;
}
/**
* Get evet get response target.
*
* @param integer $event_id Id event.
* @param array $event_response Response.
* @param integer $server_id Server id.
*
* @return string
*/
function get_events_get_response_target(
$event_id,
$event_response,
$server_id=0,
$response_parameters=[]
) {
try {
if (is_metaconsole() === true
&& $server_id > 0
) {
$node = new Node($server_id);
$node->connect();
}
return events_get_response_target(
$event_id,
$event_response,
$response_parameters,
$server_id,
($server_id !== 0) ? $node->server_name() : 'Metaconsole'
);
} catch (\Exception $e) {
// Unexistent agent.
if (is_metaconsole() === true
&& $server_id > 0
) {
$node->disconnect();
}
return '';
} finally {
if (is_metaconsole() === true
&& $server_id > 0
) {
$node->disconnect();
}
}
}

View File

@ -3402,7 +3402,7 @@ function ui_print_datatable(array $parameters)
$filter .= '</li>';
$filter .= '</ul><div id="both"></div></form>';
if (isset($parameters['form']['no_toggle']) === false && ($parameters['form']['no_toggle'] !== true)) {
if (isset($parameters['form']['no_toggle']) === false) {
$filter = ui_toggle(
$filter,
__('Filter'),
@ -3466,7 +3466,10 @@ function ui_print_datatable(array $parameters)
foreach ($names as $column) {
if (is_array($column)) {
$table .= '<th id="'.$column['id'].'" class="'.$column['class'].'" ';
$table .= 'title="'.__($column['title']).'" ';
if (isset($column['title']) === true) {
$table .= 'title="'.__($column['title']).'" ';
}
$table .= ' style="'.$column['style'].'">'.__($column['text']);
$table .= $column['extra'];
$table .= '</th>';

View File

@ -85,29 +85,6 @@ function show_event_dialog(event, dialog_page) {
$("#refrcounter").countdown("pause");
$("div.vc-countdown").countdown("pause");
/*
switch (result) {
case "comment_ok":
$("#notification_comment_success").show();
break;
case "comment_error":
$("#notification_comment_error").show();
break;
case "status_ok":
$("#notification_status_success").show();
break;
case "status_error":
$("#notification_status_error").show();
break;
case "owner_ok":
$("#notification_owner_success").show();
break;
case "owner_error":
$("#notification_owner_error").show();
break;
}
*/
forced_title_callback();
},
"html"
@ -119,37 +96,152 @@ function show_event_dialog(event, dialog_page) {
function execute_response(event_id, server_id) {
var response_id = $("#select_custom_response option:selected").val();
var response = get_response(response_id, server_id);
// If cannot get response abort it
if (response == null) {
return;
var response_parameters_list = $('input[name^="values_params_"]');
var response_parameters = [];
if (response_parameters_list.length > 0) {
response_parameters_list.each(function() {
var acum = {
name: $(this).attr("name"),
value: $(this).val()
};
response_parameters.push(acum);
});
}
response["target"] = get_response_target(event_id, response_id, server_id);
response["event_id"] = event_id;
response["server_id"] = server_id;
var params = [];
params.push({ name: "page", value: "include/ajax/events" });
params.push({ name: "get_response", value: 1 });
params.push({ name: "response_id", value: response_id });
params.push({ name: "server_id", value: server_id });
params.push({ name: "event_id", value: event_id });
params.push({
name: "response_parameters",
value: JSON.stringify(response_parameters)
});
if (response["type"] == "url" && response["new_window"] == 1) {
window.open(response["target"], "_blank");
} else {
show_response_dialog(response_id, response);
}
jQuery.ajax({
data: params,
type: "POST",
url: $("#hidden-ajax_file").val(),
dataType: "json",
success: function(response) {
// If cannot get response abort it
if (response == null) {
return [];
}
response["event_id"] = event_id;
response["server_id"] = server_id;
if (response["type"] == "url" && response["new_window"] == 1) {
window.open(response["target"], "_blank");
} else {
show_response_dialog(response_id, response);
}
}
});
}
// Check the response type and open it in a modal dialog or new window
function execute_response_massive(events, response_id, response_parameters) {
var params = [];
params.push({ name: "page", value: "include/ajax/events" });
params.push({ name: "get_response_massive", value: 1 });
params.push({ name: "response_id", value: response_id });
params.push({ name: "events", value: JSON.stringify(events) });
params.push({ name: "response_parameters", value: response_parameters });
jQuery.ajax({
data: params,
type: "POST",
url: $("#hidden-ajax_file").val(),
dataType: "json",
success: function(data) {
// If cannot get response abort it
if (data == null) {
return [];
}
$(".container-massive-events-response").empty();
// Convert to array.
var array_data = Object.entries(data.event_response_targets);
var total_count = array_data.length;
// Each input checkeds.
array_data.forEach(function(element, index) {
var id = element[0];
var target = element[1].target;
var meta = $("#hidden-meta").val();
var event_id = id;
var server_id = 0;
if (meta != 0) {
var split_id = id.split("|");
event_id = split_id[0];
server_id = split_id[1];
}
var end = 0;
if (total_count - 1 === index) {
end = 1;
}
var response = data.event_response;
response["event_id"] = event_id;
response["server_id"] = server_id;
response["target"] = target;
if (response["type"] == "url" && response["new_window"] == 1) {
window.open(response["target"], "_blank");
} else {
var params = [];
params.push({ name: "page", value: "include/ajax/events" });
params.push({ name: "get_row_response_action", value: 1 });
params.push({ name: "response_id", value: response_id });
params.push({ name: "server_id", value: response.server_id });
params.push({ name: "end", value: end });
params.push({ name: "response", value: JSON.stringify(response) });
jQuery.ajax({
data: params,
type: "POST",
url: $("#hidden-ajax_file").val(),
dataType: "html",
success: function(data) {
$(".container-massive-events-response").append(data);
response["event_id"] = event_id;
response["server_id"] = server_id;
response["target"] = target;
var indexstr = event_id;
if (meta != 0) {
indexstr += "-" + server_id;
}
perform_response(
btoa(JSON.stringify(response)),
response_id,
indexstr
);
}
});
}
});
}
});
}
//Show the modal window of an event response
function show_response_dialog(response_id, response) {
var params = [];
params.push("page=include/ajax/events");
params.push("dialogue_event_response=1");
params.push("massive=0");
params.push("event_id=" + response["event_id"]);
params.push("target=" + encodeURIComponent(response["target"]));
params.push("response_id=" + response_id);
params.push("server_id=" + response["server_id"]);
params.push({ name: "page", value: "include/ajax/events" });
params.push({ name: "dialogue_event_response", value: 1 });
params.push({ name: "event_id", value: response.event_id });
params.push({ name: "target", value: response.target });
params.push({ name: "response_id", value: response_id });
params.push({ name: "server_id", value: response.server_id });
params.push({ name: "response", value: JSON.stringify(response) });
jQuery.ajax({
data: params.join("&"),
data: params,
type: "POST",
url: $("#hidden-ajax_file").val(),
dataType: "html",
@ -164,271 +256,49 @@ function show_response_dialog(response_id, response) {
draggable: true,
modal: false,
open: function() {
perform_response(response, response_id);
perform_response(btoa(JSON.stringify(response)), response_id, "");
},
width: response["modal_width"],
height: response["modal_height"]
height: response["modal_height"],
buttons: []
})
.show();
}
});
}
//Show the modal window of event responses when multiple events are selected
function show_massive_response_dialog(
response_id,
response,
out_iterator,
end
) {
var params = [];
params.push("page=include/ajax/events");
params.push("dialogue_event_response=1");
params.push("massive=1");
params.push("end=" + end);
params.push("out_iterator=" + out_iterator);
params.push("event_id=" + response["event_id"]);
params.push("target=" + response["target"]);
params.push("response_id=" + response_id);
params.push("server_id=" + response["server_id"]);
// Perform a response and put the output into a div
function perform_response(response, response_id, index) {
$("#re_exec_command" + index).hide();
$("#response_loading_command" + index).show();
$("#response_out" + index).html("");
jQuery.ajax({
data: params.join("&"),
response_tg: response,
response_id: response_id,
out_iterator: out_iterator,
type: "POST",
url: $("#hidden-ajax_file").val(),
dataType: "html",
success: function(data) {
if (out_iterator === 0) $("#event_response_window").empty();
$("#event_response_window")
.hide()
.append(data)
.dialog({
title: $("#select_custom_response option:selected").html(),
resizable: true,
draggable: true,
modal: false,
open: function() {
$("#response_loading_dialog").hide();
$("#button-submit_event_response").show();
},
close: function() {
$("#checkbox-all_validate_box").prop("checked", false);
$(".chk_val").prop("checked", false);
},
width: response["modal_width"],
height: response["modal_height"]
})
.show();
perform_response_massive(
this.response_tg,
this.response_id,
this.out_iterator
);
}
});
}
// Get an event response from db
function get_response(response_id, server_id) {
var response = "";
var params = [];
params.push("page=include/ajax/events");
params.push("get_response=1");
params.push("response_id=" + response_id);
params.push("server_id=" + server_id);
jQuery.ajax({
data: params.join("&"),
type: "POST",
url: $("#hidden-ajax_file").val(),
async: false,
dataType: "json",
success: function(data) {
response = data;
}
});
return response;
}
// Get an event response params from db
function get_response_params(response_id) {
var response_params;
var params = [];
params.push("page=include/ajax/events");
params.push("get_response_params=1");
params.push("response_id=" + response_id);
jQuery.ajax({
data: params.join("&"),
type: "POST",
url: $("#hidden-ajax_file").val(),
async: false,
dataType: "json",
success: function(data) {
response_params = data;
}
});
return response_params;
}
// Get an event response description from db
function get_response_description(response_id) {
var response_description = "";
var params = [];
params.push("page=include/ajax/events");
params.push("get_response_description=1");
params.push("response_id=" + response_id);
jQuery.ajax({
data: params.join("&"),
type: "POST",
url: $("#hidden-ajax_file").val(),
async: false,
dataType: "html",
success: function(data) {
response_description = data;
}
});
return response_description;
}
function add_row_param(id_table, param) {
$("#" + id_table).append(
'<tr class="params_rows"><td style="text-align:left; padding-left:40px; font-weight: normal; font-style: italic;">' +
param +
'</td><td style="text-align:left" colspan="2"><input type="text" name="' +
param +
'" id="' +
param +
'"></td></tr>'
);
}
// Get an event response from db
function get_response_target(
event_id,
response_id,
server_id,
response_command
) {
var target = "";
// Replace the main macros
var params = [];
params.push("page=include/ajax/events");
params.push("get_response_target=1");
params.push("event_id=" + event_id);
params.push("response_id=" + response_id);
params.push("server_id=" + server_id);
jQuery.ajax({
data: params.join("&"),
type: "POST",
url: $("#hidden-ajax_file").val(),
async: false,
dataType: "html",
success: function(data) {
target = data;
}
});
// Replace the custom params macros.
var response_params = get_response_params(response_id);
if (response_params.length > 1 || response_params[0] != "") {
for (var i = 0; i < response_params.length; i++) {
if (!response_command) {
var response_param = "_" + response_params[i] + "_";
if (
response_params[i].startsWith("_") &&
response_params[i].endsWith("_")
) {
response_param = response_params[i];
}
target = target.replace(
response_param,
$("#" + response_params[i]).val()
);
} else {
target = target.replace(
"_" + response_params[i] + "_",
response_command[response_params[i] + "-" + i]
);
}
}
try {
response = JSON.parse(atob(response));
} catch (e) {
console.error(e);
return;
}
return target;
}
// Perform a response and put the output into a div
function perform_response(response, response_id) {
$("#re_exec_command").hide();
$("#response_loading_command").show();
$("#response_out").html("");
var params = [];
params.push("page=include/ajax/events");
params.push("perform_event_response=1");
params.push("target=" + encodeURIComponent(response["target"]));
params.push("response_id=" + response_id);
params.push("event_id=" + response["event_id"]);
params.push("server_id=" + response["server_id"]);
params.push({ name: "page", value: "include/ajax/events" });
params.push({ name: "perform_event_response", value: 1 });
params.push({ name: "target", value: response["target"] });
params.push({ name: "response_id", value: response_id });
params.push({ name: "event_id", value: response["event_id"] });
params.push({ name: "server_id", value: response["server_id"] });
params.push({ name: "response", value: JSON.stringify(response) });
jQuery.ajax({
data: params.join("&"),
data: params,
type: "POST",
url: $("#hidden-ajax_file").val(),
async: true,
dataType: "html",
success: function(data) {
var out = data.replace(/[\n|\r]/g, "<br>");
$("#response_out").html(out);
$("#response_loading_command").hide();
$("#re_exec_command").show();
}
});
return false;
}
// Perform a response and put the output into a div
function perform_response_massive(response, response_id, out_iterator) {
$("#re_exec_command").hide();
$("#response_loading_command_" + out_iterator).show();
$("#response_out_" + out_iterator).html("");
var params = [];
params.push("page=include/ajax/events");
params.push("perform_event_response=1");
params.push("target=" + response["target"]);
params.push("response_id=" + response_id);
params.push("event_id=" + response["event_id"]);
params.push("server_id=" + response["server_id"]);
jQuery.ajax({
data: params.join("&"),
type: "POST",
url: $("#hidden-ajax_file").val(),
async: true,
dataType: "html",
success: function(data) {
var out = data.replace(/[\n|\r]/g, "<br>");
$("#response_out_" + out_iterator).html(out);
$("#response_loading_command_" + out_iterator).hide();
$("#re_exec_command_" + out_iterator).show();
$("#response_out" + index).html(out);
$("#response_loading_command" + index).hide();
$("#re_exec_command" + index).show();
}
});
@ -600,54 +470,6 @@ function event_comment(current_event) {
return false;
}
function show_event_response_command_dialog(id, response, total_checked) {
var params = [];
params.push("page=include/ajax/events");
params.push("get_table_response_command=1");
params.push("event_response_id=" + id);
jQuery.ajax({
data: params.join("&"),
type: "POST",
url: $("#hidden-ajax_file").val(),
dataType: "html",
success: function(data) {
$("#event_response_command_window")
.hide()
.empty()
.append(data)
.dialog({
resizable: true,
draggable: true,
modal: false,
open: function() {
$("#response_loading_dialog").hide();
$("#button-submit_event_response").show();
},
width: 600,
height: 300
})
.show();
$("#submit-enter_command").on("click", function(e) {
e.preventDefault();
var response_command = [];
$(".response_command_input").each(function() {
response_command[$(this).attr("name")] = $(this).val();
});
check_massive_response_event(
id,
response,
total_checked,
response_command
);
});
}
});
}
var processed = 0;
function update_event(table, id_evento, type, event_rep, row, server_id) {
var inputs = $("#events_form :input");
@ -820,8 +642,13 @@ function execute_delete_event_reponse(
// Imported from old files.
function execute_event_response(event_list_btn) {
var response_id = $("select[name=response_id]").val();
if (!isNaN(response_id)) {
table_info_response_event(response_id, 0, 0, true);
}
var message =
"<h4 style = 'text-align: center; color:black' > Are you sure?</h4> ";
"<h4 style = 'text-align: center; color:black' > Are you sure?</h4> <div id='massive-parameters-response'></div> ";
confirmDialog({
title: "ATTENTION",
message: message,
@ -833,8 +660,6 @@ function execute_event_response(event_list_btn) {
$("#max_custom_event_resp_msg").hide();
$("#max_custom_selected").hide();
var response_id = $("select[name=response_id]").val();
var total_checked = $(".chk_val:checked").length;
// Check select an event.
@ -844,58 +669,28 @@ function execute_event_response(event_list_btn) {
}
if (!isNaN(response_id)) {
// It is a custom response
var response = get_response(response_id);
// If cannot get response abort it
if (response == null) {
return;
var response_parameters_list = $('input[name^="values_params_"]');
var response_parameters = [];
if (response_parameters_list.length > 0) {
response_parameters_list.each(function() {
var acum = {
name: $(this).attr("name"),
value: $(this).val()
};
response_parameters.push(acum);
});
}
// Limit number of events to apply custom responses
// due performance reasons.
if (total_checked > $("#max_execution_event_response").val()) {
$("#max_custom_event_resp_msg").show();
return;
}
var response_command = [];
$(".response_command_input").each(function() {
response_command[$(this).attr("name")] = $(this).val();
});
response_parameters = JSON.stringify(response_parameters);
if (event_list_btn) {
$("#button-submit_event_response").hide(function() {
$("#response_loading_dialog").show(function() {
var check_params = get_response_params(response_id);
if (check_params[0] !== "") {
show_event_response_command_dialog(
response_id,
response,
total_checked
);
} else {
check_massive_response_event(
response_id,
response,
total_checked,
response_command
);
}
show_response_dialog_massive(response_id, response_parameters);
});
});
} else {
$("#button-btn_str").hide(function() {
$("#execute_again_loading").show(function() {
check_massive_response_event(
response_id,
response,
total_checked,
response_command
);
});
});
check_execute_response_massive(response_id, response_parameters);
}
} else {
// It is not a custom response
@ -970,15 +765,63 @@ function execute_event_response(event_list_btn) {
});
}
function check_massive_response_event(
response_id,
response,
total_checked,
response_command
) {
var counter = 0;
var end = 0;
function show_response_dialog_massive(response_id, response_parameters) {
var params = [];
params.push({ name: "page", value: "include/ajax/events" });
params.push({ name: "get_response", value: 1 });
params.push({ name: "response_id", value: response_id });
jQuery.ajax({
data: params,
type: "POST",
url: $("#hidden-ajax_file").val(),
dataType: "json",
success: function(response) {
// If cannot get response abort it
if (response == null) {
return [];
}
$("#event_response_window")
.hide()
.empty()
.append('<div class="container-massive-events-response"></div>')
.dialog({
title: $("#response_id option:selected").html(),
resizable: true,
draggable: true,
modal: false,
open: function() {
check_execute_response_massive(response_id, response_parameters);
},
close: function() {
$("#checkbox-all_validate_box").prop("checked", false);
$(".chk_val").prop("checked", false);
$("#response_loading_dialog").hide();
$("#button-submit_event_response").show();
},
buttons: [
{
text: "Execute All",
id: "execute-again-all",
class:
"ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next",
click: function() {
execute_event_response(false);
}
}
],
width: response["modal_width"],
height: response["modal_height"]
})
.show();
}
});
}
function check_execute_response_massive(response_id, response_parameters) {
var events = [];
$(".container-massive-events-response").empty();
$(".chk_val:checked").each(function() {
var event_id = $(this).val();
var meta = $("#hidden-meta").val();
@ -987,23 +830,18 @@ function check_massive_response_event(
var split_id = event_id.split("|");
event_id = split_id[0];
server_id = split_id[1];
if (events[server_id] === undefined) {
events[server_id] = [];
}
events[server_id].push(event_id);
} else {
events.push(event_id);
}
response["target"] = get_response_target(
event_id,
response_id,
server_id,
response_command
);
response["server_id"] = server_id;
response["event_id"] = event_id;
if (total_checked - 1 === counter) end = 1;
show_massive_response_dialog(response_id, response, counter, end);
counter++;
});
execute_response_massive(events, response_id, response_parameters);
}
function event_widget_options() {
@ -1287,3 +1125,43 @@ function check_event_sound(settings) {
"json"
);
}
function table_info_response_event(response_id, event_id, server_id, massive) {
var params = [];
params.push({ name: "page", value: "include/ajax/events" });
params.push({ name: "get_response", value: 1 });
params.push({ name: "response_id", value: response_id });
params.push({ name: "server_id", value: server_id });
params.push({ name: "event_id", value: event_id });
jQuery.ajax({
data: params,
type: "POST",
url: $("#hidden-ajax_file").val(),
dataType: "json",
success: function(response) {
if (response) {
var params = [];
params.push({ name: "page", value: "include/ajax/events" });
params.push({ name: "draw_row_response_info", value: 1 });
params.push({ name: "massive", value: massive === true ? 1 : 0 });
params.push({ name: "response", value: JSON.stringify(response) });
jQuery.ajax({
data: params,
type: "POST",
url: $("#hidden-ajax_file").val(),
dataType: "html",
success: function(output) {
if (massive === true) {
$("#massive-parameters-response").append(output);
} else {
$(".params_rows").remove();
$("#responses_table").append(output);
}
}
});
}
}
});
}

View File

@ -396,3 +396,59 @@ div.multi-response-buttons {
.white_table_graph_header {
align-items: center;
}
.container-massive-events-response {
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.container-massive-events-response-cell {
margin-bottom: 10px;
width: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-content: flex-start;
}
.container-massive-events-response-command > span {
font-style: italic;
}
.container-massive-events-response-output {
/*border: 2px dashed #ddd;*/
/*padding: 10px;*/
margin: 10px;
}
.container-massive-events-response-execute {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
}
#massive-parameters-response {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
#massive-parameters-response > div {
width: 80%;
}
#massive-parameters-response > div h5 {
text-align: center;
}
#massive-parameters-response > div div {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin-bottom: 5px;
}

View File

@ -564,7 +564,10 @@ for ($i = 0; $i < $custom_fields_count; $i++) {
$columns = array_merge($first_column, $second_column);
} else {
$columns = $first_column;
$filas = count($table_data->data);
if ($table_data->data !== null) {
$filas = count($table_data->data);
}
$table_data->colspan[$filas][1] = 3;
}