Browse Source

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()

Julio Montoya 13 years ago
parent
commit
6e0a7ea72b
4 changed files with 65 additions and 25 deletions
  1. 2 2
      main/css/base.css
  2. 6 8
      main/inc/lib/auth.lib.php
  3. 55 12
      main/inc/lib/course.lib.php
  4. 2 3
      main/webservices/registration.soap.php

+ 2 - 2
main/css/base.css

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

+ 6 - 8
main/inc/lib/auth.lib.php

@@ -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') {

+ 55 - 12
main/inc/lib/course.lib.php

@@ -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;
     }
 
     /**

+ 2 - 3
main/webservices/registration.soap.php

@@ -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']);