Fixing slow queries main/session/index.php see BT#3174

skala
Julio Montoya 14 years ago
parent 3cb034902a
commit 84caaac813
  1. 21
      main/exercice/exercise.lib.php
  2. 17
      main/inc/lib/events.lib.inc.php
  3. 11
      main/inc/lib/tracking.lib.php
  4. 12
      main/session/index.php

@ -1295,22 +1295,19 @@ function get_all_exercises_for_course_id($course_info = null, $session_id = 0, $
* @param int session id
* @return int the position of the user between his friends in a course (or course within a session)
*/
function get_exercise_result_ranking($my_score, $my_exe_id, $exercise_id, $course_code, $session_id = 0, $return_string = true) {
if (empty($session_id)) {
$session_id = 0;
$user_list = UserManager::get_user_list();
} else {
$user_list = SessionManager::get_users_by_session($session_id);
}
function get_exercise_result_ranking($my_score, $my_exe_id, $exercise_id, $course_code, $session_id = 0, $user_list, $return_string = true) {
//No score given we return
if (is_null($my_score)) {
return '-';
}
if (empty($user_list)) {
return '-';
}
$best_attempts = array();
foreach($user_list as $user_data) {
$user_id = $user_data['user_id'];
$best_attempts[$user_id]= get_best_attempt_by_user($user_id,$exercise_id,$course_code,$session_id);
$best_attempts[$user_id]= get_best_attempt_by_user($user_id, $exercise_id, $course_code, $session_id);
}
$position_data = array();
@ -1374,7 +1371,7 @@ function get_exercise_result_ranking_by_attempt($my_score, $my_exe_id, $exercise
if (is_null($my_score)) {
return '-';
}
$user_results = get_all_exercise_results($exercise_id, $course_code, $session_id);
$user_results = get_all_exercise_results($exercise_id, $course_code, $session_id, false);
$position_data = array();
if (empty($user_results)) {
return 1;
@ -1421,7 +1418,7 @@ function get_exercise_result_ranking_by_attempt($my_score, $my_exe_id, $exercise
*/
function get_best_attempt_in_course($exercise_id, $course_code, $session_id) {
$user_results = get_all_exercise_results($exercise_id, $course_code, $session_id);
$user_results = get_all_exercise_results($exercise_id, $course_code, $session_id, false);
$best_score_data = array();
$best_score = 0;
if (!empty($user_results)) {
@ -1442,7 +1439,7 @@ 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);
$user_results = get_all_exercise_results($exercise_id, $course_code, $session_id, false);
$best_score_data = array();
$best_score = 0;
if (!empty($user_results)) {
@ -1514,7 +1511,7 @@ function get_average_score_by_course($course_code, $session_id) {
}
function get_average_score_by_course_by_user($user_id, $course_code, $session_id) {
$user_results = get_all_exercise_results_by_user($user_id, $course_code, $session_id, false);
$user_results = get_all_exercise_results_by_user($user_id, $course_code, $session_id);
$avg_score = 0;
if (!empty($user_results)) {
foreach($user_results as $result) {

@ -862,23 +862,26 @@ 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) {
function get_all_exercise_results($exercise_id, $course_code, $session_id = 0, $load_question_list = true) {
$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);
$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";
$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";
$res = Database::query($sql);
$list = array();
while($row = Database::fetch_array($res,'ASSOC')) {
$list[$row['exe_id']] = $row;
$sql = "SELECT * FROM $TBL_TRACK_ATTEMPT WHERE exe_id = {$row['exe_id']}";
$res_question = Database::query($sql);
while($row_q = Database::fetch_array($res_question,'ASSOC')) {
$list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q;
}
if ($load_question_list) {
$sql = "SELECT * FROM $TBL_TRACK_ATTEMPT WHERE exe_id = {$row['exe_id']}";
$res_question = Database::query($sql);
while($row_q = Database::fetch_array($res_question,'ASSOC')) {
$list[$row['exe_id']]['question_list'][$row_q['question_id']] = $row_q;
}
}
}
return $list;
}

@ -2530,6 +2530,15 @@ class Tracking {
}
$result_exercices = Database::query($sql_exercices);
$to_graph_exercise_result = array();
if (empty($session_id)) {
$user_list = UserManager::get_user_list();
} else {
$user_list = SessionManager::get_users_by_session($session_id);
}
if (Database::num_rows($result_exercices) > 0) {
$score = $weighting = $exe_id = 0;
while ($exercices = Database::fetch_array($result_exercices)) {
@ -2572,7 +2581,7 @@ class Tracking {
if (!empty($weighting) && intval($weighting) != 0) {
$my_score = $score/$weighting;
}
$position = get_exercise_result_ranking($my_score, $exe_id, $exercices['id'], $course_info['code'], $session_id);
$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']]);
$normal_graph = self::generate_exercise_result_graph($to_graph_exercise_result[$exercices['id']]);

@ -12,10 +12,6 @@
$language_file = array('courses', 'index','tracking','exercice', 'admin');
$cidReset = true;
require_once '../inc/global.inc.php';
$libpath = api_get_path(LIBRARY_PATH);
require_once $libpath.'formvalidator/FormValidator.class.php';
require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php';
require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.class.php';
@ -132,7 +128,11 @@ if (!empty($course_list)) {
}
}*/
if (empty($session_id)) {
$user_list = UserManager::get_user_list();
} else {
$user_list = SessionManager::get_users_by_session($session_id);
}
//Final data to be show
$my_real_array = $new_exercises = array();
@ -177,7 +177,7 @@ foreach($final_array as $session_data) {
if(!empty($exercise_result['exe_weighting']) && intval($exercise_result['exe_weighting']) != 0) {
$my_score = $exercise_result['exe_result']/$exercise_result['exe_weighting'];
}
$position = get_exercise_result_ranking($my_score, $exercise_result['exe_id'], $my_exercise_id, $my_course_code,$session_id);
$position = get_exercise_result_ranking($my_score, $exercise_result['exe_id'], $my_exercise_id, $my_course_code, $session_id, $user_list);
//$exercise_info->exercise = Display::url($exercise_info->exercise, api_get_path(WEB_CODE_PATH)."exercice/exercice.php?cidReq=$my_course_code&exerciseId={$exercise_info->id}&id_session=$session_id&show=result", array('target'=>SESSION_LINK_TARGET,'class'=>'exercise-result-link'));
$exercise_info->exercise = Display::url($exercise_info->exercise, api_get_path(WEB_CODE_PATH)."exercice/result.php?cidReq=$my_course_code&id={$exercise_result['exe_id']}&id_session=$session_id&show_headers=1", array('target'=>SESSION_LINK_TARGET,'class'=>'exercise-result-link'));

Loading…
Cancel
Save