diff --git a/main/inc/ajax/model.ajax.php b/main/inc/ajax/model.ajax.php index 3dfee3e6e5..8912a22524 100755 --- a/main/inc/ajax/model.ajax.php +++ b/main/inc/ajax/model.ajax.php @@ -213,8 +213,21 @@ switch ($action) { 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); @@ -263,6 +276,11 @@ switch ($action) { $sessionIdList = array_unique($sessionIdList); } + if (api_is_student_boss() && empty($userIdList)) { + $count = 0; + break; + } + if ($action == 'get_user_course_report') { $count = CourseManager::get_count_user_list_from_course_code( false, @@ -567,6 +585,11 @@ switch ($action) { //$sidx = 'training_hours'; } + if (api_is_student_boss() && empty($userIdList)) { + $result = []; + break; + } + $result = CourseManager::get_user_list_from_course_code( null, null, @@ -621,6 +644,11 @@ switch ($action) { $sidx = 'title'; } + if (api_is_student_boss() && empty($userIdList)) { + $result = []; + break; + } + $result = CourseManager::get_user_list_from_course_code( null, null, diff --git a/main/inc/lib/group_portal_manager.lib.php b/main/inc/lib/group_portal_manager.lib.php index 6d3e02dff2..73da630502 100755 --- a/main/inc/lib/group_portal_manager.lib.php +++ b/main/inc/lib/group_portal_manager.lib.php @@ -217,6 +217,55 @@ class GroupPortalManager } } + /** + * 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(); + $groupId = intval($groupId); + + $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++) { + $tableIndexNumber = $i; + $tableIndexJoinNumber = $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$tableIndexJoinNumber "; + $from .= " ON g$tableIndexJoinNumber.id = gg$tableIndexJoinNumber.group_id "; + $from .= "LEFT JOIN $groupTable g$tableIndexNumber "; + $from .= " ON gg$tableIndexJoinNumber.subgroup_id = g$tableIndexNumber.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 @@ -234,7 +283,7 @@ class GroupPortalManager 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 "; @@ -245,24 +294,24 @@ class GroupPortalManager } $sql = $select_part.' '.$cond_part; $res = Database::query($sql); - $toreturn = array(); + $toReturn = array(); while ($item = Database::fetch_assoc($res)) { foreach ($item as $key => $value) { if ($key == 'id_1') { - $toreturn[$value]['name'] = $item['name_1']; + $toReturn[$value]['name'] = $item['name_1']; } else { $temp = explode('_', $key); - $index_key = $temp[1]; - $string_key = $temp[0]; - $previous_key = $string_key.'_'.$index_key - 1; - if ($string_key == 'id' && isset($item[$key])) { - $toreturn[$item[$previous_key]]['hrms'][$index_key]['name'] = $item['name_'.$index_id]; + $indexKey = $temp[1]; + $stringKey = $temp[0]; + $previousKey = $stringKey.'_'.$indexKey - 1; + if ($stringKey == 'id' && isset($item[$key])) { + $toReturn[$item[$previousKey]]['hrms'][$indexKey]['name'] = $item['name_'.$indexKey]; } } } } - return $toreturn; + return $toReturn; } /** @@ -292,16 +341,16 @@ class GroupPortalManager $sql = $select_part.' '.$cond_part."WHERE rg0.subgroup_id='$group_id'"; $res = Database::query($sql); $temp_arr = Database::fetch_array($res, 'NUM'); - $toreturn = array(); + $toReturn = array(); if (is_array($temp_arr)) { foreach ($temp_arr as $elt) { if (isset($elt)) { - $toreturn[] = $elt; + $toReturn[] = $elt; } } } - return $toreturn; + return $toReturn; } /**