Browse Source

Adding user filter in order to process the page a little bit more faster see BT#5707

Julio Montoya 12 years ago
parent
commit
2603a5ef57
3 changed files with 16 additions and 4 deletions
  1. 1 2
      main/exercice/exercise.lib.php
  2. 14 2
      main/inc/lib/events.lib.inc.php
  3. 1 0
      main/inc/lib/tracking.lib.php

+ 1 - 2
main/exercice/exercise.lib.php

@@ -1591,12 +1591,11 @@ function get_best_attempt_in_course($exercise_id, $course_code, $session_id) {
  *  Get the best score in a exercise (NO Exercises in LPs )
  */
 function get_best_attempt_by_user($user_id, $exercise_id, $course_code, $session_id) {
-    $user_results = get_all_exercise_results($exercise_id, $course_code, $session_id, false);
+    $user_results = get_all_exercise_results($exercise_id, $course_code, $session_id, false, $user_id);
     $best_score_data = array();
     $best_score = 0;
     if (!empty($user_results)) {
         foreach($user_results as $result) {
-            if ($result['exe_user_id'] != $user_id) continue;
             if (!empty($result['exe_weighting']) && intval($result['exe_weighting']) != 0) {
                 $score = $result['exe_result']/$result['exe_weighting'];
                 if ($score >= $best_score) {

+ 14 - 2
main/inc/lib/events.lib.inc.php

@@ -959,15 +959,27 @@ function delete_all_incomplete_attempts($user_id, $exercise_id, $course_code, $s
  * @return  array   with the results
  *
  */
-function get_all_exercise_results($exercise_id, $course_code, $session_id = 0, $load_question_list = true) {
+function get_all_exercise_results($exercise_id, $course_code, $session_id = 0, $load_question_list = true, $user_id = null) {
     $TABLETRACK_EXERCICES  = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
     $TBL_TRACK_ATTEMPT     = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
     $course_code           = Database::escape_string($course_code);
     $exercise_id           = intval($exercise_id);
     $session_id            = intval($session_id);
 
+    $user_condition =  null;
+    if (!empty($user_id)) {
+        $user_id = intval($user_id);
+        $user_condition  = "AND exe_user_id = $user_id ";
+    }
     $sql = "SELECT * FROM $TABLETRACK_EXERCICES
-            WHERE status = ''  AND exe_cours_id = '$course_code' AND exe_exo_id = '$exercise_id' AND session_id = $session_id  AND orig_lp_id =0 AND orig_lp_item_id = 0 ORDER BY exe_id";
+            WHERE   status = ''  AND
+                    exe_cours_id = '$course_code' AND
+                    exe_exo_id = '$exercise_id' AND
+                    session_id = $session_id  AND
+                    orig_lp_id =0 AND
+                    orig_lp_item_id = 0
+                    $user_condition
+            ORDER BY exe_id";
     $res = Database::query($sql);
     $list = array();
     while($row = Database::fetch_array($res,'ASSOC')) {

+ 1 - 0
main/inc/lib/tracking.lib.php

@@ -2649,6 +2649,7 @@ class Tracking {
                                 if (!empty($weighting) && intval($weighting) != 0) {
                                     $my_score = $score/$weighting;
                                 }
+                                //@todo this function slows the page
                                 $position = get_exercise_result_ranking($my_score, $exe_id, $exercices['id'], $course_info['code'], $session_id, $user_list);
 
                                 $graph         = self::generate_exercise_result_thumbnail_graph($to_graph_exercise_result[$exercices['id']]);