diff --git a/pandora_console/include/functions_tags.php b/pandora_console/include/functions_tags.php index ba031c0cff..9f06b23a53 100644 --- a/pandora_console/include/functions_tags.php +++ b/pandora_console/include/functions_tags.php @@ -723,47 +723,26 @@ function tags_get_acl_tags_module_condition($acltags, $modules_table = '') { $condition = ''; $group_conditions = array(); + $has_secondary = enterprise_hook('agents_is_using_secondary_groups'); // The acltags array contains the groups with the acl propagation applied // after the changes done into the 'tags_get_user_groups_and_tags' function. foreach ($acltags as $group_id => $group_tags) { $tag_join = ''; if (!empty($group_tags)) { - $tag_join = sprintf('INNER JOIN ttag_module ttmc - ON tamc.id_agente_modulo = ttmc.id_agente_modulo - AND ttmc.id_tag IN (%s)', - is_array($group_tags) ? implode(',', $group_tags) : $group_tags); + $tag_join = sprintf('AND ttag_module.id_tag IN (%s)',is_array($group_tags) ? implode(',', $group_tags) : $group_tags); + if($has_secondary){ + $agent_condition = sprintf('((tagente.id_grupo = %d OR tasg.id_group = %d) %s)',$group_id,$group_id,$tag_join); + } else { + $agent_condition = sprintf('((tagente.id_grupo = %d %s)',$group_id,$tag_join); + } + $group_conditions[] = $agent_condition; } - // FIXME: Not properly way to increse performance - if(enterprise_hook('agents_is_using_secondary_groups')){ - $agent_condition = sprintf('SELECT tamc.id_agente_modulo - FROM tagente_modulo tamc - %s - INNER JOIN tagente tac - ON tamc.id_agente = tac.id_agente - LEFT JOIN tagent_secondary_group tasg - ON tasg.id_agent = tac.id_agente - WHERE (tac.id_grupo = %d OR tasg.id_group = %d)', - $tag_join, $group_id, $group_id); - } - else{ - $agent_condition = sprintf('SELECT tamc.id_agente_modulo - FROM tagente_modulo tamc - %s - INNER JOIN tagente tac - ON tamc.id_agente = tac.id_agente - AND tac.id_grupo = %d', - $tag_join, $group_id); - } - - $sql_condition = sprintf('(%sid_agente_modulo IN (%s))', $modules_table, $agent_condition); - - $group_conditions[] = $sql_condition; - - $i++; + } - if (!empty($group_conditions)) + if (!empty($group_conditions)) { $condition = implode(' OR ', $group_conditions); + } $condition = !empty($condition) ? "($condition)" : ''; return $condition; @@ -2446,7 +2425,7 @@ function tags_get_user_groups_and_tags ($id_user = false, $access = 'AR', $stric $return = array(); foreach ($acls as $acl) { - $return[$acl["id_grupo"]] = $acl["tags"]; + $return[$acl["id_grupo"]] = $acl["tags"][get_acl_column($access)]; } return $return; diff --git a/pandora_console/include/functions_users.php b/pandora_console/include/functions_users.php index 43603663a1..7c649409f5 100755 --- a/pandora_console/include/functions_users.php +++ b/pandora_console/include/functions_users.php @@ -207,24 +207,27 @@ function groups_combine_acl($acl_group_a, $acl_group_b){ "vconsole_management" => 1, "tags" => 1, ); + + if ($acl_group_a['tags']) users_get_explode_tags($acl_group_a); + if ($acl_group_b['tags']) users_get_explode_tags($acl_group_b); + + if (is_array($acl_group_a['tags']) && is_array($acl_group_b['tags'])) { + foreach ($acl_group_a['tags'] as $key => $value) { + $acl_group_b['tags'][$key] = implode( + ',', + array_merge( + $value, + $acl_group_b['tags'][$key] + ) + ); + } + } else if (is_array($acl_group_a['tags'])) { + $acl_group_b['tags'] = $acl_group_a['tags']; + } foreach ($acl_list as $acl => $aux) { - if($acl == "tags") { - // Mix tags - - if (isset($acl_group_a[$acl]) && ($acl_group_a[$acl] != "")) { - if (isset($acl_group_b[$acl]) && ($acl_group_b[$acl] != "")) { - if ($acl_group_b[$acl] != ($acl_group_a[$acl])) { - $acl_group_b[$acl] = $acl_group_a[$acl] . "," . $acl_group_b[$acl]; - } - } - else { - $acl_group_b[$acl] = $acl_group_a[$acl]; - } - } - continue; - } + if($acl == "tags") continue; // propagate ACL $acl_group_b[$acl] = $acl_group_a[$acl] || $acl_group_b[$acl]; } @@ -1069,4 +1072,17 @@ function users_get_strict_mode_groups($id_user, $return_group_all) { return $return_user_groups; } +function users_get_explode_tags(&$group) { + if (is_array($group['tags'])) return; + + $aux = explode(',', $group['tags']); + $group['tags'] = array(); + $group['tags']['agent_view'] = ($group['agent_view']) ? $aux : array(); + $group['tags']['agent_edit'] = ($group['agent_edit']) ? $aux : array(); + $group['tags']['agent_disable'] = ($group['agent_disable']) ? $aux : array(); + $group['tags']['event_view'] = ($group['event_view']) ? $aux : array(); + $group['tags']['event_edit'] = ($group['event_edit']) ? $aux : array(); + $group['tags']['event_management'] = ($group['event_management']) ? $aux : array(); +} + ?> diff --git a/pandora_console/operation/agentes/status_monitor.php b/pandora_console/operation/agentes/status_monitor.php index 61b4375d25..1b6cd954c5 100644 --- a/pandora_console/operation/agentes/status_monitor.php +++ b/pandora_console/operation/agentes/status_monitor.php @@ -87,16 +87,25 @@ if ($id_module) { enterprise_hook('open_meta_frame'); // Get Groups and profiles from user -$user_groups = implode (',', array_keys (users_get_groups ())); +$user_groups = implode (',', array_keys (users_get_groups (false,'AR',false))); //////////////////////////////////// // Begin Build SQL sentences -$sql_from = ' FROM ttipo_modulo,tagente LEFT JOIN tagent_secondary_group tasg ON tagente.id_agente = tasg.id_agent, tagente_modulo, tagente_estado,tmodule '; +$sql_from = " FROM tagente_modulo + INNER JOIN tagente + ON tagente_modulo.id_agente = tagente.id_agente + LEFT JOIN tagent_secondary_group tasg + ON tagente.id_agente = tasg.id_agent + INNER JOIN tagente_estado + ON tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo + INNER JOIN tmodule + ON tmodule.id_module = tagente_modulo.id_modulo + INNER JOIN ttipo_modulo + ON tagente_modulo.id_tipo_modulo = ttipo_modulo.id_tipo + LEFT JOIN ttag_module + ON tagente_modulo.id_agente_modulo = ttag_module.id_agente_modulo"; -$sql_conditions_base = ' WHERE tagente.id_agente = tagente_modulo.id_agente - AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo AND tagente_modulo.id_tipo_modulo = ttipo_modulo.id_tipo AND tmodule.id_module = tagente_modulo.id_modulo'; - -$sql_conditions = ' AND tagente.disabled = 0'; +$sql_conditions = ' WHERE tagente.disabled = 0'; if (is_numeric($ag_group)) { $id_ag_group = 0; @@ -261,8 +270,7 @@ if (!users_is_admin()) { } // Two modes of filter. All the filters and only ACLs filter -$sql_conditions_all = $sql_conditions_base . $sql_conditions . $sql_conditions_group . $sql_conditions_tags . $sql_conditions_custom_fields; -$sql_conditions_acl = $sql_conditions_base . $sql_conditions_group . $sql_conditions_tags . $sql_conditions_custom_fields; +$sql_conditions_all = $sql_conditions . $sql_conditions_group . $sql_conditions_tags . $sql_conditions_custom_fields; // Get count to paginate if (!defined('METACONSOLE')) @@ -337,8 +345,7 @@ $table->rowspan[0][6] = 2; $table->data[0][6] = html_print_submit_button (__('Show'), 'uptbutton', false, 'class="sub search" style="margin-top:0px;"',true); $modules = array(); -$modules = modules_get_modules_name ($sql_from , $sql_conditions_acl, is_metaconsole()); - +// TODO change for input text $table->data[1][0] = __('Module name'); $table->data[1][1] = html_print_select (index_array ($modules, 'nombre', 'nombre'), 'ag_modulename', $ag_modulename, '', __('All'), '', true, false, true, '', false, 'width: 150px;');