diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index 52ed76bd6b..61793193af 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -1854,6 +1854,272 @@ function html_print_select_multiple_modules_filtered(array $data):string } +/** + * Form multiple inputs for slect groups. + * + * @param array $data Data inputs. + * + * @return string Html output. + */ +function html_print_select_multiple_modules_filtered_formated(array $data):string +{ + if (is_ajax() === true) { + ui_require_javascript_file( + 'multiselect_filtered', + 'include/javascript/', + true + ); + ui_require_css_file( + 'multiselect_filtered', + 'include/styles/', + true + ); + } else { + ui_require_javascript_file('multiselect_filtered'); + ui_require_css_file('multiselect_filtered'); + } + + $uniqId = $data['uniqId']; + + $return_all_group = isset($data['mReturnAllGroup']) ? $data['mReturnAllGroup'] : true; + + // Group. + $output = '
'; + $output .= html_print_input( + [ + 'label' => __('Group'), + 'label_class' => 'font-title-font', + 'name' => 'filtered-module-group-'.$uniqId, + 'returnAllGroup' => $return_all_group, + 'privilege' => 'AR', + 'type' => 'select_groups', + 'return' => true, + 'script' => 'fmAgentChange(\''.$uniqId.'\')', + 'selected' => $data['mGroup'], + ] + ); + + // Groups module. + $module_groups = db_get_all_rows_sql( + 'SELECT * FROM tmodule_group ORDER BY name' + ); + $module_groups = array_reduce( + $module_groups, + function ($carry, $item) { + $carry[$item['id_mg']] = $item['name']; + return $carry; + } + ); + + $output .= html_print_input( + [ + 'label' => __('Module group'), + 'label_class' => 'font-title-font', + 'type' => 'select', + 'fields' => $module_groups, + 'name' => 'filtered-module-module-group-'.$uniqId, + 'selected' => $data['mModuleGroup'], + 'return' => true, + 'nothing' => __('All'), + 'nothing_value' => 0, + 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', + ] + ); + $output .= '
'; + $output .= '
'; + + // Recursion. + $output .= html_print_input( + [ + 'label' => __('Recursion'), + 'label_class' => 'font-title-font', + 'type' => 'switch', + 'name' => 'filtered-module-recursion-'.$uniqId, + 'value' => (empty($data['mRecursion']) === true) ? false : true, + 'checked' => (empty($data['mRecursion']) === true) ? false : true, + 'return' => true, + 'id' => 'filtered-module-recursion-'.$uniqId, + 'onchange' => 'fmAgentChange(\''.$uniqId.'\')', + ] + ); + + $commonModules = 0; + if (empty($data['mShowCommonModules']) === false) { + $commonModules = 1; + } + + $output .= html_print_input( + [ + 'label' => __('Only common modules'), + 'label_class' => 'font-title-font', + 'type' => 'switch', + 'checked' => $commonModules, + 'value' => $commonModules, + 'name' => 'filtered-module-show-common-modules-'.$uniqId, + 'id' => 'filtered-module-show-common-modules-'.$uniqId, + 'return' => true, + 'onchange' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', + ] + ); + + $output .= '
'; + + if (empty($data['searchBar']) === false && $data['searchBar'] === true) { + $output .= '
'; + + $output .= '
'; + $output .= html_print_input( + [ + 'type' => 'text', + 'name' => 'agent-searchBar-'.$uniqId, + 'onKeyUp' => 'searchAgent(\''.$uniqId.'\')', + 'placeholder' => __('Type to search agents'), + 'return' => true, + ] + ); + + $output .= '
'; + + $output .= '
'; + $output .= html_print_input( + [ + 'type' => 'text', + 'name' => 'module-searchBar-'.$uniqId, + 'onKeyUp' => 'searchModule(\''.$uniqId.'\')', + 'return' => true, + 'placeholder' => __('Type to search modules'), + ] + ); + + $output .= '
'; + + $output .= '
'; + } + + $output .= '
'; + // Agent. + $agents = agents_get_group_agents( + // Id_group. + $data['mGroup'], + // Search. + false, + // Case. + 'lower', + // NoACL. + false, + // ChildGroups. + false, + // Serialized. + false, + // Separator. + '|', + // Add_alert_bulk_op. + false, + // Force_serialized. + false, + // Meta_fields. + ($data['mMetaFields'] ?? is_metaconsole()) + ); + + if ((empty($agents)) === true || $agents == -1) { + $agents = []; + } + + if ($data['mShowSelectedOtherGroups']) { + $selected_agents = explode(',', $data['mAgents']); + foreach ($selected_agents as $agent_id) { + if (!array_key_exists($agent_id, $agents)) { + $agents[$agent_id] = agents_get_alias($agent_id); + } + } + } + + if (is_metaconsole() === true) { + $output .= html_print_input( + [ + 'label' => __('Agents'), + 'label_class' => 'font-title-font', + 'type' => 'select', + 'fields' => $agents, + 'name' => 'filtered-module-agents-'.$uniqId, + 'selected' => explode(',', $data['mAgents']), + 'return' => true, + 'multiple' => true, + 'style' => 'min-width: 200px;max-width:200px;', + 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', + 'placeholder' => (isset($data['placeholderAgents']) === true) ? $data['placeholderAgents'] : '', + ] + ); + } else { + $output .= html_print_input( + [ + 'label' => __('Agents'), + 'label_class' => 'font-title-font', + 'type' => 'select_from_sql', + 'sql' => 'SELECT `id_agente`,`alias` FROM tagente', + 'name' => 'filtered-module-agents-'.$uniqId, + 'selected' => explode(',', $data['mAgents']), + 'return' => true, + 'multiple' => true, + 'style' => 'min-width: 200px;max-width:200px;', + 'script' => 'fmModuleChange(\''.$uniqId.'\', '.(int) is_metaconsole().')', + 'placeholder' => (isset($data['placeholderAgents']) === true) ? $data['placeholderAgents'] : '', + ] + ); + } + + if (empty($data['mAgents']) === false + && empty($data['mModuleGroup'] === false) + ) { + $all_modules = get_modules_agents( + $data['mModuleGroup'], + explode(',', $data['mAgents']), + !$commonModules, + false, + true + ); + } else { + $all_modules = []; + } + + $mModules = $data['mModules']; + if (is_array($data['mModules']) === false) { + $mModules = explode( + ',', + $data['mModules'] + ); + } + + $result = []; + // Clean double safe input. + foreach ($mModules as $name) { + $result[] = io_safe_output($name); + } + + $output .= html_print_input( + [ + 'label' => __('Modules'), + 'label_class' => 'font-title-font', + 'type' => 'select', + 'fields' => $all_modules, + 'name' => 'filtered-module-modules-'.$uniqId, + 'selected' => $result, + 'return' => true, + 'multiple' => true, + 'style' => 'max-width:98%;', + 'input_class' => 'flex-colum-center-important', + ] + ); + + $output .= '
'; + if ($data['return'] === false) { + echo $output; + } + + return $output; +} + + /** * Prints an array of fields in a popup menu of a form based on a SQL query. * The first and second columns of the query will be used. @@ -6108,6 +6374,10 @@ function html_print_input($data, $wrapper='div', $input_only=false) $output .= html_print_select_multiple_modules_filtered($data); break; + case 'select_multiple_modules_filtered_formated': + $output .= html_print_select_multiple_modules_filtered_formated($data); + break; + case 'datalist': $output .= html_print_datalist( $data['name'], diff --git a/pandora_console/include/javascript/pandora_dashboards.js b/pandora_console/include/javascript/pandora_dashboards.js index 5a0c06b40c..2bb7faa773 100644 --- a/pandora_console/include/javascript/pandora_dashboards.js +++ b/pandora_console/include/javascript/pandora_dashboards.js @@ -1,6 +1,7 @@ /* globals $, GridStack, load_modal, TreeController, forced_title_callback, createVisualConsole, UndefineTinyMCE*/ // eslint-disable-next-line no-unused-vars function show_option_dialog(settings) { + $("#modal-config-widget").html(""); load_modal({ target: $("#modal-update-dashboard"), form: "form-update-dashboard", diff --git a/pandora_console/include/lib/Dashboard/Widgets/agent_module.php b/pandora_console/include/lib/Dashboard/Widgets/agent_module.php index f5c4ff5a96..7fa4a04fa1 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/agent_module.php +++ b/pandora_console/include/lib/Dashboard/Widgets/agent_module.php @@ -297,10 +297,10 @@ class AgentModuleWidget extends Widget } $inputs[] = [ - 'class' => 'flex flex-row', - 'id' => 'select_multiple_modules_filtered', + 'class' => 'flex flex-column', + 'id' => 'select_multiple_modules_filtered_formated', 'arguments' => [ - 'type' => 'select_multiple_modules_filtered', + 'type' => 'select_multiple_modules_filtered_formated', 'uniqId' => $this->cellId, 'mGroup' => (isset($this->values['mGroup']) === true) ? $this->values['mGroup'] : $mgroup, 'mRecursion' => (isset($this->values['mRecursion']) === true) ? $this->values['mRecursion'] : '', diff --git a/pandora_console/include/styles/agent_module_view.css b/pandora_console/include/styles/agent_module_view.css new file mode 100644 index 0000000000..8fc8733b2b --- /dev/null +++ b/pandora_console/include/styles/agent_module_view.css @@ -0,0 +1,108 @@ +#select_multiple_modules_filtered_formated { + border: 1px solid #c1c1c1; + border-radius: 10px; + width: auto; +} + +#select_multiple_modules_filtered_formated > div { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 5px; +} + +#select_multiple_modules_filtered_formated > div > div { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + flex-wrap: wrap; + width: 48%; +} + +#select_multiple_modules_filtered_formated .recursive-modules { + flex: auto; + width: 100%; +} + +#select_multiple_modules_filtered_formated .recursive-modules > div { + flex-direction: row-reverse; + justify-content: flex-end; +} + +#select_multiple_modules_filtered_formated .recursive-modules > div > label { + max-width: unset; + font-weight: unset; +} + +#select_multiple_modules_filtered_formated > div > div > select { + min-width: 250px !important; +} + +#select_multiple_modules_filtered_formated > div > div > .select2 { + min-width: 250px !important; +} + +form.modal-dashboard ul.wizard li { + align-items: flex-start; +} + +form.modal-dashboard ul.wizard li label { + max-width: 100% !important; + width: 100%; +} + +.flex-colum-center-important > select { + width: 95%; + height: 119px; + min-height: auto; +} + +.wizard > li:nth-of-type(1) { + display: flex !important; + flex-direction: column !important; + grid-area: titulo; +} + +.wizard > li:nth-of-type(1) > input { + width: 100%; +} + +.wizard > li:nth-of-type(2) { + grid-area: color; + display: flex !important; + flex-direction: column !important; +} + +.wizard > li:nth-of-type(3) { + grid-area: show; + display: flex !important; + flex-direction: column !important; +} + +ul.wizard > li.flex-row > label { + width: 100%; + max-width: 100% !important; + min-height: 30px; +} + +.wizard > li:nth-of-type(4) { + grid-area: todo; + width: 100% !important; +} + +ul.wizard { + display: grid; + grid-template: + "titulo show color" + "todo todo todo"; + grid-template-columns: 40% 40% 20%; +} + +#wr_background > input { + background-color: #f6f7fb; + padding: 5px; + border-radius: 10px; + border: 1px solid #8a96a6; +} diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 30fcd35dd3..824a6c363a 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -12034,10 +12034,20 @@ div[role="dialog"] { align-items: center; } +.flex-colum-center-important { + display: flex !important; + flex-direction: column !important; + align-items: center !important; +} + .flex-colum-center > img { margin: 5px; } +.flex-none { + flex: none !important; +} + .space-between { justify-content: space-between; } diff --git a/pandora_console/views/dashboard/configurationWidgets.php b/pandora_console/views/dashboard/configurationWidgets.php index 24f2019f86..373094bfe7 100644 --- a/pandora_console/views/dashboard/configurationWidgets.php +++ b/pandora_console/views/dashboard/configurationWidgets.php @@ -32,6 +32,7 @@ ui_require_javascript_file('tinymce', 'vendor/tinymce/tinymce/', true); ui_require_javascript_file('pandora', 'include/javascript/', true); $output = ''; +$widgetId = json_decode(io_safe_output(get_parameter('extradata')), true)['widgetId']; $form = [ 'action' => '#', @@ -64,4 +65,8 @@ HTML::printForm( ] ); +if ($widgetId == '10') { + $output .= ui_require_css_file('agent_module_view', 'include/styles/', true, true); +} + echo $output;