|
|
|
@ -241,6 +241,7 @@ class Tracking { |
|
|
|
//345600 = 7 days in seconds |
|
|
|
//345600 = 7 days in seconds |
|
|
|
if ($currentTimestamp - $timestamp > 604800) { |
|
|
|
if ($currentTimestamp - $timestamp > 604800) { |
|
|
|
if ($convert_date) { |
|
|
|
if ($convert_date) { |
|
|
|
|
|
|
|
//@todo this is so bad ... |
|
|
|
return '<span style="color: #F00;">' . api_format_date($last_login_date, DATE_FORMAT_SHORT) . (api_is_allowed_to_edit()?' <a href="'.api_get_path(REL_CODE_PATH).'announcements/announcements.php?action=add&remind_inactive='.$student_id.'" title="'.get_lang('RemindInactiveUser').'"><img align="middle" src="'.api_get_path(WEB_IMG_PATH).'messagebox_warning.gif" /></a>':'').'</span>'; |
|
|
|
return '<span style="color: #F00;">' . api_format_date($last_login_date, DATE_FORMAT_SHORT) . (api_is_allowed_to_edit()?' <a href="'.api_get_path(REL_CODE_PATH).'announcements/announcements.php?action=add&remind_inactive='.$student_id.'" title="'.get_lang('RemindInactiveUser').'"><img align="middle" src="'.api_get_path(WEB_IMG_PATH).'messagebox_warning.gif" /></a>':'').'</span>'; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
return $last_login_date; |
|
|
|
return $last_login_date; |
|
|
|
@ -412,7 +413,7 @@ class Tracking { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Get count student's exercise attempts |
|
|
|
* Get count student's exercise attempts |
|
|
|
* @param int Student id |
|
|
|
* @param int Student id |
|
|
|
* @param string Course code |
|
|
|
* @param string Course code |
|
|
|
* @param int Exercise id |
|
|
|
* @param int Exercise id |
|
|
|
* @param int Learning path id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required. |
|
|
|
* @param int Learning path id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required. |
|
|
|
@ -420,36 +421,70 @@ class Tracking { |
|
|
|
* @return int count of attempts |
|
|
|
* @return int count of attempts |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public function count_student_exercise_attempts($student_id, $course_code, $exercise_id, $lp_id = 0, $lp_item_id = 0, $session_id = 0) { |
|
|
|
public function count_student_exercise_attempts($student_id, $course_code, $exercise_id, $lp_id = 0, $lp_item_id = 0, $session_id = 0) { |
|
|
|
|
|
|
|
|
|
|
|
$course_code = Database::escape_string($course_code); |
|
|
|
$course_code = Database::escape_string($course_code); |
|
|
|
$course_info = CourseManager :: get_course_information($course_code); |
|
|
|
|
|
|
|
$student_id = intval($student_id); |
|
|
|
$student_id = intval($student_id); |
|
|
|
$exercise_id = intval($exercise_id); |
|
|
|
$exercise_id = intval($exercise_id); |
|
|
|
$session_id = intval($session_id); |
|
|
|
$session_id = intval($session_id); |
|
|
|
$count_attempts = 0; |
|
|
|
$count_attempts = 0; |
|
|
|
|
|
|
|
|
|
|
|
if (!empty($lp_id)) $lp_id = intval($lp_id); |
|
|
|
if (!empty($lp_id)) $lp_id = intval($lp_id); |
|
|
|
if (!empty($lp_item_id)) $lp_id = intval($lp_item_id); |
|
|
|
if (!empty($lp_item_id)) $lp_id = intval($lp_item_id); |
|
|
|
|
|
|
|
|
|
|
|
if (!empty($course_info['db_name'])) { |
|
|
|
|
|
|
|
$tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES, $course_info['db_name']); |
|
|
|
$tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); |
|
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT COUNT(ex.exe_id) as essais FROM $tbl_stats_exercices AS ex |
|
|
|
$sql = "SELECT COUNT(ex.exe_id) as essais FROM $tbl_stats_exercices AS ex |
|
|
|
WHERE ex.exe_cours_id = '$course_code' |
|
|
|
WHERE ex.exe_cours_id = '$course_code' |
|
|
|
AND ex.exe_exo_id = $exercise_id |
|
|
|
AND ex.exe_exo_id = $exercise_id |
|
|
|
AND orig_lp_id = $lp_id |
|
|
|
AND orig_lp_id = $lp_id |
|
|
|
AND orig_lp_item_id = $lp_item_id |
|
|
|
AND orig_lp_item_id = $lp_item_id |
|
|
|
AND exe_user_id= $student_id |
|
|
|
AND exe_user_id= $student_id |
|
|
|
AND session_id = $session_id "; |
|
|
|
AND session_id = $session_id "; |
|
|
|
|
|
|
|
|
|
|
|
$rs = Database::query($sql); |
|
|
|
$rs = Database::query($sql); |
|
|
|
$row = Database::fetch_row($rs); |
|
|
|
$row = Database::fetch_row($rs); |
|
|
|
$count_attempts = $row[0]; |
|
|
|
$count_attempts = $row[0]; |
|
|
|
} |
|
|
|
|
|
|
|
return $count_attempts; |
|
|
|
return $count_attempts; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Get count student's exercise progress |
|
|
|
|
|
|
|
* @param int user id |
|
|
|
|
|
|
|
* @param string course code |
|
|
|
|
|
|
|
* @param int session id |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function get_exercise_student_progress($exercise_list, $user_id, $course_code, $session_id) { |
|
|
|
|
|
|
|
$course_code = Database::escape_string($course_code); |
|
|
|
|
|
|
|
$user_id = intval($user_id); |
|
|
|
|
|
|
|
$session_id = intval($session_id); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (empty($exercise_list)) { |
|
|
|
|
|
|
|
return '0%'; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
$tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); |
|
|
|
|
|
|
|
$exercise_list = array_keys($exercise_list); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
array_map('intval', $exercise_list); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$exercise_list = implode("' ,'", $exercise_list); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT COUNT(ex.exe_exo_id) FROM $tbl_stats_exercices AS ex |
|
|
|
|
|
|
|
WHERE ex.exe_cours_id = '$course_code' AND |
|
|
|
|
|
|
|
ex.session_id = $session_id AND |
|
|
|
|
|
|
|
ex.exe_user_id = $user_id AND ex.exe_exo_id IN ('$exercise_list') "; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$rs = Database::query($sql); |
|
|
|
|
|
|
|
$count = 0; |
|
|
|
|
|
|
|
if ($rs) { |
|
|
|
|
|
|
|
$row = Database::fetch_row($rs); |
|
|
|
|
|
|
|
$count = $row[0]; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
$count = ($count != 0 ) ? 100*round(intval($count)/count($exercise_list), 2) .'%' : '0%'; |
|
|
|
|
|
|
|
return $count; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Returns the average student progress in the learning paths of the given |
|
|
|
* Returns the average student progress in the learning paths of the given |
|
|
|
* course. |
|
|
|
* course. |
|
|
|
@ -3538,15 +3573,17 @@ class TrackingCourseLog { |
|
|
|
$sql .= " ORDER BY col$column $direction "; |
|
|
|
$sql .= " ORDER BY col$column $direction "; |
|
|
|
$sql .= " LIMIT $from,$number_of_items"; |
|
|
|
$sql .= " LIMIT $from,$number_of_items"; |
|
|
|
|
|
|
|
|
|
|
|
$res = Database::query($sql); |
|
|
|
$res = Database::query($sql); |
|
|
|
$users = array (); |
|
|
|
$users = array (); |
|
|
|
$t = time(); |
|
|
|
$t = time(); |
|
|
|
$row = array(); |
|
|
|
$row = array(); |
|
|
|
|
|
|
|
|
|
|
|
$course_info = api_get_course_info($course_code); |
|
|
|
$course_info = api_get_course_info($course_code); |
|
|
|
|
|
|
|
|
|
|
|
$total_surveys = 0; |
|
|
|
$total_surveys = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$total_exercises = get_all_exercises($course_info, $session_id); |
|
|
|
|
|
|
|
|
|
|
|
if (empty($session_id)) { |
|
|
|
if (empty($session_id)) { |
|
|
|
$survey_user_list = array(); |
|
|
|
$survey_user_list = array(); |
|
|
|
$survey_list = survey_manager::get_surveys($course_code, $session_id); |
|
|
|
$survey_list = survey_manager::get_surveys($course_code, $session_id); |
|
|
|
@ -3563,7 +3600,6 @@ class TrackingCourseLog { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
while ($user = Database::fetch_array($res, 'ASSOC')) { |
|
|
|
while ($user = Database::fetch_array($res, 'ASSOC')) { |
|
|
|
//$user['user_id'] = $user['user_id'] |
|
|
|
|
|
|
|
$user['official_code'] = $user['col0']; |
|
|
|
$user['official_code'] = $user['col0']; |
|
|
|
if ($is_western_name_order) { |
|
|
|
if ($is_western_name_order) { |
|
|
|
$user['lastname'] = $user['col2']; |
|
|
|
$user['lastname'] = $user['col2']; |
|
|
|
@ -3581,12 +3617,18 @@ class TrackingCourseLog { |
|
|
|
$avg_student_progress=0; |
|
|
|
$avg_student_progress=0; |
|
|
|
} |
|
|
|
} |
|
|
|
$user['average_progress'] = $avg_student_progress.'%'; |
|
|
|
$user['average_progress'] = $avg_student_progress.'%'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$total_user_exercise = Tracking::get_exercise_student_progress($total_exercises, $user['user_id'], $course_code, $session_id); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$user['exercise_progress'] = $total_user_exercise; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (is_numeric($avg_student_score)) { |
|
|
|
if (is_numeric($avg_student_score)) { |
|
|
|
$user['student_score'] = $avg_student_score.'%'; |
|
|
|
$user['student_score'] = $avg_student_score.'%'; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
$user['student_score'] = $avg_student_score; |
|
|
|
$user['student_score'] = $avg_student_score; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$user['count_assignments'] = Tracking::count_student_assignments($user['user_id'], $course_code, $session_id); |
|
|
|
$user['count_assignments'] = Tracking::count_student_assignments($user['user_id'], $course_code, $session_id); |
|
|
|
$user['count_messages'] = Tracking::count_student_messages($user['user_id'], $course_code, $session_id); |
|
|
|
$user['count_messages'] = Tracking::count_student_messages($user['user_id'], $course_code, $session_id); |
|
|
|
$user['first_connection'] = Tracking::get_first_connection_date_on_the_course($user['user_id'], $course_code, $session_id); |
|
|
|
$user['first_connection'] = Tracking::get_first_connection_date_on_the_course($user['user_id'], $course_code, $session_id); |
|
|
|
@ -3622,7 +3664,11 @@ class TrackingCourseLog { |
|
|
|
$user_row[]= $user['lastname']; |
|
|
|
$user_row[]= $user['lastname']; |
|
|
|
} |
|
|
|
} |
|
|
|
$user_row[]= $user['time']; |
|
|
|
$user_row[]= $user['time']; |
|
|
|
|
|
|
|
|
|
|
|
$user_row[]= $user['average_progress']; |
|
|
|
$user_row[]= $user['average_progress']; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$user_row[]= $user['exercise_progress']; |
|
|
|
|
|
|
|
|
|
|
|
$user_row[]= $user['student_score']; |
|
|
|
$user_row[]= $user['student_score']; |
|
|
|
$user_row[]= $user['count_assignments']; |
|
|
|
$user_row[]= $user['count_assignments']; |
|
|
|
$user_row[]= $user['count_messages']; |
|
|
|
$user_row[]= $user['count_messages']; |
|
|
|
@ -3633,21 +3679,21 @@ class TrackingCourseLog { |
|
|
|
|
|
|
|
|
|
|
|
$user_row[]= $user['first_connection']; |
|
|
|
$user_row[]= $user['first_connection']; |
|
|
|
$user_row[]= $user['last_connection']; |
|
|
|
$user_row[]= $user['last_connection']; |
|
|
|
$user_row[]= $user['additional']; |
|
|
|
$user_row[]= $user['additional']; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$user_row[]= $user['link']; |
|
|
|
$user_row[]= $user['link']; |
|
|
|
|
|
|
|
|
|
|
|
$users[] = $user_row; |
|
|
|
$users[] = $user_row; |
|
|
|
|
|
|
|
|
|
|
|
if ($export_csv) { |
|
|
|
if ($export_csv) { |
|
|
|
if (empty($session_id)) { |
|
|
|
if (empty($session_id)) { |
|
|
|
unset($user_row[12]); |
|
|
|
|
|
|
|
unset($user_row[13]); |
|
|
|
unset($user_row[13]); |
|
|
|
|
|
|
|
unset($user_row[14]); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
unset($user_row[11]); |
|
|
|
|
|
|
|
unset($user_row[12]); |
|
|
|
unset($user_row[12]); |
|
|
|
|
|
|
|
unset($user_row[13]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$csv_content[] = $user_row; |
|
|
|
$csv_content[] = $user_row; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|