Skip to content

Commit

Permalink
Get subgroups - refs BT#9431
Browse files Browse the repository at this point in the history
  • Loading branch information
AngelFQC committed Apr 1, 2015
1 parent 5eb26c2 commit 67e3566
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 1 deletion.
13 changes: 13 additions & 0 deletions main/inc/ajax/model.ajax.php
Expand Up @@ -213,8 +213,21 @@ function getWhereClause($col, $oper, $val)
if ($searchByGroups) {
$groups = GroupPortalManager::get_groups_by_user(api_get_user_id(), GROUP_USER_PERMISSION_ADMIN);
$groupsId = array_keys($groups);
$subgroupsId = [];

if (is_array($groupsId)) {
foreach ($groupsId as $groupId) {
$subgroupsId = array_merge(
$subgroupsId,
GroupPortalManager::getGroupsByDepthLevel($groupId)
);
}

$groupsId = array_merge(
$groupsId,
$subgroupsId
);

foreach ($groupsId as $groupId) {
$groupUsers = GroupPortalManager::get_users_by_group($groupId);

Expand Down
48 changes: 47 additions & 1 deletion main/inc/lib/group_portal_manager.lib.php
Expand Up @@ -217,6 +217,52 @@ public static function get_parent_group($group_id, $relation_type = 1)
}
}

/**
* Get the subgroups ID from a group.
* The default $levels value is 10 considering it as a extensive level of depth
* @param int $groupId The parent group ID
* @param int $levels The depth levels
* @return array The list of ID
*/
public static function getGroupsByDepthLevel($groupId, $levels = 10)
{
$groups = array();

$groupTable = Database::get_main_table(TABLE_MAIN_GROUP);
$groupRelGroupTable = Database :: get_main_table(TABLE_MAIN_GROUP_REL_GROUP);

$select = "SELECT ";
$from = "FROM $groupTable g1 ";

for ($i = 1; $i <= $levels; $i++) {
$gNumber = $i;
$ggNumber = $i - 1;

$select .= "g$i.id as id_$i ";

$select .= ($i != $levels ? ", " : null);

if ($i == 1) {
$from .= "INNER JOIN $groupRelGroupTable gg0 ON g1.id = gg0.subgroup_id and gg0.group_id = $groupId ";
} else {
$from .= "LEFT JOIN $groupRelGroupTable gg$ggNumber ON g$ggNumber.id = gg$ggNumber.group_id ";
$from .= "LEFT JOIN $groupTable g$gNumber ON gg$ggNumber.subgroup_id = g$gNumber.id ";
}
}

$result = Database::query("$select $from");

while ($item = Database::fetch_assoc($result)) {
foreach ($item as $groupId) {
if (!empty($groupId)) {
$groups[] = $groupId;
}
}
}

return array_map('intval', $groups);
}

/**
* @param int $root
* @param int $level
Expand All @@ -234,7 +280,7 @@ public static function get_subgroups($root, $level)
if ($i == $level) {
$select_part .= "g$i.id as id_$i, g$i.name as name_$i ";
} else {
$select_part .="g$i.id as id_$i, g$i.name name_$i, ";
$select_part .= "g$i.id as id_$i, g$i.name name_$i, ";
}
if ($i == 1) {
$cond_part .= "FROM $t_group g1 JOIN $t_rel_group rg0 on g1.id = rg0.subgroup_id and rg0.group_id = $root ";
Expand Down

0 comments on commit 67e3566

Please sign in to comment.