Fixing SQL queries in course catalog, replacing the $user_count = count(CourseManager:: get_user_list_from_course_code()) with an specific function called CourseManager::get_users_count_in_course()

skala
Julio Montoya 15 years ago
parent c7bf5676d9
commit 6e0a7ea72b
  1. 4
      main/css/base.css
  2. 14
      main/inc/lib/auth.lib.php
  3. 67
      main/inc/lib/course.lib.php
  4. 5
      main/webservices/registration.soap.php

@ -571,11 +571,11 @@ a.personal_agenda:hover, a.personal_agenda:hover {
/** BUTTONS **/
.left {
float:left;
float:left !important;
}
.right {
float:right;
float:right !important;
}
/* New button style experimental */

@ -458,13 +458,13 @@ class Auth
WHERE access_url_id = $url_access_id $without_special_courses ORDER BY RAND() LIMIT $random_value";
}
/*SELECT * FROM $tbl_course, (SELECT CEIL(MAX($tbl_course.id) * RAND()) AS randId FROM $tbl_course) AS someRandId
WHERE $tbl_course.id >= someRandId.randId LIMIT 10
*/
$sql = "SELECT * FROM $tbl_course, (SELECT CEIL(MAX($tbl_course.id) * RAND()) AS randId FROM $tbl_course) AS someRandId
WHERE $tbl_course.id >= someRandId.randId LIMIT 10";
} else {
$category_code = Database::escape_string($category_code);
//$my_category = (empty($category) ? " IS NULL" : "='".$category."'");
$sql = "SELECT * FROM $tbl_course WHERE category_code='$category_code' $without_special_courses ORDER BY title, visual_code";
$sql = "SELECT * FROM $tbl_course WHERE category_code='$category_code' $without_special_courses ORDER BY title LIMIT 10";
//showing only the courses of the current Chamilo access_url_id
if ($_configuration['multiple_access_urls']) {
@ -472,17 +472,15 @@ class Auth
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql = "SELECT * FROM $tbl_course as course INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.course_code=course.code)
WHERE access_url_id = $url_access_id AND category_code='$category_code' $without_special_courses ORDER BY title, visual_code";
WHERE access_url_id = $url_access_id AND category_code='$category_code' $without_special_courses ORDER BY title";
}
}
$result = Database::query($sql);
$courses = array();
while ($row = Database::fetch_array($result)) {
$row['registration_code'] = !empty($row['registration_code']);
$count_users = count(CourseManager::get_user_list_from_course_code($row['code']));
$count_users = CourseManager::get_users_count_in_course($row['code']);
$count_connections_last_month = Tracking::get_course_connections_count($row['code'], 0, api_get_utc_datetime(time()-(30*86400)));
if ($row['tutor_name'] == '0') {

@ -1008,18 +1008,13 @@ class CourseManager {
: 'SELECT DISTINCT user.user_id, session_course_user.status as status_session, user.* ';
$sql .= ' FROM '.Database::get_main_table(TABLE_MAIN_USER).' as user ';
if (api_get_setting('use_session_mode')=='true' && $with_session) {
if (!empty($session_id)) {
$sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER).' as session_course_user
ON user.user_id = session_course_user.id_user
AND session_course_user.course_code="'.$course_code.'"';
if ($session_id != 0) {
$sql .= ' AND session_course_user.id_session = '.$session_id;
}
ON user.user_id = session_course_user.id_user
AND session_course_user.course_code="'.$course_code.'"
AND session_course_user.id_session = '.$session_id;
$where[] = ' session_course_user.course_code IS NOT NULL ';
}
if ($session_id == 0) {
} else {
$sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_COURSE_USER).' as course_rel_user
ON user.user_id = course_rel_user.user_id AND course_rel_user.relation_type<>'.COURSE_RELATION_TYPE_RRHH.'
AND course_rel_user.course_code="'.$course_code.'"';
@ -1037,7 +1032,7 @@ class CourseManager {
$sql .= " AND (access_url_id = $current_access_url_id ) ";
}
$sql .= ' '.$order_by.' '.$limit;
echo $sql;
$rs = Database::query($sql);
$users = array();
@ -1060,9 +1055,57 @@ class CourseManager {
$users[$user['user_id']] = $user_info;
}
}
return $users;
}
/**
* Gets subscribed users in a course or in a course/session
*
* @param string $course_code
* @param int $session_id
* @return int
*/
public static function get_users_count_in_course($course_code, $session_id = 0) {
global $_configuration;
// variable initialisation
$session_id = intval($session_id);
$course_code = Database::escape_string($course_code);
$sql .= 'SELECT DISTINCT count(*) as count FROM '.Database::get_main_table(TABLE_MAIN_USER).' as user ';
$where = array();
if (!empty($session_id)) {
$sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER).' as session_course_user
ON user.user_id = session_course_user.id_user
AND session_course_user.course_code = "'.$course_code.'"
AND session_course_user.id_session = '.$session_id;
$where[] = ' session_course_user.course_code IS NOT NULL ';
} else {
$sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_COURSE_USER).' as course_rel_user
ON user.user_id = course_rel_user.user_id AND course_rel_user.relation_type<>'.COURSE_RELATION_TYPE_RRHH.'
AND course_rel_user.course_code="'.$course_code.'"';
$where[] = ' course_rel_user.course_code IS NOT NULL ';
}
return $users;
if ($_configuration['multiple_access_urls']) {
$sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER).' au ON (au.user_id = user.user_id) ';
}
$sql .= ' WHERE '.implode(' OR ', $where);
if ($_configuration['multiple_access_urls']) {
$current_access_url_id = api_get_current_access_url_id();
$sql .= " AND (access_url_id = $current_access_url_id ) ";
}
$rs = Database::query($sql);
$users = array();
$count = 0;
if (Database::num_rows($rs)) {
$user = Database::fetch_array($rs);
$count = $user['count'];
}
return $count;
}
/**

@ -4788,9 +4788,8 @@ function WSListCourses($params) {
}
// Determining number of students registered in course
$user_list = CourseManager::get_user_list_from_course_code($course['code'], false);
$course_tmp['number_students'] = count($user_list);
$course_tmp['number_students'] = CourseManager::get_users_count_in_course($course['code']);
// Determining external course id
$course_tmp['external_course_id'] = CourseManager::get_course_extra_field_value($course_field_name, $course['code']);

Loading…
Cancel
Save