<?php /** * Tree view. * * @category Tree * @package Pandora FMS * @subpackage Community * @version 1.0.0 * @license See below * * ______ ___ _______ _______ ________ * | __ \.-----.--.--.--| |.-----.----.-----. | ___| | | __| * | __/| _ | | _ || _ | _| _ | | ___| |__ | * |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______| * * ============================================================================ * Copyright (c) 2005-2021 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 * as published by the Free Software Foundation for version 2. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * ============================================================================ */ global $config; require_once $config['homedir'].'/include/class/Tree.class.php'; /** * Tree group edition. */ class TreeGroupEdition extends TreeGroup { /** * Construct. * * @param string $type Type. * @param string $rootType Root. * @param integer $id Id. * @param integer $rootID Root Id. * @param boolean $serverID Server. * @param string $childrenMethod Method children. * @param string $access Access ACL. */ public function __construct( $type, $rootType='', $id=-1, $rootID=-1, $serverID=false, $childrenMethod='on_demand', $access='AR' ) { global $config; parent::__construct( $type, $rootType, $id, $rootID, $serverID, $childrenMethod, $access ); } /** * Get data. * * @return void */ protected function getData() { if ($this->id == -1) { $this->getFirstLevel(); } } /** * Get process group. * * @return mixed */ protected function getProcessedGroups() { $processed_groups = []; // Index and process the groups. $groups = $this->getGroupCounters(); // If user have not permissions in parent, set parent node to 0 (all) // Avoid to do foreach for admins. if (users_can_manage_group_all('AR') === false) { foreach ($groups as $id => $group) { if (isset($this->userGroups[$groups[$id]['parent']]) === false) { $groups[$id]['parent'] = 0; } } } // Build the group hierarchy. foreach ($groups as $id => $group) { if (isset($groups[$id]['parent']) === true && ($groups[$id]['parent'] != 0) ) { $parent = $groups[$id]['parent']; // Parent exists. if (isset($groups[$parent]['children']) === false) { $groups[$parent]['children'] = []; } // Store a reference to the group into the parent. $groups[$parent]['children'][] = &$groups[$id]; // This group was introduced into a parent. $groups[$id]['have_parent'] = true; } } // Sort the children groups. foreach ($groups as $id => $group) { if (isset($groups[$id]['children']) === true) { usort($groups[$id]['children'], ['Tree', 'cmpSortNames']); } } // Filter groups and eliminates the reference // to children groups out of her parent. $groups = array_filter( $groups, function ($group) { return !$group['have_parent']; } ); // Filter groups that user has permission. $groups = array_filter( $groups, function ($group) { global $config; return check_acl($config['id_user'], $group['id'], 'AR'); } ); usort($groups, ['Tree', 'cmpSortNames']); return $groups; } /** * Get group counters. * * @return mixed */ protected function getGroupCounters() { $messages = [ 'confirm' => __('Confirm'), 'cancel' => __('Cancel'), 'messg' => __('Are you sure?'), ]; $group_acl = ''; if (users_can_manage_group_all('AR') === false) { $user_groups_str = implode(',', $this->userGroupsArray); $group_acl = sprintf( 'AND id_grupo IN (%s)', $user_groups_str ); } $sql = sprintf( 'SELECT id_grupo AS gid, nombre as name, parent, icon FROM tgrupo WHERE 1=1 %s', $group_acl ); $stats = db_get_all_rows_sql($sql); $group_stats = []; foreach ($stats as $group) { $group_stats[$group['gid']]['name'] = $group['name']; $group_stats[$group['gid']]['parent'] = $group['parent']; $group_stats[$group['gid']]['icon'] = $group['icon']; $group_stats[$group['gid']]['id'] = $group['gid']; $group_stats[$group['gid']]['type'] = 'group'; $group_stats[$group['gid']] = $this->getProcessedItem( $group_stats[$group['gid']] ); if (is_management_allowed() === true) { $group_stats[$group['gid']]['delete']['messages'] = $messages; $group_stats[$group['gid']]['edit'] = 1; } $group_stats[$group['gid']]['alerts'] = ''; } return $group_stats; } }