/**
  * this function gets all the users of the course,
  * including users from linked courses
  * @deprecate use CourseManager class
  */
 public static function get_course_users()
 {
     //this would return only the users from real courses:
     $session_id = api_get_session_id();
     if ($session_id != 0) {
         $userList = CourseManager::get_real_and_linked_user_list(api_get_course_id(), true, $session_id, true);
     } else {
         $userList = CourseManager::get_real_and_linked_user_list(api_get_course_id(), false, 0, true);
     }
     return $userList;
 }
 /**
  *
  * See : fill_groups
  *       Fill the groups with students.
  *
  * note : optimize fill_groups_list <--> fill_groups
  * @param array $group_ids
  * @return array|bool
  */
 public static function fill_groups_list($group_ids)
 {
     $group_ids = is_array($group_ids) ? $group_ids : array($group_ids);
     $group_ids = array_map('intval', $group_ids);
     /*if (api_is_course_coach()) {
           for ($i = 0; $i < count($group_ids); $i++) {
               if (!api_is_element_in_the_session(TOOL_GROUP, $group_ids[$i])) {
                   array_splice($group_ids, $i, 1);
                   $i--;
               }
           }
           if (count($group_ids) == 0) {
               return false;
           }
       }*/
     $_course = api_get_course_info();
     $category = self::get_category_from_group($group_ids[0]);
     $groups_per_user = $category['groups_per_user'];
     $group_table = Database::get_course_table(TABLE_GROUP);
     $group_user_table = Database::get_course_table(TABLE_GROUP_USER);
     $session_id = api_get_session_id();
     $complete_user_list = CourseManager::get_real_and_linked_user_list($_course['sysCode'], true, $session_id);
     $number_groups_per_user = $groups_per_user == self::GROUP_PER_MEMBER_NO_LIMIT ? self::INFINITE : $groups_per_user;
     $course_id = api_get_course_int_id();
     /*
      * Retrieve all the groups where enrollment is still allowed
      * (reverse) ordered by the number of place available
      */
     $sql = "SELECT g.id gid, count(ug.user_id) count_users, g.max_student\n                FROM " . $group_table . " g\n                LEFT JOIN  " . $group_user_table . " ug\n                ON    g.id = ug.group_id\n                WHERE   g.c_id = {$course_id} AND\n                        ug.c_id = {$course_id} AND\n                        g.id IN (" . implode(',', $group_ids) . ")\n                GROUP BY (g.id)";
     $sql_result = Database::query($sql);
     $group_available_place = array();
     while ($group = Database::fetch_array($sql_result, 'ASSOC')) {
         if (!empty($group['max_student'])) {
             $places = intval($group['max_student'] - $group['count_users']);
         } else {
             $places = self::MEMBER_PER_GROUP_NO_LIMIT;
         }
         $group_available_place[$group['gid']] = $places;
     }
     /*
      * Retrieve course users (reverse) ordered by the number
      * of group they are already enrolled
      */
     for ($i = 0; $i < count($complete_user_list); $i++) {
         //find # of groups the user is enrolled in
         $number_of_groups = self::user_in_number_of_groups($complete_user_list[$i]["user_id"], $category['id']);
         //add # of groups to user list
         $complete_user_list[$i]['number_groups_left'] = $number_groups_per_user - $number_of_groups;
     }
     //first sort by user_id to filter out duplicates
     $complete_user_list = TableSort::sort_table($complete_user_list, 'user_id');
     $complete_user_list = self::filter_duplicates($complete_user_list, 'user_id');
     //$complete_user_list = self :: filter_only_students($complete_user_list);
     //now sort by # of group left
     $complete_user_list = TableSort::sort_table($complete_user_list, 'number_groups_left', SORT_DESC);
     return $complete_user_list;
 }
 static function generate_user_group_array($course_code, $session_id = 0)
 {
     $order = api_is_western_name_order() ? 'firstname' : 'lastname';
     $user_list = CourseManager::get_real_and_linked_user_list($course_code, true, $session_id, $order);
     $group_list = CourseManager::get_group_list_of_course($course_code, $session_id, 1);
     $items = self::transform_user_group_array($user_list, $group_list);
     return $items;
 }