[svn r15205] improve the list of users (sort is done in sql and not with usort anymore) FS#2438

skala
Eric Marguin 18 years ago
parent 472d7e5695
commit 54575c1b1b
  1. 75
      main/inc/lib/course.lib.php
  2. 30
      main/user/user.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;
}

@ -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

Loading…
Cancel
Save