Merge branch '313-Respuestas-de-evento-masivas' into 'develop'

ent-313-Respuestas-de-evento-masivas

See merge request artica/pandorafms!2121

Former-commit-id: c4cf56f0b2526158d8f7f67ab3417e46b6e0f003
This commit is contained in:
Daniel Rodriguez 2019-01-15 16:17:53 +01:00
commit 797b49c03d
4 changed files with 257 additions and 17 deletions

View File

@ -193,25 +193,49 @@ 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);
$event = db_get_row('tevento','id_evento',$event_id);
$prompt = "<br>> ";
switch($event_response['type']) {
case 'command':
echo "<div style='text-align:left'>";
echo $prompt.sprintf(__('Executing command: %s',$command));
echo "</div><br>";
echo "<div id='response_loading_command' style='display:none'>".html_print_image('images/spinner.gif', true)."</div>";
echo "<br><div id='response_out' style='text-align:left'></div>";
echo "<br><div id='re_exec_command' style='display:none;'>";
html_print_button(__('Execute again'),'btn_str',false,'perform_response(\''.$command.'\', ' . $response_id . ');', "class='sub next'");
echo "</div>";
if ($massive) {
echo "<div style='text-align:left'>";
echo $prompt.sprintf("(Event #$event_id) ".__('Executing command: %s',$command));
echo "</div><br>";
echo "<div id='response_loading_command_".$out_iterator."' style='display:none'>".html_print_image('images/spinner.gif', true)."</div>";
echo "<br><div id='response_out_".$out_iterator."' style='text-align:left'></div>";
if ($end) {
echo "<br><div id='re_exec_command_".$out_iterator."' style='display:none;'>";
html_print_button(__('Execute again'),'btn_str',false,'execute_event_response(false);', "class='sub next'");
echo "<span id='execute_again_loading' style='display:none'>".html_print_image('images/spinner.gif', true)."</span>";
echo "</div>";
}
}
else {
echo "<div style='text-align:left'>";
echo $prompt.sprintf(__('Executing command: %s',$command));
echo "</div><br>";
echo "<div id='response_loading_command' style='display:none'>".html_print_image('images/spinner.gif', true)."</div>";
echo "<br><div id='response_out' style='text-align:left'></div>";
echo "<br><div id='re_exec_command' style='display:none;'>";
html_print_button(__('Execute again'),'btn_str',false,'perform_response(\''.$command.'\', ' . $response_id . ');', "class='sub next'");
echo "</div>";
}
break;
case 'url':
$command = str_replace("localhost",$_SERVER['SERVER_NAME'],$command);

View File

@ -158,10 +158,11 @@ function show_response_dialog(event_id, 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="+event_id);
params.push("target="+response['target']);
params.push("response_id="+response_id);
jQuery.ajax ({
data: params.join ("&"),
type: 'POST',
@ -187,6 +188,57 @@ function show_response_dialog(event_id, response_id, response) {
});
}
//Show the modal window of event responses when multiple events are selected
function show_massive_response_dialog(event_id, response_id, response, out_iterator, end) {
var ajax_file = $('#hidden-ajax_file').val();
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="+event_id);
params.push("target="+response['target']);
params.push("response_id="+response_id);
jQuery.ajax ({
data: params.join ("&"),
response_tg: response['target'],
response_id: response_id,
out_iterator: out_iterator,
type: 'POST',
url: action=ajax_file,
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(event, ui) {
$('#response_loading_dialog').hide();
$('#button-submit_event_response').show();
},
close: function(event, ui) {
$( ".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) {
var ajax_file = $('#hidden-ajax_file').val();
@ -371,6 +423,42 @@ function perform_response(target, response_id) {
return false;
}
// Perform a response and put the output into a div
function perform_response_massive(target, response_id, out_iterator) {
var ajax_file = $('#hidden-ajax_file').val();
$('#re_exec_command').hide();
$('#response_loading_command_'+out_iterator).show();
$('#response_out_'+out_iterator).html('');
var finished = 0;
var time = Math.round(+new Date()/1000);
var timeout = time + 10;
var params = [];
params.push("page=include/ajax/events");
params.push("perform_event_response=1");
params.push("target="+target);
params.push("response_id="+response_id)
jQuery.ajax ({
data: params.join ("&"),
type: 'POST',
url: action=ajax_file,
async: true,
timeout: 10000,
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();
}
});
return false;
}
// Change the status of an event to new, in process or validated
function event_change_status(event_ids) {
var ajax_file = $('#hidden-ajax_file').val();

View File

@ -20,6 +20,8 @@ require_once ($config["homedir"] . "/include/functions_ui.php");
$sort_field = get_parameter("sort_field", "timestamp");
$sort = get_parameter("sort", "down");
$response_id = get_parameter ("response_id", "");
$table = new stdClass();
if(!isset($table->width)) {
$table->width = '100%';
@ -887,9 +889,8 @@ else {
echo '<div style="width:' . $table->width . ';" class="action-buttons">';
if (!$readonly && $show_validate_button) {
html_print_button(__('In progress selected'), 'validate_button', false, 'validate_selected(2);', 'class="sub ok"');
echo " ";
html_print_button(__('Validate selected'), 'validate_button', false, 'validate_selected(1);', 'class="sub ok"');
$array_events_actions['in_progress_selected'] = 'In progress selected';
$array_events_actions['validate_selected'] = 'Validate selected';
// Fix: validated_selected JS function has to be included with the proper user ACLs
?>
<script type="text/javascript">
@ -899,12 +900,14 @@ else {
validate_event_advanced($(this).val(), new_status);
}
});
location.reload();
}
</script>
<?php
}
if (!$readonly && ($show_delete_button)) {
html_print_button(__('Delete selected'), 'delete_button', false, 'delete_selected();', 'class="sub delete"');
$array_events_actions['delete_selected'] = 'Delete selected';
?>
<script type="text/javascript">
function delete_selected() {
@ -916,13 +919,126 @@ else {
</script>
<?php
}
echo '</div>';
echo '</form>';
$sql_event_resp = "SELECT id, name FROM tevent_response WHERE type LIKE 'command'";
$event_responses = db_get_all_rows_sql ($sql_event_resp);
foreach ($event_responses as $val)
$array_events_actions[$val['id']] = $val['name'];
if ($config['event_replication'] != 1) {
echo '<div style="width:100%;text-align:right;">';
echo '<form method="post" id="form_event_response">';
html_print_select($array_events_actions, 'response_id', '', '', '', 0, false, false, false);
echo '&nbsp&nbsp';
html_print_button(__('Execute event response'), 'submit_event_response', false, 'execute_event_response(true);', 'class="sub next"');
echo "<span id='response_loading_dialog' style='display:none'>".html_print_image('images/spinner.gif', true)."</span>";
echo '</form>';
echo '<span id="max_custom_event_resp_msg" style="display:none; color:#FC4444; line-height: 200%;">'.__("A maximum of 10 event custom responses can be selected").'</span>';
echo '</div>';
}
}
?>
<script type="text/javascript">
function execute_event_response(event_list_btn) {
$('#max_custom_event_resp_msg').hide();
var response_id = $('select[name=response_id]').val();
if (!isNaN(response_id)) { // It is a custom response
var response = get_response(response_id);
var counter=0;
var end=0;
// If cannot get response abort it
if (response == null) {
return;
}
var total_checked = $(".chk_val:checked").length;
// Limit number of events to apply custom responses to for performance reasons
if (total_checked > 10) {
$('#max_custom_event_resp_msg').show();
return;
}
if (event_list_btn) {
$('#button-submit_event_response').hide(function() {
$('#response_loading_dialog').show(function() {
$(".chk_val").each(function() {
if ($(this).is(":checked")) {
//var server_id = $('#hidden-server_id_'+).
event_id = $(this).val();
server_id = $('#hidden-server_id_'+event_id).val();
response['target'] = get_response_target(event_id, response_id, server_id);
if (total_checked-1 === counter) end=1;
show_massive_response_dialog(event_id, response_id, response, counter, end);
counter++;
}
});
});
});
}
else {
$('#button-btn_str').hide(function() {
$('#execute_again_loading').show(function() {
$(".chk_val").each(function() {
if ($(this).is(":checked")) {
//var server_id = $('#hidden-server_id_'+).
event_id = $(this).val();
server_id = $('#hidden-server_id_'+event_id).val();
response['target'] = get_response_target(event_id, response_id, server_id);
if (total_checked-1 === counter) end=1;
show_massive_response_dialog(event_id, response_id, response, counter, end);
counter++;
}
});
});
});
}
}
else { // It is not a custom response
switch (response_id) {
case 'in_progress_selected':
validate_selected(2);
break;
case 'validate_selected':
validate_selected(1);
break;
case 'delete_selected':
delete_selected();
break;
}
}
}
</script>
<?php
}
else {
echo '<div class="nf">' . __('No events') . '</div>';
}
echo '</div>';
}
?>
?>

View File

@ -559,6 +559,18 @@ if ($validate) {
if ($delete) {
$ids = (array) get_parameter ("validate_ids", -1);
// Discard deleting in progress events
$in_process_status = db_get_all_rows_sql("
SELECT id_evento
FROM tevento
WHERE estado=2");
foreach ($in_process_status as $val) {
if (($key = array_search($val['id_evento'], $ids)) !== false) {
unset($ids[$key]);
}
}
if ($ids[0] != -1) {
$return = events_delete_event ($ids, ($group_rep == 1), $meta);
ui_print_result_message ($return,