|
|
|
@ -2817,12 +2817,13 @@ class Tracking |
|
|
|
|
*/ |
|
|
|
|
static function show_user_progress($user_id, $session_id = 0, $extra_params = '', $show_courses = true) |
|
|
|
|
{ |
|
|
|
|
$tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE); |
|
|
|
|
$tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); |
|
|
|
|
$tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); |
|
|
|
|
$tbl_access_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); |
|
|
|
|
$tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER); |
|
|
|
|
$tbl_access_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); |
|
|
|
|
$tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE); |
|
|
|
|
$tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); |
|
|
|
|
$tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); |
|
|
|
|
$tbl_access_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); |
|
|
|
|
$tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER); |
|
|
|
|
$tbl_access_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); |
|
|
|
|
|
|
|
|
|
$user_id = intval($user_id); |
|
|
|
|
|
|
|
|
|
// get course list |
|
|
|
@ -2906,22 +2907,33 @@ class Tracking |
|
|
|
|
); |
|
|
|
|
$html .= '<table class="data_table" width="100%">'; |
|
|
|
|
$html .= '<tr> |
|
|
|
|
'.Display::tag('th', get_lang('Course'), array('width'=>'300px')).' |
|
|
|
|
'.Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class'=>'head')).' |
|
|
|
|
'.Display::tag('th', get_lang('Progress'), array('class'=>'head')).' |
|
|
|
|
'.Display::tag('th', get_lang('Course'), array('width'=>'300px')).' |
|
|
|
|
'.Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class'=>'head')).' |
|
|
|
|
'.Display::tag('th', get_lang('Progress'), array('class'=>'head')).' |
|
|
|
|
'.Display::tag('th', get_lang('Score').Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')),array('class'=>'head')).' |
|
|
|
|
'.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).' |
|
|
|
|
'.Display::tag('th', get_lang('Details'), array('class'=>'head')).' |
|
|
|
|
'.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).' |
|
|
|
|
'.Display::tag('th', get_lang('Details'), array('class'=>'head')).' |
|
|
|
|
</tr>'; |
|
|
|
|
|
|
|
|
|
foreach ($courses as $course_code => $course_title) { |
|
|
|
|
$weighting = 0; |
|
|
|
|
|
|
|
|
|
$total_time_login = Tracking :: get_time_spent_on_the_course($user_id, $course_code); |
|
|
|
|
$time = api_time_to_hms($total_time_login); |
|
|
|
|
$progress = Tracking :: get_avg_student_progress($user_id, $course_code); |
|
|
|
|
$percentage_score = Tracking :: get_avg_student_score($user_id, $course_code, array()); |
|
|
|
|
$last_connection = Tracking :: get_last_connection_date_on_the_course($user_id, $course_code); |
|
|
|
|
$total_time_login = Tracking :: get_time_spent_on_the_course( |
|
|
|
|
$user_id, |
|
|
|
|
$course_code |
|
|
|
|
); |
|
|
|
|
$time = api_time_to_hms($total_time_login); |
|
|
|
|
$progress = Tracking :: get_avg_student_progress( |
|
|
|
|
$user_id, |
|
|
|
|
$course_code |
|
|
|
|
); |
|
|
|
|
$percentage_score = Tracking :: get_avg_student_score( |
|
|
|
|
$user_id, |
|
|
|
|
$course_code, |
|
|
|
|
array() |
|
|
|
|
); |
|
|
|
|
$last_connection = Tracking :: get_last_connection_date_on_the_course( |
|
|
|
|
$user_id, |
|
|
|
|
$course_code |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (is_null($progress)) { |
|
|
|
|
$progress = '0%'; |
|
|
|
@ -2967,97 +2979,100 @@ class Tracking |
|
|
|
|
// Session list |
|
|
|
|
if (!empty($course_in_session)) { |
|
|
|
|
$main_session_graph = ''; |
|
|
|
|
//Load graphics only when calling to an specific session |
|
|
|
|
$session_graph = array(); |
|
|
|
|
|
|
|
|
|
//if (!isset($_GET['session_id']) && !isset($_GET['course'])) { |
|
|
|
|
|
|
|
|
|
//Load graphics only when calling to an specific session |
|
|
|
|
$session_graph = array(); |
|
|
|
|
|
|
|
|
|
$all_exercise_graph_name_list = array(); |
|
|
|
|
$my_results = array(); |
|
|
|
|
$all_exercise_graph_list = array(); |
|
|
|
|
|
|
|
|
|
$all_exercise_start_time = array(); |
|
|
|
|
|
|
|
|
|
foreach ($course_in_session as $my_session_id => $session_data) { |
|
|
|
|
|
|
|
|
|
$course_list = $session_data['course_list']; |
|
|
|
|
$session_name = $session_data['name']; |
|
|
|
|
$all_exercise_graph_name_list = array(); |
|
|
|
|
$my_results = array(); |
|
|
|
|
$all_exercise_graph_list = array(); |
|
|
|
|
|
|
|
|
|
$user_count = count(SessionManager::get_users_by_session($my_session_id)); |
|
|
|
|
$all_exercise_start_time = array(); |
|
|
|
|
|
|
|
|
|
$exercise_graph_name_list = array(); |
|
|
|
|
//$user_results = array(); |
|
|
|
|
$exercise_graph_list = array(); |
|
|
|
|
foreach ($course_in_session as $my_session_id => $session_data) { |
|
|
|
|
|
|
|
|
|
foreach ($course_list as $course_data) { |
|
|
|
|
$course_list = $session_data['course_list']; |
|
|
|
|
$session_name = $session_data['name']; |
|
|
|
|
|
|
|
|
|
$exercise_list = get_all_exercises($course_data, $my_session_id); |
|
|
|
|
$user_count = count(SessionManager::get_users_by_session($my_session_id)); |
|
|
|
|
|
|
|
|
|
foreach ($exercise_list as $exercise_data) { |
|
|
|
|
$exercise_obj = new Exercise($course_data['id']); |
|
|
|
|
$exercise_obj->read($exercise_data['id']); |
|
|
|
|
//Exercise is not necessary to be visible to show results check the result_disable configuration instead |
|
|
|
|
//$visible_return = $exercise_obj->is_visible(); |
|
|
|
|
$exercise_graph_name_list = array(); |
|
|
|
|
//$user_results = array(); |
|
|
|
|
$exercise_graph_list = array(); |
|
|
|
|
|
|
|
|
|
if ($exercise_data['results_disabled'] == 0 || $exercise_data['results_disabled'] == 2) { |
|
|
|
|
//if ($visible_return['value'] == true) { |
|
|
|
|
$best_average = intval(get_best_average_score_by_exercise($exercise_data['id'], $course_data['code'], $my_session_id, $user_count)); |
|
|
|
|
$exercise_graph_list[] = $best_average; |
|
|
|
|
$all_exercise_graph_list[] = $best_average; |
|
|
|
|
foreach ($course_list as $course_data) { |
|
|
|
|
|
|
|
|
|
$user_result_data = get_best_attempt_by_user(api_get_user_id(), $exercise_data['id'], $course_data['code'], $my_session_id); |
|
|
|
|
$score = 0; |
|
|
|
|
if (!empty($user_result_data['exe_weighting']) && intval($user_result_data['exe_weighting']) != 0) { |
|
|
|
|
$score = intval($user_result_data['exe_result']/$user_result_data['exe_weighting'] * 100); |
|
|
|
|
} |
|
|
|
|
//$user_results[] = $score; |
|
|
|
|
$time = api_strtotime($exercise_data['start_time']) ? api_strtotime($exercise_data['start_time'], 'UTC') : 0; |
|
|
|
|
$all_exercise_start_time[] = $time; |
|
|
|
|
$my_results[] = $score; |
|
|
|
|
if (count($exercise_list)<=10) { |
|
|
|
|
$title = cut($course_data['title'], 30)." \n ".cut($exercise_data['title'], 30); |
|
|
|
|
$exercise_graph_name_list[]= $title; |
|
|
|
|
$all_exercise_graph_name_list[] = $title; |
|
|
|
|
} else { |
|
|
|
|
// if there are more than 10 results, space becomes difficult to find, so only show the title of the exercise, not the tool |
|
|
|
|
$title = cut($exercise_data['title'], 30); |
|
|
|
|
$exercise_graph_name_list[]= $title; |
|
|
|
|
$all_exercise_graph_name_list[]= $title; |
|
|
|
|
} |
|
|
|
|
$exercise_list = get_all_exercises($course_data, $my_session_id); |
|
|
|
|
|
|
|
|
|
foreach ($exercise_list as $exercise_data) { |
|
|
|
|
$exercise_obj = new Exercise($course_data['id']); |
|
|
|
|
$exercise_obj->read($exercise_data['id']); |
|
|
|
|
//Exercise is not necessary to be visible to show results check the result_disable configuration instead |
|
|
|
|
//$visible_return = $exercise_obj->is_visible(); |
|
|
|
|
|
|
|
|
|
if ($exercise_data['results_disabled'] == 0 || $exercise_data['results_disabled'] == 2) { |
|
|
|
|
//if ($visible_return['value'] == true) { |
|
|
|
|
$best_average = intval(get_best_average_score_by_exercise($exercise_data['id'], $course_data['code'], $my_session_id, $user_count)); |
|
|
|
|
$exercise_graph_list[] = $best_average; |
|
|
|
|
$all_exercise_graph_list[] = $best_average; |
|
|
|
|
|
|
|
|
|
$user_result_data = get_best_attempt_by_user( |
|
|
|
|
api_get_user_id(), |
|
|
|
|
$exercise_data['id'], |
|
|
|
|
$course_data['code'], |
|
|
|
|
$my_session_id |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$score = 0; |
|
|
|
|
if (!empty($user_result_data['exe_weighting']) && intval($user_result_data['exe_weighting']) != 0) { |
|
|
|
|
$score = intval($user_result_data['exe_result']/$user_result_data['exe_weighting'] * 100); |
|
|
|
|
} |
|
|
|
|
$time = api_strtotime($exercise_data['start_time']) ? api_strtotime($exercise_data['start_time'], 'UTC') : 0; |
|
|
|
|
$all_exercise_start_time[] = $time; |
|
|
|
|
$my_results[] = $score; |
|
|
|
|
if (count($exercise_list)<=10) { |
|
|
|
|
$title = cut($course_data['title'], 30)." \n ".cut($exercise_data['title'], 30); |
|
|
|
|
$exercise_graph_name_list[]= $title; |
|
|
|
|
$all_exercise_graph_name_list[] = $title; |
|
|
|
|
} else { |
|
|
|
|
// if there are more than 10 results, space becomes difficult to find, so only show the title of the exercise, not the tool |
|
|
|
|
$title = cut($exercise_data['title'], 30); |
|
|
|
|
$exercise_graph_name_list[]= $title; |
|
|
|
|
$all_exercise_graph_name_list[]= $title; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Complete graph |
|
|
|
|
if (!empty($my_results) && !empty($all_exercise_graph_list)) { |
|
|
|
|
asort($all_exercise_start_time); |
|
|
|
|
// Complete graph |
|
|
|
|
if (!empty($my_results) && !empty($all_exercise_graph_list)) { |
|
|
|
|
asort($all_exercise_start_time); |
|
|
|
|
|
|
|
|
|
//Fix exams order |
|
|
|
|
$final_all_exercise_graph_name_list = array(); |
|
|
|
|
$my_results_final = array(); |
|
|
|
|
$final_all_exercise_graph_list = array(); |
|
|
|
|
//Fix exams order |
|
|
|
|
$final_all_exercise_graph_name_list = array(); |
|
|
|
|
$my_results_final = array(); |
|
|
|
|
$final_all_exercise_graph_list = array(); |
|
|
|
|
|
|
|
|
|
foreach ($all_exercise_start_time as $key => $time) { |
|
|
|
|
$label_time = ''; |
|
|
|
|
if (!empty($time)) { |
|
|
|
|
$label_time = date('d-m-y', $time); |
|
|
|
|
//$label_time = api_format_date($time, DATE_FORMAT_NUMBER); |
|
|
|
|
} |
|
|
|
|
$final_all_exercise_graph_name_list[] = $all_exercise_graph_name_list[$key].' '.$label_time; |
|
|
|
|
$my_results_final[] = $my_results[$key]; |
|
|
|
|
$final_all_exercise_graph_list[] = $all_exercise_graph_list[$key]; |
|
|
|
|
foreach ($all_exercise_start_time as $key => $time) { |
|
|
|
|
$label_time = ''; |
|
|
|
|
if (!empty($time)) { |
|
|
|
|
$label_time = date('d-m-y', $time); |
|
|
|
|
//$label_time = api_format_date($time, DATE_FORMAT_NUMBER); |
|
|
|
|
} |
|
|
|
|
$main_session_graph = self::generate_session_exercise_graph($final_all_exercise_graph_name_list, $my_results_final, $final_all_exercise_graph_list); |
|
|
|
|
$final_all_exercise_graph_name_list[] = $all_exercise_graph_name_list[$key].' '.$label_time; |
|
|
|
|
$my_results_final[] = $my_results[$key]; |
|
|
|
|
$final_all_exercise_graph_list[] = $all_exercise_graph_list[$key]; |
|
|
|
|
} |
|
|
|
|
//} |
|
|
|
|
|
|
|
|
|
$main_session_graph = self::generate_session_exercise_graph( |
|
|
|
|
$final_all_exercise_graph_name_list, |
|
|
|
|
$my_results_final, |
|
|
|
|
$final_all_exercise_graph_list |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$html .= Display::page_subheader(Display::return_icon('session.png', get_lang('Sessions'), array(), ICON_SIZE_SMALL).' '.get_lang('Sessions')); |
|
|
|
|
|
|
|
|
|
$html .= '<table class="data_table" width="100%">'; |
|
|
|
|
//'.Display::tag('th', get_lang('DoneExercises'), array('class'=>'head')).' |
|
|
|
|
$html .= '<tr> |
|
|
|
|
'.Display::tag('th', get_lang('Session'), array('width'=>'300px')).' |
|
|
|
|
'.Display::tag('th', get_lang('PublishedExercises'), array('width'=>'300px')).' |
|
|
|
@ -3104,10 +3119,10 @@ class Tracking |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Average |
|
|
|
|
$average = get_average_score_by_course($course_data['code'], $my_session_id); |
|
|
|
|
// Average |
|
|
|
|
$average = get_average_score_by_course($course_data['code'], $my_session_id); |
|
|
|
|
|
|
|
|
|
$all_exercises += $count_exercises; |
|
|
|
|
$all_exercises += $count_exercises; |
|
|
|
|
|
|
|
|
|
$all_unanswered_exercises_by_user += $count_exercises - $answered_exercises; |
|
|
|
|
//$all_done_exercise += $done_exercises; |
|
|
|
@ -3122,7 +3137,7 @@ class Tracking |
|
|
|
|
} else { |
|
|
|
|
$html .= '<tr>'; |
|
|
|
|
} |
|
|
|
|
$url = api_get_path(WEB_CODE_PATH)."session/?session_id={$my_session_id}"; |
|
|
|
|
$url = api_get_path(WEB_CODE_PATH)."session/index.php?session_id={$my_session_id}"; |
|
|
|
|
|
|
|
|
|
$html .= Display::tag('td', Display::url($session_name, $url, array('target'=>SESSION_LINK_TARGET))); |
|
|
|
|
$html .= Display::tag('td', $all_exercises); |
|
|
|
@ -3142,7 +3157,7 @@ class Tracking |
|
|
|
|
$html .= '</table><br />'; |
|
|
|
|
$html .= Display::div($main_session_graph, array('id'=>'session_graph','class'=>'chart-session', 'style'=>'position:relative; text-align: center;') ); |
|
|
|
|
|
|
|
|
|
//Checking selected session |
|
|
|
|
// Checking selected session. |
|
|
|
|
|
|
|
|
|
if (isset($_GET['session_id'])) { |
|
|
|
|
$session_id_from_get = intval($_GET['session_id']); |
|
|
|
@ -3218,7 +3233,7 @@ class Tracking |
|
|
|
|
$html .= '<tr class="row_even">'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$url = api_get_course_url($course_code, $session_id_from_get); |
|
|
|
|
$url = api_get_course_url($course_code, $session_id_from_get); |
|
|
|
|
$course_url = Display::url($course_title, $url, array('target'=>SESSION_LINK_TARGET)); |
|
|
|
|
|
|
|
|
|
$html .= Display::tag('td', $course_url); |
|
|
|
@ -3251,7 +3266,7 @@ class Tracking |
|
|
|
|
$details .=Display::return_icon('2rightarrow_na.gif', get_lang('Details')); |
|
|
|
|
} else { |
|
|
|
|
$details = '<a href="'.api_get_self().'?course='.$course_code.'&session_id='.$session_id_from_get.$extra_params.'">'; |
|
|
|
|
$details .=Display::return_icon('2rightarrow.gif', get_lang('Details')); |
|
|
|
|
$details .= Display::return_icon('2rightarrow.gif', get_lang('Details')); |
|
|
|
|
} |
|
|
|
|
$details .= '</a>'; |
|
|
|
|
$html .= Display::tag('td', $details, array('align'=>'center')); |
|
|
|
|