From 5c6f11511c25a84901e3adbc703c23e3dbab7c56 Mon Sep 17 00:00:00 2001 From: daniel Date: Tue, 5 Dec 2023 16:48:12 +0100 Subject: [PATCH] fix error events sound modal pandora_enterprise#12607 --- pandora_console/include/javascript/pandora.js | 10 ++ .../include/javascript/pandora_events.js | 102 ++++++++++++------ pandora_console/operation/events/events.php | 13 ++- 3 files changed, 89 insertions(+), 36 deletions(-) diff --git a/pandora_console/include/javascript/pandora.js b/pandora_console/include/javascript/pandora.js index 1a59ab50e8..72a13be79a 100644 --- a/pandora_console/include/javascript/pandora.js +++ b/pandora_console/include/javascript/pandora.js @@ -2565,3 +2565,13 @@ function WarningPeriodicityModal(title, message) { hideOkButton: 1 }); } + +function checkExistParameterUrl(url, parameter) { + var regex = new RegExp( + "[?&]" + encodeURIComponent(parameter) + "(=([^&#]*)|&|#|$)" + ); + + var exists = regex.exec(url); + + return exists; +} diff --git a/pandora_console/include/javascript/pandora_events.js b/pandora_console/include/javascript/pandora_events.js index 65ea9f2a75..7694c2af41 100644 --- a/pandora_console/include/javascript/pandora_events.js +++ b/pandora_console/include/javascript/pandora_events.js @@ -1,4 +1,4 @@ -/*global jQuery, $, forced_title_callback, confirmDialog, progressTimeBar*/ +/*global jQuery, $, forced_title_callback, confirmDialog, progressTimeBar, checkExistParameterUrl*/ // Show the modal window of an event function show_event_dialog(event, dialog_page) { @@ -975,9 +975,32 @@ function process_buffers(buffers) { } } -function openSoundEventsDialogModal(settings, dialog_parameters, reload) { +function changeUrlParameterForModalSound(settings, filter_id) { + /* + Basicamente esta funcion lo que hace es: cuando activas el modal sound + y das al start para empezar a filtrar lo que hace es mirar si paras o arrancas + con el mode y settear en la url los settings necesarios para iniciar el modal, + si estaba en star aƱadira los parametros y si estaba parado los quitara, + con esto se consigue que si se hace f5 o reload en la pagina mantenga la busqueda. + */ let mode = $("#hidden-mode_alert").val(); - if (reload != false) { + if ("history" in window) { + let href = window.location.href; + if (checkExistParameterUrl(href, "settings") === null) { + href += "&settings=1"; + } + + var regex_settings = /(settings=)[^&]+(&?)/gi; + var replacement_settings = "$1" + settings + "$2"; + href = href.replace(regex_settings, replacement_settings); + + if (checkExistParameterUrl(href, "filter_id") === null) { + href += "&filter_id=1"; + } + + var regex_filter_id = /(filter_id=)[^&]+(&?)/gi; + var replacement_filter_id = "$1" + filter_id + "$2"; + href = href.replace(regex_filter_id, replacement_filter_id); if (mode == 0) { let filter_id = $("#filter_id option:selected").val(); let interval = $("#interval option:selected").val(); @@ -992,25 +1015,34 @@ function openSoundEventsDialogModal(settings, dialog_parameters, reload) { }; parameters = JSON.stringify(parameters); parameters = btoa(parameters); - let url = - window.location + "&settings=" + settings + "¶meters=" + parameters; - $(location).attr("href", url); + + if (checkExistParameterUrl(href, "parameters") === null) { + href += "¶meters=1"; + } + + var regex_parameters = /(parameters=)[^&]+(&?)/gi; + var replacement_parameters = "$1" + parameters + "$2"; + href = href.replace(regex_parameters, replacement_parameters); } else { - let url = window.location + "&settings=" + settings; - $(location).attr("href", url); + if (checkExistParameterUrl(href, "parameters") !== null) { + var regex = new RegExp( + "([?&])" + encodeURIComponent("parameters") + "=[^&]*(&|$)", + "i" + ); + href = href.replace(regex, "$1"); + } } - } else { - openSoundEventsDialog(settings, dialog_parameters, reload); + + window.history.replaceState({}, document.title, href); } } -function openSoundEventsDialog(settings, dialog_parameters, reload) { +function openSoundEventsDialog(settings, dialog_parameters) { let encode_settings = settings; - if (reload == undefined) { - reload = true; - } - if (dialog_parameters != undefined) { + if (dialog_parameters != undefined && dialog_parameters) { dialog_parameters = JSON.parse(atob(dialog_parameters)); + } else { + dialog_parameters = undefined; } settings = JSON.parse(atob(settings)); // Check modal exists and is open. @@ -1063,9 +1095,8 @@ function openSoundEventsDialog(settings, dialog_parameters, reload) { // Play Stop. $("#button-start-search").click(function() { - if (reload == true) { - openSoundEventsDialogModal(encode_settings, 0, reload); - } + var id_filter_event = $("#hidden-id_filter_event").val(); + changeUrlParameterForModalSound(encode_settings, id_filter_event); var mode = $("#hidden-mode_alert").val(); var action = false; if (mode == 0) { @@ -1094,7 +1125,7 @@ function openSoundEventsDialog(settings, dialog_parameters, reload) { action_events_sound(action, settings); }); - if (reload == false && dialog_parameters != undefined) { + if (dialog_parameters != undefined) { if ($("#button-start-search").hasClass("play")) { $("#filter_id").val(dialog_parameters.filter_id); $("#interval").val(dialog_parameters.interval); @@ -1150,6 +1181,25 @@ function openSoundEventsDialog(settings, dialog_parameters, reload) { $("#minimize_arrow_event_sound").hide(); remove_audio(); $(this).dialog("destroy"); + + let href = window.location.href; + if (checkExistParameterUrl(href, "parameters") !== null) { + var regex_parameter = new RegExp( + "([?&])" + encodeURIComponent("parameters") + "=[^&]*(&|$)", + "i" + ); + href = href.replace(regex_parameter, "$1"); + } + + if (checkExistParameterUrl(href, "settings") !== null) { + var regex_settings = new RegExp( + "([?&])" + encodeURIComponent("settings") + "=[^&]*(&|$)", + "i" + ); + href = href.replace(regex_settings, "$1"); + } + + window.history.replaceState({}, document.title, href); } }) .show(); @@ -1719,20 +1769,6 @@ $(document).ajaxSend(function(event, jqXHR, ajaxOptions) { } }); -function loadModal() { - const urlSearch = window.location.search; - const urlParams = new URLSearchParams(urlSearch); - if (urlParams.has("settings")) { - let modal_parameters = ""; - if (urlParams.has("parameters")) { - modal_parameters = urlParams.get("parameters"); - } - let settings = urlParams.get("settings"); - openSoundEventsDialogModal(settings, modal_parameters, false); - } -} -window.onload = loadModal; - function openEvents(severity) { $('input[name="filter[severity]"]').val(severity); $("#event_redirect").submit(); diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php index be5f6047e3..fb88ecfc5e 100644 --- a/pandora_console/operation/events/events.php +++ b/pandora_console/operation/events/events.php @@ -3405,8 +3405,6 @@ $(document).ready( function() { } }); - - /* Update summary */ $("#status").on("change",function(){ $('#summary_status').html($("#status option:selected").text()); @@ -3538,7 +3536,6 @@ $(document).ready( function() { show_events_graph(); }); - //Autorefresh in fullscreen var pure = ''; var pure = ''; @@ -3606,6 +3603,16 @@ $(document).ready( function() { } + const urlSearch = window.location.search; + const urlParams = new URLSearchParams(urlSearch); + if (urlParams.has("settings")) { + let modal_parameters = ""; + if (urlParams.has("parameters")) { + modal_parameters = urlParams.get("parameters"); + } + let settings = urlParams.get("settings"); + openSoundEventsDialog(settings, modal_parameters); + } }); function checked_slide_events(element) {