diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 70bd6201d7..0c239c2175 100644 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -1071,58 +1071,53 @@ class CourseManager * @param string $course_code * @return array with user info */ - function get_user_list_from_course_code($course_code, $with_session=true, $session_id=0, $limit='') + function get_user_list_from_course_code($course_code, $with_session=true, $session_id=0, $limit='', $order_by='') { $session_id = intval($session_id); $a_users = array(); $table_users = Database :: get_main_table(TABLE_MAIN_USER); - // users subscribed to the course through a session + + $sql = 'SELECT DISTINCT user.user_id + FROM '.$table_users.' as user'; + if(api_get_setting('use_session_mode')=='true' && $with_session) - { - $table_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); - $sql_query = "SELECT session_course_user.*, user.user_id FROM $table_session_course_user as session_course_user, $table_users as user WHERE `course_code` = '$course_code' AND session_course_user.id_user = user.user_id "; + { + $table_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); + $sql .= ' LEFT JOIN '.$table_session_course_user.' as session_course_user + ON user.user_id = session_course_user.id_user + AND session_course_user.course_code="'.Database::escape_string($course_code).'"'; if($session_id!=0) { - $sql_query .= ' AND id_session = '.$session_id; + $sql .= ' AND session_course_user.id_session = '.$session_id; } - $sql_query.=' ORDER BY user.lastname'; - - $sql_query .= ' '.$limit; - - $rs = api_sql_query($sql_query, __FILE__, __LINE__); - - while($user = Database::fetch_array($rs)) - { - $user_infos = Database :: get_user_info_from_id($user['id_user']); - $user_infos["status"] = $user["status"]; - $user_infos["role"] = $user["role"]; - $user_infos["tutor_id"] = $user["tutor_id"]; - $a_users[$user['id_user']] = $user_infos; - } } if($session_id == 0) - { - // users directly subscribed to the course - $table_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); - $sql_query = "SELECT course_user.user_id, user.user_id, course_user.status, course_user.role, course_user.tutor_id " . - "FROM $table_course_user as course_user, $table_users as user WHERE `course_code` = '$course_code' AND course_user.user_id = user.user_id ORDER BY user.lastname"; - - $sql_query .= ' '.$limit; - - $rs = api_sql_query($sql_query, __FILE__, __LINE__); - - while($user = Database::fetch_array($rs)) - { - $user_infos = Database :: get_user_info_from_id($user['user_id']); - $user_infos["status"] = $user["status"]; - $user_infos["role"] = $user["role"]; - $user_infos["tutor_id"] = $user["tutor_id"]; - $a_users[$user['user_id']] = $user_infos; - } - - } + { + $table_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); + $sql .= ' LEFT JOIN '.$table_course_user.' as course_rel_user + ON user.user_id = course_rel_user.user_id + AND course_rel_user.course_code="'.Database::escape_string($course_code).'"'; + } + + $sql .= ' WHERE session_course_user.course_code IS NOT NULL + OR course_rel_user.course_code IS NOT NULL'; + + $sql .= ' '.$order_by; + $sql .= ' '.$limit; + + $rs = api_sql_query($sql, __FILE__, __LINE__); + + while($user = Database::fetch_array($rs)) + { + $user_infos = Database :: get_user_info_from_id($user['user_id']); + $user_infos["status"] = $user["status"]; + $user_infos["role"] = $user["role"]; + $user_infos["tutor_id"] = $user["tutor_id"]; + $a_users[$user['user_id']] = $user_infos; + } + return $a_users; } diff --git a/main/user/user.php b/main/user/user.php index 136f878ee5..4aa85413fc 100644 --- a/main/user/user.php +++ b/main/user/user.php @@ -454,14 +454,6 @@ function search_keyword($firstname,$lastname,$username,$official_code,$keyword){ } -function sort_users($a,$b){ - $a = trim(strtolower($a[$_SESSION['users_column']])); - $b = trim(strtolower($b[$_SESSION['users_column']])); - if($_SESSION['users_direction'] == 'DESC') - return strcmp($b, $a); - else - return strcmp($a, $b); -} /** * Get the users to display on the current page. @@ -470,15 +462,26 @@ function get_user_data($from, $number_of_items, $column, $direction) { $a_users=array(); + // limit $limit = 'LIMIT '.intval($from).','.intval($number_of_items); + // order by + switch($column) + { + case 1 : $order_by = 'ORDER BY user.firstname';break; + case 2: $order_by = 'ORDER BY user.lastname';break; + case 5: $order_by = 'ORDER BY user.official_code';break; + default : $order_by = 'ORDER BY user.lastname';break; + } + $order_by .= ' '.$direction; + if(!empty($_SESSION["id_session"])){ - $a_course_users = CourseManager :: get_user_list_from_course_code($_SESSION['_course']['id'], true, $_SESSION['id_session'], $limit); + $a_course_users = CourseManager :: get_user_list_from_course_code($_SESSION['_course']['id'], true, $_SESSION['id_session'], $limit, $order_by); } else { - $a_course_users = CourseManager :: get_user_list_from_course_code($_SESSION['_course']['id'], true, 0, $limit); + $a_course_users = CourseManager :: get_user_list_from_course_code($_SESSION['_course']['id'], true, 0, $limit, $order_by); } foreach($a_course_users as $user_id=>$o_course_user) @@ -523,7 +526,6 @@ function get_user_data($from, $number_of_items, $column, $direction) $a_users[$user_id] = $temp; } } - usort($a_users, 'sort_users'); return $a_users; } @@ -584,14 +586,14 @@ if( api_is_allowed_to_edit()) $table->set_header($header_nr++, get_lang('FirstName')); $table->set_header($header_nr++, get_lang('LastName')); -$table->set_header($header_nr++, get_lang('Description')); +$table->set_header($header_nr++, get_lang('Description'),false); $table->set_header($header_nr++, get_lang('GroupSingle'),false); $table->set_header($header_nr++, get_lang('OfficialCode')); if( api_is_allowed_to_edit()) { - $table->set_header($header_nr++, get_lang('Tutor')); - $table->set_header($header_nr++, get_lang('CourseManager')); + $table->set_header($header_nr++, get_lang('Tutor'),false); + $table->set_header($header_nr++, get_lang('CourseManager'),false); } //actions column