mirror of
https://github.com/VTECRM/vtenext.git
synced 2026-02-26 16:18:47 +00:00
203 lines
5.8 KiB
PHP
203 lines
5.8 KiB
PHP
<?php
|
|
/*************************************
|
|
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
************************************/
|
|
|
|
/* Class to retreive all the vte_users present in a group */
|
|
|
|
/* crmv@46552 crmv@158559 crmv@193294 */
|
|
|
|
require_once('include/utils/UserInfoUtil.php');
|
|
require_once('include/utils/GetParentGroups.php');
|
|
|
|
class GetGroupUsers {
|
|
|
|
public $group_users = array();
|
|
public $group_subgroups = array();
|
|
|
|
/** to get all the vte_users and vte_groups of the specified group
|
|
* @params $groupId --> Group Id :: Type Integer
|
|
* @params $only_active --> Filter only active users :: Type Boolean
|
|
* @params $recursively --> Search users in roles, roles and subordinates and in subgroups recursively :: Type Boolean (if false it returns only users directly included in the group)
|
|
* @returns the vte_users present in the group in the variable $parent_groups of the class
|
|
* @returns the sub vte_groups present in the group in the variable $group_subgroups of the class
|
|
*/
|
|
function getAllUsersInGroup($groupid, $only_active=false, $recursively=true)
|
|
{
|
|
global $adb,$log, $table_prefix;
|
|
$log->debug("Entering getAllUsersInGroup(".$groupid.") method...");
|
|
|
|
if ($only_active) {
|
|
$inactive_users = $this->getInactiveUsers();
|
|
} else {
|
|
$inactive_users = array();
|
|
}
|
|
|
|
//Retreiving from the user2grouptable
|
|
$subusers = $this->getSubUsers($groupid);
|
|
foreach($subusers as $now_user_id)
|
|
{
|
|
if(!in_array($now_user_id,$inactive_users) && !in_array($now_user_id,$this->group_users))
|
|
{
|
|
$this->group_users[]=$now_user_id;
|
|
}
|
|
}
|
|
|
|
if (!$recursively) return;
|
|
|
|
//Retreiving from the vte_group2role
|
|
$subroles = $this->getSubRoles($groupid);
|
|
foreach($subroles as $now_role_id)
|
|
{
|
|
$now_role_users=array();
|
|
$now_role_users=getRoleUsers($now_role_id);
|
|
|
|
foreach($now_role_users as $now_role_userid => $now_role_username)
|
|
{
|
|
if(!in_array($now_role_userid,$inactive_users) && !in_array($now_role_userid,$this->group_users)) //crmv@66487
|
|
{
|
|
$this->group_users[]=$now_role_userid;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Retreiving from the vte_group2rs
|
|
$subrs = $this->getSubRolesAndSub($groupid);
|
|
foreach($subrs as $now_rs_id)
|
|
{
|
|
$now_rs_users=getRoleAndSubordinateUsers($now_rs_id);
|
|
foreach($now_rs_users as $now_rs_userid => $now_rs_username)
|
|
{
|
|
if(!in_array($now_rs_userid,$inactive_users) && !in_array($now_rs_userid,$this->group_users)) //crmv@66487
|
|
{
|
|
$this->group_users[]=$now_rs_userid;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Retreving from group2group
|
|
$subgroups = $this->getSubGroups($groupid);
|
|
foreach($subgroups as $now_grp_id)
|
|
{
|
|
$focus = new GetGroupUsers();
|
|
$focus->getAllUsersInGroup($now_grp_id,$only_active);
|
|
$now_grp_users=$focus->group_users;
|
|
$now_grp_grps=$focus->group_subgroups;
|
|
if(! array_key_exists($now_grp_id,$this->group_subgroups))
|
|
{
|
|
$this->group_subgroups[$now_grp_id]=$now_grp_users;
|
|
}
|
|
|
|
foreach($focus->group_users as $temp_user_id)
|
|
{
|
|
if(!in_array($temp_user_id,$inactive_users) && !in_array($temp_user_id,$this->group_users)) //crmv@66487
|
|
{
|
|
$this->group_users[]=$temp_user_id;
|
|
}
|
|
}
|
|
|
|
foreach($focus->group_subgroups as $temp_grp_id => $users_array)
|
|
{
|
|
if(! array_key_exists($temp_grp_id,$this->group_subgroups))
|
|
{
|
|
$this->group_subgroups[$temp_grp_id]=$focus->group_users;
|
|
}
|
|
}
|
|
}
|
|
|
|
$log->debug("Exiting getAllUsersInGroup method...");
|
|
}
|
|
|
|
|
|
protected function getInactiveUsers() {
|
|
global $adb, $table_prefix;
|
|
|
|
static $inactive_users = null;
|
|
|
|
if (is_null($inactive_users)) {
|
|
$inactive_users = array();
|
|
$result = $adb->pquery("SELECT id FROM {$table_prefix}_users WHERE status = ?",array('Inactive'));
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
while($row=$adb->fetchByAssoc($result, -1, false)) {
|
|
$inactive_users[] = $row['id'];
|
|
}
|
|
}
|
|
}
|
|
return $inactive_users;
|
|
}
|
|
|
|
protected function getSubUsers($groupid) {
|
|
global $adb, $table_prefix;
|
|
|
|
static $cache = array();
|
|
if (!isset($cache[$groupid])) {
|
|
$list = array();
|
|
$query="select userid from ".$table_prefix."_users2group where groupid=?";
|
|
$result = $adb->pquery($query, array($groupid));
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
while($row=$adb->fetchByAssoc($result, -1, false)) {
|
|
$list[] = $row['userid'];
|
|
}
|
|
}
|
|
$cache[$groupid] = $list;
|
|
}
|
|
return $cache[$groupid];
|
|
}
|
|
|
|
protected function getSubRoles($groupid) {
|
|
global $adb, $table_prefix;
|
|
|
|
static $cache = array();
|
|
if (!isset($cache[$groupid])) {
|
|
$list = array();
|
|
$query="select roleid from ".$table_prefix."_group2role where groupid=?";
|
|
$result = $adb->pquery($query, array($groupid));
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
while($row=$adb->fetchByAssoc($result, -1, false)) {
|
|
$list[] = $row['roleid'];
|
|
}
|
|
}
|
|
$cache[$groupid] = $list;
|
|
}
|
|
return $cache[$groupid];
|
|
}
|
|
|
|
|
|
protected function getSubRolesAndSub($groupid) {
|
|
global $adb, $table_prefix;
|
|
|
|
static $cache = array();
|
|
if (!isset($cache[$groupid])) {
|
|
$list = array();
|
|
$query="select roleandsubid from ".$table_prefix."_group2rs where groupid=?";
|
|
$result = $adb->pquery($query, array($groupid));
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
while($row=$adb->fetchByAssoc($result, -1, false)) {
|
|
$list[] = $row['roleandsubid'];
|
|
}
|
|
}
|
|
$cache[$groupid] = $list;
|
|
}
|
|
return $cache[$groupid];
|
|
}
|
|
|
|
protected function getSubGroups($groupid) {
|
|
global $adb, $table_prefix;
|
|
|
|
static $cache = array();
|
|
if (!isset($cache[$groupid])) {
|
|
$list = array();
|
|
$query="select containsgroupid from ".$table_prefix."_group2grouprel where groupid=?";
|
|
$result = $adb->pquery($query, array($groupid));
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
while($row=$adb->fetchByAssoc($result, -1, false)) {
|
|
$list[] = $row['containsgroupid'];
|
|
}
|
|
}
|
|
$cache[$groupid] = $list;
|
|
}
|
|
return $cache[$groupid];
|
|
}
|
|
|
|
} |