|
|
|
@ -544,12 +544,246 @@ class SessionManager |
|
|
|
|
while ($row = Database::fetch_assoc($result)) { |
|
|
|
|
$formatted_sessions[] = $row; |
|
|
|
|
} |
|
|
|
|
/*foreach ($lps as $lp) { |
|
|
|
|
error_log(print_r($lp,1)); |
|
|
|
|
}*/ |
|
|
|
|
} |
|
|
|
|
return $formatted_sessions; |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Gets the progress of the given session |
|
|
|
|
* @param int session id |
|
|
|
|
* @param array options order and limit keys |
|
|
|
|
* @return array table with user name, lp name, progress |
|
|
|
|
*/ |
|
|
|
|
public static function get_session_progress($sessionId, $options) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
//tables |
|
|
|
|
$session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); |
|
|
|
|
$user = Database::get_main_table(TABLE_MAIN_USER); |
|
|
|
|
$workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
|
|
|
|
$workTableAssignment = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT); |
|
|
|
|
$forum = Database::get_course_table(TABLE_FORUM); |
|
|
|
|
$forum_post = Database::get_course_table(TABLE_FORUM_POST); |
|
|
|
|
$tbl_course_lp = Database::get_course_table(TABLE_LP_MAIN); |
|
|
|
|
$wiki = Database::get_course_table(TABLE_WIKI); |
|
|
|
|
|
|
|
|
|
$courses = SessionManager::get_course_list_by_session_id($sessionId); |
|
|
|
|
//TODO let select course |
|
|
|
|
$course = current($courses); |
|
|
|
|
//TODO fix this |
|
|
|
|
$course_info = array('real_id' => $course['id']); |
|
|
|
|
|
|
|
|
|
//getting all the students of the course |
|
|
|
|
//we are not using this because it only returns user ids |
|
|
|
|
/*if (empty($sessionId) |
|
|
|
|
{ |
|
|
|
|
// Registered students in a course outside session. |
|
|
|
|
$users = CourseManager :: get_student_list_from_course_code($course_code); |
|
|
|
|
} else { |
|
|
|
|
// Registered students in session. |
|
|
|
|
$users = CourseManager :: get_student_list_from_course_code($course_code, true, $sessionId); |
|
|
|
|
}*/ |
|
|
|
|
$sql = "SELECT u.user_id, u.lastname, u.firstname, u.username, u.email, s.course_code FROM $session_course_user s |
|
|
|
|
INNER JOIN $user u ON u.user_id = s.id_user |
|
|
|
|
WHERE course_code = '%s' |
|
|
|
|
AND s.status <> 2 and id_session = %s"; |
|
|
|
|
|
|
|
|
|
$sql_query = sprintf($sql, $course['code'], $sessionId); |
|
|
|
|
|
|
|
|
|
$rs = Database::query($sql_query); |
|
|
|
|
while ($user = Database::fetch_array($rs)) |
|
|
|
|
{ |
|
|
|
|
$users[$user['user_id']] = $user; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Lessons |
|
|
|
|
*/ |
|
|
|
|
$sql = "SELECT * FROM $tbl_course_lp |
|
|
|
|
WHERE c_id = %s "; //AND session_id = %s |
|
|
|
|
$sql_query = sprintf($sql, $course_info['real_id']); |
|
|
|
|
$result = Database::query($sql_query); |
|
|
|
|
$lessons_total = 0; |
|
|
|
|
while ($row = Database::fetch_array($result)) |
|
|
|
|
{ |
|
|
|
|
if (api_get_item_visibility(api_get_course_info($course['code']), 'learnpath', $row['id'], $sessionId)) |
|
|
|
|
{ |
|
|
|
|
$lessons_total++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Exercises |
|
|
|
|
*/ |
|
|
|
|
require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php'; |
|
|
|
|
$exercises = get_all_exercises($course_info, $sessionId); |
|
|
|
|
$exercises_total = count($exercises); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Assignments |
|
|
|
|
*/ |
|
|
|
|
//total |
|
|
|
|
$sql = "SELECT count(w.id) as count |
|
|
|
|
FROM $workTable w |
|
|
|
|
LEFT JOIN $workTableAssignment a ON (a.publication_id = w.id AND a.c_id = w.c_id) |
|
|
|
|
WHERE w.c_id = %s |
|
|
|
|
AND parent_id = 0 |
|
|
|
|
AND active IN (1, 0) |
|
|
|
|
AND session_id = %s"; |
|
|
|
|
$sql_query = sprintf($sql, $course_info['real_id'], $sessionId); |
|
|
|
|
$result = Database::query($sql_query); |
|
|
|
|
$row = Database::fetch_array($result); |
|
|
|
|
$assignments_total = $row['count']; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Wiki |
|
|
|
|
*/ |
|
|
|
|
$sql = "SELECT count(distinct page_id) as count FROM $wiki |
|
|
|
|
WHERE c_id = %s and session_id = %s"; |
|
|
|
|
$sql_query = sprintf($sql, $course_info['real_id'], $sessionId); |
|
|
|
|
$result = Database::query($sql_query); |
|
|
|
|
$row = Database::fetch_array($result); |
|
|
|
|
$wiki_total = $row['count']; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Surveys |
|
|
|
|
*/ |
|
|
|
|
$survey_user_list = array(); |
|
|
|
|
$survey_list = survey_manager::get_surveys($course['code'], $sessionId); |
|
|
|
|
|
|
|
|
|
$surveys_total = count($survey_list); |
|
|
|
|
$survey_data = array(); |
|
|
|
|
foreach ($survey_list as $survey) |
|
|
|
|
{ |
|
|
|
|
$user_list = survey_manager::get_people_who_filled_survey($survey['survey_id'], false, $course_info['real_id']); |
|
|
|
|
foreach ($user_list as $user_id) |
|
|
|
|
{ |
|
|
|
|
isset($survey_user_list[$user_id]) ? $survey_user_list[$user_id]++ : $survey_user_list[$user_id] = 1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Forums |
|
|
|
|
*/ |
|
|
|
|
//total |
|
|
|
|
$sql = "SELECT count(*) as count |
|
|
|
|
FROM $forum f |
|
|
|
|
where f.c_id = %s and f.session_id = %s"; |
|
|
|
|
$sql_query = sprintf($sql, $course_info['real_id'], $sessionId); |
|
|
|
|
$result = Database::query($sql_query); |
|
|
|
|
$row = Database::fetch_array($result); |
|
|
|
|
$forums_total = $row['count']; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//process table info |
|
|
|
|
foreach ($users as $user) |
|
|
|
|
{ |
|
|
|
|
//Course description |
|
|
|
|
$sql = "SELECT count(*) as count |
|
|
|
|
FROM track_e_access |
|
|
|
|
WHERE access_tool = 'course_description' |
|
|
|
|
AND access_cours_code = '%s' |
|
|
|
|
AND access_session_id = %s |
|
|
|
|
AND access_user_id = %s "; |
|
|
|
|
$sql_query = sprintf($sql, $course['code'], $sessionId, $user['user_id']); |
|
|
|
|
$result = Database::query($sql_query); |
|
|
|
|
$row = Database::fetch_array($result); |
|
|
|
|
$course_description_progress = ($row['count'] > 0) ? 100 : 0; |
|
|
|
|
|
|
|
|
|
//Lessons |
|
|
|
|
//TODO: Lessons done and left is calculated by progress per item in lesson, maybe we should calculate it only per completed lesson? |
|
|
|
|
$lessons_progress = Tracking::get_avg_student_progress($user['user_id'], $course['code'], array(), $sessionId); |
|
|
|
|
$lessons_done = ($lessons_progress * $lessons_total) / 100; |
|
|
|
|
$lessons_left = $lessons_total - $lessons_done; |
|
|
|
|
|
|
|
|
|
//Exercises |
|
|
|
|
$exercises_progress = str_replace('%', '', Tracking::get_exercise_student_progress($exercises, $user['user_id'], $course['code'], $sessionId)); |
|
|
|
|
$exercises_done = ($exercises_progress * $exercises_total) / 100; |
|
|
|
|
$exercises_left = $exercises_total - $exercises_done; |
|
|
|
|
|
|
|
|
|
//Assignments |
|
|
|
|
$assignments_done = Tracking::count_student_assignments($user['user_id'], $course['code'], $sessionId); |
|
|
|
|
$assignments_left = $assignments_total - $assignments_done; |
|
|
|
|
$assignments_progress = round((( $assignments_done * 100 ) / $assignments_total ), 2); |
|
|
|
|
|
|
|
|
|
//Wiki |
|
|
|
|
$sql = "SELECT count(*) as count |
|
|
|
|
FROM $wiki |
|
|
|
|
where c_id = %s and session_id = %s and user_id = %s"; |
|
|
|
|
$sql_query = sprintf($sql, $course_info['real_id'], $sessionId, $user['user_id']); |
|
|
|
|
$result = Database::query($sql_query); |
|
|
|
|
$row = Database::fetch_array($result); |
|
|
|
|
$wiki_revisions = $row['count']; |
|
|
|
|
|
|
|
|
|
//Surveys |
|
|
|
|
$surveys_done = (isset($survey_user_list[$user['user_id']]) ? $survey_user_list[$user['user_id']] : 0); |
|
|
|
|
$surveys_left = $surveys_total - $surveys_done; |
|
|
|
|
$surveys_progress = round((( $surveys_done * 100 ) / $surveys_total), 2); |
|
|
|
|
|
|
|
|
|
//Forums |
|
|
|
|
#$forums_done = Tracking::count_student_messages($user['user_id'], $course_code, $session_id); |
|
|
|
|
$sql = "SELECT count(distinct f.forum_id) as count FROM $forum_post p |
|
|
|
|
INNER JOIN $forum f ON f.forum_id = p.forum_id |
|
|
|
|
WHERE p.poster_id = %s and f.session_id = %s and p.c_id = %s"; |
|
|
|
|
$sql_query = sprintf($sql, $user['user_id'], $sessionId, $course_info['real_id']); |
|
|
|
|
$result = Database::query($sql_query); |
|
|
|
|
$row = Database::fetch_array($result); |
|
|
|
|
|
|
|
|
|
$forums_done = $row['count']; |
|
|
|
|
$forums_left = $forums_total - $forums_done; |
|
|
|
|
$forums_progress = round((( $forums_done * 100 ) / $forums_total), 2); |
|
|
|
|
|
|
|
|
|
//Overall Total |
|
|
|
|
$overall_total = ($course_description_progress + $exercises_progress + $forums_progress + $assignments_progress + $wiki_progress + $surveys_progress) / 6; |
|
|
|
|
|
|
|
|
|
$table[] = array( |
|
|
|
|
'lastname' => $user[1], |
|
|
|
|
'firstname' => $user[2], |
|
|
|
|
'username' => $user[3], |
|
|
|
|
#'profile' => '', |
|
|
|
|
'total' => round($overall_total,2) . '%', |
|
|
|
|
'courses' => $course_description_progress . '%', |
|
|
|
|
'lessons' => $lessons_progress . '%', |
|
|
|
|
'exercises' => $exercises_progress . '%', |
|
|
|
|
'forums' => $forums_progress . '%', |
|
|
|
|
'homeworks' => $assignments_progress . '%', |
|
|
|
|
'wikis' => $wiki_progress . '%', |
|
|
|
|
'surveys' => $surveys_progress . '%', |
|
|
|
|
//course description |
|
|
|
|
'course_description_progress' => $course_description_progress . '%', |
|
|
|
|
//lessons |
|
|
|
|
'lessons_total' => $lessons_total, |
|
|
|
|
'lessons_done' => $lessons_done, |
|
|
|
|
'lessons_left' => $lessons_left, |
|
|
|
|
'lessons_progress' => $lessons_progress . '%', |
|
|
|
|
//exercises |
|
|
|
|
'exercises_total' => $exercises_total, |
|
|
|
|
'exercises_done' => $exercises_done, |
|
|
|
|
'exercises_left' => $exercises_left, |
|
|
|
|
'exercises_progress' => $exercises_progress . '%', |
|
|
|
|
//forums |
|
|
|
|
'forums_total' => $forums_total, |
|
|
|
|
'forums_done' => $forums_done, |
|
|
|
|
'forums_left' => $forums_left, |
|
|
|
|
'forums_progress' => $forums_progress . '%', |
|
|
|
|
//assignments |
|
|
|
|
'assignments_total' => $assignments_total, |
|
|
|
|
'assignments_done' => $assignments_done, |
|
|
|
|
'assignments_left' => $assignments_left, |
|
|
|
|
'assignments_progress' => $assignments_progress . '%', |
|
|
|
|
//wiki |
|
|
|
|
'wiki_total' => $wiki_total, |
|
|
|
|
'wiki_revisions' => $wiki_revisions, |
|
|
|
|
'wiki_read' => $wiki_read, |
|
|
|
|
'wiki_unread' => $wiki_unread, |
|
|
|
|
'wiki_progress' => $wiki_progress . '%', |
|
|
|
|
//survey |
|
|
|
|
'surveys_total' => $surveys_total, |
|
|
|
|
'surveys_done' => $surveys_done, |
|
|
|
|
'surveys_left' => $surveys_left, |
|
|
|
|
'surveys_progress' => $surveys_progress . '%', |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
return $table; |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Creates a new course code based in given code |
|
|
|
|
* |
|
|
|
|