From 734341bf2d1c57321ff7741cfe43de7794f7b5bb Mon Sep 17 00:00:00 2001 From: Luis Date: Mon, 30 Nov 2020 14:52:03 +0100 Subject: [PATCH] Ent 6148 new report permissions --- .../reporting_builder.item_editor.php | 196 ++++++++++++++++-- .../godmode/reporting/reporting_builder.php | 16 ++ .../godmode/users/configure_user.php | 2 + pandora_console/godmode/users/user_list.php | 47 +++++ pandora_console/include/constants.php | 3 + pandora_console/include/functions_html.php | 60 ++++-- .../include/functions_reporting.php | 129 ++++++++++++ .../include/functions_reporting_html.php | 118 +++++++++++ pandora_console/include/functions_reports.php | 31 +-- pandora_console/include/functions_users.php | 33 ++- .../javascript/multiselect_filtered.js | 8 +- .../include/styles/multiselect_filtered.css | 19 +- pandora_console/include/styles/pandora.css | 7 + 13 files changed, 613 insertions(+), 56 deletions(-) diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index c2dc30cf22..c635773ce7 100755 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -156,6 +156,11 @@ $agent_max_value = true; $agent_min_value = true; $uncompressed_module = true; +// Users. +$id_users = []; +$users_groups = []; +$select_by_group = false; + $nothing = __('Local metaconsole'); $nothing_value = 0; @@ -752,6 +757,22 @@ switch ($action) { $top_n_value = $item['top_n_value']; break; + case 'permissions_report': + $description = $item['description']; + $es = json_decode($item['external_source'], true); + $id_users = array_combine( + array_values($es['id_users']), + array_values($es['id_users']) + ); + + if (isset($id_users[0]) && $id_users[0] == 0) { + $id_users[0] = __('None'); + } + + $users_groups = $es['users_groups']; + $select_by_group = $es['select_by_group']; + break; + default: // It's not possible. break; @@ -1046,23 +1067,6 @@ $class = 'databox filters'; - - - - - - - - - + + + + + + + + + + + + + + + + $user) { + $select_users[$user['id_user']] = $user['id_user']; + } + + $input_data = [ + 'type' => 'select_multiple_filtered', + 'class' => 'w80p mw600px', + 'name' => 'id_users', + 'return' => 0, + 'available' => array_diff( + $select_users, + $id_users + ), + 'selected' => $id_users, + 'group_filter' => [ + 'page' => 'godmode/users/user_list', + 'method' => 'get_users_by_group', + 'nothing' => __('Unnasigned group'), + 'nothing_value' => -1, + 'id' => $id_users, + ], + 'texts' => [ + 'title-left' => 'Available users', + 'title-right' => 'Selected users', + 'filter-item' => 'Filter user name', + ], + 'sections' => [ + 'filters' => 1, + 'item-selected-filters' => 0, + ], + ]; + + html_print_input($input_data, 'div', true); + ?> + + + + + + + + + + + + ".__('Please checked a custom interval option.').'

'; echo ''; +echo "'; + +echo "'; + ui_require_javascript_file( 'pandora_inventory', ENTERPRISE_DIR.'/include/javascript/' @@ -3936,6 +4043,20 @@ $(document).ready (function () { }); }); + $("#checkbox-select_by_group").change(function () { + var select_by_group = $('#checkbox-select_by_group').prop('checked'); + + if(select_by_group == true) { + $("#row_users").hide(); + $("#row_profiles_group").show(); + + } else { + $("#row_users").show(); + $("#row_profiles_group").hide(); + + } + }); + $("#checkbox-fullscale").change(function(e){ if(e.target.checked === true) { $("#graph_render").prop('disabled', 'disabled'); @@ -3999,6 +4120,16 @@ $(document).ready (function () { return false; } break; + case 'permissions_report': + if ($("#checkbox-select_by_group").prop("checked") && $("select#users_groups>option:selected").val() == undefined) { + dialog_message('#message_no_group'); + return false; + } + if ($("#checkbox-select_by_group").prop("checked") == false && $("select#selected-select-id_users>option:selected").val() == 0) { + dialog_message('#message_no_user'); + return false; + } + break; default: break; } @@ -4120,6 +4251,18 @@ $(document).ready (function () { return false; } break; + + case 'permissions_report': + if ($("#checkbox-select_by_group").prop("checked") && $("select#users_groups>option:selected").val() == undefined) { + dialog_message('#message_no_group'); + return false; + } + if ($("#checkbox-select_by_group").prop("checked") == false && $("select#selected-select-id_users>option:selected").val() == 0) { + dialog_message('#message_no_user'); + return false; + } + break; + default: break; } @@ -5006,6 +5149,10 @@ function chooseType() { $("#row_select_fields2").hide(); $("#row_select_fields3").hide(); $("#row_uncompressed_module").hide(); + $("#row_users").hide(); + $("#row_profiles_group").hide(); + $("#row_select_by_group").hide(); + // SLA list default state. $("#sla_list").hide(); @@ -5690,7 +5837,21 @@ function chooseType() { $("#row_period").show(); $("#row_quantity").show(); break; + + case 'permissions_report': + $("#row_description").show(); + $("#row_users").show(); + $("#row_profiles_group").show(); + $("#row_select_by_group").show(); + + if($("#checkbox-select_by_group").prop("checked")) { + $("#row_users").hide(); + } else { + $("#row_profiles_group").hide(); + } + } + switch (type) { case 'event_report_agent': case 'simple_graph': @@ -5779,4 +5940,5 @@ function dialog_message(message_id) { } }); } + diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php index 724be2b1d5..a550e9768a 100755 --- a/pandora_console/godmode/reporting/reporting_builder.php +++ b/pandora_console/godmode/reporting/reporting_builder.php @@ -2054,6 +2054,14 @@ switch ($action) { } break; + case 'permissions_report': + $es['id_users'] = get_parameter('selected-select-id_users', 0); + $es['users_groups'] = get_parameter('users_groups', 0); + $es['select_by_group'] = get_parameter('select_by_group', 0); + $description = get_parameter('description'); + $values['external_source'] = json_encode($es); + break; + default: // Default. break; @@ -2669,6 +2677,14 @@ switch ($action) { } break; + case 'permissions_report': + $es['id_users'] = get_parameter('selected-select-id_users'); + $es['users_groups'] = get_parameter('users_groups', 0); + $es['select_by_group'] = get_parameter('select_by_group', 0); + $description = get_parameter('description'); + $values['external_source'] = json_encode($es); + break; + default: // Default. break; diff --git a/pandora_console/godmode/users/configure_user.php b/pandora_console/godmode/users/configure_user.php index d13e9bc227..f9618b64a1 100644 --- a/pandora_console/godmode/users/configure_user.php +++ b/pandora_console/godmode/users/configure_user.php @@ -196,6 +196,8 @@ if (is_ajax()) { } } + + $tab = get_parameter('tab', 'user'); if ($id) { diff --git a/pandora_console/godmode/users/user_list.php b/pandora_console/godmode/users/user_list.php index 783c22c8af..77ca07acce 100644 --- a/pandora_console/godmode/users/user_list.php +++ b/pandora_console/godmode/users/user_list.php @@ -33,6 +33,53 @@ if (! check_acl($config['id_user'], 0, 'UM')) { exit; } +if (is_ajax()) { + $method = get_parameter('method'); + $group_id = get_parameter('group_id'); + $group_recursion = (bool) get_parameter('group_recursion', 0); + $return_all = false; + + if ($group_id == -1) { + $sql = 'SELECT tusuario.id_user FROM tusuario + LEFT OUTER JOIN tusuario_perfil + ON tusuario.id_user = tusuario_perfil.id_usuario + WHERE tusuario_perfil.id_usuario IS NULL'; + + $users = io_safe_output(db_get_all_rows_sql($sql)); + + foreach ($users as $key => $user) { + $ret_user[$user['id_user']] = $user['id_user']; + } + + echo json_encode($ret_user); + return; + } + + if ($group_id == 0) { + $users = io_safe_output(db_get_all_rows_filter('tusuario', [], 'id_user')); + foreach ($users as $key => $user) { + $ret_user[$user['id_user']] = $user['id_user']; + } + + echo json_encode($ret_user); + return; + } + + if ($method === 'get_users_by_group') { + if ($group_recursion === true) { + $group_id = groups_get_children_ids($group_id); + } + + $users_id = io_safe_output(users_get_user_users(false, 'AR', false, null, $group_id)); + foreach ($users_id as $key => $user_id) { + $ret_id[$user_id] = $user_id; + } + + echo json_encode($ret_id); + return; + } +} + $sortField = get_parameter('sort_field'); $sort = get_parameter('sort', 'none'); $tab = get_parameter('tab', 'user'); diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php index 258b6e805c..66b784d712 100644 --- a/pandora_console/include/constants.php +++ b/pandora_console/include/constants.php @@ -457,6 +457,9 @@ define('REPORT_OLD_TYPE_SUMATORY', 10); define('REPORT_GENERAL_NOT_GROUP_BY_AGENT', 0); define('REPORT_GENERAL_GROUP_BY_AGENT', 1); +define('REPORT_PERMISSIONS_NOT_GROUP_BY_GROUP', 0); +define('REPORT_PERMISSIONS_GROUP_BY_GROUP', 1); + define('REPORTING_CUSTOM_GRAPH_LEGEND_EACH_MODULE_VERTICAL_SIZE', 15); // POLICIES. diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index bda3a759e0..5929d25069 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -913,28 +913,45 @@ function html_print_select_multiple_filtered( $sections = []; } - if (empty($sections['filters']) === true) { + if (isset($sections['filters']) === false) { $sections['filters'] = 1; } - if (empty($sections['group-filter']) === true) { + // Show/hide all left/rigth sfilters. + if (isset($sections['item-selected-filters']) === false) { + $sections['item-selected-filters'] = 1; + } + + if (isset($sections['item-available-filters']) === false) { + $sections['item-available-filters'] = 1; + } + + if (isset($sections['group-filter']) == false) { $sections['group-filter'] = 1; } - if (empty($sections['item-available-filter']) === true) { + if (isset($sections['item-available-filter']) === false) { $sections['item-available-filter'] = 1; } - if (empty($sections['item-selected-filter']) === true) { + if (isset($sections['item-selected-filter']) === false) { $sections['item-selected-filter'] = 1; } - if (empty($group_filter) === true) { + if (isset($group_filter) === false) { $sections['group-filter'] = 0; } + if (isset($group_filter['nothing']) === false) { + $group_filter['nothing'] = ''; + } + + if (isset($group_filter['nothing_value']) === false) { + $group_filter['nothing_value'] = 0; + } + // Main container. - $output = '
'; + $output = '
'; // Left box. $output .= '
'; @@ -943,6 +960,7 @@ function html_print_select_multiple_filtered( // Filtering. if (isset($sections['filters']) === true && $sections['filters'] === 1 + && $sections['item-available-filters'] === 1 ) { // Filtering. if (isset($sections['group-filter']) === true @@ -962,6 +980,7 @@ function html_print_select_multiple_filtered( $output .= html_print_input( [ + 'input_class' => 'flex-row-vcenter', 'label' => __('Filter group'), 'name' => 'id-group-available-select-'.$rid, 'returnAllGroup' => true, @@ -969,16 +988,20 @@ function html_print_select_multiple_filtered( 'type' => 'select_groups', 'return' => true, 'script' => $reload_content, + 'nothing' => $group_filter['nothing'], + 'nothing_value' => $group_filter['nothing_value'], ] ); $output .= html_print_input( [ - 'label' => __('Group recursion'), - 'name' => 'id-group-recursion-available-select-'.$rid, - 'type' => 'checkbox', - 'script' => $reload_content, - 'return' => true, + 'label' => __('Group recursion'), + 'input_class' => 'flex-row-vcenter', + 'name' => 'id-group-recursion-available-select-'.$rid, + 'id' => 'checkbox-id-group-recursion-available-select-'.$rid, + 'type' => 'switch', + 'onchange' => $reload_content, + 'return' => true, ] ); @@ -1087,6 +1110,7 @@ function html_print_select_multiple_filtered( // Filtering. if (isset($sections['filters']) === true && $sections['filters'] === 1 + && $sections['item-selected-filters'] ) { if (isset($sections['group-filter']) === true && $sections['group-filter'] === 1 @@ -1105,6 +1129,7 @@ function html_print_select_multiple_filtered( $output .= html_print_input( [ + 'input_class' => 'flex-row-vcenter', 'label' => __('Filter group'), 'name' => 'id-group-selected-select-'.$rid, 'returnAllGroup' => true, @@ -1117,11 +1142,12 @@ function html_print_select_multiple_filtered( $output .= html_print_input( [ - 'label' => __('Group recursion'), - 'name' => 'id-group-recursion-selected-select-'.$rid, - 'type' => 'checkbox', - 'script' => $reload_content, - 'return' => true, + 'input_class' => 'flex-row-vcenter', + 'label' => __('Group recursion'), + 'name' => 'id-group-recursion-selected-select-'.$rid, + 'type' => 'checkbox', + 'script' => $reload_content, + 'return' => true, ] ); @@ -1152,7 +1178,7 @@ function html_print_select_multiple_filtered( 'label' => __($texts['filter-item']), 'name' => 'filter-item-selected-'.$rid, 'onKeyUp' => $f, - 'input_class' => 'filter w100p', + 'input_class' => 'flex-row-vcenter filter w100p', 'size' => 20, 'type' => 'text', 'return' => true, diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index 479adc67c8..3d72dcb5ca 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -694,6 +694,13 @@ function reporting_make_reporting_data( ); break; + case 'permissions_report': + $report['contents'][] = reporting_permissions( + $report, + $content + ); + break; + case 'group_report': $report['contents'][] = reporting_group_report( $report, @@ -3577,6 +3584,128 @@ function reporting_last_value($report, $content) } +function reporting_permissions($report, $content) +{ + global $config; + + $return['type'] = 'permissions_report'; + + if (empty($content['name'])) { + $content['name'] = __('Permissions report'); + } + + $return['title'] = $content['name']; + $return['landscape'] = $content['landscape']; + $return['pagebreak'] = $content['pagebreak']; + $return['description'] = $content['description']; + $return['date'] = reporting_get_date_text($report, $content); + + $external_source = io_safe_input(json_decode($content['external_source'], true)); + $id_users = $external_source['id_users']; + $id_groups = $external_source['users_groups']; + + // Select subtype: group by user or by group. + $select_by_group = $external_source['select_by_group']; + $return['subtype'] = (int) $select_by_group; + + if ($select_by_group === REPORT_PERMISSIONS_NOT_GROUP_BY_GROUP) { + foreach ($id_users as $id_user) { + $user_name = db_get_value_filter('fullname', 'tusuario', ['id_user' => $id_user]); + + $sql = sprintf( + "SELECT name, id_grupo FROM tusuario_perfil + INNER JOIN tperfil ON tperfil.id_perfil = tusuario_perfil.id_perfil + WHERE tusuario_perfil.id_usuario like '%s'", + $id_user + ); + + $profiles = db_get_all_rows_sql($sql); + + $user_profiles = []; + if (empty($profiles)) { + $user_profiles[] = __('The user doesn\'t have any assigned profile/group'); + } else { + foreach ($profiles as $user_profile) { + $user_profiles[] = $user_profile['name'].' / '.groups_get_name($user_profile['id_grupo'], true); + } + } + + $data[] = [ + 'user_id' => io_safe_output($id_user), + 'user_name' => io_safe_output($user_name), + 'user_profiles' => io_safe_output($user_profiles), + ]; + } + } else { + $group_users = []; + foreach ($id_groups as $id_group) { + if ($id_group === '') { + $group_name = __('Unnasigned group'); + $sql = 'SELECT tusuario.id_user, tusuario.fullname FROM tusuario + LEFT OUTER JOIN tusuario_perfil + ON tusuario.id_user = tusuario_perfil.id_usuario + WHERE tusuario_perfil.id_usuario IS NULL'; + $group_users = db_get_all_rows_sql($sql); + $group_name = __('Unassigned group'); + } else { + $group_name = groups_get_name($id_group, true); + $group_users = users_get_user_users( + $id_group, + 'AR', + false, + [ + 'id_user', + 'fullname', + + ], + [$id_group] + ); + } + + $row['users'] = []; + foreach ($group_users as $user) { + $id_user = $user['id_user']; + + // Get user fullanme. + $row['users'][$id_user]['fullname'] = $user['fullname']; + + if ($id_group === '') { + $row['users'][$id_user]['profiles'][] = __('The user doesn\'t have any assigned profile/group'); + } else { + // Incluide id group = 0 for 'All' profile. + $sql = sprintf( + "SELECT id_perfil FROM tusuario_perfil + WHERE id_usuario LIKE '%s' + AND ( + id_grupo LIKE '%s' + OR id_grupo LIKE '0' + )", + $id_user, + $id_group + ); + + $user_profiles_id = db_get_all_rows_sql($sql); + + foreach ($user_profiles_id as $profile_id) { + $row['users'][$id_user]['profiles'][] = profile_get_name($profile_id['id_perfil']); + } + } + } + + $data[] = [ + 'group_name' => $group_name, + 'users' => $row['users'], + ]; + } + } + + $return['data'] = []; + $return['data'] = $data; + + return reporting_check_structure_content($return); +} + + function reporting_group_configuration($report, $content) { global $config; diff --git a/pandora_console/include/functions_reporting_html.php b/pandora_console/include/functions_reporting_html.php index c501c8526f..48a09385d5 100644 --- a/pandora_console/include/functions_reporting_html.php +++ b/pandora_console/include/functions_reporting_html.php @@ -236,6 +236,10 @@ function reporting_html_print_report($report, $mini=false, $report_info=1) reporting_html_log($table, $item); break; + case 'permissions_report': + reporting_html_permissions($table, $item); + break; + case 'availability_graph': reporting_html_availability_graph($table, $item); break; @@ -5649,3 +5653,117 @@ function reporting_html_planned_downtimes_table($planned_downtimes) return $downtimes_table; } + + +function reporting_html_permissions($table, $item, $pdf=0) +{ + global $config; + + $table1 = new stdClass(); + $table1->width = '100%'; + + $table1->style[0] = 'text-align: left;vertical-align: top;min-width: 100px;'; + $table1->class = 'databox data'; + $table1->cellpadding = 1; + $table1->cellspacing = 1; + $table1->styleTable = 'overflow: wrap; table-layout: fixed;'; + + if ($item['subtype'] === REPORT_PERMISSIONS_NOT_GROUP_BY_GROUP) { + $table1->style[0] = 'text-align: left;vertical-align: top;min-width: 100px;'; + $table1->style[1] = 'text-align: left;vertical-align: top;min-width: 100px;'; + $table1->style[2] = 'text-align: left;vertical-align: top; min-width: 100px'; + + $table1->head = [ + __('User ID'), + __('Full name'), + __('Permissions'), + ]; + + $table1->headstyle[0] = 'text-align: left'; + $table1->headstyle[1] = 'text-align: left'; + $table1->headstyle[2] = 'text-align: left'; + } + + if ($item['subtype'] === REPORT_PERMISSIONS_GROUP_BY_GROUP) { + $table1->style[0] = 'text-align: left;vertical-align: top;min-width: 150px;'; + $table1->style[1] = 'text-align: left;vertical-align: top;min-width: 150px;'; + $table1->style[2] = 'text-align: left;vertical-align: top;min-width: 150px;'; + $table1->style[3] = 'text-align: left;vertical-align: top;min-width: 150px;'; + + $table1->headstyle[0] = 'text-align: left'; + $table1->headstyle[1] = 'text-align: left'; + $table1->headstyle[2] = 'text-align: left'; + $table1->headstyle[3] = 'text-align: left'; + + $table1->head = [ + __('Group'), + __('User ID'), + __('Full name'), + __('Permissions'), + ]; + } + + $table1->data = []; + + foreach ($item['data'] as $data) { + if ($item['subtype'] === REPORT_PERMISSIONS_NOT_GROUP_BY_GROUP) { + $profile_group_name = ''; + foreach ($data['user_profiles'] as $user_profile) { + $profile_group_name .= $user_profile.'
'; + } + + $row = [ + $data['user_id'], + $data['user_name'], + $profile_group_name, + ]; + } + + if ($item['subtype'] === REPORT_PERMISSIONS_GROUP_BY_GROUP) { + $user_profile_id_users = ''; + $user_profile_name = ''; + $user_profile_users_name = ''; + $group_name = $data['group_name'].'
'; + + foreach ($data['users'] as $user => $user_data) { + $user_profile_id_users .= $user.'
'; + $user_profile_users_name .= $user_data['fullname'].'
'; + + foreach ($user_data['profiles'] as $profile) { + $user_profile_id_users .= '
'; + $user_profile_users_name .= '
'; + $user_profile_name .= $profile.'
'; + } + + $user_profile_name .= '
'; + } + + $row = [ + $group_name, + $user_profile_id_users, + $user_profile_users_name, + $user_profile_name, + ]; + } + + $table1->data[] = $row; + + if ($pdf !== 0) { + $table1->data[] = '
'; + } + } + + if ($pdf === 0) { + $table->colspan['permissions']['cell'] = 3; + $table->cellstyle['permissions']['cell'] = 'text-align: center;'; + $table->data['permissions']['cell'] = html_print_table( + $table1, + true + ); + } else { + return html_print_table( + $table1, + true + ); + } +} diff --git a/pandora_console/include/functions_reports.php b/pandora_console/include/functions_reports.php index 130fe4deb0..878ded7968 100755 --- a/pandora_console/include/functions_reports.php +++ b/pandora_console/include/functions_reports.php @@ -54,7 +54,7 @@ function reports_get_report($id_report, $filter=false, $fields=false) return false; } - if (! is_array($filter)) { + if (!is_array($filter)) { $filter = []; } @@ -72,7 +72,7 @@ function reports_get_report($id_report, $filter=false, $fields=false) $report = db_get_row_filter('treport', $filter, $fields); - if (! check_acl($config['id_user'], $report['id_group'], 'RR')) { + if (!check_acl($config['id_user'], $report['id_group'], 'RR')) { return false; } @@ -104,16 +104,16 @@ function reports_get_reports( ) { global $config; - if (! is_array($filter)) { + if (!is_array($filter)) { $filter = []; } - /* - if (!is_user_admin ($config["id_user"])) + /* + if (!is_user_admin ($config["id_user"])) $filter[] = sprintf ('private = 0 OR (private = 1 AND id_user = "%s")', $config['id_user']); - */ - $filter['hidden'] = 0; + */ + $filter['hidden'] = 0; if (is_array($fields)) { $fields[] = 'id_group'; $fields[] = 'id_user'; @@ -146,7 +146,7 @@ function reports_get_reports( } if ($config['id_user'] != $report['id_user'] - && ! check_acl($config['id_user'], $report['id_group'], $privileges) + && !check_acl($config['id_user'], $report['id_group'], $privileges) ) { continue; } @@ -173,7 +173,7 @@ function reports_create_report($name, $id_group, $values=false) { global $config; - if (! is_array($values)) { + if (!is_array($values)) { $values = []; } @@ -246,7 +246,7 @@ function reports_get_content($id_report_content, $filter=false, $fields=false) return false; } - if (! is_array($filter)) { + if (!is_array($filter)) { $filter = []; } @@ -293,7 +293,7 @@ function reports_create_content($id_report, $values) return false; } - if (! is_array($values)) { + if (!is_array($values)) { return false; } @@ -341,7 +341,7 @@ function reports_get_contents($id_report, $filter=false, $fields=false) return []; } - if (! is_array($filter)) { + if (!is_array($filter)) { $filter = []; } @@ -546,7 +546,7 @@ function reports_delete_content($id_report_content) function get_report_name($type, $template=false) { $types = reports_get_report_types($template); - if (! isset($types[$type])) { + if (!isset($types[$type])) { return __('Unknown'); } @@ -890,5 +890,10 @@ function reports_get_report_types($template=false, $not_editor=false) ]; } + $types['permissions_report'] = [ + 'optgroup' => __('Permissions report'), + 'name' => __('Permissions report'), + ]; + return $types; } diff --git a/pandora_console/include/functions_users.php b/pandora_console/include/functions_users.php index 7b310889ac..73e7340838 100755 --- a/pandora_console/include/functions_users.php +++ b/pandora_console/include/functions_users.php @@ -616,7 +616,8 @@ function users_get_user_users( $id_user=false, $privilege='AR', $returnAllGroup=true, - $fields=null + $fields=null, + $filter_group=[] ) { global $config; @@ -625,8 +626,12 @@ function users_get_user_users( $user_users = []; $array_user_group = []; - foreach ($user_groups as $id_user_group => $name_user_group) { - $array_user_group[] = $id_user_group; + if (empty($filter_group)) { + foreach ($user_groups as $id_user_group => $name_user_group) { + $array_user_group[] = $id_user_group; + } + } else { + $array_user_group = $filter_group; } $group_users = groups_get_users($array_user_group, false, $returnAllGroup); @@ -831,3 +836,25 @@ function users_get_user_profile($id_user) return $user_profiles; } + + +/** + * Obtiene una matriz con la informacion de cada usuario que pertenece a un grupo + * + * @param string User id + * @return array Return . + */ +function users_get_users_group_by_group($id_group) +{ + $sql = sprintf( + "SELECT tusuario.* FROM tusuario + LEFT JOIN tusuario_perfil ON tusuario_perfil.id_usuario = tusuario.id_user + AND tusuario_perfil.id_grupo = '%s' + GROUP BY tusuario_perfil.id_usuario", + $id_group + ); + + $users = db_get_all_rows_sql($sql); + + return $users; +} diff --git a/pandora_console/include/javascript/multiselect_filtered.js b/pandora_console/include/javascript/multiselect_filtered.js index 27135c6843..7976158740 100644 --- a/pandora_console/include/javascript/multiselect_filtered.js +++ b/pandora_console/include/javascript/multiselect_filtered.js @@ -113,7 +113,9 @@ function reloadContent(id, url, options, side, noneStr) { data.side = side; data.group_recursion = $("#checkbox-id-group-recursion-" + current).prop( "checked" - ); + ) + ? 1 + : 0; data.group_id = $("#id-group-" + current).val(); $.ajax({ @@ -139,8 +141,8 @@ function reloadContent(id, url, options, side, noneStr) { for (var [value, label] of items) { if ( - $("#" + opposite + " option[value=" + value + "]").length == 0 && - $("#tmp-" + current + " option[value=" + value + "]").length == 0 + $("#" + opposite + " option[value='" + value + "']").length == 0 && + $("#tmp-" + current + " option[value='" + value + "']").length == 0 ) { // Does not exist in opposite box nor is filtered. $("#" + current).append(new Option(label, value)); diff --git a/pandora_console/include/styles/multiselect_filtered.css b/pandora_console/include/styles/multiselect_filtered.css index a938422456..c1eebbe657 100644 --- a/pandora_console/include/styles/multiselect_filtered.css +++ b/pandora_console/include/styles/multiselect_filtered.css @@ -2,9 +2,6 @@ flex: 1 1 200px; min-width: 200px; } -.multi-select-container * { - flex: 1 1 auto; -} .multi-select.flex-column { justify-content: space-between; @@ -16,10 +13,12 @@ .multi-select-container.flex-column { flex-wrap: nowrap; + align-self: flex-end; } .arrows-container { width: 50px; + margin-bottom: 65px; } .multi-select-container .filter input, @@ -40,8 +39,11 @@ .group-filter.flex-row-vcenter div, .item-filter.flex-row-vcenter div { + display: flex; flex: 1 1 auto; width: 100%; + justify-content: space-between; + align-items: center; } .multi-select-container .title { @@ -58,3 +60,14 @@ .multi-select-container.flex-column div input { margin-left: 1em; } + +.multi-select-container + .select2-container--default + .select2-selection--single + .select2-selection__rendered { + line-height: inherit !important; +} + +.p-slider { + margin: auto !important; +} diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index d8b4777fbb..bc743e9c77 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -612,6 +612,13 @@ select:-internal-list-box { align-items: center; } +.flex-row-end { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: flex-end; +} + .flex-space-around { justify-content: space-around; }