diff --git a/pandora_console/include/chart_generator.php b/pandora_console/include/chart_generator.php index 6ca2caa53b..fe356b737c 100644 --- a/pandora_console/include/chart_generator.php +++ b/pandora_console/include/chart_generator.php @@ -83,6 +83,7 @@ if (check_login(false) === false) { + @@ -140,6 +141,7 @@ if (file_exists('languages/'.$user_language.'.mo') === true) { + diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index 0ca66bbe73..9bfb9eca55 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -1892,7 +1892,13 @@ function ui_process_page_head($string, $bitfield) } // Pandora specific JavaScript should go first. - $config['js'] = array_merge(['pandora' => 'include/javascript/pandora.js'], $config['js']); + $config['js'] = array_merge( + [ + 'pandora' => 'include/javascript/pandora.js', + 'pandora_ui' => 'include/javascript/pandora_ui.js', + ], + $config['js'] + ); // Load base64 javascript library. $config['js']['base64'] = 'include/javascript/encode_decode_base64.js'; // Load webchat javascript library. diff --git a/pandora_console/include/javascript/pandora.js b/pandora_console/include/javascript/pandora.js index ee39ddffad..e7cb9872c5 100644 --- a/pandora_console/include/javascript/pandora.js +++ b/pandora_console/include/javascript/pandora.js @@ -1826,342 +1826,6 @@ function ellipsize(str, max, ellipse) { return str.trim().length > max ? str.substr(0, max).trim() + ellipse : str; } -/** - * Display a dialog with an image - * - * @param {string} icon_name The name of the icon you will display - * @param {string} icon_path The path to the icon - * @param {Object} incoming_options All options - * grayed: {bool} True to display the background black - * title {string} 'Logo preview' by default - */ -function logo_preview(icon_name, icon_path, incoming_options) { - // Get the options - options = { - grayed: false, - title: "Logo preview" - }; - $.extend(options, incoming_options); - - if (icon_name == "") return; - - $dialog = $("
"); - $image = $(''); - $image.css("max-width", "500px").css("max-height", "500px"); - - try { - $dialog - .hide() - .html($image) - .dialog({ - title: options.title, - resizable: true, - draggable: true, - modal: true, - dialogClass: options.grayed ? "dialog-grayed" : "", - overlay: { - opacity: 0.5, - background: "black" - }, - minHeight: 1, - width: $image.width, - close: function() { - $dialog.empty().remove(); - } - }) - .show(); - } catch (err) { - // console.log(err); - } -} - -// Advanced Form control. -function load_modal(settings) { - var AJAX_RUNNING = 0; - var data = new FormData(); - if (settings.extradata) { - settings.extradata.forEach(function(item) { - if (item.value != undefined) data.append(item.name, item.value); - }); - } - data.append("page", settings.onshow.page); - data.append("method", settings.onshow.method); - if (settings.onshow.extradata != undefined) { - data.append("extradata", JSON.stringify(settings.onshow.extradata)); - } - - if (settings.target == undefined) { - var uniq = uniqId(); - var div = document.createElement("div"); - div.id = "div-modal-" + uniq; - div.style.display = "none"; - - document.getElementById("main").append(div); - - var id_modal_target = "#div-modal-" + uniq; - - settings.target = $(id_modal_target); - } - - var width = 630; - if (settings.onshow.width) { - width = settings.onshow.width; - } - - if (settings.modal.overlay == undefined) { - settings.modal.overlay = { - opacity: 0.5, - background: "black" - }; - } - - settings.target.html("Loading modal..."); - settings.target - .dialog({ - title: "Loading", - close: false, - width: 200, - buttons: [] - }) - .show(); - var required_buttons = []; - if (settings.modal.cancel != undefined) { - //The variable contains a function - // that is responsible for executing the method it receives from settings - // which confirms the closure of a modal - var cancelModal = function() { - settings.target.dialog("close"); - if (AJAX_RUNNING) return; - AJAX_RUNNING = 1; - var formdata = new FormData(); - - formdata.append("page", settings.oncancel.page); - formdata.append("method", settings.oncancel.method); - - $.ajax({ - method: "post", - url: settings.url, - processData: false, - contentType: false, - data: formdata, - success: function(data) { - if (typeof settings.oncancel.callback == "function") { - settings.oncancel.callback(data); - settings.target.dialog("close"); - } - AJAX_RUNNING = 0; - }, - error: function(data) { - // console.log(data); - AJAX_RUNNING = 0; - } - }); - }; - - required_buttons.push({ - class: - "ui-widget ui-state-default ui-corner-all ui-button-text-only sub upd submit-cancel", - text: settings.modal.cancel, - click: function() { - if (settings.oncancel != undefined) { - if (typeof settings.oncancel.confirm == "function") { - //receive function - settings.oncancel.confirm(cancelModal); - } else if (settings.oncancel != undefined) { - cancelModal(); - } - } else { - $(this).dialog("close"); - } - } - }); - } - - if (settings.modal.ok != undefined) { - required_buttons.push({ - class: - "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next", - text: settings.modal.ok, - click: function() { - if (AJAX_RUNNING) return; - - if (settings.onsubmit != undefined) { - if (settings.onsubmit.preaction != undefined) { - settings.onsubmit.preaction(); - } - AJAX_RUNNING = 1; - if (settings.onsubmit.dataType == undefined) { - settings.onsubmit.dataType = "html"; - } - - var formdata = new FormData(); - if (settings.extradata) { - settings.extradata.forEach(function(item) { - if (item.value != undefined) - formdata.append(item.name, item.value); - }); - } - formdata.append("page", settings.onsubmit.page); - formdata.append("method", settings.onsubmit.method); - - var flagError = false; - - $("#" + settings.form + " :input").each(function() { - if (this.checkValidity() === false) { - $(this).attr("title", this.validationMessage); - $(this).tooltip({ - tooltipClass: "uitooltip", - position: { - my: "right bottom", - at: "right top", - using: function(position, feedback) { - $(this).css(position); - $("
") - .addClass("arrow") - .addClass(feedback.vertical) - .addClass(feedback.horizontal) - .appendTo(this); - } - } - }); - $(this).tooltip("open"); - - var element = $(this); - setTimeout( - function(element) { - element.tooltip("destroy"); - element.removeAttr("title"); - }, - 3000, - element - ); - - flagError = true; - } - - if (this.type == "file") { - if ($(this).prop("files")[0]) { - formdata.append(this.name, $(this).prop("files")[0]); - } - } else { - if ($(this).attr("type") == "checkbox") { - if (this.checked) { - formdata.append(this.name, "on"); - } - } else { - formdata.append(this.name, $(this).val()); - } - } - }); - - if (flagError === false) { - $.ajax({ - method: "post", - url: settings.url, - processData: false, - contentType: false, - data: formdata, - dataType: settings.onsubmit.dataType, - success: function(data) { - if (settings.ajax_callback != undefined) { - if (settings.idMsgCallback != undefined) { - settings.ajax_callback(data, settings.idMsgCallback); - } else { - settings.ajax_callback(data); - } - } - AJAX_RUNNING = 0; - } - }); - } else { - AJAX_RUNNING = 0; - } - } else { - // No onsumbit configured. Directly close. - $(this).dialog("close"); - } - }, - error: function(data) { - // console.log(data); - AJAX_RUNNING = 0; - } - }); - } - - $.ajax({ - method: "post", - url: settings.url, - processData: false, - contentType: false, - data: data, - success: function(data) { - settings.target.html(data); - if (settings.onload != undefined) { - settings.onload(data); - } - settings.target.dialog({ - resizable: true, - draggable: true, - modal: true, - title: settings.modal.title, - width: width, - overlay: settings.modal.overlay, - buttons: required_buttons, - closeOnEscape: false, - open: function() { - $(".ui-dialog-titlebar-close").hide(); - }, - close: function() { - if (id_modal_target != undefined) { - $(id_modal_target).remove(); - } - } - }); - }, - error: function(data) { - // console.log(data); - } - }); -} - -//Function that shows a dialog box to confirm closures of generic manners. The modal id is random -function confirmDialog(settings) { - var randomStr = uniqId(); - - $("body").append( - '
' + settings.message + "
" - ); - $("#confirm_" + randomStr); - $("#confirm_" + randomStr) - .dialog({ - title: settings.title, - close: false, - width: 350, - modal: true, - buttons: [ - { - text: "Cancel", - class: - "ui-widget ui-state-default ui-corner-all ui-button-text-only sub upd submit-cancel", - click: function() { - $(this).dialog("close"); - if (typeof settings.onDeny == "function") settings.onDeny(); - } - }, - { - text: "Ok", - class: - "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next", - click: function() { - $(this).dialog("close"); - if (typeof settings.onAccept == "function") settings.onAccept(); - } - } - ] - }) - .show(); -} - function uniqId() { var randomStr = Math.random() @@ -2174,58 +1838,6 @@ function uniqId() { return randomStr; } -/** - * Function to show modal with message Validation. - * - * @param {json} data Json example: - * $return = [ - * 'error' => 0 or 1, - * 'title' => [ - * Failed, - * Success, - * ], - * 'text' => [ - * Failed, - * Success, - * ], - *]; - * @param {string} idMsg ID div charge modal. - * - * @return {void} - */ -function generalShowMsg(data, idMsg) { - var title = data.title[data.error]; - var text = data.text[data.error]; - var failed = !data.error; - - $("#" + idMsg).empty(); - $("#" + idMsg).html(text); - $("#" + idMsg).dialog({ - width: 450, - position: { - my: "center", - at: "center", - of: window, - collision: "fit" - }, - title: title, - buttons: [ - { - class: - "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next", - text: "OK", - click: function(e) { - if (!failed) { - $(".ui-dialog-content").dialog("close"); - } else { - $(this).dialog("close"); - } - } - } - ] - }); -} - /** * Function for AJAX request. * diff --git a/pandora_console/include/javascript/pandora_ui.js b/pandora_console/include/javascript/pandora_ui.js new file mode 100644 index 0000000000..37f91e7950 --- /dev/null +++ b/pandora_console/include/javascript/pandora_ui.js @@ -0,0 +1,399 @@ +/* global $ */ +/* exported load_modal */ +/*JS to Show user modals : + - Confirm dialogs. + - Display dialogs. + - Load modal windows. + - Logo Previews. + - General show messages. +*/ + +var ENTERPRISE_DIR = "enterprise"; + +/** + * Display a dialog with an image + * + * @param {string} icon_name The name of the icon you will display + * @param {string} icon_path The path to the icon + * @param {Object} incoming_options All options + * grayed: {bool} True to display the background black + * title {string} 'Logo preview' by default + */ +function logo_preview(icon_name, icon_path, incoming_options) { + // Get the options + options = { + grayed: false, + title: "Logo preview" + }; + $.extend(options, incoming_options); + + if (icon_name == "") return; + + $dialog = $("
"); + $image = $(''); + $image.css("max-width", "500px").css("max-height", "500px"); + + try { + $dialog + .hide() + .html($image) + .dialog({ + title: options.title, + resizable: true, + draggable: true, + modal: true, + dialogClass: options.grayed ? "dialog-grayed" : "", + overlay: { + opacity: 0.5, + background: "black" + }, + minHeight: 1, + width: $image.width, + close: function() { + $dialog.empty().remove(); + } + }) + .show(); + } catch (err) { + // console.log(err); + } +} + +// Advanced Form control. +function load_modal(settings) { + var AJAX_RUNNING = 0; + var data = new FormData(); + if (settings.extradata) { + settings.extradata.forEach(function(item) { + if (item.value != undefined) data.append(item.name, item.value); + }); + } + data.append("page", settings.onshow.page); + data.append("method", settings.onshow.method); + if (settings.onshow.extradata != undefined) { + data.append("extradata", JSON.stringify(settings.onshow.extradata)); + } + + if (settings.target == undefined) { + var uniq = uniqId(); + var div = document.createElement("div"); + div.id = "div-modal-" + uniq; + div.style.display = "none"; + + document.getElementById("main").append(div); + + var id_modal_target = "#div-modal-" + uniq; + + settings.target = $(id_modal_target); + } + + var width = 630; + if (settings.onshow.width) { + width = settings.onshow.width; + } + + if (settings.modal.overlay == undefined) { + settings.modal.overlay = { + opacity: 0.5, + background: "black" + }; + } + + settings.target.html("Loading modal..."); + settings.target + .dialog({ + title: "Loading", + close: false, + width: 200, + buttons: [] + }) + .show(); + var required_buttons = []; + if (settings.modal.cancel != undefined) { + //The variable contains a function + // that is responsible for executing the method it receives from settings + // which confirms the closure of a modal + var cancelModal = function() { + settings.target.dialog("close"); + if (AJAX_RUNNING) return; + AJAX_RUNNING = 1; + var formdata = new FormData(); + + formdata.append("page", settings.oncancel.page); + formdata.append("method", settings.oncancel.method); + + $.ajax({ + method: "post", + url: settings.url, + processData: false, + contentType: false, + data: formdata, + success: function(data) { + if (typeof settings.oncancel.callback == "function") { + settings.oncancel.callback(data); + settings.target.dialog("close"); + } + AJAX_RUNNING = 0; + }, + error: function(data) { + // console.log(data); + AJAX_RUNNING = 0; + } + }); + }; + + required_buttons.push({ + class: + "ui-widget ui-state-default ui-corner-all ui-button-text-only sub upd submit-cancel", + text: settings.modal.cancel, + click: function() { + if (settings.oncancel != undefined) { + if (typeof settings.oncancel.confirm == "function") { + //receive function + settings.oncancel.confirm(cancelModal); + } else if (settings.oncancel != undefined) { + cancelModal(); + } + } else { + $(this).dialog("close"); + } + } + }); + } + + if (settings.modal.ok != undefined) { + required_buttons.push({ + class: + "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next", + text: settings.modal.ok, + click: function() { + if (AJAX_RUNNING) return; + + if (settings.onsubmit != undefined) { + if (settings.onsubmit.preaction != undefined) { + settings.onsubmit.preaction(); + } + AJAX_RUNNING = 1; + if (settings.onsubmit.dataType == undefined) { + settings.onsubmit.dataType = "html"; + } + + var formdata = new FormData(); + if (settings.extradata) { + settings.extradata.forEach(function(item) { + if (item.value != undefined) + formdata.append(item.name, item.value); + }); + } + formdata.append("page", settings.onsubmit.page); + formdata.append("method", settings.onsubmit.method); + + var flagError = false; + + $("#" + settings.form + " :input").each(function() { + if (this.checkValidity() === false) { + $(this).attr("title", this.validationMessage); + $(this).tooltip({ + tooltipClass: "uitooltip", + position: { + my: "right bottom", + at: "right top", + using: function(position, feedback) { + $(this).css(position); + $("
") + .addClass("arrow") + .addClass(feedback.vertical) + .addClass(feedback.horizontal) + .appendTo(this); + } + } + }); + $(this).tooltip("open"); + + var element = $(this); + setTimeout( + function(element) { + element.tooltip("destroy"); + element.removeAttr("title"); + }, + 3000, + element + ); + + flagError = true; + } + + if (this.type == "file") { + if ($(this).prop("files")[0]) { + formdata.append(this.name, $(this).prop("files")[0]); + } + } else { + if ($(this).attr("type") == "checkbox") { + if (this.checked) { + formdata.append(this.name, "on"); + } + } else { + formdata.append(this.name, $(this).val()); + } + } + }); + + if (flagError === false) { + $.ajax({ + method: "post", + url: settings.url, + processData: false, + contentType: false, + data: formdata, + dataType: settings.onsubmit.dataType, + success: function(data) { + if (settings.ajax_callback != undefined) { + if (settings.idMsgCallback != undefined) { + settings.ajax_callback(data, settings.idMsgCallback); + } else { + settings.ajax_callback(data); + } + } + AJAX_RUNNING = 0; + } + }); + } else { + AJAX_RUNNING = 0; + } + } else { + // No onsumbit configured. Directly close. + $(this).dialog("close"); + } + }, + error: function(data) { + // console.log(data); + AJAX_RUNNING = 0; + } + }); + } + + $.ajax({ + method: "post", + url: settings.url, + processData: false, + contentType: false, + data: data, + success: function(data) { + settings.target.html(data); + if (settings.onload != undefined) { + settings.onload(data); + } + settings.target.dialog({ + resizable: true, + draggable: true, + modal: true, + title: settings.modal.title, + width: width, + overlay: settings.modal.overlay, + buttons: required_buttons, + closeOnEscape: false, + open: function() { + $(".ui-dialog-titlebar-close").hide(); + }, + close: function() { + if (id_modal_target != undefined) { + $(id_modal_target).remove(); + } + } + }); + }, + error: function(data) { + // console.log(data); + } + }); +} + +//Function that shows a dialog box to confirm closures of generic manners. The modal id is random +function confirmDialog(settings) { + var randomStr = uniqId(); + + $("body").append( + '
' + settings.message + "
" + ); + $("#confirm_" + randomStr); + $("#confirm_" + randomStr) + .dialog({ + title: settings.title, + close: false, + width: 350, + modal: true, + buttons: [ + { + text: "Cancel", + class: + "ui-widget ui-state-default ui-corner-all ui-button-text-only sub upd submit-cancel", + click: function() { + $(this).dialog("close"); + if (typeof settings.onDeny == "function") settings.onDeny(); + } + }, + { + text: "Ok", + class: + "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next", + click: function() { + $(this).dialog("close"); + if (typeof settings.onAccept == "function") settings.onAccept(); + } + } + ] + }) + .show(); +} + +/** + * Function to show modal with message Validation. + * + * @param {json} data Json example: + * $return = [ + * 'error' => 0 or 1, + * 'title' => [ + * Failed, + * Success, + * ], + * 'text' => [ + * Failed, + * Success, + * ], + *]; + * @param {string} idMsg ID div charge modal. + * + * @return {void} + */ +function generalShowMsg(data, idMsg) { + var title = data.title[data.error]; + var text = data.text[data.error]; + var failed = !data.error; + + $("#" + idMsg).empty(); + $("#" + idMsg).html(text); + $("#" + idMsg).dialog({ + width: 450, + position: { + my: "center", + at: "center", + of: window, + collision: "fit" + }, + title: title, + buttons: [ + { + class: + "ui-widget ui-state-default ui-corner-all ui-button-text-only sub ok submit-next", + text: "OK", + click: function(e) { + if (!failed) { + $(".ui-dialog-content").dialog("close"); + } else { + $(this).dialog("close"); + } + } + } + ] + }); +} diff --git a/pandora_console/mobile/include/ui.class.php b/pandora_console/mobile/include/ui.class.php index ff411a86e0..87954cf96e 100755 --- a/pandora_console/mobile/include/ui.class.php +++ b/pandora_console/mobile/include/ui.class.php @@ -775,6 +775,7 @@ class Ui echo " \n"; echo " \n"; echo " \n"; + echo " \n"; echo " \n"; echo " \n"; diff --git a/pandora_console/operation/agentes/realtime_win.php b/pandora_console/operation/agentes/realtime_win.php index 5223a4bb2e..93c8c85ea2 100644 --- a/pandora_console/operation/agentes/realtime_win.php +++ b/pandora_console/operation/agentes/realtime_win.php @@ -65,6 +65,7 @@ echo ' + diff --git a/pandora_console/operation/agentes/stat_win.php b/pandora_console/operation/agentes/stat_win.php index 05fd4c7c4b..c558530459 100644 --- a/pandora_console/operation/agentes/stat_win.php +++ b/pandora_console/operation/agentes/stat_win.php @@ -73,6 +73,7 @@ $label = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $id) +