From 13b6be4994cf50d8d1a4149aced9198f3ea27832 Mon Sep 17 00:00:00 2001 From: danielmaya Date: Wed, 22 Nov 2017 17:10:25 +0100 Subject: [PATCH 01/79] Added _event_description_ in help_alert_macros.php --- pandora_console/include/help/en/help_alert_macros.php | 1 + pandora_console/include/help/es/help_alert_macros.php | 1 + pandora_console/include/help/ja/help_alert_macros.php | 1 + 3 files changed, 3 insertions(+) diff --git a/pandora_console/include/help/en/help_alert_macros.php b/pandora_console/include/help/en/help_alert_macros.php index bd303e9657..52245b64ee 100644 --- a/pandora_console/include/help/en/help_alert_macros.php +++ b/pandora_console/include/help/en/help_alert_macros.php @@ -45,6 +45,7 @@ Besides the defined module macros, the following macros are available:
  • _alert_text_severity_: Priority level, in text, for the alert (Maintenance, Informational, Normal Minor, Major, Critical).
  • _event_text_severity_: (Only event alerts) Text event (which triggered the alert) severity (Maintenance, Informational, Normal Minor, Warning, Major, Critical).
  • _event_id_: (Only event alerts) ID of the event that triggered the alert.
  • +
  • _event_description_: (Only event alerts) The textual description of the Pandora FMS event.
  • _id_agent_: Agent’s ID, useful for building a direct URL that redirects to a Pandora FMS console webpage.
  • _id_group_ : Agent group ID.
  • _id_module_ : ID of module.
  • diff --git a/pandora_console/include/help/es/help_alert_macros.php b/pandora_console/include/help/es/help_alert_macros.php index 19bc0b6f71..37575f8199 100644 --- a/pandora_console/include/help/es/help_alert_macros.php +++ b/pandora_console/include/help/es/help_alert_macros.php @@ -45,6 +45,7 @@ Además de las macros de módulo definidas, las siguientes macros están disponi
  • _alert_text_severity_: Prioridad en texto de la alerta (Maintenance, Informational, Normal Minor, Warning, Major, Critical).
  • _eventt_text_severity_: (Solo alertas de evento) Prioridad en texto de el evento que dispara la alerta (Maintenance, Informational, Normal Minor, Warning, Major, Critical).
  • _event_id_: (Solo alertas de evento) Id del evento que disparó la alerta.
  • +
  • _event_description_: (Sólo en alertas de evento) la descripción textual del evento que disparó la alerta.
  • _id_agent_: ID del agente, util para construir URL de acceso a la consola de Pandora.
  • _id_group_ : Id del grupo de agente.
  • _id_module_ : ID del módulo.
  • diff --git a/pandora_console/include/help/ja/help_alert_macros.php b/pandora_console/include/help/ja/help_alert_macros.php index 86e3a04c96..ed3cf1be3c 100644 --- a/pandora_console/include/help/ja/help_alert_macros.php +++ b/pandora_console/include/help/ja/help_alert_macros.php @@ -45,6 +45,7 @@
  • _alert_text_severity_ : テキストでのアラートの重要度 (Maintenance, Informational, Normal Minor, Warning, Major, Critical)
  • _event_text_severity_ : (イベントアラートのみ) イベント(アラートの発生元)のテキストでの重要度 (Maintenance, Informational, Normal Minor, Warning, Major, Critical)
  • _event_id_ : (イベントアラートのみ) アラート発生元のイベントID
  • +
  • _event_description_: (イベントアラートのみ) Pandora FMS イベントの説明 です。
  • _id_agent_ : エージェントのID / Webコンソールへのリンクを生成するのに便利です
  • _id_group_ : エージェントグループのID
  • _id_module_ : モジュール ID
  • From 897d7bf258b2beb99ef4f0a84bdca43732c177ea Mon Sep 17 00:00:00 2001 From: danielmaya Date: Thu, 23 Nov 2017 18:01:32 +0100 Subject: [PATCH 02/79] Added type graph selection in container graph --- .../pandoradb_migrate_6.0_to_7.0.mysql.sql | 1 + .../godmode/reporting/create_container.php | 161 ++++++++++-------- pandora_console/include/ajax/graph.ajax.php | 7 +- pandora_console/include/styles/pandora.css | 2 +- pandora_console/pandoradb.sql | 1 + 5 files changed, 102 insertions(+), 70 deletions(-) diff --git a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql index 111ac54ee0..b51be0a83d 100644 --- a/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql +++ b/pandora_console/extras/pandoradb_migrate_6.0_to_7.0.mysql.sql @@ -1403,6 +1403,7 @@ CREATE TABLE IF NOT EXISTS `tcontainer_item` ( `agent` varchar(100) NOT NULL default '', `module` varchar(100) NOT NULL default '', `id_tag` integer(10) unsigned NOT NULL DEFAULT 0, + `type_graph` tinyint(1) unsigned NOT NULL DEFAULT 0, PRIMARY KEY(`id_ci`), FOREIGN KEY (`id_container`) REFERENCES tcontainer(`id_container`) ON DELETE CASCADE diff --git a/pandora_console/godmode/reporting/create_container.php b/pandora_console/godmode/reporting/create_container.php index 1ff4ed3aa1..82972733b4 100644 --- a/pandora_console/godmode/reporting/create_container.php +++ b/pandora_console/godmode/reporting/create_container.php @@ -32,72 +32,75 @@ $id_container = get_parameter('id',0); $offset = (int) get_parameter ('offset',0); if (is_ajax()){ - $add_single = (bool) get_parameter('add_single',0); - $add_custom = (bool) get_parameter('add_custom',0); + $add_single = (bool) get_parameter('add_single',0); + $add_custom = (bool) get_parameter('add_custom',0); $add_dynamic = (bool) get_parameter('add_dynamic',0); - $id_container2 = get_parameter('id_container',0); + $id_container2 = get_parameter('id_container',0); - if($add_single){ - $id_agent = get_parameter('id_agent'); - $id_agent_module = get_parameter('id_agent_module'); - $time_lapse = get_parameter('time_lapse'); - $only_avg = get_parameter('only_avg'); - if($only_avg != 'false'){ - $only_avg = 1; - } - else{ - $only_avg = 0; - } - $values = array( - 'id_container' => $id_container2, - 'type' => "simple_graph", - 'id_agent' => $id_agent, - 'id_agent_module' => $id_agent_module, - 'time_lapse' => $time_lapse, - 'only_average' => $only_avg); + if($add_single) { + $id_agent = get_parameter('id_agent'); + $id_agent_module = get_parameter('id_agent_module'); + $time_lapse = get_parameter('time_lapse'); + $only_avg = get_parameter('only_avg'); + $simple_type_graph = get_parameter('simple_type_graph'); + + if($only_avg != 'false'){ + $only_avg = 1; + } else{ + $only_avg = 0; + } + $values = array( + 'id_container' => $id_container2, + 'type' => "simple_graph", + 'id_agent' => $id_agent, + 'id_agent_module' => $id_agent_module, + 'time_lapse' => $time_lapse, + 'only_average' => $only_avg, + 'type_graph' => $simple_type_graph); - $id_item = db_process_sql_insert('tcontainer_item', $values); - return; - } - - if($add_custom){ - $time_lapse = get_parameter('time_lapse'); - $id_custom = get_parameter('id_custom'); - - $values = array( - 'id_container' => $id_container2, - 'type' => "custom_graph", - 'time_lapse' => $time_lapse, - 'id_graph' => $id_custom); - - $id_item = db_process_sql_insert('tcontainer_item', $values); + $id_item = db_process_sql_insert('tcontainer_item', $values); return; - } + } + + if($add_custom) { + $time_lapse = get_parameter('time_lapse'); + $id_custom = get_parameter('id_custom'); + + $values = array( + 'id_container' => $id_container2, + 'type' => "custom_graph", + 'time_lapse' => $time_lapse, + 'id_graph' => $id_custom); + + $id_item = db_process_sql_insert('tcontainer_item', $values); + return; + } if($add_dynamic) { - $time_lapse = get_parameter('time_lapse'); + $time_lapse = get_parameter('time_lapse'); $group = get_parameter('group',0); $module_group= get_parameter('module_group',0); - $agent_alias = get_parameter('agent_alias',''); + $agent_alias = get_parameter('agent_alias',''); $module_name = get_parameter('module_name',''); $tag = get_parameter('tag',0); - $only_avg = get_parameter('only_avg'); - if($only_avg != 'false'){ - $only_avg = 1; - } - else{ - $only_avg = 0; - } + $only_avg = get_parameter('only_avg'); + $simple_type_graph2 = get_parameter('simple_type_graph2'); + if($only_avg != 'false') { + $only_avg = 1; + } else { + $only_avg = 0; + } $values = array( - 'id_container' => $id_container2, - 'type' => "dynamic_graph", + 'id_container' => $id_container2, + 'type' => "dynamic_graph", 'time_lapse' => $time_lapse, - 'id_group' => $group, - 'id_module_group' => $module_group, + 'id_group' => $group, + 'id_module_group' => $module_group, 'agent' => $agent_alias, 'module' => $module_name, - 'id_tag' => $tag, - 'only_average' => $only_avg); + 'id_tag' => $tag, + 'only_average' => $only_avg, + 'type_graph' => $simple_type_graph2); $id_item = db_process_sql_insert('tcontainer_item', $values); return; } @@ -268,6 +271,10 @@ if($edit_container){ $periods[SECONDS_15DAYS] = __('15 days'); $periods[SECONDS_1MONTH] = __('1 month'); + $type_graphs = array(); + $type_graphs[0] = __('Area'); + $type_graphs[1] = __('Line'); + $single_table = ""; $single_table .= ""; $single_table .= ""; $single_table .= ""; + + $single_table .= ""; + $single_table .= ""; + $single_table .= ""; + $single_table .= ""; + $single_table .= ""; $single_table .= ""; @@ -445,6 +462,12 @@ if($edit_container){ $table->data[] = $data; $table->rowclass[] = ''; + $data = array(); + $data[0] = __('Type of graph'); + $data[1] = html_print_select ($type_graphs, 'simple_type_graph2', "","","",0,true); + $table->data[] = $data; + $table->rowclass[] = ''; + $data = array(); $data[0] = __('Only average'); $data[1] = html_print_checkbox('only_avg_2', 1, false,true); @@ -557,27 +580,29 @@ echo html_print_input_hidden('id_agent', 0); $(document).ready (function () { $("input[name=add_single]").click (function () { var id_agent_module = $("#id_agent_module").val(); - if(id_agent_module !== '0'){ - var id_agent = $("#hidden-id_agent").attr('value'); - var time_lapse = $("#hidden-period_single").attr('value'); + if(id_agent_module !== '0'){ + var id_agent = $("#hidden-id_agent").attr('value'); + var time_lapse = $("#hidden-period_single").attr('value'); + var simple_type_graph = $("#simple_type_graph option:selected").attr('value'); var only_avg = $("#checkbox-only_avg").prop("checked"); var id_container = ; - jQuery.post ("ajax.php", - {"page" : "godmode/reporting/create_container", - "add_single" : 1, + jQuery.post ("ajax.php", + {"page" : "godmode/reporting/create_container", + "add_single" : 1, "id_agent" : id_agent, "id_agent_module" : id_agent_module, "time_lapse" : time_lapse, + "simple_type_graph": simple_type_graph, "only_avg" : only_avg, "id_container" : id_container, - }, - function (data, status) { - var url = location.href.replace('&update_container=1', ""); - url = url.replace('&delete_item=1', ""); - location.href = url.replace('&add_container=1', "&id="+id_container); - } + }, + function (data, status) { + var url = location.href.replace('&update_container=1', ""); + url = url.replace('&delete_item=1', ""); + location.href = url.replace('&add_container=1', "&id="+id_container); + } ); - } + } }); @@ -608,9 +633,10 @@ echo html_print_input_hidden('id_agent', 0); var time_lapse = $("#hidden-period_dynamic").attr('value'); var group = $("#container_id_group1").val(); var module_group = $("#combo_modulegroup").val(); + var simple_type_graph2 = $("#simple_type_graph2 option:selected").attr('value'); var tag = $("#tag").val(); - var only_avg = $("#checkbox-only_avg_2").prop("checked"); - var id_container = ; + var only_avg = $("#checkbox-only_avg_2").prop("checked"); + var id_container = ; jQuery.post ("ajax.php", {"page" : "godmode/reporting/create_container", "add_dynamic" : 1, @@ -619,6 +645,7 @@ echo html_print_input_hidden('id_agent', 0); "module_group" : module_group, "agent_alias" : agent_alias, "module_name" : module_name, + "simple_type_graph2": simple_type_graph2, "tag" : tag, "id_container" : id_container, "only_avg" : only_avg, diff --git a/pandora_console/include/ajax/graph.ajax.php b/pandora_console/include/ajax/graph.ajax.php index ac7decf965..114f18bd80 100644 --- a/pandora_console/include/ajax/graph.ajax.php +++ b/pandora_console/include/ajax/graph.ajax.php @@ -156,6 +156,9 @@ if ($get_graphs){ if($period > 1){ $value['time_lapse'] = $period; } + + $type_graph = ($value['type_graph'])? "line" : "area"; + switch ($value['type']) { case 'simple_graph': if ($contador > 0) { @@ -192,7 +195,7 @@ if ($get_graphs){ null, false, false, - 'area'); + $type_graph); $contador --; } // $table .= "
    "; @@ -331,7 +334,7 @@ if ($get_graphs){ null, false, false, - 'area'); + $type_graph); $contador --; } } diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index beb53d61d7..fed75d2b8f 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -4231,7 +4231,7 @@ div#footer_help{ left: 90% !important; } -.graph_conteiner_inside > .parent_graph > .noresizevc{ +.graph_conteiner_inside > .parent_graph > .graph{ width: 90% !important; } diff --git a/pandora_console/pandoradb.sql b/pandora_console/pandoradb.sql index ba23d05b5d..a694012249 100644 --- a/pandora_console/pandoradb.sql +++ b/pandora_console/pandoradb.sql @@ -604,6 +604,7 @@ CREATE TABLE IF NOT EXISTS `tcontainer_item` ( `agent` varchar(100) NOT NULL default '', `module` varchar(100) NOT NULL default '', `id_tag` integer(10) unsigned NOT NULL DEFAULT 0, + `type_graph` tinyint(1) unsigned NOT NULL DEFAULT 0, PRIMARY KEY(`id_ci`), FOREIGN KEY (`id_container`) REFERENCES tcontainer(`id_container`) ON DELETE CASCADE From afd84ce74d478bec7298674c25eedf0258fd47c3 Mon Sep 17 00:00:00 2001 From: enriquecd Date: Fri, 24 Nov 2017 10:59:44 +0100 Subject: [PATCH 03/79] Change system audit log extended info to table format with change info - #1571 --- .../godmode/agentes/configurar_agente.php | 71 +++++++++++-------- .../godmode/users/configure_user.php | 52 +++++++++----- pandora_console/include/functions.php | 5 ++ pandora_console/include/styles/pandora.css | 5 ++ 4 files changed, 86 insertions(+), 47 deletions(-) diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index 39f3cbba5b..1c4bcf5b02 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -253,23 +253,23 @@ if ($create_agent) { } } - $info = 'Name: ' . $nombre_agente . - ' IP: ' . $direccion_agente . - ' Group: ' . $grupo . - ' Interval: ' . $intervalo . - ' Comments: ' . $comentarios . - ' Mode: ' . $modo . - ' ID_parent: ' . $id_parent . - ' Server: ' . $server_name . - ' ID os: ' . $id_os . - ' Disabled: ' . $disabled . - ' Custom ID: ' . $custom_id . - ' Cascade protection: ' . $cascade_protection . - ' Cascade protection module: ' . $cascade_protection_module . - ' Icon path: ' . $icon_path . - ' Update GIS data: ' . $update_gis_data . - ' Url description: ' . $url_description . - ' Quiet: ' . (int)$quiet; + $info = '{"Name":"' . $nombre_agente .'", + "IP":"' . $direccion_agente .'", + "Group":"' . $grupo .'", + "Interval":"' . $intervalo .'", + "Comments":"' . $comentarios .'", + "Mode":"' . $modo .'", + "ID_parent:":"' . $id_parent .'", + "Server":"' . $server_name .'", + "ID os":"' . $id_os .'", + "Disabled":"' . $disabled .'", + "Custom ID":"' . $custom_id .'", + "Cascade protection":"' . $cascade_protection .'", + "Cascade protection module":"' . $cascade_protection_module .'", + "Icon path":"' . $icon_path .'", + "Update GIS data":"' . $update_gis_data .'", + "Url description":"' . $url_description .'", + "Quiet":"' . (int)$quiet.'"}'; db_pandora_audit("Agent management", "Created agent $alias", false, true, $info); @@ -844,16 +844,25 @@ if ($update_agent) { // if modified some agent paramenter } } - $info = 'Group: ' . $grupo . ' Interval: ' . $intervalo . - ' Comments: ' . $comentarios . ' Mode: ' . $modo . - ' ID OS: ' . $id_os . ' Disabled: ' . $disabled . - ' Server Name: ' . $server_name . ' ID parent: ' . $id_parent . - ' Custom ID: ' . $custom_id . ' Cascade Protection: ' . $cascade_protection . - ' Cascade protection module: ' . $cascade_protection_module . - ' Icon Path: ' . $icon_path . 'Update GIS data: ' .$update_gis_data . - ' Url description: ' . $url_description . - ' Quiet: ' . (int)$quiet; - + $info = '{ + "id_agente":"' . $id_agente . '", + "alias":"' . $alias . '", + "Group":"' . $grupo . '", + "Interval" : "' . $intervalo .'", + "Comments":"' . $comentarios . '", + "Mode":"' . $modo . '", + "ID OS":"' . $id_os . '", + "Disabled":"' . $disabled .'", + "Server Name":"' . $server_name .'", + "ID parent":"' . $id_parent .'", + "Custom ID":"' . $custom_id . '", + "Cascade Protection":"' . $cascade_protection .'", + "Cascade protection module":"' . $cascade_protection_module .'", + "Icon Path":"' . $icon_path . '", + "Update GIS data":"' .$update_gis_data .'", + "Url description":"' . $url_description .'", + "Quiet":"' . (int)$quiet.'"}'; + enterprise_hook ('update_agent', array ($id_agente)); ui_print_success_message (__('Successfully updated')); db_pandora_audit("Agent management", @@ -1217,7 +1226,9 @@ if ($update_module || $create_module) { if ($update_module) { $id_agent_module = (int) get_parameter ('id_agent_module'); - $values = array ('descripcion' => $description, + $values = array ( + 'id_agente_modulo' => $id_agent_module, + 'descripcion' => $description, 'id_module_group' => $id_module_group, 'nombre' => $name, 'max' => $max, @@ -1275,7 +1286,7 @@ if ($update_module) { 'warning_inverse' => $warning_inverse, 'cron_interval' => $cron_interval, 'id_category' => $id_category, - 'disabled_types_event' => $disabled_types_event, + 'disabled_types_event' => addslashes($disabled_types_event), 'module_macros' => $module_macros); // In local modules, the interval is updated by agent @@ -1435,7 +1446,7 @@ if ($create_module) { 'warning_inverse' => $warning_inverse, 'cron_interval' => $cron_interval, 'id_category' => $id_category, - 'disabled_types_event' => $disabled_types_event, + 'disabled_types_event' => addslashes($disabled_types_event), 'module_macros' => $module_macros); if ($prediction_module == 3 && $serialize_ops == '') { diff --git a/pandora_console/godmode/users/configure_user.php b/pandora_console/godmode/users/configure_user.php index ef2e4f0f9c..582e4887cf 100644 --- a/pandora_console/godmode/users/configure_user.php +++ b/pandora_console/godmode/users/configure_user.php @@ -220,15 +220,14 @@ if ($create_user) { $new_user = true; } else { - $info = 'FullName: ' . $values['fullname'] . ' Firstname: ' . $values['firstname'] . - ' Lastname: ' . $values['lastname'] . ' Email: ' . $values['email'] . - ' Phone: ' . $values['phone'] . ' Comments: ' . $values['comments'] . - ' Is_admin: ' . $values['is_admin'] . - ' Language: ' . $values['language'] . - ' Block size: ' . $values['block_size'] . ' Interactive Charts: ' . $values['flash_chart']; - + $info = + '{"FullName":"' . $values['fullname'] . '","Firstname":"'. $values['firstname'] .'","Lastname":"'. $values['lastname'] . '","Email":"' . $values['email'] . '","Phone":"' . $values['phone'] . '","Comments":"' . $values['comments'] .'","Is_admin":"' . $values['is_admin'] .'","Language":"' . $values['language'] . '","Block size":"' . $values['block_size'] . '","Interactive Charts":"' . $values['flash_chart'].'"'; + if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) { - $info .= ' Skin: ' . $values['id_skin']; + $info .= ',"Skin":"' . $values['id_skin'].'"}'; + } + else{ + $info .= '}'; } switch ($config['dbtype']) { @@ -356,21 +355,40 @@ if ($update_user) { } } else { - $info = 'FullName: ' . $values['fullname'] . ' Firstname: ' . $values['firstname'] . - ' Lastname: ' . $values['lastname'] . ' Email: ' . $values['email'] . - ' Phone: ' . $values['phone'] . ' Comments: ' . $values['comments'] . - ' Is_admin: ' . $values['is_admin'] . - ' Language: ' . $values['language'] . - ' Block size: ' . $values['block_size'] . ' Flash Chats: ' . $values['flash_chart'] . - ' Section: ' . $values['section']; + + $has_skin = false; + $has_wizard = false; + + $info = '{"id_user":"'.$values['id_user'].'", + "FullName":"' . $values['fullname'] .'", + "Firstname":"' . $values['firstname'] .'", + "Lastname":"' . $values['lastname'] . '", + "Email":"' . $values['email'] . '", + "Phone":"' . $values['phone'] . '", + "Comments":"' . $values['comments'] . '", + "Is_admin":"' . $values['is_admin'] . '", + "Language":"' . $values['language'] . '", + "Block size":"' . $values['block_size'] . '", + "Flash Chats":"' . $values['flash_chart'] . '", + "Section":"' . $values['section'].'"'; if ($isFunctionSkins !== ENTERPRISE_NOT_HOOK) { - $info .= ' Skin: ' . $values['id_skin']; + $info .= ',"Skin":"' . $values['id_skin'].'"'; + $has_skin = true; } if(enterprise_installed() && defined('METACONSOLE')) { - $info .= ' Wizard access: ' . $values['metaconsole_access']; + $info .= ',"Wizard access":"' . $values['metaconsole_access'].'"}'; + $has_wizard = true; } + elseif($has_skin){ + $info .= '}'; + } + + if(!$has_skin && !$has_wizard){ + $info .= '}'; + } + db_pandora_audit("User management", "Updated user ".io_safe_input($id), false, false, $info); diff --git a/pandora_console/include/functions.php b/pandora_console/include/functions.php index 4edfe2c512..6ef0e3ce76 100644 --- a/pandora_console/include/functions.php +++ b/pandora_console/include/functions.php @@ -2788,4 +2788,9 @@ function register_pass_change_try ($id_user, $success) { db_process_sql_insert('treset_pass_history', $values); } +function isJson($string) { + json_decode($string); + return (json_last_error() == JSON_ERROR_NONE); +} + ?> diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index beb53d61d7..9c5956bfa1 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -4368,3 +4368,8 @@ div#footer_help{ fill: none; transition: all 2s ease-in-out; } + +.limit_scroll{ + max-width: 800px; + overflow-x:scroll; +} \ No newline at end of file From 94a3bc85d31c66dc840dbbd883b99860bcf0a26e Mon Sep 17 00:00:00 2001 From: fermin831 Date: Tue, 28 Nov 2017 15:56:38 +0100 Subject: [PATCH 04/79] Fixed module definition help and add autodisable mode to bulk operations --- .../godmode/massive/massive_edit_agents.php | 1 + .../include/help/en/help_module_definition.php | 17 +++++++++++------ .../include/help/es/help_module_definition.php | 17 +++++++++++------ .../include/help/ja/help_module_definition.php | 16 +++++++++++----- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/pandora_console/godmode/massive/massive_edit_agents.php b/pandora_console/godmode/massive/massive_edit_agents.php index 1b77093025..ce92ca588a 100755 --- a/pandora_console/godmode/massive/massive_edit_agents.php +++ b/pandora_console/godmode/massive/massive_edit_agents.php @@ -410,6 +410,7 @@ $table->data[1][0] = __('Module definition') . ui_print_help_icon("module_defini $table->data[1][1] = __('No change').' '.html_print_radio_button_extended ("mode", -1, '', $mode, false, '', 'style="margin-right: 40px;"', true); $table->data[1][1] .= __('Learning mode').' '.html_print_radio_button_extended ("mode", 1, '', $mode, false, '', 'style="margin-right: 40px;"', true); $table->data[1][1] .= __('Normal mode').' '.html_print_radio_button_extended ("mode", 0, '', $mode, false, '', 'style="margin-right: 40px;"', true); +$table->data[1][1] .= __('Autodisable mode').' '.html_print_radio_button_extended ("mode", 2, '', $mode, false, '', 'style="margin-right: 40px;"', true); // Status (Disabled / Enabled) $table->data[2][0] = __('Status'); diff --git a/pandora_console/include/help/en/help_module_definition.php b/pandora_console/include/help/en/help_module_definition.php index 8173a8093b..d9cef4610c 100644 --- a/pandora_console/include/help/en/help_module_definition.php +++ b/pandora_console/include/help/en/help_module_definition.php @@ -4,12 +4,17 @@ */ ?>

    Module definition

    -

    -There are two modes for an agent: -

    +

    Agents can be configured from the console in three working modes:

      -
    • Learning mode: all the modules sent by the agent are accepted. If modules are not defined, they will be automatically defined by the system. It is recommended to activate the agents in this mode and change it once the user is familiar with Pandora FMS.
      From version 4.0.3, in this mode, Pandora console collect all the configuration specified by the agent configuration file the first time and thereafter any changes should be made through console, will not catch changes in config file. -
    • +
    • + Learning mode: If the XML received from the software agent contains new modules, they will be automatically created. This is the default behavior. +

    • -
    • Normal mode: the modules in this mode must be configured manually. The self definition of the modules is not allowed in this mode.
    • +
    • + Normal mode: No new modules will be created that arrive in XML if they have not been previously declared in the console. +
    • +
      +
    • + Autodisable mode: Similar to learning mode, in this mode, also, if all modules pass to unknown state the agent will be automatically disabled, going to be enabled again if it receives new information. +
    diff --git a/pandora_console/include/help/es/help_module_definition.php b/pandora_console/include/help/es/help_module_definition.php index e31ac65d6c..303fe1d188 100644 --- a/pandora_console/include/help/es/help_module_definition.php +++ b/pandora_console/include/help/es/help_module_definition.php @@ -4,12 +4,17 @@ */ ?>

    Definición de módulo

    - -

    -Existen dos modos para un agente: -

    +

    Los agentes pueden configurarse desde la consola en tres modos de trabajo:

      -
    • Modo aprendizaje: todos los módulos enviados por el agente se aceptan. Si los módulos no están definidos, el sistema los creará automáticamente. Se recomienda activar los agentes en este modo y cambiarlo una vez que se el operador se ha familiarizado con Pandora FMS. A partir de la versión 4.0.3, en este modo Pandora recogerá en consola toda la configuración indicada por el fichero de configuración del agente la primera vez y a partir de entonces todas las modificaciones se deberán realizar a través de consola, no cogerá cambios en el fichero de configuración.
    • +
    • + Modo aprendizaje: Si el XML recibido del agente software contiene nuevos módulos, éstos serán automáticamente creados. Este es el comportamiento por defecto. +

    • -
    • Modo normal: los módulos en este modo se deben configurar manualmente. No se permite la definición automática en este modo.
    • +
    • + Modo normal: No se crearán nuevos módulos que lleguen en el XML si no han sido declarados previamente en la consola. +
    • +
      +
    • + Modo autodeshabilitado: Similar al modo aprendizaje, en este modo, además, si todos los módulos pasan a estado desconocido el agente se deshabilitará automáticamente, pasando a habilitarse de nuevo si recibe nueva información. +
    diff --git a/pandora_console/include/help/ja/help_module_definition.php b/pandora_console/include/help/ja/help_module_definition.php index e7e4055d18..d7b14bb889 100644 --- a/pandora_console/include/help/ja/help_module_definition.php +++ b/pandora_console/include/help/ja/help_module_definition.php @@ -4,11 +4,17 @@ */ ?>

    モジュール定義

    - -エージェントには、次の2つのモードがあります: +

    Agents can be configured from the console in three working modes:

      -
    • 学習モード: エージェントから通知されるモジュール情報を受け取ります。モジュールが定義されていない場合は自動的にそれが追加されます。エージェントの設定でこのモードを有効にすることをお勧めします。Pandora FMS が使いやすいです。
      バージョン 4.0.3 からは、このモードの場合、コンソールが初回はエージェント設定ファイルの全設定内容を読み込みますが、その後はコンソールから変更可能で設定ファイル側の変更は反映されません。 -
    • +
    • + Learning mode: If the XML received from the software agent contains new modules, they will be automatically created. This is the default behavior. +

    • -
    • 通常モード: このモードでは、モジュール設定を手動で実施する必要があります。自動設定は行われません。
    • +
    • + Normal mode: No new modules will be created that arrive in XML if they have not been previously declared in the console. +
    • +
      +
    • + Autodisable mode: Similar to learning mode, in this mode, also, if all modules pass to unknown state the agent will be automatically disabled, going to be enabled again if it receives new information. +
    From 521eb8f4cb204e58d9da6669a7d2480afa8df5db Mon Sep 17 00:00:00 2001 From: enriquecd Date: Fri, 1 Dec 2017 12:14:56 +0100 Subject: [PATCH 05/79] Add clocks to visual console - #1403 --- .../visual_console_builder.editor.js | 172 +++++++++++- pandora_console/images/clock-tab.disabled.png | Bin 0 -> 599 bytes pandora_console/images/clock-tab.png | Bin 0 -> 602 bytes .../images/console/signes/clock.png | Bin 0 -> 12515 bytes .../images/console/signes/digital-clock.png | Bin 0 -> 4418 bytes .../ajax/visual_console_builder.ajax.php | 44 ++- pandora_console/include/constants.php | 1 + .../include/functions_visual_map.php | 174 ++++++++++++ .../include/functions_visual_map_editor.php | 71 ++++- .../include/graphs/functions_d3.php | 248 +++++++++++++++++ pandora_console/include/graphs/pandora.d3.js | 250 ++++++++++++++++++ pandora_console/include/styles/pandora.css | 8 +- .../visual_console/public_console.php | 7 +- .../operation/visual_console/pure_ajax.php | 19 +- .../operation/visual_console/render_view.php | 7 +- 15 files changed, 979 insertions(+), 22 deletions(-) create mode 100644 pandora_console/images/clock-tab.disabled.png create mode 100644 pandora_console/images/clock-tab.png create mode 100644 pandora_console/images/console/signes/clock.png create mode 100644 pandora_console/images/console/signes/digital-clock.png diff --git a/pandora_console/godmode/reporting/visual_console_builder.editor.js b/pandora_console/godmode/reporting/visual_console_builder.editor.js index fd7886f275..db22c50e57 100755 --- a/pandora_console/godmode/reporting/visual_console_builder.editor.js +++ b/pandora_console/godmode/reporting/visual_console_builder.editor.js @@ -626,6 +626,14 @@ function update_button_palette_callback() { setBarsGraph(idItem, values); break; + + case 'clock': + + $("#text_" + idItem).html(values['label']); + $("#image_" + idItem).attr("src", "images/spinner.gif"); + setClock(idItem, values); + break; + case 'auto_sla_graph': if($('input[name=width]').val() == ''){ alert('Undefined width'); @@ -856,6 +864,9 @@ function readFields() { values['label_position'] = $(".labelpos[sel=yes]").attr('position'); values['show_statistics'] = $("input[name=show_statistics]").is(':checked') ? 1 : 0; values['show_on_top'] = $("input[name=show_on_top]").is(':checked') ? 1 : 0; + values['time_format'] = $("select[name=time_format]").val(); + values['timezone'] = $("select[name=timezone]").val(); + values['clock_animation'] = $("select[name=clock_animation]").val(); if (is_metaconsole()) { values['metaconsole'] = 1; @@ -1216,6 +1227,7 @@ function toggle_item_palette() { activeToolboxButton('simple_value', true); activeToolboxButton('label', true); activeToolboxButton('icon', true); + activeToolboxButton('clock', true); activeToolboxButton('percentile_item', true); activeToolboxButton('group_item', true); activeToolboxButton('box_item', true); @@ -1247,6 +1259,7 @@ function toggle_item_palette() { activeToolboxButton('simple_value', false); activeToolboxButton('label', false); activeToolboxButton('icon', false); + activeToolboxButton('clock', false); activeToolboxButton('percentile_item', false); activeToolboxButton('group_item', false); activeToolboxButton('box_item', false); @@ -1557,7 +1570,14 @@ function loadFieldsFromDB(item) { $("#percentile_item_row_6 .ColorPickerDivSample") .css('background-color', val); } - + + if (key == 'clock_animation') + $("select[name=clock_animation]").val(val); + if (key == 'time_format') + $("select[name=time_format]").val(val); + if (key == 'timezone') + $("select[name=timezone]").val(val); + if (key == 'value_show') { $("select[name=value_show]").val(val); } @@ -1868,6 +1888,15 @@ function hiddenFields(item) { $("#line_width_row").css('display', 'none'); $("#line_width_row." + item).css('display', ''); + + $("#timezone_row").css('display', 'none'); + $("#timezone_row." + item).css('display', ''); + + $("#timeformat_row").css('display', 'none'); + $("#timeformat_row." + item).css('display', ''); + + $("#clock_animation_row").css('display', 'none'); + $("#clock_animation_row." + item).css('display', ''); $("#line_case").css('display', 'none'); $("#line_case." + item).css('display', ''); @@ -1908,7 +1937,7 @@ function cleanFields(item) { $("input[name='grid_color']").val('#000000'); $("input[name='resume_color']").val('#000000'); $("input[name='border_width']").val(3); - $("input[name='fill_color']").val('#ffffff'); + $("input[name='fill_color']").val('#000000'); $("input[name='line_width']").val(3); $("input[name='line_color']").val('#000000'); $("select[name=type_percentile]").val(''); @@ -1917,6 +1946,9 @@ function cleanFields(item) { $("input[name=percentile_label]").val(''); $(".ColorPickerDivSample").css('background-color', '#FFF'); $("input[name=show_on_top]").prop("checked", false); + $("select[name='time_format']").val('time'); + $("select[name='timezone']").val('Europe/Madrid'); + $("select[name='clock_animation']").val('analogic_1'); $("#preview").empty(); @@ -2102,6 +2134,84 @@ function setBarsGraph(id_data, values) { }); } +function setClock(id_data, values) { + var url_hack_metaconsole = ''; + if (is_metaconsole()) { + url_hack_metaconsole = '../../'; + } + + parameter = Array(); + + parameter.push ({name: "page", value: "include/ajax/visual_console_builder.ajax"}); + parameter.push ({name: "action", value: "get_module_type_string"}); + parameter.push ({name: "time_format", value: values['time_format']}); + parameter.push ({name: "timezone", value: values['timezone']}); + parameter.push ({name: "clock_animation", value: values['clock_animation']}); + parameter.push ({name: "label", value: values['label']}); + parameter.push ({name: "width", value: values['width_percentile']}); + parameter.push ({name: "always_on_top", value: values['always_on_top']}); + parameter.push ({name: "id_element", value: id_data}); + parameter.push ({name: "id_visual_console", value: id_visual_console}); + jQuery.ajax({ + url: get_url_ajax(), + data: parameter, + type: "POST", + dataType: 'json', + success: function (data) { + + if(values['clock_animation'] == 'analogic_1'){ + $("#" + id_data + " img").attr('src', url_hack_metaconsole + 'images/console/signes/clock.png'); + } + else{ + $("#" + id_data + " img").attr('src', url_hack_metaconsole + 'images/console/signes/digital-clock.png'); + } + + if (values['width_percentile'] == 0) { + if(values['clock_animation'] == 'analogic_1'){ + $("#" + id_data + " img").css('width', 200 + 'px'); + $("#" + id_data + " img").css('height', 240 + 'px'); + } + else{ + $("#" + id_data + " img").css('width', 200 + 'px'); + + if(values['time_format'] == 'time'){ + $("#" + id_data + " img").css('height', 71 + 'px'); + } + else{ + $("#" + id_data + " img").css('height', 91 + 'px'); + } + + } + + } + else{ + if(values['clock_animation'] == 'analogic_1'){ + $("#" + id_data + " img").css('width', values['width_percentile'] + 'px'); + $("#" + id_data + " img").css('height', parseInt(values['width_percentile'])+40 + 'px'); + } + else{ + $("#" + id_data + " img").css('width', values['width_percentile'] + 'px'); + + if(values['time_format'] == 'time'){ + $("#" + id_data + " img").css('height', parseInt(values['width_percentile'])/3.9+20 + 'px'); + } + else{ + $("#" + id_data + " img").css('height', parseInt(values['width_percentile'])/3.9+40 + 'px'); + } + } + + } + + if($('#'+id_data+' table').css('float') == 'right' || $('#'+id_data+ ' table').css('float') == 'left'){ + $('#'+id_data+ ' img').css('margin-top', parseInt($('#'+id_data).css('height'))/2 - parseInt($('#'+id_data+ ' img').css('height'))/2); + } + else{ + $('#'+id_data+ ' img').css('margin-left', parseInt($('#'+id_data).css('width'))/2 - parseInt($('#'+id_data+ ' img').css('width'))/2); + } + } + }); +} + function setModuleGraph(id_data) { var parameter = Array(); @@ -3421,7 +3531,43 @@ function createItem(type, values, id_data) { } - setBarsGraph(id_data, values); + setBarsGraph(id_data, values); + break; + case 'clock': + sizeStyle = ''; + imageSize = ''; + + if(values['label_position'] == 'up'){ + item = $('
    ' + + '
    "; @@ -328,6 +335,16 @@ if($edit_container){ $single_table .= html_print_checkbox('only_avg', 1, true,true); $single_table .= "
    "; + $single_table .= __('Type of graph'); + $single_table .= ""; + $single_table .= html_print_select ($type_graphs, 'simple_type_graph', "","","",0,true); + $single_table .= "
    "; $single_table .= "
    ' + values['label'] + '
    ' + + '' + + '' + ); + } + else if(values['label_position'] == 'down'){ + item = $('
    ' + + '' + + '
    ' + values['label'] + '
    ' + + '
    ' + ); + } + else if(values['label_position'] == 'left'){ + item = $('
    ' + + '' + + '
    ' + values['label'] + '
    ' + + '
    ' + ); + } + else if(values['label_position'] == 'right'){ + item = $('
    ' + + '' + + '
    ' + values['label'] + '
    ' + + '
    ' + ); + } + + setClock(id_data, values); + break; case 'simple_value': sizeStyle = ''; @@ -3648,6 +3794,7 @@ function updateDB_visual(type, idElement , values, event, top, left) { case 'icon': case 'module_graph': case 'bars_graph': + case 'clock': case 'auto_sla_graph': case 'donut_graph': @@ -4136,6 +4283,15 @@ function eventsItems(drag) { activeToolboxButton('delete_item', true); activeToolboxButton('show_grid', false); } + if ($(divParent).hasClass('clock')) { + creationItem = null; + selectedItem = 'clock'; + idItem = $(divParent).attr('id'); + activeToolboxButton('copy_item', true); + activeToolboxButton('edit_item', true); + activeToolboxButton('delete_item', true); + activeToolboxButton('show_grid', false); + } if ($(divParent).hasClass('handler_start')) { idItem = $(divParent).attr('id') .replace("handler_start_", ""); @@ -4320,6 +4476,9 @@ function eventsItems(drag) { if ($(event.target).hasClass('icon')) { selectedItem = 'icon'; } + if ($(event.target).hasClass('clock')) { + selectedItem = 'clock'; + } if ($(event.target).hasClass('handler_start')) { selectedItem = 'handler_start'; } @@ -4642,6 +4801,10 @@ function click_button_toolbox(id) { toolbuttonActive = creationItem = 'icon'; toggle_item_palette(); break; + case 'clock': + toolbuttonActive = creationItem = 'clock'; + toggle_item_palette(); + break; case 'group_item': toolbuttonActive = creationItem = 'group_item'; toggle_item_palette(); @@ -4683,6 +4846,7 @@ function click_button_toolbox(id) { activeToolboxButton('simple_value', false); activeToolboxButton('label', false); activeToolboxButton('icon', false); + activeToolboxButton('clock', false); activeToolboxButton('service', false); activeToolboxButton('group_item', false); activeToolboxButton('auto_sla_graph', false); @@ -4716,6 +4880,7 @@ function click_button_toolbox(id) { activeToolboxButton('simple_value', true); activeToolboxButton('label', true); activeToolboxButton('icon', true); + activeToolboxButton('clock', true); activeToolboxButton('group_item', true); activeToolboxButton('auto_sla_graph', true); activeToolboxButton('donut_graph', true); @@ -4769,6 +4934,7 @@ function click_button_toolbox(id) { } break; } + $('.ColorPickerDivSample').css('background-color',"black"); } function showPreview(image) { diff --git a/pandora_console/images/clock-tab.disabled.png b/pandora_console/images/clock-tab.disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..cd889bc875375ff2295d3c90d376eef3f798ad7c GIT binary patch literal 599 zcmV-d0;v6oP)9THHJ6rdgi z(fLq0kf$C1@qUp*6t&_u@NXxfF2{ztkj4SJ5aZR!fXOm2&B;w=#&E_rBQ$Yja3T`!Y~j` zreH`w0Yd?kFbP9K9n3+80&su?Kmigc3TlCS%e!#xx>F2KZdGAdz3Qvv9nt`9h z)9?qoYGPXLg4j95vX;}y=7`)3M1kWsiGh1Nd!Ic~vP^sGbSusRX^To8WxXi`ch4g2 zSc$H;PYnL|%L?Gv09I(jCQTq!lEB0Jp@DVG`e lS5j_icre=!JV*sCjt{GLEfAzZ?mz$l002ovPDHLkV1mi5;j{n% literal 0 HcmV?d00001 diff --git a/pandora_console/images/clock-tab.png b/pandora_console/images/clock-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0cbee9dbd19e92a4b513d457b56dd15246d7a5 GIT binary patch literal 602 zcmV-g0;T-Pn|kd2&5dCpqxOE z3eqhH2p~ozj~@WyKp+Nr1mw#NK%5A~=RtM?tzcw2XnBZ0309zP=ExAf?D7nc^9r-J804@ZLin+y!WOUg{MYl z&A^Z1Y5Id*H8HLCJh-D+)^d)r>5!X&C~*8DF<`f|_Uwt0<+GrE!O zTM}t6pTI&6WP4jxgof(Kj;Id^cqBEPpA)e?I0q2 zEJRWo+xb!ofi)_fPck2cGuzlGQb@(T_!)eMV>!CS;Y>d5Bb;VBdLop@Txw87cDf}} o&I|Cbq}=l2!EE30AQdz_-tpVOj!D3baR2}S07*qoM6N<$g2oB&i2wiq literal 0 HcmV?d00001 diff --git a/pandora_console/images/console/signes/clock.png b/pandora_console/images/console/signes/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..b226abd1e98703b262c3c4289666a5c8dfd80606 GIT binary patch literal 12515 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 Y%j;1iXLM?d{ZEm+w31W>%sAlx12!`6tN;K2 literal 0 HcmV?d00001 diff --git a/pandora_console/images/console/signes/digital-clock.png b/pandora_console/images/console/signes/digital-clock.png new file mode 100644 index 0000000000000000000000000000000000000000..97a6f9349d888bab9bb9f3c1bf59b90adc6eb5a4 GIT binary patch literal 4418 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 literal 0 HcmV?d00001 diff --git a/pandora_console/include/ajax/visual_console_builder.ajax.php b/pandora_console/include/ajax/visual_console_builder.ajax.php index 05e6f7fc4c..461c20298a 100755 --- a/pandora_console/include/ajax/visual_console_builder.ajax.php +++ b/pandora_console/include/ajax/visual_console_builder.ajax.php @@ -102,7 +102,7 @@ $parent = get_parameter('parent', null); $map_linked = get_parameter('map_linked', null); $map_linked_weight = get_parameter('map_linked_weight', null); $element_group = get_parameter('element_group', null); -$width_percentile = get_parameter('width_percentile', null); +$width_percentile = get_parameter('width_percentile', 0); $bars_graph_height = get_parameter('bars_graph_height', null); $max_percentile = get_parameter('max_percentile', null); $height_module_graph = get_parameter('height_module_graph', null); @@ -145,6 +145,10 @@ $type_graph = get_parameter('type_graph', 'area'); $label_position = get_parameter('label_position', 'down'); $show_statistics = get_parameter('show_statistics', 0); +$clock_animation = get_parameter('clock_animation', 'analogic_1'); +$time_format = get_parameter('time_format', 'time'); +$timezone = get_parameter('timezone', 'Europe/Madrid'); + switch ($action) { case 'get_font': $return = array(); @@ -735,6 +739,23 @@ switch ($action) { $values['width'] = $width; } + break; + case 'clock': + if ($clock_animation !== null) { + $values['clock_animation'] = $clock_animation; + } + if ($time_format !== null) { + $values['time_format'] = $time_format; + } + if ($timezone !== null) { + $values['timezone'] = $timezone; + } + if ($width !== null) { + $values['width'] = $width_percentile; + } + if ($fill_color !== null) { + $values['fill_color'] = $fill_color; + } break; default: if (enterprise_installed()) { @@ -782,6 +803,13 @@ switch ($action) { unset($values['width']); unset($values['id_agent']); break; + case 'clock': + unset($values['clock_animation']); + unset($values['time_format']); + unset($values['timezone']); + unset($values['fill_color']); + unset($values['width']); + break; case 'box_item': unset($values['border_width']); unset($values['border_color']); @@ -843,6 +871,7 @@ switch ($action) { case 'simple_value': case 'label': case 'icon': + case 'clock': case 'auto_sla_graph': case 'donut_graph': $elementFields = db_get_row_filter('tlayout_data', @@ -945,6 +974,9 @@ switch ($action) { $elementFields['width_module_graph'] = $elementFields['width']; $elementFields['height_module_graph'] = $elementFields['height']; break; + case 'clock': + $elementFields['width_percentile'] = $elementFields['width']; + break; case 'bars_graph': $elementFields['width_percentile'] = $elementFields['width']; $elementFields['bars_graph_height'] = $elementFields['height']; @@ -1120,6 +1152,14 @@ switch ($action) { $values['border_color'] = $grid_color; $values['id_agent'] = $id_agent_string; break; + case 'clock': + $values['type'] = CLOCK; + $values['width'] = $width_percentile; + $values['clock_animation'] = $clock_animation; + $values['fill_color'] = $fill_color; + $values['time_format'] = $time_format; + $values['timezone'] = $timezone; + break; case 'auto_sla_graph': $values['type'] = AUTO_SLA_GRAPH; $values['period'] = $event_max_time_row; @@ -1183,7 +1223,7 @@ switch ($action) { } break; } - + $idData = db_process_sql_insert('tlayout_data', $values); $return = array(); diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php index 901cff9eeb..6e6b1a53e8 100644 --- a/pandora_console/include/constants.php +++ b/pandora_console/include/constants.php @@ -201,6 +201,7 @@ define('CIRCULAR_PROGRESS_BAR', 15); define('CIRCULAR_INTERIOR_PROGRESS_BAR', 16); define('DONUT_GRAPH', 17); define('BARS_GRAPH', 18); +define('CLOCK', 19); //Some styles define('MIN_WIDTH', 300); define('MIN_HEIGHT', 120); diff --git a/pandora_console/include/functions_visual_map.php b/pandora_console/include/functions_visual_map.php index 2085e9d56d..2812eaabd3 100755 --- a/pandora_console/include/functions_visual_map.php +++ b/pandora_console/include/functions_visual_map.php @@ -112,6 +112,9 @@ function visual_map_print_item($mode = "read", $layoutData, $fill_color = $layoutData['fill_color']; $label_position = $layoutData['label_position']; $show_on_top = $layoutData['show_on_top']; + $clock_animation = $layoutData['clock_animation']; + $time_format = $layoutData['time_format']; + $timezone = $layoutData['timezone']; if($show_on_top){ $show_on_top_index = 10; @@ -154,6 +157,35 @@ function visual_map_print_item($mode = "read", $layoutData, else { $tableheight0 = $height; } + + if ($layoutData['width'] == 0){ + switch($type) { + case 19: + if($layoutData['clock_animation'] == 'analogic_1'){ + $himg = '200'; + $wimg ='200'; + } + else{ + $himg = '60'; + $wimg ='200'; + } + break; + } + } + else{ + switch($type) { + case 19: + if($layoutData['clock_animation'] == 'analogic_1'){ + $himg = $width; + $wimg = $width; + } + else{ + $himg = $width/3.9; + $wimg = $width; + } + break; + } + } if ($layoutData['width'] == 0 || $layoutData['height'] == 0) { switch($type) { @@ -1422,6 +1454,125 @@ function visual_map_print_item($mode = "read", $layoutData, case BOX_ITEM: $z_index = 1; break; + case CLOCK: + if ((get_parameter('action') == 'edit') || (get_parameter('operation') == 'edit_visualmap')) { + if($width == 0){ + if ($layoutData['id_metaconsole'] != 0) { + if($layoutData['clock_animation'] == 'analogic_1'){ + $img = ''; + } + else{ + + if($layoutData['time_format'] = 'time'){ + $img = ''; + } + else{ + $img = ''; + } + } + } + else{ + if($layoutData['clock_animation'] == 'analogic_1'){ + $img = ''; + } + else{ + + if($layoutData['time_format'] == 'time'){ + $img = ''; + } + else{ + $img = ''; + } + } + } + } + else{ + if ($layoutData['id_metaconsole'] != 0) { + + if($layoutData['clock_animation'] == 'analogic_1'){ + $img = ''; + } + else{ + + if($layoutData['time_format'] == 'time'){ + $img = ''; + } + else{ + $img = ''; + } + + } + + } + else{ + if($layoutData['clock_animation'] == 'analogic_1'){ + $img = ''; + } + else{ + if($layoutData['time_format'] == 'time'){ + $img = ''; + } + else{ + $img = ''; + } + } + } + } + } + else{ + if($layoutData['clock_animation'] == 'analogic_1'){ + + if ($width == 0) { + if ($layoutData['label_position']=='left') { + $img = '
    ' .print_clock_analogic_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + elseif ($layoutData['label_position']=='right') { + $img = '
    ' . print_clock_analogic_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + else { + $img = '
    ' . print_clock_analogic_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + } + else{ + if ($layoutData['label_position']=='left') { + $img = '
    ' . print_clock_analogic_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + elseif ($layoutData['label_position']=='right') { + $img = '
    ' .print_clock_analogic_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + else { + $img ='
    ' . print_clock_analogic_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + } + + } + elseif($layoutData['clock_animation'] == 'digital_1'){ + + if ($width == 0) { + if ($layoutData['label_position']=='left') { + $img = '
    ' .print_clock_digital_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + elseif ($layoutData['label_position']=='right') { + $img = '
    ' . print_clock_digital_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + else { + $img = '
    ' . print_clock_digital_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + } + else{ + if ($layoutData['label_position']=='left') { + $img = '
    ' . print_clock_digital_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + elseif ($layoutData['label_position']=='right') { + $img = '
    ' .print_clock_digital_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + else { + $img ='
    ' . print_clock_digital_1 ($layoutData['time_format'], $layoutData['timezone'],$layoutData['clock_animation'],$layoutData['width'],$layoutData['height'],$layoutData['id'],$layoutData['fill_color']).'
    '; + } + } + } + } + break; case AUTO_SLA_GRAPH: if ((get_parameter('action') == 'edit') || (get_parameter('operation') == 'edit_visualmap')) { if($width == 0 || $height == 0){ @@ -1513,6 +1664,9 @@ function visual_map_print_item($mode = "read", $layoutData, case ICON: $class .= "icon"; break; + case CLOCK: + $class .= "clock"; + break; case BOX_ITEM: $class .= "box_item"; break; @@ -1954,6 +2108,19 @@ function visual_map_print_item($mode = "read", $layoutData, echo $img; + if ($layoutData['label_position']=='down') { + echo io_safe_output($text); + } + elseif($layoutData['label_position']=='left' || $layoutData['label_position']=='right') { + echo io_safe_output($text); + } + break; + case CLOCK: + if ($layoutData['label_position']=='up') { + echo io_safe_output($text); + } + echo $img; + if ($layoutData['label_position']=='down') { echo io_safe_output($text); } @@ -3607,6 +3774,10 @@ function visual_map_create_internal_name_item($label = null, $type, $image, $age case MODULE_GRAPH: $text = __('Module graph'); break; + case 'clock': + case CLOCK: + $text = __('Clock'); + break; case 'bars_graph': case BARS_GRAPH: $text = __('Bars graph'); @@ -3755,6 +3926,9 @@ function visual_map_type_in_js($type) { case ICON: return 'icon'; break; + case CLOCK: + return 'clock'; + break; case SIMPLE_VALUE_MAX: return 'simple_value'; break; diff --git a/pandora_console/include/functions_visual_map_editor.php b/pandora_console/include/functions_visual_map_editor.php index 682b78d3e5..c456f5f904 100755 --- a/pandora_console/include/functions_visual_map_editor.php +++ b/pandora_console/include/functions_visual_map_editor.php @@ -59,6 +59,7 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) { a text to replace '(_VALUE_)' and the value of the module will be printed at the end."), true), 'label' => __('Label'), 'icon' => __('Icon'), + 'clock' => __('Clock'), 'group_item' => __('Group'), 'box_item' => __('Box'), 'line_item' => __('Line')); @@ -136,11 +137,11 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) { $form_items['fill_color_row'] = array(); - $form_items['fill_color_row']['items'] = array('datos', 'box_item'); + $form_items['fill_color_row']['items'] = array('datos', 'box_item','clock'); $form_items['fill_color_row']['html'] = '' . __('Fill color') . '' . '' . - html_print_input_text_extended ('fill_color', '#ffffff', + html_print_input_text_extended ('fill_color', '#000000', 'text-fill_color', '', 7, 7, false, '', 'class="fill_color"', true) . ''; @@ -162,7 +163,8 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) { 'datos', 'group_item', 'auto_sla_graph', - 'bars_graph'); + 'bars_graph', + 'clock'); $form_items['label_row']['html'] = '' . __('Label') . ' @@ -203,6 +205,45 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) { ' . html_print_select ($images_list, 'image', '', 'showPreview(this.value);', 'None', 'none', true) . ''; + + $form_items['clock_animation_row'] = array(); + $form_items['clock_animation_row']['items'] = array('clock'); + $form_items['clock_animation_row']['html'] = '' . + __('Clock animation') . ' + '. html_print_select ( + array ('analogic_1' => __('Simple analogic'), + 'digital_1' => __('Simple digital')), + 'clock_animation', '', '', 0, 'analogic_1', true, false, false) . ''; + + $form_items['timeformat_row'] = array(); + $form_items['timeformat_row']['items'] = array('clock'); + $form_items['timeformat_row']['html'] = '' . + __('Time format') . ' + '. html_print_select ( + array ('time' => __('Only time'), + 'timedate' => __('Time and date')), + 'time_format', '', '', 0, 'time', true, false, false) . ''; + + $zone_name = array('Africa' => __('Africa'), 'America' => __('America'), 'Antarctica' => __('Antarctica'), 'Arctic' => __('Arctic'), 'Asia' => __('Asia'), 'Atlantic' => __('Atlantic'), 'Australia' => __('Australia'), 'Europe' => __('Europe'), 'Indian' => __('Indian'), 'Pacific' => __('Pacific'), 'UTC' => __('UTC')); + $zone_selected = 'Europe'; + + $timezones = timezone_identifiers_list(); + foreach ($timezones as $timezone) { + if (strpos($timezone, $zone_selected) !== false) { + $timezone_n[$timezone] = $timezone; + } + } + + + $form_items['timezone_row'] = array(); + $form_items['timezone_row']['items'] = array('clock'); + $form_items['timezone_row']['html'] = '' . + __('Time zone') . ' + '. + html_print_select($zone_name, 'zone', $zone_selected, 'show_timezone();', '', '', true). + "  ". html_print_select($timezone_n, 'timezone','', '', '', '', true). + ''; + $form_items['enable_link_row'] = array(); @@ -455,7 +496,7 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) { $form_items['percentile_bar_row_1'] = array(); - $form_items['percentile_bar_row_1']['items'] = array('percentile_bar', 'percentile_item', 'datos', 'donut_graph', 'bars_graph'); + $form_items['percentile_bar_row_1']['items'] = array('percentile_bar', 'percentile_item', 'datos', 'donut_graph', 'bars_graph','clock'); $form_items['percentile_bar_row_1']['html'] = '' . __('Width') . ' ' . html_print_input_text('width_percentile', 0, '', 3, 5, true) . ''; @@ -614,7 +655,7 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) { $form_items_advance['position_row']['items'] = array('static_graph', 'percentile_bar', 'percentile_item', 'module_graph', 'simple_value', 'label', 'icon', 'datos', 'box_item', - 'auto_sla_graph', 'bars_graph'); + 'auto_sla_graph', 'bars_graph','clock'); $form_items_advance['position_row']['html'] = ' ' . __('Position') . ' (' . html_print_input_text('left', '0', '', 3, 5, true) . @@ -789,6 +830,25 @@ function visual_map_editor_print_item_palette($visualConsole_id, $background) { }); + + function show_timezone () { + zone = $("#zone").val(); + + $.ajax({ + type: "POST", + url: "ajax.php", + data: "page=godmode/setup/setup&select_timezone=1&zone=" + zone, + dataType: "json", + success: function(data) { + $("#timezone").empty(); + jQuery.each (data, function (id, value) { + timezone = value; + var timezone_country = timezone.replace (/^.*\//g, ""); + $("select[name='timezone']").append($("