diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index d48173512f..7d9cee8f9c 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.769-230307 +Version: 7.0NG.769-230308 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index cb6b963504..53c9f200aa 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.769-230307" +pandora_version="7.0NG.769-230308" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 012a228cd2..492ec37320 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1023,7 +1023,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.769'; -use constant AGENT_BUILD => '230307'; +use constant AGENT_BUILD => '230308'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 26931473af..77859b1dde 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_agent_linux %define version 7.0NG.769 -%define release 230307 +%define release 230308 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 329768dfa7..857f141c94 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_agent_linux %define version 7.0NG.769 -%define release 230307 +%define release 230308 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 1a32864bd8..79cc3133b3 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.769" -PI_BUILD="230307" +PI_BUILD="230308" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 48912e2ff3..a78a35121f 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{230307} +{230308} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 11a3383389..d7ef085547 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.769 Build 230307") +#define PANDORA_VERSION ("7.0NG.769 Build 230308") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 3c842ed958..76b5c3540e 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.769(Build 230307))" + VALUE "ProductVersion", "(7.0NG.769(Build 230308))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index d71a8ffb94..b3ce245f17 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.769-230307 +Version: 7.0NG.769-230308 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index ecb6a40251..0a19d7c0e3 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.769-230307" +pandora_version="7.0NG.769-230308" package_pear=0 package_pandora=1 diff --git a/pandora_console/extensions/agents_modules.php b/pandora_console/extensions/agents_modules.php index 44d4bc64b6..d3467b846c 100644 --- a/pandora_console/extensions/agents_modules.php +++ b/pandora_console/extensions/agents_modules.php @@ -377,17 +377,17 @@ function mainAgentsModules() $fullscreen['text'] = ''.html_print_image('images/full_screen.png', true, ['title' => __('Full screen mode'), 'class' => 'invert_filter']).''; + &full_agents_id='.$full_agents.'&selection_agent_module='.$selection_a_m.'">'.html_print_image('images/fullscreen@svg.svg', true, ['title' => __('Full screen mode'), 'class' => 'invert_filter']).''; } else if ($full_modules_selected[0] && $full_agents_id[0]) { $full_modules = urlencode(implode(';', $full_modules_selected)); $full_agents = urlencode(implode(';', $full_agents_id)); $fullscreen['text'] = ''.html_print_image('images/full_screen.png', true, ['title' => __('Full screen mode'), 'class' => 'invert_filter']).''; + &full_agents_id='.$full_agents.'&selection_agent_module='.$selection_a_m.'">'.html_print_image('images/fullscreen@svg.svg', true, ['title' => __('Full screen mode'), 'class' => 'invert_filter']).''; } else { $fullscreen['text'] = ''.html_print_image('images/full_screen.png', true, ['title' => __('Full screen mode'), 'class' => 'invert_filter']).''; + offset='.$offset.'&group_id='.$group_id.'&modulegroup='.$modulegroup.'&refresh='.$refr.'&show_type='.$show_type.'">'.html_print_image('images/fullscreen@svg.svg', true, ['title' => __('Full screen mode'), 'class' => 'invert_filter']).''; } } @@ -597,11 +597,11 @@ function mainAgentsModules() echo '
  • '; echo ''; echo html_print_image( - 'images/normal_screen.png', + 'images/exit_fullscreen@svg.svg', true, [ 'title' => __('Back to normal mode'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ); echo ''; diff --git a/pandora_console/extensions/dbmanager.php b/pandora_console/extensions/dbmanager.php index ffcc2fdb72..3aacc776a0 100644 --- a/pandora_console/extensions/dbmanager.php +++ b/pandora_console/extensions/dbmanager.php @@ -301,12 +301,11 @@ function dbmgr_extension_main() if (is_metaconsole() === true) { // This adds a option in the operation menu. extensions_add_meta_menu_option( - 'DB interface', + __('DB interface'), 'PM', 'gextensions', 'database.png', - 'v1r1', - 'gdbman' + 'v1r1' ); extensions_add_meta_function('dbmgr_extension_main'); diff --git a/pandora_console/extensions/users_connected.php b/pandora_console/extensions/users_connected.php index 40b17f4903..ad6282c598 100644 --- a/pandora_console/extensions/users_connected.php +++ b/pandora_console/extensions/users_connected.php @@ -1,16 +1,33 @@ '', + 'label' => __('Workspace'), + ], + [ + 'link' => '', + 'label' => __('Users connected'), + ], + ] + ); $check_profile = db_get_row('tusuario_perfil', 'id_usuario', $config['id_user'], 'id_up'); if ($check_profile === false && !users_is_admin()) { diff --git a/pandora_console/godmode/agentes/module_manager_editor.php b/pandora_console/godmode/agentes/module_manager_editor.php index 66d75c98a7..c3d7563ef5 100644 --- a/pandora_console/godmode/agentes/module_manager_editor.php +++ b/pandora_console/godmode/agentes/module_manager_editor.php @@ -802,7 +802,7 @@ if ($id_agent_module) { __('Delete'), 'deleteModule', false, - 'window.location.assign(\'index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&delete_module='.$id_agent_module.')', + 'window.location.assign("index.php?sec=gagente&tab=module&sec2=godmode/agentes/configurar_agente&id_agente='.$id_agente.'&delete_module='.$id_agent_module.'")', [ 'icon' => 'delete', 'mode' => 'secondary', diff --git a/pandora_console/godmode/agentes/module_manager_editor_network.php b/pandora_console/godmode/agentes/module_manager_editor_network.php index 6e0af65f83..be63ddfeef 100644 --- a/pandora_console/godmode/agentes/module_manager_editor_network.php +++ b/pandora_console/godmode/agentes/module_manager_editor_network.php @@ -524,7 +524,7 @@ $data[0] .= html_print_button( __('Manage credentials'), 'manage_credentials_button', false, - 'window.location.assign(\'index.php?sec=gmodules&sec2=godmode/groups/group_list&tab=credbox\')', + 'window.location.assign("index.php?sec=gmodules&sec2=godmode/groups/group_list&tab=credbox")', [ 'mode' => 'link' ], true ); diff --git a/pandora_console/godmode/alerts/alert_commands.php b/pandora_console/godmode/alerts/alert_commands.php index 610c503cdc..5369864105 100644 --- a/pandora_console/godmode/alerts/alert_commands.php +++ b/pandora_console/godmode/alerts/alert_commands.php @@ -171,7 +171,7 @@ if (is_ajax()) { $ffield = $editor_type_chkbx; $ffield .= html_print_textarea( 'field'.$i.'_value', - 1, + 5, 1, '', 'class="fields"', @@ -208,7 +208,7 @@ if (is_ajax()) { $rfield = $editor_type_chkbx; $rfield .= html_print_textarea( 'field'.$i.'_recovery_value', - 1, + 5, 1, '', 'class="fields_recovery"', @@ -329,7 +329,7 @@ if (is_ajax()) { $ffield .= html_print_textarea( 'field'.$i.'_value[]', - 1, + 5, 1, '', 'style="min-height:40px; '.$style.'" class="fields"', @@ -341,7 +341,7 @@ if (is_ajax()) { $rfield .= html_print_textarea( 'field'.$i.'_recovery_value[]', - 1, + 5, 1, '', 'style="min-height:40px; '.$style.'" class="fields_recovery', @@ -484,7 +484,7 @@ if (is_ajax()) { } else { $ffield = html_print_textarea( 'field'.$i.'_value', - 1, + 5, 1, $fv[0], 'style="'.$style.'" class="fields min-height-40px"', @@ -494,7 +494,7 @@ if (is_ajax()) { ); $rfield = html_print_textarea( 'field'.$i.'_recovery_value', - 1, + 5, 1, $fv[0], 'style="'.$style.'" class="fields_recovery min-height-40px', @@ -507,7 +507,7 @@ if (is_ajax()) { } else { $ffield = html_print_textarea( 'field'.$i.'_value', - 1, + 5, 1, '', 'style="'.$style.'" class="fields min-height-40px"', @@ -517,7 +517,7 @@ if (is_ajax()) { ); $rfield = html_print_textarea( 'field'.$i.'_recovery_value', - 1, + 5, 1, '', 'style="'.$style.'" class="fields_recovery min-height-40px"', @@ -533,7 +533,7 @@ if (is_ajax()) { $fields_rows[$i] = ''; } else { $fields_rows[$i] = ''; - $fields_rows[$i] .= ''.$fdesc.''; + $fields_rows[$i] .= ''.$fdesc.''; $fields_rows[$i] .= ''.$ffield.''; if ($get_recovery_fields) { $fields_rows[$i] .= ''.$rfield.''; @@ -575,12 +575,19 @@ if ($update_command) { if (defined('METACONSOLE')) { alerts_meta_print_header(); } else { - ui_print_page_header( - __('Alerts').' » '.__('Alert commands'), + ui_print_standard_header( + __('Alerts'), 'images/gm_alerts.png', false, '', - true + true, + [], + [ + [ + 'link' => '', + 'label' => __('Alert commands'), + ], + ] ); } @@ -811,10 +818,9 @@ foreach ($commands as $command) { array_push($table->data, $data); } -ui_pagination($total_commands, $url); if (isset($data) === true && count($table->data) > 0) { html_print_table($table); - ui_pagination($total_commands, $url, 0, 0, false, 'offset', true, 'pagination-bottom'); + $pagination = ui_pagination($total_commands, $url, 0, 0, true, 'offset', false, ''); } else { ui_print_info_message( [ @@ -826,12 +832,17 @@ if (isset($data) === true && count($table->data) > 0) { // Commands can only be created by the super administrator. if (users_is_admin() === true) { - echo '
    '; echo '
    '; - html_print_submit_button(__('Create'), 'create', false, 'class="sub next"'); + $buttonSubmit = html_print_submit_button( + __('Create'), + 'create', + false, + ['icon' => 'wand'], + true + ); html_print_input_hidden('create_alert', 1); + html_print_action_buttons($buttonSubmit, ['right_content' => $pagination]); echo '
    '; - echo '
    '; } ?> diff --git a/pandora_console/godmode/alerts/configure_alert_action.php b/pandora_console/godmode/alerts/configure_alert_action.php index eb1d6d32ee..de5d93a082 100644 --- a/pandora_console/godmode/alerts/configure_alert_action.php +++ b/pandora_console/godmode/alerts/configure_alert_action.php @@ -68,12 +68,19 @@ if ($al_action !== false) { if (defined('METACONSOLE')) { alerts_meta_print_header(); } else { - ui_print_page_header( - __('Alerts').' » '.__('Configure alert action'), + ui_print_standard_header( + __('Alerts'), 'images/gm_alerts.png', false, - 'alert_config', - true + '', + true, + [], + [ + [ + 'link' => '', + 'label' => __('Configure alert action'), + ], + ] ); } } else { @@ -81,12 +88,19 @@ if ($al_action !== false) { if (defined('METACONSOLE')) { alerts_meta_print_header(); } else { - ui_print_page_header( - __('Alerts').' » '.__('Configure alert action'), + ui_print_standard_header( + __('Alerts'), 'images/gm_alerts.png', false, - 'alert_config', - true + '', + true, + [], + [ + [ + 'link' => '', + 'label' => __('Configure alert action'), + ], + ] ); } @@ -290,73 +304,99 @@ $table->data[1][1] = html_print_label_input_block( ) ); -$table->data[2][0] = html_print_label_input_block( +$table_macros = new stdClass(); +$table_macros->id = 'table_macros'; +$table_macros->width = '100%'; +$table_macros->class = 'databox filters filter-table-adv'; +$table_macros->style = []; +$table_macros->size = []; +$table_macros->size[0] = '20%'; +$table_macros->size[1] = '40%'; +$table_macros->size[2] = '40%'; +$table_macros->data = []; + +$table_macros->data[0][0] = ''; +$table_macros->data[0][1] = html_print_label_input_block( + __('Triggering'), + '' +); + +$table_macros->data[0][2] = html_print_label_input_block( __('Recovery'), '' ); -$table->data[2][1] = html_print_label_input_block( - __('Recovery'), +$table_macros->data[1][0] = html_print_label_input_block( + __('Command preview'), '' ); -$table->data[5][0] = __('Command preview'); -$table->data[5][1] = html_print_textarea( - 'command_preview', - 5, - 30, +$table_macros->data[1][1] = html_print_label_input_block( '', - 'disabled="disabled"', - true + html_print_textarea( + 'command_preview', + 5, + 30, + '', + 'disabled="disabled"', + true + ) ); -$table->data[5][2] = html_print_textarea( - 'command_recovery_preview', - 5, - 30, + +$table_macros->data[1][2] = html_print_label_input_block( '', - 'disabled="disabled"', - true + html_print_textarea( + 'command_recovery_preview', + 5, + 30, + '', + 'disabled="disabled"', + true + ) ); // Selector will work only with Integria activated. $integriaIdName = 'integria_wu'; -$table->data[$integriaIdName][0] = __('Create workunit on recovery').ui_print_help_tip( - __('If closed status is set on recovery, a workunit will be added to the ticket in Integria IMS rather that closing the ticket.'), - true -); -$table->data[$integriaIdName][1] = html_print_checkbox_switch_extended( - 'create_wu_integria', - 1, - $create_wu_integria, - false, - '', - $disabled_attr, - true +$table_macros->colspan[$integriaIdName][0] = 3; +$table_macros->data[$integriaIdName][0] = html_print_label_input_block( + __('Create workunit on recovery').ui_print_help_tip( + __('If closed status is set on recovery, a workunit will be added to the ticket in Integria IMS rather that closing the ticket.'), + true + ), + html_print_checkbox_switch_extended( + 'create_wu_integria', + 1, + $create_wu_integria, + false, + '', + $disabled_attr, + true + ) ); for ($i = 1; $i <= $config['max_macro_fields']; $i++) { - $table->data['field'.$i][0] = html_print_image( + $table_macros->data['field'.$i][0] = html_print_image( 'images/spinner.gif', true ); - $table->data['field'.$i][1] = html_print_image( + $table_macros->data['field'.$i][1] = html_print_image( 'images/spinner.gif', true ); - $table->data['field'.$i][2] = html_print_image( + $table_macros->data['field'.$i][2] = html_print_image( 'images/spinner.gif', true ); // Store the value in a hidden to keep it on first execution - $table->data['field'.$i][1] .= html_print_input_hidden( + $table_macros->data['field'.$i][1] .= html_print_input_hidden( 'field'.$i.'_value', (!empty($action['field'.$i]) || $action['field'.$i] == 0) ? $action['field'.$i] : '', true, '', $disabled_attr ); - $table->data['field'.$i][2] .= html_print_input_hidden( + $table_macros->data['field'.$i][2] .= html_print_input_hidden( 'field'.$i.'_recovery_value', (!empty($action['field'.$i.'_recovery']) || $action['field'.$i] == 0) ? $action['field'.$i.'_recovery'] : '', true, @@ -369,10 +409,12 @@ $offset = (int) get_parameter('offset', 0); echo '
    '; $table_html = html_print_table($table, true); +$table_html_macros = html_print_table($table_macros, true); $backButton = ''; $submitButton = ''; echo $table_html; +echo $table_html_macros; if ($is_management_allowed === true) { if ($id) { html_print_input_hidden('id', $id); diff --git a/pandora_console/godmode/alerts/configure_alert_command.php b/pandora_console/godmode/alerts/configure_alert_command.php index 4316f4a881..1631f2f24e 100644 --- a/pandora_console/godmode/alerts/configure_alert_command.php +++ b/pandora_console/godmode/alerts/configure_alert_command.php @@ -54,12 +54,19 @@ $alert = []; if (is_metaconsole() === true) { alerts_meta_print_header(); } else { - ui_print_page_header( - __('Alerts').' » '.__('Configure alert command'), + ui_print_standard_header( + __('Alerts'), 'images/gm_alerts.png', false, '', - true + true, + [], + [ + [ + 'link' => '', + 'label' => __('Configure alert command'), + ], + ] ); } @@ -199,112 +206,23 @@ if ($is_management_allowed === false) { $table = new stdClass(); $table->width = '100%'; -$table->class = 'databox filters'; - -if (is_metaconsole() === true) { - $table->head[0] = ($id) ? __('Update Command') : __('Create Command'); - $table->head_colspan[0] = 4; - $table->headstyle[0] = 'text-align: center'; -} +$table->class = 'databox filters filter-table-adv'; $table->style = []; -if (is_metaconsole() === false) { - $table->style[0] = 'font-weight: bold'; - $table->style[2] = 'font-weight: bold'; - $table->style[4] = 'font-weight: bold'; -} $table->size = []; -$table->size[0] = '20%'; +$table->size[0] = '45%'; +$table->size[1] = '45%'; +$table->size[2] = '10%'; $table->data = []; -$table->colspan['name'][1] = 3; -$table->data['name'][0] = __('Name'); -$table->data['name'][2] = html_print_input_text( - 'name', - $name, - '', - 35, - 255, - true, - false, - false, - '', - '', - '', - '', - false, - '', - '', - '', - !$is_management_allowed -); - -$table->colspan['command'][1] = 3; -$table->data['command'][0] = __('Command'); -$table->data['command'][1] = html_print_textarea( - 'command', - 8, - 30, - $command, - '', - true, - '', - !$is_management_allowed -); - -$return_all_group = false; - -if (users_can_manage_group_all('LM') === true) { - $return_all_group = true; -} - -$table->colspan['group'][1] = 3; -$table->data['group'][0] = __('Group'); -$table->data['group'][1] = '
    '.html_print_select_groups( - false, - 'LM', - $return_all_group, - 'id_group', - $id_group, - false, - '', - 0, - true, - false, - true, - '', - !$is_management_allowed -).'
    '; - -$table->colspan['description'][1] = 3; -$table->data['description'][0] = __('Description'); -$table->data['description'][1] = html_print_textarea( - 'description', - 10, - 30, - $description, - '', - true, - '', - !$is_management_allowed -); - - -for ($i = 1; $i <= $config['max_macro_fields']; $i++) { - $table->data['field'.$i][0] = sprintf(__('Field %s description'), $i); - - if (empty($fields_descriptions) === false) { - $field_description = $fields_descriptions[($i - 1)]; - } else { - $field_description = ''; - } - - $table->data['field'.$i][1] = html_print_input_text( - 'field'.$i.'_description', - $field_description, +$table->data[0][0] = html_print_label_input_block( + __('Name'), + html_print_input_text( + 'name', + $name, '', - 30, + 35, 255, true, false, @@ -318,12 +236,91 @@ for ($i = 1; $i <= $config['max_macro_fields']; $i++) { '', '', !$is_management_allowed - ); + ) +); - $table->data['field'.$i][2] = sprintf(__('Field %s values'), $i); - $table->data['field'.$i][2] .= ui_print_help_tip( - __('value1,tag1;value2,tag2;value3,tag3'), - true +if (users_can_manage_group_all('LM') === true) { + $return_all_group = true; +} + +$table->data[0][1] = html_print_label_input_block( + __('Group'), + html_print_select_groups( + false, + 'LM', + $return_all_group, + 'id_group', + $id_group, + false, + '', + 0, + true, + false, + true, + '', + !$is_management_allowed + ) +); + +$table->data[1][0] = html_print_label_input_block( + __('Command'), + html_print_textarea( + 'command', + 8, + 30, + $command, + '', + true, + '', + !$is_management_allowed + ) +); + +$return_all_group = false; + + +$table->data[1][1] = html_print_label_input_block( + __('Description'), + html_print_textarea( + 'description', + 8, + 30, + $description, + '', + true, + '', + !$is_management_allowed + ) +); + +for ($i = 1; $i <= $config['max_macro_fields']; $i++) { + if (empty($fields_descriptions) === false) { + $field_description = $fields_descriptions[($i - 1)]; + } else { + $field_description = ''; + } + + $table->data['field'.$i][0] = html_print_label_input_block( + sprintf(__('Field %s description'), $i), + html_print_input_text( + 'field'.$i.'_description', + $field_description, + '', + 30, + 255, + true, + false, + false, + '', + '', + '', + '', + false, + '', + '', + '', + !$is_management_allowed + ) ); if (empty($fields_values) === false) { @@ -338,54 +335,72 @@ for ($i = 1; $i <= $config['max_macro_fields']; $i++) { $selected = false; } - $table->data['field'.$i][3] = html_print_input_text( - 'field'.$i.'_values', - $field_values, - '', - 55, - 1000, - true, - false, - false, - '', - 'field_value', - '', - '', - false, - '', - '', - '', - !$is_management_allowed + $table->data['field'.$i][1] = html_print_label_input_block( + sprintf(__('Field %s values'), $i).ui_print_help_tip( + __('value1,tag1;value2,tag2;value3,tag3'), + true + ), + html_print_input_text( + 'field'.$i.'_values', + $field_values, + '', + 55, + 1000, + true, + false, + false, + '', + 'field_value', + '', + '', + false, + '', + '', + '', + !$is_management_allowed + ) ); - $table->data['field'.$i][4] = __('Hide'); - - $table->data['field'.$i][5] = html_print_checkbox_extended( - 'field'.$i.'_hide', - 1, - $selected, - !$is_management_allowed, - 'cursor: \'pointer\'', - 'class="hide_inputs"', - true + $table->data['field'.$i][2] = html_print_label_input_block( + __('Hide'), + html_print_checkbox_extended( + 'field'.$i.'_hide', + 1, + $selected, + !$is_management_allowed, + 'cursor: \'pointer\'', + 'class="hide_inputs"', + true + ) ); } -echo ''; +echo ''; html_print_table($table); if ($is_management_allowed === true) { - echo '
    '; if ($id) { html_print_input_hidden('id', $id); html_print_input_hidden('update_command', 1); - html_print_submit_button(__('Update'), 'create', false, 'class="sub upd"'); + $buttonSubmit = html_print_submit_button( + __('Update'), + 'create', + false, + ['icon' => 'wand'], + true + ); } else { html_print_input_hidden('create_command', 1); - html_print_submit_button(__('Create'), 'create', false, 'class="sub wand"'); + $buttonSubmit = html_print_submit_button( + __('Create'), + 'create', + false, + ['icon' => 'wand'], + true + ); } - echo '
    '; + html_print_action_buttons($buttonSubmit); } echo '
    '; diff --git a/pandora_console/godmode/groups/group_list.php b/pandora_console/godmode/groups/group_list.php index 268d91dd3a..95785a0edd 100644 --- a/pandora_console/godmode/groups/group_list.php +++ b/pandora_console/godmode/groups/group_list.php @@ -738,14 +738,7 @@ if ($tab == 'tree') { * Group tree view. */ - echo html_print_image( - 'images/spinner.gif', - true, - [ - 'class' => 'loading_tree', - 'style' => 'display: none;', - ] - ); + ui_print_spinner(__('Loading')); echo "
    "; } else { /* @@ -904,8 +897,9 @@ if ($tab == 'tree') { $table->data = []; foreach ($groups as $key => $group) { - $url = 'index.php?sec=gagente&sec2=godmode/groups/configure_group&id_group='.$group['id_grupo']; - if (is_metaconsole() === true) { + $url_edit = 'index.php?sec=gagente&sec2=godmode/groups/configure_group&id_group='.$group['id_grupo']; + $url_tactical = 'index.php?sec=gagente&sec2=godmode/groups/tactical&id_group='.$group['id_grupo']; + if (is_metaconsole()) { $url_delete = 'index.php?sec=gagente&sec2=godmode/groups/group_list&delete_group=1&id_group='.$group['id_grupo'].'&tab=groups'; } else { $url_delete = 'index.php?sec=gagente&sec2=godmode/groups/group_list&delete_group=1&id_group='.$group['id_grupo']; @@ -913,7 +907,7 @@ if ($tab == 'tree') { $table->data[$key][0] = $group['id_grupo']; if ($is_management_allowed === true) { - $table->data[$key][1] = ''.$group['nombre'].''; + $table->data[$key][1] = ''.$group['nombre'].''; } else { $table->data[$key][1] = $group['nombre']; } @@ -944,7 +938,7 @@ if ($tab == 'tree') { $table->data[$key][5] = $group['description']; if ($is_management_allowed === true) { $table->cellclass[$key][6] = 'table_action_buttons'; - $table->data[$key][6] = ''.html_print_image( + $table->data[$key][6] = ''.html_print_image( 'images/edit.svg', true, [ @@ -968,9 +962,9 @@ if ($tab == 'tree') { 'images/delete.svg', true, [ - 'alt' => __('Delete'), - 'title' => __('Delete'), - 'border' => '0', + 'alt' => __('Delete'), + 'title' => __('Delete'), + 'class' => 'main_menu_icon invert_filter', ] ).''; } @@ -1041,7 +1035,7 @@ $tab = 'group_edition'; if (typeof treeController.recipient != 'undefined' && treeController.recipient.length > 0) treeController.recipient.empty(); - $(".loading_tree").show(); + showSpinner(); var parameters = {}; parameters['page'] = "include/ajax/tree.ajax"; @@ -1065,7 +1059,7 @@ $tab = 'group_edition'; data: parameters, success: function(data) { if (data.success) { - $(".loading_tree").hide(); + hideSpinner(); treeController.init({ recipient: $("div#tree-controller-recipient"), diff --git a/pandora_console/godmode/groups/tactical.php b/pandora_console/godmode/groups/tactical.php new file mode 100644 index 0000000000..037af05723 --- /dev/null +++ b/pandora_console/godmode/groups/tactical.php @@ -0,0 +1,248 @@ + '', + 'label' => __('Monitoring'), + ], + [ + 'link' => '', + 'label' => __('Tactic group'), + ], + ] + ); +} + +ui_require_css_file('tactical_groups'); +ui_require_javascript_file('tactical_groups'); +$groups = groups_get_children($id_group); +$id_groups = []; +if (count($groups) > 0) { + foreach ($groups as $key => $value) { + $id_groups[] = $value['id_grupo']; + } +} else { + $id_groups[] = $id_group; +} + + +echo '
    '; +echo ''; +echo ''; +echo ''; +echo ''; +echo ''; +echo ''; +echo '
    '; +$table_col1 = new stdClass(); +$table_col1->class = 'no-class'; +$table_col1->data = []; +$table_col1->rowclass[] = ''; +$table_col1->headstyle[0] = 'text-align:center;'; +$table_col1->width = '100%'; +$table_col1->data[0][0] = groups_get_heat_map_agents($id_groups, 450, 100); +$table_col1->data[1][0] = tactical_groups_get_agents_and_monitoring($id_groups); + +$distribution_by_so = '
    '; +$distribution_by_so .= '
    '; +$distribution_by_so .= ''.__('Distribution by os').''; +$distribution_by_so .= html_print_image('images/spinner.gif', true, ['id' => 'spinner_distribution_by_so_graph']); +$distribution_by_so .= '
    '; +$distribution_by_so .= '
    '; + + +$table_col1->data[2][0] = $distribution_by_so; + + +ui_toggle( + html_print_table($table_col1, true), + __('Monitoring'), + '', + '', + false, + false +); + +echo '
    '; +$table_col2 = new stdClass(); +$table_col2->class = 'no-class'; +$table_col2->data = []; +$table_col2->rowclass[] = ''; +$table_col2->headstyle[0] = 'text-align:center;'; +$table_col2->width = '100%'; +$table_col2->data[0][0] = tactical_groups_get_stats_alerts($id_groups); +$table_col2->data[1][0] = groups_get_stats_modules_status($id_groups); + +$events_by_agents_group = '
    '; +$events_by_agents_group .= '
    '; +$events_by_agents_group .= ''.__('Events by agent').''; +$events_by_agents_group .= html_print_image('images/spinner.gif', true, ['id' => 'spinner_events_by_agents_group_graph']); +$events_by_agents_group .= '
    '; +$events_by_agents_group .= '
    '; + + +$table_col2->data[2][0] = $events_by_agents_group; +ui_toggle( + html_print_table($table_col2, true), + __('Alerts and events'), + '', + '', + false, + false +); +echo '
    '; +$table_col3 = new stdClass(); +$table_col3->class = 'no-class'; +$table_col3->data = []; +$table_col3->rowclass[] = ''; +$table_col3->headstyle[0] = 'text-align:center;'; +$table_col3->width = '100%'; + +try { + $columns = [ + 'alias', + 'status', + 'alerts', + 'ultimo_contacto_remoto', + ]; + + $columnNames = [ + __('Alias'), + __('Status'), + __('Alerts'), + __('Ultimo contacto remoto'), + ]; + + // Load datatables user interface. + $table_col3->data[3][0] = ui_print_datatable( + [ + 'id' => 'list_agents_tactical', + 'class' => 'info_table', + 'style' => 'width: 100%', + 'columns' => $columns, + 'column_names' => $columnNames, + 'return' => true, + 'ajax_url' => 'include/ajax/group', + 'ajax_data' => [ + 'method' => 'getAgentsByGroup', + 'id_group' => $id_group, + ], + 'no_sortable_columns' => [-1], + 'order' => [ + 'field' => 'alias', + 'direction' => 'asc', + ], + ] + ); +} catch (Exception $e) { + echo $e->getMessage(); +} + +ui_toggle( + html_print_table($table_col3, true), + __('Agents'), + '', + '', + false, + false +); +echo '
    '; +echo '' + +?> + \ No newline at end of file diff --git a/pandora_console/godmode/modules/manage_inventory_modules.php b/pandora_console/godmode/modules/manage_inventory_modules.php index 5422ae451b..a8faa13a66 100644 --- a/pandora_console/godmode/modules/manage_inventory_modules.php +++ b/pandora_console/godmode/modules/manage_inventory_modules.php @@ -332,14 +332,16 @@ if ($result === false) { if ($management_allowed === true) { // Update module. - $data[4] = ''; - $data[4] .= html_print_image('images/config.png', true, ['border' => '0', 'title' => __('Update'), 'class' => 'invert_filter']).''; + $data[4] = ''; } array_push($table->data, $data); @@ -349,22 +351,50 @@ if ($result === false) { html_print_input_hidden('multiple_delete', 1); html_print_table($table); echo ''; - $tablePagination = ui_pagination($total_modules, 'index.php?sec='.$sec.'&sec2=godmode/modules/manage_inventory_modules', $offset, 0, true, 'offset', false); - $actionButtons = []; + echo '
    '; + echo html_print_input_hidden('create_module_inventory', 1); + echo ''; + + $tablePagination = ui_pagination( + $total_modules, + 'index.php?sec='.$sec.'&sec2=godmode/modules/manage_inventory_modules', + $offset, + 0, + true, + 'offset', + false + ); + + $actionButtons = ''; if ($management_allowed === true) { - $actionButtons[] = html_print_submit_button(__('Delete'), 'delete_btn', false, ['icon' => 'delete', 'mode' => 'secondary', 'form' => 'form_delete'], true); - $actionButtons[] = html_print_submit_button(__('Create'), 'crt', false, ['icon' => 'wand', 'form' => 'form_create'], true); + $actionButtons .= html_print_submit_button( + __('Create'), + 'crt', + false, + [ + 'icon' => 'wand', + 'form' => 'form_create', + ], + true + ); - $actionButtons[] = ''; - $actionButtons[] = html_print_input_hidden('create_module_inventory', 1, true); - $actionButtons[] = ''; + $actionButtons .= html_print_submit_button( + __('Delete'), + 'delete_btn', + false, + [ + 'icon' => 'delete', + 'mode' => 'secondary', + 'form' => 'form_delete', + ], + true + ); } - html_print_action_buttons( - implode('', $actionButtons), + $actionButtons, [ 'type' => 'form_action', 'right_content' => $tablePagination, diff --git a/pandora_console/godmode/modules/manage_inventory_modules_form.php b/pandora_console/godmode/modules/manage_inventory_modules_form.php index 65597d7af1..32424b7f39 100644 --- a/pandora_console/godmode/modules/manage_inventory_modules_form.php +++ b/pandora_console/godmode/modules/manage_inventory_modules_form.php @@ -26,22 +26,32 @@ if (! check_acl($config['id_user'], 0, 'PM') && ! check_acl($config['id_user'], // Header -if (defined('METACONSOLE')) { +if (is_metaconsole() === true) { $sec = 'advanced'; enterprise_include_once('meta/include/functions_components_meta.php'); components_meta_print_header(); } else { $sec = 'gmodules'; - ui_print_page_header( - __('Module management').' ยป '.__('Inventory modules'), + ui_print_standard_header( + __('Module management'), 'images/op_inventory.png', false, '', - true + true, + [], + [ + [ + 'link' => '', + 'label' => __('Configuration'), + ], + [ + 'link' => '', + 'label' => __('Inventory modules'), + ], + ] ); } -// Header $is_windows = strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'; if ($is_windows) { ui_print_error_message(__('Not supported in Windows systems')); @@ -95,82 +105,166 @@ if ($id_os == null) { $table = new stdClass(); $table->width = '100%'; -$table->class = 'databox filters'; +$table->class = 'databox filter-table-adv'; $table->style = []; -$table->style[0] = 'font-weight: bold'; +$table->style[0] = 'width: 50%'; +$table->style[1] = 'width: 50%'; $table->data = []; -$table->data[0][0] = ''.__('Name').''; -$table->data[0][1] = html_print_input_text('name', $name, '', 45, 100, true, $disabled); -$table->data[1][0] = ''.__('Description').''; -$table->data[1][1] = html_print_input_text('description', $description, '', 60, 500, true); -$table->data[2][0] = ''.__('OS').''; -$table->data[2][1] = html_print_select_from_sql( - 'SELECT id_os, name FROM tconfig_os ORDER BY name', - 'id_os', - $id_os, - '', - '', - '', - $return = true + +$table->data[0][] = html_print_label_input_block( + __('Name'), + html_print_input_text( + 'name', + $name, + '', + 45, + 100, + true, + $disabled + ) ); -$table->data[3][0] = ''.__('Interpreter').''; -$table->data[3][1] = html_print_input_text('interpreter', $interpreter, '', 25, 100, true); -$table->data[3][1] .= ui_print_help_tip(__('Left blank for the LOCAL inventory modules'), true); +$table->data[0][] = html_print_label_input_block( + __('Description'), + html_print_input_text( + 'description', + $description, + '', + 60, + 500, + true + ) +); -$table->data['block_mode'][0] = ''.__('Block Mode').''; -$table->data['block_mode'][1] = html_print_checkbox('block_mode', 1, $block_mode, true); +$table->data[1][] = html_print_label_input_block( + __('OS'), + html_print_select_from_sql( + 'SELECT id_os, name FROM tconfig_os ORDER BY name', + 'id_os', + $id_os, + '', + '', + '', + $return = true + ) +); -$table->data[4][0] = ''.__('Format').''; -$table->data[4][0] .= ui_print_help_tip(__('separate fields with ').SEPARATOR_COLUMN, true); -$table->data[4][1] = html_print_input_text('format', $data_format, '', 50, 100, true); +$table->data[1][] = html_print_label_input_block( + __('Interpreter'), + html_print_input_text( + 'interpreter', + $interpreter, + '', + 25, + 100, + true + ).ui_print_input_placeholder( + __('Left blank for the LOCAL inventory modules'), + true + ) +); -$table->data[5][0] = ''.__('Script mode').''; -$table->data[5][0] .= ui_print_help_tip(__(''), true); -$table->data[5][1] = __('Use script'); -$table->data[5][1] .= html_print_radio_button( - 'script_mode', - 1, - '', - $script_mode, - true -).'  '; -$table->data[5][1] .= '    '.__('Use inline code'); -$table->data[5][1] .= html_print_radio_button( - 'script_mode', - 2, - '', - $script_mode, - true -).'  '; +$table->data[2][] = html_print_label_input_block( + __('Format'), + html_print_input_text( + 'format', + $data_format, + '', + 50, + 100, + true + ).ui_print_input_placeholder( + __('separate fields with ').SEPARATOR_COLUMN, + true + ) +); -$table->data[6][0] = ''.__('Script path').''; -$table->data[6][1] = html_print_input_text('script_path', $script_path, '', 50, 1000, true); +$table->data[2][] = html_print_label_input_block( + __('Block Mode'), + html_print_checkbox_switch( + 'block_mode', + 1, + $block_mode, + true + ) +); -$table->data[7][0] = ''.__('Code').''; -$table->data[7][0] .= ui_print_help_tip(__("Here is placed the script for the REMOTE inventory modules Local inventory modules don't use this field").SEPARATOR_COLUMN, true); +$radioButtons = []; +$radioButtons[] = html_print_radio_button('script_mode', 1, __('Script mode'), $script_mode, true); +$radioButtons[] = html_print_radio_button('script_mode', 2, __('Use inline code'), $script_mode, true); -$table->data[7][1] = html_print_textarea('code', 25, 80, base64_decode($code), '', true); +$table->data[3][] = html_print_label_input_block( + __('Script mode'), + html_print_div( + [ + 'class' => 'switch_radio_button', + 'content' => implode('', $radioButtons), + ], + true + ) +); -echo 'colspan[4][0] = 2; + +$table->data[4][0] = html_print_label_input_block( + __('Script path'), + html_print_input_text( + 'script_path', + $script_path, + '', + 50, + 1000, + true + ), + ['div_class' => 'script_path_inventory_modules'] +); + +$table->data[4][0] .= html_print_label_input_block( + __('Code'), + html_print_textarea( + 'code', + 25, + 80, + base64_decode($code), + '', + true + ).ui_print_input_placeholder( + __("Here is placed the script for the REMOTE inventory modules Local inventory modules don't use this field").SEPARATOR_COLUMN, + true + ), + ['div_class' => 'code_inventory_modules'] +); + +echo ''; html_print_table($table); if ($id_module_inventory) { html_print_input_hidden('update_module_inventory', 1); html_print_input_hidden('id_module_inventory', $id_module_inventory); + $buttonCaption = __('Update'); + $buttonIcon = 'update'; } else { html_print_input_hidden('create_module_inventory', 1); + $buttonCaption = __('Create'); + $buttonIcon = 'wand'; } -echo '
    '; -if ($id_module_inventory) { - html_print_submit_button(__('Update'), 'submit', false, 'class="sub next"'); -} else { - html_print_submit_button(__('Create'), 'submit', false, 'class="sub upd"'); -} +$actionButtons = ''; +$actionButtons = html_print_submit_button( + $buttonCaption, + 'submit', + false, + ['icon' => $buttonIcon], + true +); +$actionButtons .= html_print_go_back_button( + 'index.php?sec=gmodules&sec2=godmode/modules/manage_inventory_modules', + ['button_class' => ''], + true +); -echo '
    '; +html_print_action_buttons($actionButtons); echo '
    '; ?> @@ -180,21 +274,21 @@ echo ''; var mode = ; if (mode == 1) { - $('#table1-6').show(); - $('#table1-7').hide(); + $('.script_path_inventory_modules').show(); + $('.code_inventory_modules').hide(); } else { - $('#table1-7').show(); - $('#table1-6').hide(); + $('.code_inventory_modules').show(); + $('.script_path_inventory_modules').hide(); } $('input[type=radio][name=script_mode]').change(function() { if (this.value == 1) { - $('#table1-6').show(); - $('#table1-7').hide(); + $('.script_path_inventory_modules').show(); + $('.code_inventory_modules').hide(); } else if (this.value == 2) { - $('#table1-7').show(); - $('#table1-6').hide(); + $('.code_inventory_modules').show(); + $('.script_path_inventory_modules').hide(); } }); }); diff --git a/pandora_console/godmode/modules/manage_network_components.php b/pandora_console/godmode/modules/manage_network_components.php index 44d35d3f06..7ef20ca385 100644 --- a/pandora_console/godmode/modules/manage_network_components.php +++ b/pandora_console/godmode/modules/manage_network_components.php @@ -615,18 +615,6 @@ $url = ui_get_url_refresh( true, false ); -$name_url = 'index.php?sec=templates&sec2=godmode/modules/manage_network_components'; -$table = new stdClass(); -$table->width = '100%'; -$table->class = 'databox filters'; - -$table->style = []; -$table->style[0] = 'font-weight: bold'; -$table->style[2] = 'font-weight: bold'; - -$table->data = []; - -$table->data[0][0] = __('Group'); $component_groups = network_components_get_groups(); @@ -656,54 +644,81 @@ foreach ($component_groups as $component_group_key => $component_group_val) { } } -$table->data[0][1] = html_print_select( - $component_groups, - 'search_id_group', - $search_id_group, +$name_url = 'index.php?sec=templates&sec2=godmode/modules/manage_network_components'; +$table = new stdClass(); +$table->width = '100%'; +$table->class = 'filter-table-adv'; + +$table->style = []; +$table->style[0] = 'font-weight: bold'; +$table->style[2] = 'font-weight: bold'; + +$table->data = []; + +$table->data[0][] = html_print_label_input_block( + __('Group'), + html_print_select( + $component_groups, + 'search_id_group', + $search_id_group, + '', + __('All'), + 0, + true, + false, + false, + '', + false, + 'width: 100%' + ) +); + +$table->data[0][] = html_print_label_input_block( + __('Free Search'), + html_print_input_text( + 'search_string', + $search_string, + '', + 25, + 255, + true + ).ui_print_input_placeholder( + __('Search by name, description, tcp send or tcp rcv, list matches.'), + true + ) +); + +$toggleFilters = '
    '; +$toggleFilters .= html_print_table($table, true); +$toggleFilters .= html_print_div( + [ + 'class' => 'action-buttons-right-forced', + 'content' => html_print_submit_button( + __('Filter'), + 'search', + false, + [ + 'icon' => 'search', + 'mode' => 'mini', + ], + true + ), + ], + true +); +$toggleFilters .= '
    '; + +ui_toggle( + $toggleFilters, + ''.__('Filters').'', + 'filter_form', '', - __('All'), - 0, true, false, - false -); -$table->data[0][2] = __('Free Search').ui_print_help_tip( - __('Search by name, description, tcp send or tcp rcv, list matches.'), - true -); -$table->data[0][3] = html_print_input_text( - 'search_string', - $search_string, '', - 25, - 255, - true + 'white-box-content', + 'box-flat white_table_graph fixed_filter_bar' ); -if (is_metaconsole() === true) { - $table->data[0][4] = '
    '; -} else { - $table->data[0][4] = '
    '; -} - -$table->data[0][4] .= html_print_submit_button( - __('Search'), - 'search', - false, - 'class="sub search"', - true -); -$table->data[0][4] .= '
    '; - -if (is_metaconsole() === true) { - $filter = '
    '; - $filter .= html_print_table($table, true); - $filter .= '
    '; - ui_toggle($filter, __('Show Options')); -} else { - echo '
    '; - html_print_table($table); - echo '
    '; -} $filter = []; if ($search_id_group) { @@ -721,7 +736,6 @@ $total_components = network_components_get_network_components( ); $total_components = $total_components[0]['total']; $offset_delete = ($offset >= ($total_components - 1)) ? ($offset - $config['block_size']) : $offset; -ui_pagination($total_components, $name_url); $filter['offset'] = (int) get_parameter('offset'); $filter['limit'] = (int) $config['block_size']; $components = network_components_get_network_components( @@ -935,30 +949,20 @@ html_print_action_buttons( ?> + '; + $html .= ''; + + return $html; +} + + +/** + * Return html count from agents and monitoring by group. + * + * @param [type] $id_groups + * + * @return string Html + */ +function tactical_groups_get_agents_and_monitoring($id_groups) +{ + global $config; + + $data = [ + 'total_agents' => groups_agents_total_counters($id_groups, false)['total'], + 'monitor_total' => groups_get_total_monitors($id_groups, [], [], false, false, false, false), + ]; + + // Link URLS + $urls = []; + $urls['total_agents'] = $config['homeurl'].'index.php?sec=estado&sec2=operation/agentes/estado_agente&refr=60&group_id='.$id_groups[0].'&recursion=1'; + $urls['monitor_total'] = $config['homeurl'].'index.php?sec=view&sec2=operation/agentes/status_monitor&refr=60&status=-1&ag_group='.$id_groups[0].'&recursion=1'; + + $table_am = html_get_predefined_table(); + $tdata = []; + $tdata[0] = html_print_image('images/agent.png', true, ['title' => __('Total agents'), 'class' => 'invert_filter'], false, false, false, true); + $tdata[1] = $data['total_agents'] <= 0 ? '-' : $data['total_agents']; + $tdata[1] = ''.$tdata[1].''; + + if ($data['total_agents'] > 500 && !enterprise_installed()) { + $tdata[2] = "
    "; + } + + $tdata[3] = html_print_image('images/module.png', true, ['title' => __('Monitor checks'), 'class' => 'invert_filter'], false, false, false, true); + $tdata[4] = $data['monitor_total'] <= 0 ? '-' : $data['monitor_total']; + $tdata[4] = ''.$tdata[4].''; + + /* + Hello there! :) + We added some of what seems to be "buggy" messages to the openSource version recently. This is not to force open-source users to move to the enterprise version, this is just to inform people using Pandora FMS open source that it requires skilled people to maintain and keep it running smoothly without professional support. This does not imply open-source version is limited in any way. If you check the recently added code, it contains only warnings and messages, no limitations except one: we removed the option to add custom logo in header. In the Update Manager section, it warns about the 'dangerโ€™ of applying automated updates without a proper backup, remembering in the process that the Enterprise version comes with a human-tested package. Maintaining an OpenSource version with more than 500 agents is not so easy, that's why someone using a Pandora with 8000 agents should consider asking for support. It's not a joke, we know of many setups with a huge number of agents, and we hate to hear that โ€œits becoming unstable and slowโ€ :( + You can of course remove the warnings, that's why we include the source and do not use any kind of trick. And that's why we added here this comment, to let you know this does not reflect any change in our opensource mentality of does the last 14 years. + */ + if ($data['total_agents']) { + if (($data['monitor_total'] / $data['total_agents'] > 100) && !enterprise_installed()) { + $tdata[5] = "
    "; + } + } + + $table_am->rowclass[] = ''; + $table_am->data[] = $tdata; + + $output = '
    + '.__('Total agents and monitors').''.html_print_table($table_am, true).'
    '; + + return $output; +} + + +/** + * Return html count from stats alerts by group. + * + * @param [type] $id_groups + * @return string Html. + */ +function tactical_groups_get_stats_alerts($id_groups) +{ + global $config; + + $alerts = groups_monitor_alerts_total_counters($id_groups, false); + $data = [ + 'monitor_alerts' => $alerts['total'], + 'monitor_alerts_fired' => $alerts['fired'], + + ]; + + $urls = []; + $urls['monitor_alerts'] = $config['homeurl'].'index.php?sec=estado&sec2=operation/agentes/alerts_status&refr=60&ag_group='.$id_groups[0]; + $urls['monitor_alerts_fired'] = $config['homeurl'].'index.php?sec=estado&sec2=operation/agentes/alerts_status&refr=60&disabled=fired&ag_group='.$id_groups[0]; + + // Alerts table. + $table_al = html_get_predefined_table(); + + $tdata = []; + $tdata[0] = html_print_image('images/bell.png', true, ['title' => __('Defined alerts'), 'class' => 'invert_filter'], false, false, false, true); + $tdata[1] = $data['monitor_alerts'] <= 0 ? '-' : $data['monitor_alerts']; + $tdata[1] = ''.$tdata[1].''; + + /* + Hello there! :) + We added some of what seems to be "buggy" messages to the openSource version recently. This is not to force open-source users to move to the enterprise version, this is just to inform people using Pandora FMS open source that it requires skilled people to maintain and keep it running smoothly without professional support. This does not imply open-source version is limited in any way. If you check the recently added code, it contains only warnings and messages, no limitations except one: we removed the option to add custom logo in header. In the Update Manager section, it warns about the 'dangerโ€™ of applying automated updates without a proper backup, remembering in the process that the Enterprise version comes with a human-tested package. Maintaining an OpenSource version with more than 500 agents is not so easy, that's why someone using a Pandora with 8000 agents should consider asking for support. It's not a joke, we know of many setups with a huge number of agents, and we hate to hear that โ€œits becoming unstable and slowโ€ :( + You can of course remove the warnings, that's why we include the source and do not use any kind of trick. And that's why we added here this comment, to let you know this does not reflect any change in our opensource mentality of does the last 14 years. + */ + + if ($data['monitor_alerts'] > $data['total_agents'] && !enterprise_installed()) { + $tdata[2] = "
    "; + } + + $tdata[3] = html_print_image( + 'images/bell_error.png', + true, + [ + 'title' => __('Fired alerts'), + 'class' => 'invert_filter', + ], + false, + false, + false, + true + ); + $tdata[4] = $data['monitor_alerts_fired'] <= 0 ? '-' : $data['monitor_alerts_fired']; + $tdata[4] = ''.$tdata[4].''; + $table_al->rowclass[] = ''; + $table_al->data[] = $tdata; + + if (!is_metaconsole()) { + $output = '
    + '.__('Defined and fired alerts').''.html_print_table($table_al, true).'
    '; + } else { + // Remove the defined alerts cause with the new cache table is difficult to retrieve them. + unset($table_al->data[0][0], $table_al->data[0][1]); + + $table_al->class = 'tactical_view'; + $table_al->style = []; + $output = '
    + '.__('Fired alerts').''.html_print_table($table_al, true).'
    '; + } + + return $output; +} + + +/** + * Return html count from stats modules by group. + * + * @param [type] $id_groups + * @param integer $graph_width + * @param integer $graph_height + * @param boolean $links + * @param boolean $data_agents + * @return void + */ +function groups_get_stats_modules_status($id_groups, $graph_width=250, $graph_height=150, $links=false, $data_agents=false) +{ + global $config; + + $data = [ + 'monitor_critical' => groups_get_critical_monitors($id_groups, [], [], false, false, false, false), + 'monitor_warning' => groups_get_warning_monitors($id_groups, [], [], false, false, false, false), + 'monitor_ok' => groups_get_normal_monitors($id_groups, [], [], false, false, false, false), + 'monitor_unknown' => groups_get_unknown_monitors($id_groups, [], [], false, false, false, false), + 'monitor_not_init' => groups_get_not_init_monitors($id_groups, [], [], false, false, false, false), + ]; + + // Link URLS. + if ($links === false) { + $urls = []; + $urls['monitor_critical'] = $config['homeurl'].'index.php?'.'sec=view&sec2=operation/agentes/status_monitor&'.'refr=60&status='.AGENT_MODULE_STATUS_CRITICAL_BAD.'&pure='.$config['pure'].'&recursion=1&ag_group='.$id_groups[0]; + $urls['monitor_warning'] = $config['homeurl'].'index.php?'.'sec=view&sec2=operation/agentes/status_monitor&'.'refr=60&status='.AGENT_MODULE_STATUS_WARNING.'&pure='.$config['pure'].'&recursion=1&ag_group='.$id_groups[0]; + $urls['monitor_ok'] = $config['homeurl'].'index.php?'.'sec=view&sec2=operation/agentes/status_monitor&'.'refr=60&status='.AGENT_MODULE_STATUS_NORMAL.'&pure='.$config['pure'].'&recursion=1&ag_group='.$id_groups[0]; + $urls['monitor_unknown'] = $config['homeurl'].'index.php?'.'sec=view&sec2=operation/agentes/status_monitor&'.'refr=60&status='.AGENT_MODULE_STATUS_UNKNOWN.'&pure='.$config['pure'].'&recursion=1&ag_group='.$id_groups[0]; + $urls['monitor_not_init'] = $config['homeurl'].'index.php?'.'sec=view&sec2=operation/agentes/status_monitor&'.'refr=60&status='.AGENT_MODULE_STATUS_NOT_INIT.'&pure='.$config['pure'].'&recursion=1&ag_group='.$id_groups[0]; + } else { + $urls = []; + $urls['monitor_critical'] = $links['monitor_critical']; + $urls['monitor_warning'] = $links['monitor_warning']; + $urls['monitor_ok'] = $links['monitor_ok']; + $urls['monitor_unknown'] = $links['monitor_unknown']; + $urls['monitor_not_init'] = $links['monitor_not_init']; + } + + // Fixed width non interactive charts + $status_chart_width = $graph_width; + + // Modules by status table + $table_mbs = html_get_predefined_table(); + + $tdata = []; + $tdata[0] = html_print_image('images/module_critical.png', true, ['title' => __('Monitor critical')], false, false, false, true); + $tdata[1] = $data['monitor_critical'] <= 0 ? '-' : $data['monitor_critical']; + $tdata[1] = ''.$tdata[1].''; + + $tdata[2] = html_print_image('images/module_warning.png', true, ['title' => __('Monitor warning')], false, false, false, true); + $tdata[3] = $data['monitor_warning'] <= 0 ? '-' : $data['monitor_warning']; + $tdata[3] = ''.$tdata[3].''; + $table_mbs->rowclass[] = ''; + $table_mbs->data[] = $tdata; + + $tdata = []; + $tdata[0] = html_print_image('images/module_ok.png', true, ['title' => __('Monitor normal')], false, false, false, true); + $tdata[1] = $data['monitor_ok'] <= 0 ? '-' : $data['monitor_ok']; + $tdata[1] = ''.$tdata[1].''; + + $tdata[2] = html_print_image('images/module_unknown.png', true, ['title' => __('Monitor unknown')], false, false, false, true); + $tdata[3] = $data['monitor_unknown'] <= 0 ? '-' : $data['monitor_unknown']; + $tdata[3] = ''.$tdata[3].''; + $table_mbs->rowclass[] = ''; + $table_mbs->data[] = $tdata; + + $tdata = []; + $tdata[0] = html_print_image('images/module_notinit.png', true, ['title' => __('Monitor not init')], false, false, false, true); + $tdata[1] = $data['monitor_not_init'] <= 0 ? '-' : $data['monitor_not_init']; + $tdata[1] = ''.$tdata[1].''; + + $tdata[2] = $tdata[3] = ''; + $table_mbs->rowclass[] = ''; + $table_mbs->data[] = $tdata; + + if ($data['monitor_checks'] > 0) { + $tdata = []; + $table_mbs->colspan[count($table_mbs->data)][0] = 4; + $table_mbs->cellstyle[count($table_mbs->data)][0] = 'text-align: center;'; + $tdata[0] = '
    '.'
    '.graph_agent_status(false, $graph_width, $graph_height, true, true, $data_agents).'
    '; + $table_mbs->rowclass[] = ''; + $table_mbs->data[] = $tdata; + } + + if (!is_metaconsole()) { + $output = ' +
    + '.__('Monitors by status').''.html_print_table($table_mbs, true).'
    '; + } else { + $table_mbs->class = 'tactical_view'; + $table_mbs->style = []; + $output = ' +
    + '.__('Monitors by status').''.html_print_table($table_mbs, true).'
    '; + } + + return $output; +} \ No newline at end of file diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index 693a14adb7..be9ed5d1a8 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -1361,29 +1361,27 @@ function html_print_select_multiple_filtered( $output .= '
    '; - $output .= html_print_input( + $output .= html_print_image( + 'images/plus.svg', + true, [ - 'type' => 'image', - 'src' => 'images/darrowright.png', - 'return' => true, - 'options' => [ - 'title' => $texts['title-add'], - 'onclick' => $add, - 'class' => 'invert_filter', - ], + 'id' => 'right_autorefreshlist', + 'style' => 'width: 24px; margin: 10px 10px 0;', + 'alt' => __('Push selected pages into autorefresh list'), + 'title' => __('Push selected pages into autorefresh list'), + 'onclick' => $add, ] ); - $output .= html_print_input( + $output .= html_print_image( + 'images/minus.svg', + true, [ - 'type' => 'image', - 'src' => 'images/darrowleft.png', - 'return' => true, - 'options' => [ - 'title' => $texts['title-del'], - 'onclick' => $del, - 'class' => 'invert_filter', - ], + 'id' => 'left_autorefreshlist', + 'style' => 'width: 24px; margin: 10px 10px 0;', + 'alt' => __('Pop selected pages out of autorefresh list'), + 'title' => __('Pop selected pages out of autorefresh list'), + 'onclick' => $del, ] ); @@ -4905,7 +4903,8 @@ function html_print_autocomplete_modules( $filter=[], $return=false, $id_agent_module=0, - $size='30' + $size='30', + $underInputTip=false ) { global $config; @@ -4962,7 +4961,11 @@ function html_print_autocomplete_modules( html_print_input_hidden($name.'_hidden', $id_agent_module); if (is_metaconsole() === false) { - ui_print_help_tip(__('Type at least two characters to search the module.'), false); + if ($underInputTip === true) { + ui_print_input_placeholder(__('Type at least two characters to search the module.'), false); + } else { + ui_print_help_tip(__('Type at least two characters to search the module.'), false); + } } $javascript_ajax_page = ui_get_full_url('ajax.php', false, false, false); diff --git a/pandora_console/include/functions_treeview.php b/pandora_console/include/functions_treeview.php index b43d6bba95..e86c728fa7 100755 --- a/pandora_console/include/functions_treeview.php +++ b/pandora_console/include/functions_treeview.php @@ -467,7 +467,7 @@ function treeview_printAlertsTable($id_module, $server_data=[], $no_head=false) __('Go to alerts edition'), 'upd_button', false, - 'window.location.assign(\''.$console_url.'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=alert&search=1&module_name='.$module_name.'&id_agente='.$agent_id.$url_hash.'\')', + 'window.location.assign("'.$console_url.'index.php?sec=gagente&sec2=godmode/agentes/configurar_agente&tab=alert&search=1&module_name='.$module_name.'&id_agente='.$agent_id.$url_hash.'")', ['icon' => 'alert'], true ), diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index 1e4556965b..64c1f509d1 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -693,7 +693,7 @@ function ui_print_tags_warning($return=false) * * @return string HTML code if return parameter is true. */ -function ui_print_group_icon($id_group, $return=false, $path='', $style='', $link=true, $force_show_image=false, $show_as_image=false, $class='') +function ui_print_group_icon($id_group, $return=false, $path='', $style='', $link=true, $force_show_image=false, $show_as_image=false, $class='', $tactical_view=false) { global $config; @@ -707,7 +707,11 @@ function ui_print_group_icon($id_group, $return=false, $path='', $style='', $lin } if ($link === true) { - $output = ''; + if ($tactical_view === true) { + $output = ''; + } else { + $output = ''; + } } if ((bool) $config['show_group_name'] === true) { @@ -904,11 +908,11 @@ function ui_print_type_agent_icon( if ((int) $id_os === SATELLITE_OS_ID) { // Satellite. $options['title'] = __('Satellite'); - $output = html_print_image('images/satellite@svg.svg', true, ['class' => 'main_menu_icon invert_filter'], false, false, false, true); + $output = html_print_image('images/satellite@os.svg', true, ['class' => 'main_menu_icon invert_filter'], false, false, false, true); } else if ($remote_contact === $contact && $remote === 0 && empty($version) === true) { // Network. $options['title'] = __('Network'); - $output = html_print_image('images/network-server@svg.svg', true, ['class' => 'main_menu_icon invert_filter'], false, false, false, true); + $output = html_print_image('images/network-server@os.svg', true, ['class' => 'main_menu_icon invert_filter'], false, false, false, true); } else { // Software. $options['title'] = __('Software'); @@ -1210,7 +1214,7 @@ function ui_format_alert_row( $forceTitle, 'force_execution_'.$alert['id'], false, - 'window.location.assign(\''.$url.'&id_alert='.$alert['id'].'&refr=60'.$additionUrl.'\');', + 'window.location.assign("'.$url.'&id_alert='.$alert['id'].'&refr=60'.$additionUrl.'");', [ 'mode' => 'link' ], true ); @@ -1496,6 +1500,7 @@ function ui_print_alert_template_example($id_alert_template, $return=false, $pri * @param string $image Image path. * @param boolean $is_relative Route is relative or not. * @param string $id Target id. + * @param string $isHeader If true, the view is header. * * @return string The help tip */ @@ -1505,10 +1510,17 @@ function ui_print_help_icon( $home_url='', $image='images/info@svg.svg', $is_relative=false, - $id='' + $id='', + $isHeader=false ) { global $config; + if (empty($image) === true) { + $image = 'images/info@svg.svg'; + } + + $iconClass = ($isHeader === true) ? 'header_help_icon' : 'main_menu_icon'; + // Do not display the help icon if help is disabled. if ((bool) $config['disable_help'] === true) { return ''; @@ -1533,7 +1545,7 @@ function ui_print_help_icon( $image, true, [ - 'class' => 'img_help main_menu_icon', + 'class' => 'img_help '.$iconClass, 'title' => __('Help'), 'onclick' => "open_help ('".ui_get_full_url($help_handler)."')", 'id' => $id, @@ -2436,35 +2448,35 @@ function ui_print_session_action_icon($action, $return=false) global $config; $key_icon = [ - 'acl' => 'images/delete.png', - 'agent' => 'images/agent.png', - 'module' => 'images/module.png', - 'alert' => 'images/bell.png', - 'incident' => 'images/default_list.png', - 'logon' => 'images/house.png', - 'logoff' => 'images/house.png', - 'massive' => 'images/config.png', - 'hack' => 'images/application_edit.png', - 'event' => 'images/lightning_go.png', - 'policy' => 'images/policies_mc.png', - 'report' => 'images/reporting.png', - 'file collection' => 'images/collection_col.png', - 'user' => 'images/user_green.png', - 'password' => 'images/lock.png', - 'session' => 'images/heart_col.png', - 'snmp' => 'images/snmp.png', - 'command' => 'images/bell.png', - 'category' => 'images/category_col.png', - 'dashboard' => 'images/dashboard_col.png', - 'api' => 'images/eye.png', - 'db' => 'images/database.png', - 'setup' => 'images/cog.png', + 'acl' => 'images/delete.svg', + 'agent' => 'images/agents@svg.svg', + 'module' => 'images/modules@svg.svg', + 'alert' => 'images/alerts.svg', + 'incident' => 'images/logs@svg.svg', + 'logon' => 'images/house@svg.svg', + 'logoff' => 'images/house@svg.svg', + 'massive' => 'images/configuration@svg.svg', + 'hack' => 'images/custom-input@svg.svg', + 'event' => 'images/event.svg', + 'policy' => 'images/policy@svg.svg', + 'report' => 'images/agent-fields.svg', + 'file collection' => 'images/file-collection@svg.svg', + 'user' => 'images/user.svg', + 'password' => 'images/password.svg', + 'session' => 'images/star@svg.svg', + 'snmp' => 'images/SNMP-network-numeric-data@svg.svg', + 'command' => 'images/external-tools@svg.svg', + 'category' => 'images/tag@svg.svg', + 'dashboard' => 'images/workstation@groups.svg', + 'api' => 'images/enable.svg', + 'db' => 'images/data-server@svg.svg', + 'setup' => 'images/configuration@svg.svg', ]; $output = ''; foreach ($key_icon as $key => $icon) { if (stristr($action, $key) !== false) { - $output = html_print_image($icon, true, ['title' => $action, 'class' => 'invert_filter'], false, false, false, true).' '; + $output = html_print_image($icon, true, ['title' => $action, 'class' => 'main_menu_icon invert_filter'], false, false, false, true).' '; break; } } @@ -5053,7 +5065,7 @@ function ui_print_page_header( if (is_metaconsole() === false) { if ($help != '') { - $buffer .= "
    ".ui_print_help_icon($help, true, '', 'images/help_g.png').'
    '; + $buffer .= "
    ".ui_print_help_icon($help, true, '', '', false, '', true).'
    '; } } @@ -7154,7 +7166,7 @@ function ui_print_servertype_icon(int $id) case MODULE_NETWORK: $title = __('Network server'); - $image = 'images/network-server@svg.svg'; + $image = 'images/network-server@os.svg'; break; case MODULE_PLUGIN: diff --git a/pandora_console/include/javascript/pandora.js b/pandora_console/include/javascript/pandora.js index 30da9745eb..8bfdee500c 100644 --- a/pandora_console/include/javascript/pandora.js +++ b/pandora_console/include/javascript/pandora.js @@ -2400,3 +2400,10 @@ function topFunction() { 500 ); } + +function menuActionButtonResizing() { + $(".action_buttons_right_content").attr( + "style", + "left: " + $("#menu_full").width() + "px;" + ); +} diff --git a/pandora_console/include/javascript/tactical_groups.js b/pandora_console/include/javascript/tactical_groups.js new file mode 100644 index 0000000000..08bca2f02e --- /dev/null +++ b/pandora_console/include/javascript/tactical_groups.js @@ -0,0 +1,18 @@ +/* global $, load_modal */ +function showInfoAgent(id_agent) { + load_modal({ + target: $("#modal-info-agent"), + url: "ajax.php", + modal: { + title: "Info agent", + cancel: "close" + }, + onshow: { + page: "include/ajax/group", + method: "loadInfoAgent", + extradata: { + idAgent: id_agent + } + } + }); +} diff --git a/pandora_console/include/lib/Group.php b/pandora_console/include/lib/Group.php index 1f34f941fd..9e386d8dd0 100644 --- a/pandora_console/include/lib/Group.php +++ b/pandora_console/include/lib/Group.php @@ -43,7 +43,13 @@ class Group extends Entity * * @var array */ - private static $ajaxMethods = ['getGroupsForSelect']; + private static $ajaxMethods = [ + 'getGroupsForSelect', + 'distributionBySoGraph', + 'groupEventsByAgent', + 'loadInfoAgent', + 'getAgentsByGroup', + ]; /** @@ -473,4 +479,271 @@ class Group extends Entity } + /** + * Draw a graph distribution so by group. + * + * @return void + */ + public static function distributionBySoGraph() + { + global $config; + $id_group = get_parameter('id_group', ''); + include_once $config['homedir'].'/include/functions_graph.php'; + + $out = '
    '; + $out .= graph_so_by_group($id_group, 300, 200, false, false); + $out .= '
    '; + echo $out; + return; + } + + + /** + * Draw a graph events agent by group. + * + * @return void + */ + public static function groupEventsByAgent() + { + global $config; + $id_group = get_parameter('id_group', ''); + include_once $config['homedir'].'/include/functions_graph.php'; + + $out = '
    '; + $out .= graph_events_agent_by_group($id_group, 300, 200, false, true, true); + $out .= '
    '; + echo $out; + return; + } + + + /** + * Draw in modal a agent info + * + * @return void + */ + public static function loadInfoAgent() + { + $extradata = get_parameter('extradata', ''); + echo '
    '; + + if (empty($extradata) === false) { + $extradata = json_decode(io_safe_output($extradata), true); + $agent = agents_get_agent($extradata['idAgent']); + + if (is_array($agent)) { + $status_img = agents_tree_view_status_img( + $agent['critical_count'], + $agent['warning_count'], + $agent['unknown_count'], + $agent['total_count'], + $agent['notinit_count'] + ); + $table = new \stdClass(); + $table->class = 'table_modal_alternate'; + $table->data = [ + [ + __('Id'), + $agent['id_agente'], + ], + [ + __('Agent name'), + ''.$agent['nombre'].'', + ], + [ + __('Alias'), + $agent['alias'], + ], + [ + __('Ip Address'), + $agent['direccion'], + ], + [ + __('Status'), + $status_img, + ], + [ + __('Group'), + groups_get_name($agent['id_grupo']), + ], + [ + __('Interval'), + $agent['intervalo'], + ], + [ + __('Operative system'), + get_os_name($agent['id_os']), + ], + [ + __('Server name'), + $agent['server_name'], + ], + [ + __('Description'), + $agent['comentarios'], + ], + ]; + + html_print_table($table); + } + } + + echo '
    '; + } + + + /** + * Get agents by group for datatable. + * + * @return void + */ + public static function getAgentsByGroup() + { + global $config; + + $data = []; + $id_group = get_parameter('id_group', ''); + $id_groups = [$id_group]; + $groups = groups_get_children($id_group); + + if (count($groups) > 0) { + $id_groups = []; + foreach ($groups as $key => $value) { + $id_groups[] = $value['id_grupo']; + } + } + + $start = get_parameter('start', 0); + $length = get_parameter('length', $config['block_size']); + $orderDatatable = get_datatable_order(true); + $pagination = ''; + $order = ''; + + try { + ob_start(); + if (isset($orderDatatable)) { + switch ($orderDatatable['field']) { + case 'alerts': + $orderDatatable['field'] = 'fired_count'; + break; + + case 'status': + $orderDatatable['field'] = 'total_count'; + + default: + $orderDatatable['field'] = $orderDatatable['field']; + break; + } + + $order = sprintf( + ' ORDER BY %s %s', + $orderDatatable['field'], + $orderDatatable['direction'] + ); + } + + if (isset($length) && $length > 0 + && isset($start) && $start >= 0 + ) { + $pagination = sprintf( + ' LIMIT %d OFFSET %d ', + $length, + $start + ); + } + + $sql = sprintf( + 'SELECT id_agente, + alias, + critical_count, + warning_count, + unknown_count, + total_count, + notinit_count, + ultimo_contacto_remoto, + fired_count + FROM tagente t + WHERE disabled = 0 AND + total_count <> notinit_count AND + id_grupo IN (%s) + %s %s', + implode(',', $id_groups), + $order, + $pagination + ); + + $data = db_get_all_rows_sql($sql); + + $sql = sprintf( + 'SELECT + id_agente, + alias, + critical_count, + warning_count, + unknown_count, + total_count, + notinit_count, + ultimo_contacto_remoto, + fired_count + FROM tagente t + WHERE disabled = 0 AND + total_count <> notinit_count AND + id_grupo IN (%s) + %s', + implode(',', $id_groups), + $order, + ); + + $count_agents = db_get_num_rows($sql); + + foreach ($data as $key => $agent) { + $status_img = agents_tree_view_status_img( + $agent['critical_count'], + $agent['warning_count'], + $agent['unknown_count'], + $agent['total_count'], + $agent['notinit_count'] + ); + $data[$key]['alias'] = ''.$agent['alias'].''; + $data[$key]['status'] = $status_img; + $data[$key]['alerts'] = agents_tree_view_alert_img($agent['fired_count']); + } + + if (empty($data) === true) { + $total = 0; + $data = []; + } else { + $total = $count_agents; + } + + echo json_encode( + [ + 'data' => $data, + 'recordsTotal' => $total, + 'recordsFiltered' => $total, + ] + ); + // Capture output. + $response = ob_get_clean(); + } catch (\Exception $e) { + echo json_encode(['error' => $e->getMessage()]); + exit; + } + + json_decode($response); + if (json_last_error() === JSON_ERROR_NONE) { + echo $response; + } else { + echo json_encode( + [ + 'success' => false, + 'error' => $response, + ] + ); + } + + exit; + } + + } diff --git a/pandora_console/include/styles/alert.css b/pandora_console/include/styles/alert.css index 24915928ab..8033a8a7fe 100644 --- a/pandora_console/include/styles/alert.css +++ b/pandora_console/include/styles/alert.css @@ -354,3 +354,35 @@ div#rules.show { .note-special-day div a.tip > img { margin: 0px; } + +form#icalendar-special-days.calendar-upload-form { + border: 0px; + padding: 0px; +} + +form#icalendar-special-days.calendar-upload-form > ul { + align-items: flex-start !important; +} + +form#icalendar-special-days.calendar-upload-form > ul > li > label { + font-size: 13px; + line-height: 16px; + margin-bottom: 10px; +} + +.special-days-thead > thead > tr > th:not(.header) { + border: 1px solid #e2e2e2; +} + +.special-days-thead > thead > tr > th.header { + border: 0px; + border-bottom: 1px solid #878787; +} + +.special-days-thead > thead > tr > th.c0 { + border-left: 1px solid #e2e2e2; +} + +.special-days-thead > thead > tr > th.c6 { + border-right: 1px solid #e2e2e2; +} diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 11ee3b067f..a12f61c780 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -647,6 +647,10 @@ select:-internal-list-box { width: 20%; } +.w21p { + width: 21%; +} + .w22p { width: 22%; } @@ -671,6 +675,14 @@ select:-internal-list-box { width: 40%; } +.w45p { + width: 45%; +} + +.w48p { + width: 48%; +} + .w47p { width: 47%; } @@ -5805,10 +5817,10 @@ div.label_select_child_left > span { overflow: hidden; } -.switch_radio_button label { +div.switch_radio_button label { background-color: #fff; color: rgba(0, 0, 0, 0.6); - line-height: 9pt; + line-height: 6px !important; text-align: center; padding: 14px 10px; margin-right: -1px; @@ -5816,14 +5828,14 @@ div.label_select_child_left > span { transition: all 0.1s ease-in-out; } -.switch_radio_button label:first { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; +div.switch_radio_button label:first-of-type { + border-top-left-radius: 4px !important; + border-bottom-left-radius: 4px !important; } -.switch_radio_button label:last-child { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; +div.switch_radio_button label:last-of-type { + border-top-right-radius: 4px !important; + border-bottom-right-radius: 4px !important; margin-right: 0px; } @@ -11013,14 +11025,14 @@ pre.external_tools_output { .tag-editor .tag-editor-tag { padding: 5px !important; color: #fff !important; - background: #82b92e !important; + background: var(--primary-color) !important; border-radius: 0 2px 2px 0 !important; } .tag-editor .tag-editor-delete { padding: 5px !important; line-height: 16px !important; - background: #82b92e !important; + background: var(--primary-color) !important; border-radius: 2px 0 0 2px !important; } @@ -11194,6 +11206,10 @@ table.table_modal_alternate height: 20px; } +.header_help_icon { + width: 16px; + height: 16px; +} .main_menu_icon.arrow_up { transform: rotate(90deg); } @@ -11508,6 +11524,15 @@ div[role="dialog"] { /* font-weight: bold; */ } +.font-title-font { + font-size: 13px; + line-height: 16px; + color: #161628; + text-align: left; + margin-bottom: 10px; + font-weight: bold; +} + .preimage_container span { font-size: 11pt; line-height: 28px; @@ -11543,3 +11568,21 @@ table.alert-template-fields > tbody > tr > td > div > textarea { table.alert-template-fields > tbody > tr > td[id^="template-label_fields"] { text-align: center; } + +ul.tag-editor { + list-style-type: none; + padding: 0.5em !important; + margin: 0; + overflow: hidden; + border: 2px solid #c0ccdc; + border-radius: 6px; + cursor: text; + font: normal 14px sans-serif; + color: #333333; + background: #f6f7fb; + line-height: 20px; +} + +.max-width-100p { + max-width: 100% !important; +} diff --git a/pandora_console/include/styles/tables.css b/pandora_console/include/styles/tables.css index 7fbf593d16..4383e02ea5 100644 --- a/pandora_console/include/styles/tables.css +++ b/pandora_console/include/styles/tables.css @@ -235,7 +235,8 @@ .table_action_buttons > a, .table_action_buttons > img, -.table_action_buttons > button { +.table_action_buttons > button, +.table_action_buttons > form { visibility: hidden; } .info_table > tbody > tr:hover { @@ -246,7 +247,8 @@ .info_table > tbody > tr:hover .table_action_buttons > a, .info_table > tbody > tr:hover .table_action_buttons > img, -.info_table > tbody > tr:hover .table_action_buttons > button { +.info_table > tbody > tr:hover .table_action_buttons > button, +.info_table > tbody > tr:hover .table_action_buttons > form { visibility: visible; } diff --git a/pandora_console/include/styles/tactical_groups.css b/pandora_console/include/styles/tactical_groups.css new file mode 100644 index 0000000000..383e9ef37f --- /dev/null +++ b/pandora_console/include/styles/tactical_groups.css @@ -0,0 +1,31 @@ +.tactical_group_left_column { + vertical-align: top; + min-width: 30em; + width: 30%; + padding-top: 0px; +} +.tactical_group_right_column { + width: 40%; + vertical-align: top; + min-width: 30em; + padding-top: 0px; +} +rect { + cursor: pointer; +} +.info-agent { + width: 100%; + max-height: 400px; +} +.info-agent table { + width: 100%; +} +#modal-info-agent { + display: none; +} +#list_agents_tactical_wrapper { + max-height: 600px; +} +.graph-distribution-so { + margin-top: 55px; +} diff --git a/pandora_console/include/styles/wizard.css b/pandora_console/include/styles/wizard.css index ab5d011f70..c7c37a8143 100644 --- a/pandora_console/include/styles/wizard.css +++ b/pandora_console/include/styles/wizard.css @@ -46,7 +46,6 @@ ul.wizard li > label:not(.p-switch):first-of-type { } ul.wizard li > textarea { - width: 600px; height: 15em; display: inline-block; } @@ -130,6 +129,12 @@ ul.wizard li > textarea { background: #e63c52; } +.wizard .tag-editor li, +.wizard .tag-editor li:focus, +.wizard .tag-editor li:hover { + border: 0; + padding: 0; +} .wizard .time_selection_container { display: flex; align-items: baseline; @@ -200,6 +205,7 @@ li#textarea-create-site > textarea { width: 100%; } +form.alert-correlation > ul.wizard > li > label, form#create_site > ul.wizard > li > label { font-size: 13px; line-height: 16px; @@ -210,3 +216,23 @@ form#create_site > ul.wizard > li > label { select[multiple] { min-height: 20em; } + +form.alert-correlation > div > ul, +form.alert-correlation > ul { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +form.alert-correlation > div > ul > li.flex-flex-end { + display: flex; + align-items: flex-end; +} + +form.alert-correlation > div > ul > li.flex-flex-end > input { + width: 150px !important; +} + +form.alert-correlation > div > ul > li.flex-flex-end > label { + width: 50px !important; +} diff --git a/pandora_console/index.php b/pandora_console/index.php index 78de0734b4..a78d97d926 100755 --- a/pandora_console/index.php +++ b/pandora_console/index.php @@ -1524,17 +1524,6 @@ require 'include/php_to_js_values.php'; } } - //$('.button_collapse').on('click', menuActionButtonResizing()); - - // Cursor change for show a spinner. Experimental. - /* - $('.buttonButton').not('.dialog_opener').on('click', function(){ - $('*').css('cursor', 'wait'); - }); - $('.submitButton').not('.dialog_opener').on('click', function(){ - $('*').css('cursor', 'wait'); - }); -*/ // When the user scrolls down 400px from the top of the document, show the // button. window.onscroll = function() { @@ -1545,10 +1534,6 @@ require 'include/php_to_js_values.php'; scrollFunction() }; - function menuActionButtonResizing() { - $('.action_buttons_right_content').attr('style', 'left: '+($('#menu_full').width())+'px;'); - } - function first_time_identification() { jQuery.post("ajax.php", { "page": "general/register", diff --git a/pandora_console/install.php b/pandora_console/install.php index e7026a9169..68d69a23d6 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -130,8 +130,8 @@
    '; } @@ -1254,12 +1254,12 @@ foreach ($agents as $agent) { $fb64 = base64_encode(json_encode($agent_event_filter)); $data[11] = ''.html_print_image( - 'images/lightning.png', + 'images/event.svg', true, [ 'align' => 'middle', 'title' => __('Agent events'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).''; diff --git a/pandora_console/operation/agentes/estado_generalagente.php b/pandora_console/operation/agentes/estado_generalagente.php index 3e5584fe42..8aaa7ed60a 100755 --- a/pandora_console/operation/agentes/estado_generalagente.php +++ b/pandora_console/operation/agentes/estado_generalagente.php @@ -106,7 +106,12 @@ $agentIconGroup = ((bool) $config['show_group_name'] === false) ? ui_print_group $agent['id_grupo'], true, '', - 'padding-right: 6px;' + 'padding-right: 6px;', + true, + false, + false, + '', + true ) : ''; $agentIconStatus = agents_detail_view_status_img( @@ -396,7 +401,7 @@ $buttonsRefreshAgent = html_print_button( __('Refresh data'), 'refresh_data', false, - 'window.location.assign(\'index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'&refr=60\')', + 'window.location.assign("index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'&refr=60")', [ 'mode' => 'link' ], true ); @@ -406,7 +411,7 @@ if (check_acl_one_of_groups($config['id_user'], $all_groups, 'AW') === true) { __('Force checks'), 'force_checks', false, - 'window.location.assign(\'index.php?sec=estado&sec2=operation/agentes/ver_agente&flag_agent=1&id_agente='.$id_agente.'\')', + 'window.location.assign("index.php?sec=estado&sec2=operation/agentes/ver_agente&flag_agent=1&id_agente='.$id_agente.'")', [ 'mode' => 'link' ], true ); @@ -488,7 +493,7 @@ $data = []; $data[0] = ''.__('Group').''; $data[1] = html_print_anchor( [ - 'href' => 'index.php?sec=estado&sec2=operation/agentes/estado_agente&refr=60&group_id='.$agent['id_grupo'], + 'href' => 'index.php?sec=gagente&sec2=godmode/groups/tactical&id_group='.$agent['id_grupo'], 'content' => groups_get_name($agent['id_grupo']), ], true diff --git a/pandora_console/operation/agentes/exportdata.php b/pandora_console/operation/agentes/exportdata.php index 604131d888..910a46acb2 100644 --- a/pandora_console/operation/agentes/exportdata.php +++ b/pandora_console/operation/agentes/exportdata.php @@ -1,10 +1,10 @@ '', + 'label' => __('Tools'), + ], + [ + 'link' => '', + 'label' => __('Export data'), + ], + ] +); $group = get_parameter_post('group', 0); $agentName = get_parameter_post('agent', 0); @@ -220,48 +242,10 @@ if (!empty($export_btn) && !empty($module)) { } if (empty($export_btn) || $show_form) { - echo '
    '; - - $table = new stdClass(); - $table->width = '100%'; - $table->border = 0; - $table->cellspacing = 3; - $table->cellpadding = 5; - $table->class = 'databox filters'; - $table->style[0] = 'vertical-align: top;'; - - $table->data = []; - - // Group selector - $table->data[0][0] = ''.__('Group').''; - $groups = users_get_groups($config['id_user'], 'RR', users_can_manage_group_all()); - $table->data[0][1] = '
    '.html_print_select_groups( - $config['id_user'], - 'RR', - true, - 'group', - $group, - '', - '', - 0, - true, - false, - true, - '', - false - ).'
    '; - - // Agent selector. - $table->data[1][0] = ''.__('Source agent').''; - $filter = []; - if ($group > 0) { - $filter['id_grupo'] = (array) $group; - } else { - $filter['id_grupo'] = array_keys($groups); - } + $filter['id_grupo'] = ($group > 0) ? (array) $group : array_keys($groups); $agents = []; $rows = agents_get_agents($filter, false, 'RR'); @@ -286,11 +270,6 @@ if (empty($export_btn) || $show_form) { $params['add_none_module'] = false; $params['size'] = 38; $params['selectbox_id'] = 'module_arr'; - $table->data[1][1] = ui_print_agent_autocomplete_input($params); - - // Module selector. - $table->data[2][0] = ''.__('Modules').''; - $table->data[2][0] .= ui_print_help_tip(__('No modules of type string. You can not calculate their average'), true); if ($agent > 0) { $modules = agents_get_modules($agent); @@ -325,91 +304,170 @@ if (empty($export_btn) || $show_form) { $disabled_export_button = true; } - $table->data[2][1] = html_print_select($modules, 'module_arr[]', array_keys($modules), '', '', 0, true, true, true, 'w250px', false); - - // Start date selector. - $table->data[3][0] = ''.__('Begin date').''; - - $table->data[3][1] = html_print_input_text( - 'start_date', - date('Y-m-d', (get_system_time() - SECONDS_1DAY)), - false, - 13, - 10, - true - ); - $table->data[3][1] .= html_print_image( - 'images/calendar_view_day.png', - true, - [ - 'alt' => 'calendar', - 'onclick' => "scwShow(scwID('text-start_date'),this);", - 'class' => 'invert_filter', - ] - ); - $table->data[3][1] .= html_print_input_text( - 'start_time', - date('H:i:s', (get_system_time() - SECONDS_1DAY)), - false, - 10, - 9, - true - ); - - // End date selector. - $table->data[4][0] = ''.__('End date').''; - $table->data[4][1] = html_print_input_text( - 'end_date', - date('Y-m-d', get_system_time()), - false, - 13, - 10, - true - ); - $table->data[4][1] .= html_print_image( - 'images/calendar_view_day.png', - true, - [ - 'alt' => 'calendar', - 'onclick' => "scwShow(scwID('text-end_date'),this);", - 'class' => 'invert_filter', - ] - ); - $table->data[4][1] .= html_print_input_text( - 'end_time', - date('H:i:s', get_system_time()), - false, - 10, - 9, - true - ); - - // Export type. - $table->data[5][0] = ''.__('Export type').''; - $export_types = []; $export_types['data'] = __('Data table'); $export_types['csv'] = __('CSV'); $export_types['excel'] = __('MS Excel'); $export_types['avg'] = __('Average per hour/day'); - $table->data[5][1] = html_print_select($export_types, 'export_type', $export_type, '', '', 0, true, false, true, 'w250px', false); + + echo ''; + + $table = new stdClass(); + $table->width = '100%'; + $table->border = 0; + $table->cellspacing = 3; + $table->cellpadding = 5; + $table->class = 'databox filter-table-adv'; + $table->style[0] = 'vertical-align: top;'; + + $table->data = []; + + // Group selector. + $table->data[0][] = html_print_label_input_block( + __('Group'), + html_print_select_groups( + $config['id_user'], + 'RR', + true, + 'group', + $group, + '', + '', + 0, + true, + false, + true, + '', + false + ) + ); + + // Agent selector. + $table->data[0][] = html_print_label_input_block( + __('Source agent'), + ui_print_agent_autocomplete_input($params) + ); + + // Module selector. + $table->data[1][] = html_print_label_input_block( + __('Modules'), + html_print_select( + $modules, + 'module_arr[]', + array_keys($modules), + '', + '', + 0, + true, + true, + true, + 'w100p', + false + ).ui_print_input_placeholder( + __('No modules of type string. You can not calculate their average'), + true + ) + ); + + // Export type. + $table->data[1][] = html_print_label_input_block( + __('Export type'), + html_print_select( + $export_types, + 'export_type', + $export_type, + '', + '', + 0, + true, + false, + true, + 'w100p', + false + ) + ); + + // Start date selector. + $table->data[2][] = html_print_label_input_block( + __('Begin date'), + html_print_div( + [ + 'class' => 'flex-content', + 'content' => html_print_input_text( + 'start_date', + date('Y-m-d', (get_system_time() - SECONDS_1DAY)), + false, + 13, + 10, + true + ).html_print_image( + 'images/calendar_view_day.png', + true, + [ + 'alt' => 'calendar', + 'onclick' => "scwShow(scwID('text-start_date'),this);", + 'class' => 'main_menu_icon invert_filter', + ] + ).html_print_input_text( + 'start_time', + date('H:i:s', (get_system_time() - SECONDS_1DAY)), + false, + 10, + 9, + true + ), + ], + true + ) + ); + + // End date selector. + $table->data[2][] = html_print_label_input_block( + __('End date'), + html_print_div( + [ + 'class' => 'flex-content', + 'content' => html_print_input_text( + 'end_date', + date('Y-m-d', get_system_time()), + false, + 13, + 10, + true + ).html_print_image( + 'images/calendar_view_day.png', + true, + [ + 'alt' => 'calendar', + 'onclick' => "scwShow(scwID('text-end_date'),this);", + 'class' => 'main_menu_icon invert_filter', + ] + ).html_print_input_text( + 'end_time', + date('H:i:s', get_system_time()), + false, + 10, + 9, + true + ), + ], + true + ), + ); html_print_table($table); // Submit button. - html_print_div( - [ - 'class' => 'action-buttons', - 'content' => html_print_button( - __('Export'), - 'export_btn', - false, - 'change_action()', - ['icon' => 'wand'], - true - ), - ] + html_print_action_buttons( + html_print_button( + __('Export'), + 'export_btn', + false, + 'change_action()', + ['icon' => 'wand'], + true + ) ); echo '
    '; diff --git a/pandora_console/operation/agentes/group_view.php b/pandora_console/operation/agentes/group_view.php index 3e602658df..f2ebbedbcf 100644 --- a/pandora_console/operation/agentes/group_view.php +++ b/pandora_console/operation/agentes/group_view.php @@ -289,12 +289,12 @@ if (empty($result_groups) === false) { echo ""; if (!isset($data['_is_tag_']) && check_acl($config['id_user'], $data['_id_'], 'AW')) { echo ''.html_print_image( - 'images/target.png', + 'images/change-active.svg', true, [ 'border' => '0', 'title' => __('Force'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).''; } diff --git a/pandora_console/operation/heatmap.php b/pandora_console/operation/heatmap.php index a9ab10ed47..1f7337aa39 100644 --- a/pandora_console/operation/heatmap.php +++ b/pandora_console/operation/heatmap.php @@ -14,7 +14,7 @@ * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| * * ============================================================================ - * Copyright (c) 2005-2022 Artica Soluciones Tecnologicas + * Copyright (c) 2005-2023 Artica Soluciones Tecnologicas * Please see http://pandorafms.org for full contribution list * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -64,11 +64,11 @@ if ($group_sent === true) { $is_ajax = is_ajax(); if ($is_ajax === false && $pure === false) { $viewtab['config'] = ''.html_print_image( - 'images/setup.png', + 'images/configuration@svg.svg', true, [ 'title' => __('Config'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).''; @@ -81,11 +81,11 @@ if ($is_ajax === false && $pure === false) { ); $viewtab['full_screen'] = ''.html_print_image( - 'images/full_screen.png', + 'images/fullscreen@svg.svg', true, [ 'title' => __('Full screen'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).''; @@ -208,11 +208,11 @@ if ($is_ajax === false && $pure === true) { echo ''; echo html_print_image( - 'images/normal_screen.png', + 'images/exit_fullscreen@svg.svg', true, [ 'title' => __('Back to normal mode'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ); echo ''; diff --git a/pandora_console/operation/messages/message_edit.php b/pandora_console/operation/messages/message_edit.php index 105a9560de..0e232788e7 100644 --- a/pandora_console/operation/messages/message_edit.php +++ b/pandora_console/operation/messages/message_edit.php @@ -14,7 +14,7 @@ * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| * * ============================================================================ - * Copyright (c) 2005-2022 Artica Soluciones Tecnologicas + * Copyright (c) 2005-2023 Artica Soluciones Tecnologicas * Please see http://pandorafms.org for full contribution list * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -52,7 +52,7 @@ $buttons['message_list'] = [ true, [ 'title' => __('Received messages'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).'', ]; @@ -64,7 +64,7 @@ $buttons['sent_messages'] = [ true, [ 'title' => __('Sent messages'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).'', ]; @@ -76,7 +76,7 @@ $buttons['create_message'] = [ true, [ 'title' => __('Create message'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).'', ]; @@ -218,11 +218,8 @@ if ($read_message) { true ); - html_print_div( - [ - 'class' => 'action-buttons', - 'content' => $outputButtons, - ], + html_print_action_buttons( + $outputButtons ); return; @@ -264,18 +261,6 @@ if ($send_mes === true) { // User info. $own_info = get_user_info($config['id_user']); -$table = new stdClass(); -$table->width = '100%'; -$table->class = 'databox filters'; - -$table->data = []; - -$table->data[0][0] = __('Sender'); - -$table->data[0][1] = (empty($own_info['fullname']) === false) ? $own_info['fullname'] : $config['id_user']; - -$table->data[1][0] = __('Destination'); - $is_admin = (bool) db_get_value( 'is_admin', 'tusuario', @@ -305,15 +290,29 @@ foreach ($users_full as $user_id => $user_info) { $users[$user_info['id_user']] = (empty($user_info['fullname']) === true) ? $user_info['id_user'] : $user_info['fullname']; } +$table = new stdClass(); +$table->id = 'send_message_table'; +$table->width = '100%'; +$table->class = 'databox max_floating_element_size filter-table-adv'; +$table->style = []; +$table->style[0] = 'width: 30%'; +$table->style[1] = 'width: 70%'; +$table->data = []; + +$table->data[0][] = html_print_label_input_block( + __('Sender'), + ''.((empty($own_info['fullname']) === false) ? $own_info['fullname'] : $config['id_user']).'' +); + // Check if the user to reply is in the list, if not add reply user. if ($reply === true) { - $table->data[1][1] = (array_key_exists($dst_user, $users) === true) ? $users[$dst_user] : $dst_user; - $table->data[1][1] .= html_print_input_hidden( + $destinationInputs = (array_key_exists($dst_user, $users) === true) ? $users[$dst_user] : $dst_user; + $destinationInputs .= html_print_input_hidden( 'dst_user', $dst_user, true ); - $table->data[1][1] .= html_print_input_hidden( + $destinationInputs .= html_print_input_hidden( 'replied', '1', true @@ -324,21 +323,27 @@ if ($reply === true) { $groups = users_get_groups($config['id_user'], 'AR'); // Get a list of all groups. - $table->data[1][1] = html_print_select( - $users, - 'dst_user', - $dst_user, - 'changeStatusOtherSelect(\'dst_user\', \'dst_group\')', - __('Select user'), - false, - true, - false, - '' - ); - $table->data[1][1] .= '  '.__('OR').'  '; - $table->data[1][1] .= html_print_div( + $destinationInputs = html_print_div( [ - 'class' => 'w250px inline', + 'class' => 'select_users mrgn_right_5px', + 'content' => html_print_select( + $users, + 'dst_user', + $dst_user, + 'changeStatusOtherSelect(\'dst_user\', \'dst_group\')', + __('Select user'), + false, + true, + false, + '' + ), + ], + true + ); + $destinationInputs .= __('OR'); + $destinationInputs .= html_print_div( + [ + 'class' => 'mrgn_lft_5px', 'content' => html_print_select_groups( $config['id_user'], 'AR', @@ -355,24 +360,41 @@ if ($reply === true) { ); } -$table->data[2][0] = __('Subject'); -$table->data[2][1] = html_print_input_text( - 'subject', - $subject, - '', - 50, - 70, - true +$table->data[0][] = html_print_label_input_block( + __('Destination'), + html_print_div( + [ + 'class' => 'flex-content-left', + 'content' => $destinationInputs, + ], + true + ) ); -$table->data[3][0] = __('Message'); -$table->data[3][1] = html_print_textarea( - 'message', - 15, - 255, - $message, - '', - true +$table->colspan[1][] = 2; +$table->data[1][] = html_print_label_input_block( + __('Subject'), + html_print_input_text( + 'subject', + $subject, + '', + 50, + 70, + true + ) +); + +$table->colspan[2][] = 2; +$table->data[2][] = html_print_label_input_block( + __('Message'), + html_print_textarea( + 'message', + 15, + 50, + $message, + '', + true + ) ); $jsOutput = ''; @@ -396,17 +418,14 @@ echo '
    '; - $data[0] .= html_print_image('images/email_inbox.png', true, ['border' => 0, 'title' => __('Click to read'), 'class' => 'invert_filter']); - $data[0] .= ''; + $pathRead = 'index.php?sec=message_list&sec2=operation/messages/message_edit&read_message=1&show_sent=1&id_message='.$message_id; + $titleRead = __('Click to read'); } else { - $data[0] .= ''; - $data[0] .= html_print_image('images/email_inbox.png', true, ['border' => 0, 'title' => __('Mark as unread'), 'class' => 'invert_filter']); - $data[0] .= ''; + $pathRead = 'index.php?sec=message_list&sec2=operation/messages/message_list&mark_unread=1&id_message='.$message_id; + $titleRead = __('Mark as unread'); } } else { if ($show_sent === true) { - $data[0] .= ''; - $data[0] .= html_print_image('images/email_inbox.png', true, ['border' => 0, 'title' => __('Message unread - click to read'), 'class' => 'invert_filter']); - $data[0] .= ''; + $pathRead = 'index.php?sec=message_list&sec2=operation/messages/message_edit&read_message=1&show_sent=1&id_message='.$message_id; + $titleRead = __('Message unread - click to read'); } else { - $data[0] .= ''; - $data[0] .= html_print_image('images/email_inbox.png', true, ['border' => 0, 'title' => __('Message unread - click to read'), 'class' => 'invert_filter']); - $data[0] .= ''; + $pathRead = 'index.php?sec=message_list&sec2=operation/messages/message_edit&read_message=1&id_message='.$message_id; + $titleRead = __('Message unread - click to read'); } } + $data[0] = html_print_anchor( + [ + 'href' => $pathRead, + 'content' => html_print_image( + 'images/email_inbox.png', + true, + [ + 'title' => $titleRead, + 'class' => 'main_menu_icon invert_filter', + ], + ), + ], + true + ); + if ($show_sent === true) { $dest_user = get_user_fullname($message['dest']); if (!$dest_user) { @@ -243,18 +254,24 @@ if (empty($messages) === true) { } if ($show_sent === true) { - $data[2] = ''; + $pathSubject = 'index.php?sec=message_list&sec2=operation/messages/message_edit&read_message=1&show_sent=1&id_message='.$message_id; } else { - $data[2] = ''; + $pathSubject = 'index.php?sec=message_list&sec2=operation/messages/message_edit&read_message=1&id_message='.$message_id; } - if ($message['subject'] == '') { - $data[2] .= __('No Subject'); - } else { - $data[2] .= $message['subject']; + $contentSubject = (empty($message['subject']) === true) ? __('No Subject') : $message['subject']; + + if ((int) $message['read'] !== 1) { + $contentSubject = ''.$contentSubject.''; } - $data[2] .= ''; + $data[2] .= html_print_anchor( + [ + 'href' => $pathSubject, + 'content' => $contentSubject, + ], + true + ); $data[3] = ui_print_timestamp( $message['timestamp'], @@ -264,13 +281,27 @@ if (empty($messages) === true) { $table->cellclass[][4] = 'table_action_buttons'; if ($show_sent === true) { - $data[4] = ''.html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']).''; + $pathDelete = 'index.php?sec=message_list&sec2=operation/messages/message_list&show_sent=1&delete_message=1&id='.$message_id; } else { - $data[4] = ''.html_print_image('images/cross.png', true, ['title' => __('Delete'), 'class' => 'invert_filter']).''; + $pathDelete = 'index.php?sec=message_list&sec2=operation/messages/message_list&delete_message=1&id='.$message_id; } + $data[4] = html_print_anchor( + [ + 'href' => $pathDelete, + 'content' => html_print_image( + 'images/delete.svg', + true, + [ + 'title' => __('Delete'), + 'class' => 'main_menu_icon invert_filter', + ] + ), + 'onClick' => 'javascript:if (!confirm(\''.__('Are you sure?').'\')) return false;', + ], + true + ); + array_push($table->data, $data); } } @@ -312,11 +343,8 @@ if (empty($messages) === false) { echo '
    '; - html_print_div( - [ - 'class' => 'action-buttons', - 'content' => $outputButton, - ] + html_print_action_buttons( + $outputButton ); ?> diff --git a/pandora_console/operation/reporting/reporting_viewer.php b/pandora_console/operation/reporting/reporting_viewer.php index 5c3ce7a73b..26e16c7f37 100755 --- a/pandora_console/operation/reporting/reporting_viewer.php +++ b/pandora_console/operation/reporting/reporting_viewer.php @@ -226,77 +226,52 @@ ui_print_standard_header( // ------------------- END HEADER --------------------------------------- // ------------------------ INIT FORM ----------------------------------- -$table = new stdClass(); -$table->id = 'controls_table'; -$table->width = '100%'; -$table->class = 'filter-table-adv'; +$table2 = new stdClass(); +$table2->id = 'controls_table'; +$table2->size[2] = '50%'; +$table2->size[3] = '50%'; +$table2->style[0] = 'text-align:center'; +$table2->style[1] = 'text-align:center'; +$table2->styleTable = 'border:none'; + if (defined('METACONSOLE')) { - $table->width = '100%'; - $table->class = 'databox filters'; + $table2->width = '100%'; + $table2->class = 'databox filters'; - $table->head[0] = __('View Report'); - $table->head_colspan[0] = 5; - $table->headstyle[0] = 'text-align: center'; + $table2->head[0] = __('View Report'); + $table2->head_colspan[0] = 5; + $table2->headstyle[0] = 'text-align: center'; } -$table->style = []; -$table->style[0] = 'vertical-align: middle'; -$table->rowspan[0][0] = 2; - // Set initial conditions for these controls, later will be modified by javascript if (!$enable_init_date) { - $table->style[1] = 'display: none'; - $table->style[2] = 'display: flex;align-items: baseline;'; $display_to = 'none'; $display_item = ''; } else { - $table->style[1] = 'display: "block"'; - $table->style[2] = 'display: flex;align-items: baseline;'; $display_to = ''; $display_item = 'none'; } -$table->size = []; -$table->colspan[0][1] = 2; -$table->data = []; -$table->data[0][0] = html_print_image( - 'images/reporting32.png', - true, - [ - 'width' => '32', - 'height' => '32', - ] -); - -if (reporting_get_description($id_report)) { - $table->data[0][1] = '
    '.reporting_get_description($id_report).'
    '; -} else { - $table->data[0][1] = '
    '.reporting_get_name($id_report).'
    '; -} - -$table->data[0][1] .= '
    '.__('Set initial date').html_print_checkbox('enable_init_date', 1, $enable_init_date, true).'
    '; - $html_menu_export = enterprise_hook('reporting_print_button_export'); if ($html_menu_export === ENTERPRISE_NOT_HOOK) { $html_menu_export = ''; } -$table->data[0][1] .= '
    '; -$table->data[0][1] .= $html_menu_export; +$table2->data[0][2] = '
    '.__('Set initial date').'
    '.html_print_checkbox_switch('enable_init_date', 1, $enable_init_date, true).'

    '; +$table2->data[0][2] .= '
    '.__('From').':
    '; +$table2->data[0][2] .= html_print_input_text('date_init', $date_init, '', 12, 10, true).' '; +$table2->data[0][2] .= html_print_input_text('time_init', $time_init, '', 10, 7, true).' '; +$table2->data[0][2] .= '
    '.__('Items period before').':
    '; +$table2->data[0][2] .= '
    '.__('to').':
    '; +$table2->data[0][2] .= html_print_input_text('date', $date, '', 12, 10, true).' '; +$table2->data[0][2] .= html_print_input_text('time', $time, '', 10, 7, true).' '; +$table2->data[0][3] = $html_menu_export; -$table->data[1][1] = '
    '.__('From').':
    '; -$table->data[1][1] .= html_print_input_text('date_init', $date_init, '', 12, 10, true).' '; -$table->data[1][1] .= html_print_input_text('time_init', $time_init, '', 10, 7, true).' '; -$table->data[1][2] = '
    '.__('Items period before').':
    '; -$table->data[1][2] .= '
    '.__('to').':
    '; -$table->data[1][2] .= html_print_input_text('date', $date, '', 12, 10, true).' '; -$table->data[1][2] .= html_print_input_text('time', $time, '', 10, 7, true).' '; - $searchForm = '
    '; -$searchForm .= html_print_table($table, true); +$searchForm .= html_print_table($table2, true); $searchForm .= html_print_input_hidden('id_report', $id_report, true); $Actionbuttons .= html_print_submit_button( @@ -354,10 +329,6 @@ for ($i = 0; $i < count($report['contents']); $i++) { reporting_html_print_report($report, false, $config['custom_report_info']); -// ---------------------------------------------------------------------- -// The rowspan of the first row is only 2 in controls table. Why is used the same code here and in the items?? -$table->rowspan[0][0] = 1; - echo '
    '; echo html_print_image('images/wait.gif', true, ['border' => '0']); echo ''.__('Loading').'...'; @@ -387,16 +358,15 @@ $(document).ready (function () { secondText: '', currentText: '', closeText: ''}); - + $.datepicker.setDefaults($.datepicker.regional[ ""]); - + $("#text-date").datepicker({ dateFormat: "", changeMonth: true, changeYear: true, showAnim: "slideDown"}); - - + $('[id^=text-time_init]').timepicker({ showSecond: true, timeFormat: '', @@ -407,29 +377,23 @@ $(document).ready (function () { secondText: '', currentText: '', closeText: ''}); - + $('[id^=text-date_init]').datepicker ({ dateFormat: "", changeMonth: true, changeYear: true, showAnim: "slideDown"}); - - - $("*", "#controls_table-0").css("display", ""); //Re-show the first row of form. - + /* Show/hide begin date reports controls */ $("#checkbox-enable_init_date").click(function() { flag = $("#checkbox-enable_init_date").is(':checked'); if (flag == true) { - $("#controls_table-1-1").css("display", ""); - $("#controls_table-1-2").css("display", ""); $("#string_to").show(); + $('#string_from').show(); $("#string_items").hide(); - } - else { - $("#controls_table-1-1").css("display", "none"); - $("#controls_table-1-2").css("display", ""); + } else { $("#string_to").hide(); + $('#string_from').hide(); $("#string_items").show(); } }); diff --git a/pandora_console/operation/snmpconsole/snmp_browser.php b/pandora_console/operation/snmpconsole/snmp_browser.php index 3bcb2be975..9831d7ba64 100644 --- a/pandora_console/operation/snmpconsole/snmp_browser.php +++ b/pandora_console/operation/snmpconsole/snmp_browser.php @@ -50,11 +50,11 @@ if ($config['pure']) { // Windowed. $link['text'] = ''; $link['text'] .= html_print_image( - 'images/normal_screen.png', + 'images/exit_fullscreen@svg.svg', true, [ 'title' => __('Normal screen'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ); $link['text'] .= ''; @@ -62,11 +62,11 @@ if ($config['pure']) { // Fullscreen. $link['text'] = ''; $link['text'] .= html_print_image( - 'images/full_screen.png', + 'images/fullscreen@svg.svg', true, [ 'title' => __('Full screen'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ); $link['text'] .= ''; diff --git a/pandora_console/operation/snmpconsole/snmp_statistics.php b/pandora_console/operation/snmpconsole/snmp_statistics.php index 56109aa04c..0ebc548496 100755 --- a/pandora_console/operation/snmpconsole/snmp_statistics.php +++ b/pandora_console/operation/snmpconsole/snmp_statistics.php @@ -39,20 +39,20 @@ $refr = (int) get_parameter('refr', 0); $fullscreen = []; if ($config['pure']) { $fullscreen['text'] = ''.html_print_image( - 'images/normal_screen.png', + 'images/exit_fullscreen@svg.svg', true, [ 'title' => __('Normal screen'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).''; } else { $fullscreen['text'] = ''.html_print_image( - 'images/full_screen.png', + 'images/fullscreen@svg.svg', true, [ 'title' => __('Full screen'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).''; } @@ -60,11 +60,11 @@ if ($config['pure']) { // List $list = []; $list['text'] = ''.html_print_image( - 'images/op_snmp.png', + 'images/SNMP-network-numeric-data@svg.svg', true, [ 'title' => __('List'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).''; @@ -72,11 +72,11 @@ $list['text'] = ''.html_print_image( - 'images/op_reporting.png', + 'images/logs@svg.svg', true, [ 'title' => __('Statistics'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).''; diff --git a/pandora_console/operation/snmpconsole/snmp_view.php b/pandora_console/operation/snmpconsole/snmp_view.php index 9f0f9e44f8..f5c967972c 100755 --- a/pandora_console/operation/snmpconsole/snmp_view.php +++ b/pandora_console/operation/snmpconsole/snmp_view.php @@ -14,7 +14,7 @@ * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| * * ============================================================================ - * Copyright (c) 2005-2022 Artica Soluciones Tecnologicas + * Copyright (c) 2005-2023 Artica Soluciones Tecnologicas * Please see http://pandorafms.org for full contribution list * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/pandora_console/operation/users/user_edit_header.php b/pandora_console/operation/users/user_edit_header.php index ea698e1355..50cb5c52fc 100644 --- a/pandora_console/operation/users/user_edit_header.php +++ b/pandora_console/operation/users/user_edit_header.php @@ -77,28 +77,28 @@ if (is_metaconsole()) { user_meta_print_header(); $urls['main'] = 'index.php?sec=advanced&sec2=advanced/users_setup&tab=user_edit'; } else { - $urls['main'] = 'index.php?sec=workspace&sec2=operation/users/user_edit'; + $urls['main'] = 'index.php?sec=gusuarios&sec2=godmode/users/user_list'; $urls['notifications'] = 'index.php?sec=workspace&sec2=operation/users/user_edit_notifications'; $buttons = [ 'main' => [ - 'active' => $_GET['sec2'] === 'operation/users/user_edit', + 'active' => $_GET['sec2'] === 'godmode/users/user_list&tab=user&pure=0', 'text' => "".html_print_image( - 'images/user.png', + 'images/user.svg', true, [ 'title' => __('User management'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).'', ], 'notifications' => [ 'active' => $_GET['sec2'] === 'operation/users/user_edit_notifications', 'text' => "".html_print_image( - 'images/alerts_template.png', + 'images/alert@svg.svg', true, [ 'title' => __('User notifications'), - 'class' => 'invert_filter', + 'class' => 'main_menu_icon invert_filter', ] ).'', ], diff --git a/pandora_console/operation/users/user_edit_notifications.php b/pandora_console/operation/users/user_edit_notifications.php index 4228c16543..e511eb0b92 100644 --- a/pandora_console/operation/users/user_edit_notifications.php +++ b/pandora_console/operation/users/user_edit_notifications.php @@ -15,7 +15,7 @@ * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| * * ============================================================================ - * Copyright (c) 2005-2021 Artica Soluciones Tecnologicas + * Copyright (c) 2005-2023 Artica Soluciones Tecnologicas * Please see http://pandorafms.org for full contribution list * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -58,7 +58,7 @@ if (get_parameter('change_label', 0)) { } -echo '
    +echo '
    '.__('Enable').'
    @@ -91,8 +91,9 @@ foreach ($sources as $source) { } if ((bool) $disabled_flag === true) { - $s = __('Controls have been disabled by the system administrator'); - echo ''.$s.''; + ui_print_warning_message( + __('Controls have been disabled by the system administrator') + ); } echo '
    '; diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec index d4d603403c..eb62c05265 100644 --- a/pandora_console/pandora_console.redhat.spec +++ b/pandora_console/pandora_console.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.769 -%define release 230307 +%define release 230308 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec index 77dfd3a0de..abdbaf546a 100644 --- a/pandora_console/pandora_console.rhel7.spec +++ b/pandora_console/pandora_console.rhel7.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.769 -%define release 230307 +%define release 230308 # User and Group under which Apache is running %define httpd_name httpd diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec index 8010510fa4..dfc00451f9 100644 --- a/pandora_console/pandora_console.spec +++ b/pandora_console/pandora_console.spec @@ -3,7 +3,7 @@ # %define name pandorafms_console %define version 7.0NG.769 -%define release 230307 +%define release 230308 %define httpd_name httpd # User and Group under which Apache is running %define httpd_name apache2 diff --git a/pandora_console/views/calendar/edit.php b/pandora_console/views/calendar/edit.php index 905c77801b..06d8b93d01 100644 --- a/pandora_console/views/calendar/edit.php +++ b/pandora_console/views/calendar/edit.php @@ -34,19 +34,19 @@ if (\is_metaconsole() === true) { \alerts_meta_print_header($tabs); } else { // Header. - \ui_print_page_header( - // Title. - __('Calendars Edit'), - // Icon. + \ui_print_standard_header( + __('Alerts'), 'images/gm_alerts.png', - // Return. false, - // Help. 'alert_special_days', - // Godmode. true, - // Options. - $tabs + $tabs, + [ + [ + 'link' => '', + 'label' => __('Calendars Edit'), + ], + ] ); } @@ -114,19 +114,24 @@ $inputs[] = [ 'rows' => 50, 'columns' => 30, ], + 'class' => 'w100p', ]; - +$button_create = ''; if ($is_management_allowed === true) { // Submit. - $inputs[] = [ - 'arguments' => [ - 'name' => 'button', - 'label' => (($create === true) ? __('Create') : __('Update')), - 'type' => 'submit', - 'attributes' => 'class="sub next"', - ], - ]; + html_print_action_buttons( + html_print_submit_button( + (($create === true) ? __('Create') : __('Update')), + 'button', + false, + [ + 'icon' => 'wand', + 'form' => 'create_specia_days', + ], + true + ) + ); } // Print form. @@ -135,6 +140,8 @@ HTML::printForm( 'form' => [ 'action' => $url.'&op=edit&action=save&id='.$calendar->id(), 'method' => 'POST', + 'id' => 'create_specia_days', + 'class' => 'aaaa', ], 'inputs' => $inputs, ], diff --git a/pandora_console/views/calendar/list.php b/pandora_console/views/calendar/list.php index 25589ff15f..3e8e924a7d 100644 --- a/pandora_console/views/calendar/list.php +++ b/pandora_console/views/calendar/list.php @@ -101,7 +101,7 @@ try { [ 'id' => $tableId, 'class' => 'info_table', - 'style' => 'width: 100%', + 'style' => 'width: 99%', 'columns' => $columns, 'column_names' => $column_names, 'ajax_url' => $ajax_url, @@ -117,12 +117,14 @@ try { [ 'label' => __('Free search'), 'type' => 'text', - 'class' => 'mw250px', + 'class' => 'w25p', 'id' => 'free_search', 'name' => 'free_search', ], ], ], + 'filter_main_class' => 'box-flat white_table_graph fixed_filter_bar', + 'dom_elements' => 'lftpB', ] ); } catch (Exception $e) { @@ -130,7 +132,7 @@ try { } if ((bool) check_acl($config['id_user'], 0, 'LM') === true) { - HTML::printForm( + $form_create = HTML::printForm( [ 'form' => [ 'action' => $url.'&op=edit', @@ -142,10 +144,12 @@ if ((bool) check_acl($config['id_user'], 0, 'LM') === true) { 'name' => 'button', 'label' => __('Create'), 'type' => 'submit', - 'attributes' => 'class="sub next"', + 'attributes' => ['icon' => 'wand'], ], ], ], - ] + ], + true ); + html_print_action_buttons($form_create); } diff --git a/pandora_console/views/calendar/special_days.php b/pandora_console/views/calendar/special_days.php index 659eb7283a..905a057f05 100644 --- a/pandora_console/views/calendar/special_days.php +++ b/pandora_console/views/calendar/special_days.php @@ -35,19 +35,19 @@ if (\is_metaconsole() === true) { \alerts_meta_print_header($tabs); } else { // Header. - \ui_print_page_header( - // Title. - __('Special days'), - // Icon. + ui_print_standard_header( + __('Alerts'), 'images/gm_alerts.png', - // Return. false, - // Help. 'alert_special_days', - // Godmode. true, - // Options. - $tabs + $tabs, + [ + [ + 'link' => '', + 'label' => __('Special days'), + ], + ] ); } @@ -85,6 +85,7 @@ $inputs[] = [ 'rows' => 10, 'options' => ['required' => 1], ], + 'class' => 'flex flex_column', ]; $days = []; @@ -104,6 +105,7 @@ $inputs[] = [ 'type' => 'select', 'fields' => $days, ], + 'class' => 'mrgn_right_20px', ]; // Group. @@ -114,6 +116,7 @@ $inputs[] = [ 'returnAllGroup' => true, 'name' => 'id_group', ], + 'class' => 'mrgn_right_20px', ]; // Group. @@ -128,6 +131,7 @@ $inputs[] = [ 'id' => 'overwrite', 'disabled_hidden' => true, ], + 'class' => 'flex flex_column', ]; // Submit. @@ -136,23 +140,39 @@ $inputs[] = [ 'name' => 'button', 'label' => __('Upload'), 'type' => 'submit', - 'attributes' => 'class="sub next"', + 'attributes' => [ + 'icon' => 'wand', + 'class' => 'mini', + ], ], ]; if ($is_management_allowed === true) { // Print form. - HTML::printForm( + $form_upload = HTML::printForm( [ 'form' => [ 'action' => $url.'&op=upload_ical&id='.$id_calendar, 'method' => 'POST', 'id' => 'icalendar-special-days', 'enctype' => 'multipart/form-data', + 'class' => 'calendar-upload-form', ], 'inputs' => $inputs, ], - false + true + ); + + ui_toggle( + $form_upload, + ''.__('Upload').'', + __('Upload'), + 'upload', + true, + false, + '', + 'white-box-content no_border', + 'filter-datatable-main box-flat white_table_graph fixed_filter_bar ' ); } @@ -216,7 +236,7 @@ for ($month = 1; $month <= 12; $month++) { $cal_table = new stdClass(); $cal_table->width = '100%'; - $cal_table->class = 'databox data'; + $cal_table->class = 'databox data special-days-thead'; $cal_table->data = []; $cal_table->head = []; @@ -238,7 +258,7 @@ for ($month = 1; $month <= 12; $month++) { $cal_table->size[6] = '14%'; $cal_table->align = []; $cal_table->border = '1'; - $cal_table->titlestyle = 'text-align:center; font-weight: bold;'; + $cal_table->titlestyle = 'text-align:center;'; switch ($display_month) { case 1: $cal_table->title = __('January'); @@ -467,7 +487,7 @@ for ($month = 1; $month <= 12; $month++) { } if ((bool) check_acl($config['id_user'], 0, 'LM') === true) { - HTML::printForm( + $form_create = HTML::printForm( [ 'form' => [ 'action' => $url.'&op=edit', @@ -479,12 +499,14 @@ if ((bool) check_acl($config['id_user'], 0, 'LM') === true) { 'name' => 'button', 'label' => __('Create'), 'type' => 'submit', - 'attributes' => 'class="sub next"', + 'attributes' => ['icon' => 'wand'], ], ], ], - ] + ], + true ); + html_print_action_buttons($form_create); } echo ''; diff --git a/pandora_console/views/calendar/special_days_edit.php b/pandora_console/views/calendar/special_days_edit.php index 1e86a27466..09c7725ebf 100644 --- a/pandora_console/views/calendar/special_days_edit.php +++ b/pandora_console/views/calendar/special_days_edit.php @@ -156,14 +156,18 @@ $inputs[] = [ if ($is_management_allowed === true) { // Submit. - $inputs[] = [ - 'arguments' => [ - 'name' => 'button', - 'label' => (($create === true) ? __('Create') : __('Update')), - 'type' => 'submit', - 'attributes' => 'class="sub next"', - ], - ]; + html_print_action_buttons( + html_print_submit_button( + (($create === true) ? __('Create') : __('Update')), + 'button', + false, + [ + 'icon' => 'wand', + 'form' => 'form-special-days', + ], + true + ) + ); } // Print form. diff --git a/pandora_server/DEBIAN/control b/pandora_server/DEBIAN/control index 18f8e0b57b..cb6fda43f4 100644 --- a/pandora_server/DEBIAN/control +++ b/pandora_server/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-server -Version: 7.0NG.769-230307 +Version: 7.0NG.769-230308 Architecture: all Priority: optional Section: admin diff --git a/pandora_server/DEBIAN/make_deb_package.sh b/pandora_server/DEBIAN/make_deb_package.sh index 4e6df8422b..c99e58931e 100644 --- a/pandora_server/DEBIAN/make_deb_package.sh +++ b/pandora_server/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.769-230307" +pandora_version="7.0NG.769-230308" package_cpan=0 package_pandora=1 diff --git a/pandora_server/lib/PandoraFMS/Config.pm b/pandora_server/lib/PandoraFMS/Config.pm index d9be514599..7bf9e9f9c6 100644 --- a/pandora_server/lib/PandoraFMS/Config.pm +++ b/pandora_server/lib/PandoraFMS/Config.pm @@ -46,7 +46,7 @@ our @EXPORT = qw( # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.769"; -my $pandora_build = "230307"; +my $pandora_build = "230308"; our $VERSION = $pandora_version." ".$pandora_build; # Setup hash diff --git a/pandora_server/lib/PandoraFMS/PluginTools.pm b/pandora_server/lib/PandoraFMS/PluginTools.pm index fdd2825106..2bfc545a3f 100644 --- a/pandora_server/lib/PandoraFMS/PluginTools.pm +++ b/pandora_server/lib/PandoraFMS/PluginTools.pm @@ -34,7 +34,7 @@ our @ISA = qw(Exporter); # version: Defines actual version of Pandora Server for this module only my $pandora_version = "7.0NG.769"; -my $pandora_build = "230307"; +my $pandora_build = "230308"; our $VERSION = $pandora_version." ".$pandora_build; our %EXPORT_TAGS = ( 'all' => [ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 205a8ef850..a4738c6552 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_server %define version 7.0NG.769 -%define release 230307 +%define release 230308 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 2cc1e07821..b108390a3d 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -4,7 +4,7 @@ %global __os_install_post %{nil} %define name pandorafms_server %define version 7.0NG.769 -%define release 230307 +%define release 230308 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 6479a6943a..2a76611dde 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.769" -PI_BUILD="230307" +PI_BUILD="230308" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 3ddb47ab77..ce08881710 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -35,7 +35,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.769 Build 230307"; +my $version = "7.0NG.769 Build 230308"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index e5eec498f7..0b193ab6c6 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.769 Build 230307"; +my $version = "7.0NG.769 Build 230308"; # save program name for logging my $progname = basename($0);