$sql = "SELECT * FROM {$TBL_LP_VIEW} WHERE user_id = {$user_id} AND session_id = {$new_session_id} AND c_id = {$course_id}"; $res = Database::query($sql); //Getting the list of LPs in the new session $lp_list = new LearnpathList($user_id, $origin_course_code, $new_session_id); $flat_list = $lp_list->get_flat_list(); $list = array(); while ($row = Database::fetch_array($res, 'ASSOC')) { //Checking if the LP exist in the new session if (in_array($row['lp_id'], array_keys($flat_list))) { $list[$row['id']] = $row; } } if (!empty($list)) { foreach ($list as $id => $data) { //Getting all information of that lp_item_id $score = Tracking::get_avg_student_score($user_id, $origin_course_code, array($data['lp_id']), $new_session_id); $progress = Tracking::get_avg_student_progress($user_id, $origin_course_code, array($data['lp_id']), $new_session_id); $result_message_compare['LP_VIEW'][$data['lp_id']] = array('score' => $score, 'progress' => $progress); } } } //6. Agenda //calendar_event_attachment no problems no session_id $sql = "SELECT ref FROM {$TBL_ITEM_PROPERTY} WHERE tool = 'calendar_event' AND insert_user_id = {$user_id} AND c_id = {$course_id} "; $res = Database::query($sql); while ($row = Database::fetch_array($res, 'ASSOC')) { $id = $row['ref']; if ($update_database) { $sql = "UPDATE {$TBL_AGENDA} SET session_id = {$new_session_id} WHERE c_id = {$course_id} AND id = {$id} "; if ($debug) { var_dump($sql);
function get_users($from, $limit, $column, $direction) { $active = isset($_GET['active']) ? $_GET['active'] : 1; $keyword = isset($_GET['keyword']) ? Security::remove_XSS($_GET['keyword']) : null; $sleepingDays = isset($_GET['sleeping_days']) ? intval($_GET['sleeping_days']) : null; $lastConnectionDate = null; if (!empty($sleepingDays)) { $lastConnectionDate = api_get_utc_datetime(strtotime($sleepingDays . ' days ago')); } $is_western_name_order = api_is_western_name_order(); $coach_id = api_get_user_id(); $drhLoaded = false; if (api_is_drh()) { $column = 'u.user_id'; if (api_drh_can_access_all_session_content()) { $students = SessionManager::getAllUsersFromCoursesFromAllSessionFromStatus('drh_all', api_get_user_id(), false, $from, $limit, $column, $direction, $keyword, $active, $lastConnectionDate, null, null, api_is_student_boss() ? null : STUDENT); $drhLoaded = true; } } if ($drhLoaded == false) { $students = UserManager::getUsersFollowedByUser(api_get_user_id(), api_is_student_boss() ? null : STUDENT, false, false, false, $from, $limit, $column, $direction, $active, $lastConnectionDate, api_is_student_boss() ? STUDENT_BOSS : COURSEMANAGER, $keyword); } $all_datas = array(); foreach ($students as $student_data) { $student_id = $student_data['user_id']; if (isset($_GET['id_session'])) { $courses = Tracking::get_course_list_in_session_from_student($student_id, $_GET['id_session']); } $avg_time_spent = $avg_student_score = $avg_student_progress = $total_assignments = $total_messages = 0; $nb_courses_student = 0; if (!empty($courses)) { foreach ($courses as $course_code) { $courseInfo = api_get_course_info($course_code); $courseId = $courseInfo['real_id']; if (CourseManager::is_user_subscribed_in_course($student_id, $course_code, true)) { $avg_time_spent += Tracking::get_time_spent_on_the_course($student_id, $courseId, $_GET['id_session']); $my_average = Tracking::get_avg_student_score($student_id, $course_code); if (is_numeric($my_average)) { $avg_student_score += $my_average; } $avg_student_progress += Tracking::get_avg_student_progress($student_id, $course_code); $total_assignments += Tracking::count_student_assignments($student_id, $course_code); $total_messages += Tracking::count_student_messages($student_id, $course_code); $nb_courses_student++; } } } if ($nb_courses_student > 0) { $avg_time_spent = $avg_time_spent / $nb_courses_student; $avg_student_score = $avg_student_score / $nb_courses_student; $avg_student_progress = $avg_student_progress / $nb_courses_student; } else { $avg_time_spent = null; $avg_student_score = null; $avg_student_progress = null; } $row = array(); if ($is_western_name_order) { $row[] = $student_data['firstname']; $row[] = $student_data['lastname']; } else { $row[] = $student_data['lastname']; $row[] = $student_data['firstname']; } $string_date = Tracking::get_last_connection_date($student_id, true); $first_date = Tracking::get_first_connection_date($student_id); $row[] = $first_date; $row[] = $string_date; if (isset($_GET['id_coach']) && intval($_GET['id_coach']) != 0) { $detailsLink = '<a href="myStudents.php?student=' . $student_id . '&id_coach=' . $coach_id . '&id_session=' . $_GET['id_session'] . '"> <img src="' . api_get_path(WEB_IMG_PATH) . '2rightarrow.gif" border="0" /></a>'; } else { $detailsLink = '<a href="myStudents.php?student=' . $student_id . '"> <img src="' . api_get_path(WEB_IMG_PATH) . '2rightarrow.gif" border="0" /></a>'; } $row[] = $detailsLink; $all_datas[] = $row; } return $all_datas; }
/** * Get data for users list in sortable with pagination * @param $from * @param $number_of_items * @param $column * @param $direction * @param $includeInvitedUsers boolean Whether include the invited users * @return array */ public static function get_user_data($from, $number_of_items, $column, $direction, $includeInvitedUsers = false) { global $user_ids, $course_code, $additional_user_profile_info, $export_csv, $is_western_name_order, $csv_content, $session_id; $course_code = Database::escape_string($course_code); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_id = api_get_current_access_url_id(); // get all users data from a course for sortable with limit if (is_array($user_ids)) { $user_ids = array_map('intval', $user_ids); $condition_user = "******" . implode(',', $user_ids) . ") "; } else { $user_ids = intval($user_ids); $condition_user = "******"; } if (!empty($_GET['user_keyword'])) { $keyword = trim(Database::escape_string($_GET['user_keyword'])); $condition_user .= " AND (\n user.firstname LIKE '%" . $keyword . "%' OR\n user.lastname LIKE '%" . $keyword . "%' OR\n user.username LIKE '%" . $keyword . "%' OR\n user.email LIKE '%" . $keyword . "%'\n ) "; } $url_table = null; $url_condition = null; if (api_is_multiple_url_enabled()) { $url_table = ", " . $tbl_url_rel_user . "as url_users"; $url_condition = " AND user.user_id = url_users.user_id AND access_url_id='{$access_url_id}'"; } $invitedUsersCondition = ''; if (!$includeInvitedUsers) { $invitedUsersCondition = " AND user.status != " . INVITEE; } $sql = "SELECT user.user_id as user_id,\n user.official_code as col0,\n user.lastname as col1,\n user.firstname as col2,\n user.username as col3\n FROM {$tbl_user} as user {$url_table}\n \t {$condition_user} {$url_condition} {$invitedUsersCondition}"; if (!in_array($direction, array('ASC', 'DESC'))) { $direction = 'ASC'; } $column = intval($column); $from = intval($from); $number_of_items = intval($number_of_items); $sql .= " ORDER BY col{$column} {$direction} "; $sql .= " LIMIT {$from},{$number_of_items}"; $res = Database::query($sql); $users = array(); $course_info = api_get_course_info($course_code); $total_surveys = 0; $total_exercises = ExerciseLib::get_all_exercises($course_info, $session_id, false, null, false, 3); if (empty($session_id)) { $survey_user_list = array(); $survey_list = SurveyManager::get_surveys($course_code, $session_id); $total_surveys = count($survey_list); if (!empty($survey_list)) { foreach ($survey_list as $survey) { $user_list = SurveyManager::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); } } } } while ($user = Database::fetch_array($res, 'ASSOC')) { $courseInfo = api_get_course_info($course_code); $courseId = $courseInfo['real_id']; $user['official_code'] = $user['col0']; $user['lastname'] = $user['col1']; $user['firstname'] = $user['col2']; $user['username'] = $user['col3']; $user['time'] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user['user_id'], $courseId, $session_id)); $avg_student_score = Tracking::get_avg_student_score($user['user_id'], $course_code, array(), $session_id); $avg_student_progress = Tracking::get_avg_student_progress($user['user_id'], $course_code, array(), $session_id); if (empty($avg_student_progress)) { $avg_student_progress = 0; } $user['average_progress'] = $avg_student_progress . '%'; $total_user_exercise = Tracking::get_exercise_student_progress($total_exercises, $user['user_id'], $courseId, $session_id); $user['exercise_progress'] = $total_user_exercise; $total_user_exercise = Tracking::get_exercise_student_average_best_attempt($total_exercises, $user['user_id'], $courseId, $session_id); $user['exercise_average_best_attempt'] = $total_user_exercise; if (is_numeric($avg_student_score)) { $user['student_score'] = $avg_student_score . '%'; } else { $user['student_score'] = $avg_student_score; } $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['first_connection'] = Tracking::get_first_connection_date_on_the_course($user['user_id'], $courseId, $session_id); $user['last_connection'] = Tracking::get_last_connection_date_on_the_course($user['user_id'], $courseInfo, $session_id); // we need to display an additional profile field $user['additional'] = ''; if (isset($_GET['additional_profile_field']) && is_numeric($_GET['additional_profile_field'])) { if (isset($additional_user_profile_info[$user['user_id']]) && is_array($additional_user_profile_info[$user['user_id']])) { $user['additional'] = implode(', ', $additional_user_profile_info[$user['user_id']]); } } if (empty($session_id)) { $user['survey'] = (isset($survey_user_list[$user['user_id']]) ? $survey_user_list[$user['user_id']] : 0) . ' / ' . $total_surveys; } $user['link'] = '<center><a href="../mySpace/myStudents.php?student=' . $user['user_id'] . '&details=true&course=' . $course_code . '&origin=tracking_course&id_session=' . $session_id . '"><img src="' . api_get_path(WEB_IMG_PATH) . 'icons/22/2rightarrow.png" border="0" /></a></center>'; // store columns in array $users $is_western_name_order = api_is_western_name_order(); $user_row = array(); $user_row[] = $user['official_code']; //0 if ($is_western_name_order) { $user_row[] = $user['firstname']; $user_row[] = $user['lastname']; } else { $user_row[] = $user['lastname']; $user_row[] = $user['firstname']; } $user_row[] = $user['username']; $user_row[] = $user['time']; $user_row[] = $user['average_progress']; $user_row[] = $user['exercise_progress']; $user_row[] = $user['exercise_average_best_attempt']; $user_row[] = $user['student_score']; $user_row[] = $user['count_assignments']; $user_row[] = $user['count_messages']; if (empty($session_id)) { $user_row[] = $user['survey']; } $user_row[] = $user['first_connection']; $user_row[] = $user['last_connection']; if (isset($_GET['additional_profile_field']) && is_numeric($_GET['additional_profile_field'])) { $user_row[] = $user['additional']; } $user_row[] = $user['link']; $users[] = $user_row; if ($export_csv) { if (empty($session_id)) { $user_row = array_map('strip_tags', $user_row); unset($user_row[14]); unset($user_row[15]); } else { $user_row = array_map('strip_tags', $user_row); unset($user_row[13]); unset($user_row[14]); } $csv_content[] = $user_row; } } return $users; }
} } else { $nb_inactive_students++; } $total_time_spent += Tracking::get_time_spent_on_the_platform($student_id); $total_courses += Tracking::count_course_per_student($student_id); $avg_student_progress = 0; $avg_student_score = 0; $nb_courses_student = 0; foreach ($courses as $courseId) { if (CourseManager::is_user_subscribed_in_course($student_id, $courseId, true)) { $nb_courses_student++; $nb_posts += Tracking::count_student_messages($student_id, $courseId); $nb_assignments += Tracking::count_student_assignments($student_id, $courseId); $avg_student_progress += Tracking::get_avg_student_progress($student_id, $courseId); $myavg_temp = Tracking::get_avg_student_score($student_id, $courseId); if (is_numeric($myavg_temp)) { $avg_student_score += $myavg_temp; } if ($nb_posts !== null && $nb_assignments !== null && $avg_student_progress !== null && $avg_student_score !== null) { //if one of these scores is null, it means that we had a problem connecting to the right database, so don't count it in $nb_courses_student++; } } } // average progress of the student $avg_student_progress = $nb_courses_student ? $avg_student_progress / $nb_courses_student : 0; $avg_total_progress += $avg_student_progress; // average test results of the student $avg_student_score = $avg_student_score ? $avg_student_score / $nb_courses_student : 0; $avg_results_to_exercises += $avg_student_score;
// students directly subscribed to the course if (empty($id_session)) { $sql = "SELECT user_id FROM {$tbl_user_course} as course_rel_user\n\t\t\t WHERE course_rel_user.status='5' AND course_rel_user.c_id =" . $courseId; } else { $sql = "SELECT id_user as user_id FROM {$tbl_session_course_user} srcu\n\t\t\t WHERE srcu.c_id='{$courseId}' AND id_session = '{$id_session}' AND srcu.status<>2"; } $rs = Database::query($sql); $users = array(); while ($row = Database::fetch_array($rs)) { $users[] = $row['user_id']; } if (count($users) > 0) { $nb_students_in_course = count($users); // tracking datas $avg_progress_in_course = Tracking::get_avg_student_progress($users, $courseId, array(), $id_session); $avg_score_in_course = Tracking::get_avg_student_score($users, $courseId, array(), $id_session); $avg_time_spent_in_course = Tracking::get_time_spent_on_the_course($users, $courseId, $id_session); $messages_in_course = Tracking::count_student_messages($users, $courseId, $id_session); $assignments_in_course = Tracking::count_student_assignments($users, $courseId, $id_session); $avg_time_spent_in_course = api_time_to_hms($avg_time_spent_in_course / $nb_students_in_course); $avg_progress_in_course = round($avg_progress_in_course / $nb_students_in_course, 2); if (is_numeric($avg_score_in_course)) { $avg_score_in_course = round($avg_score_in_course / $nb_students_in_course, 2) . '%'; } } else { $avg_time_spent_in_course = null; $avg_progress_in_course = null; $avg_score_in_course = null; $messages_in_course = null; $assignments_in_course = null; }
/** * Get data for courses list in sortable with pagination * @return array */ public static function get_course_data($from, $number_of_items, $column, $direction) { global $courses, $csv_content, $charset, $session_id; // definition database tables $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $course_data = array(); $courses_code = array_keys($courses); foreach ($courses_code as &$code) { $code = "'{$code}'"; } // get all courses with limit $sql = "SELECT course.code as col1, course.title as col2\n FROM {$tbl_course} course\n WHERE course.code IN (" . implode(',', $courses_code) . ")"; if (!in_array($direction, array('ASC', 'DESC'))) { $direction = 'ASC'; } $column = intval($column); $from = intval($from); $number_of_items = intval($number_of_items); $sql .= " ORDER BY col{$column} {$direction} "; $sql .= " LIMIT {$from},{$number_of_items}"; $res = Database::query($sql); while ($row_course = Database::fetch_row($res)) { $course_code = $row_course[0]; $courseInfo = api_get_course_info($course_code); $courseId = $courseInfo['real_id']; $avg_assignments_in_course = $avg_messages_in_course = $nb_students_in_course = $avg_progress_in_course = $avg_score_in_course = $avg_time_spent_in_course = $avg_score_in_exercise = 0; // students directly subscribed to the course if (empty($session_id)) { $sql = "SELECT user_id\n FROM {$tbl_course_user} as course_rel_user\n WHERE\n course_rel_user.status='5' AND\n course_rel_user.c_id = '{$courseId}'"; } else { $sql = "SELECT user_id FROM {$tbl_session_course_user} srcu\n WHERE\n c_id = '{$courseId}' AND\n session_id = '{$session_id}' AND\n status<>2"; } $rs = Database::query($sql); $users = array(); while ($row = Database::fetch_array($rs)) { $users[] = $row['user_id']; } if (count($users) > 0) { $nb_students_in_course = count($users); $avg_assignments_in_course = Tracking::count_student_assignments($users, $course_code, $session_id); $avg_messages_in_course = Tracking::count_student_messages($users, $course_code, $session_id); $avg_progress_in_course = Tracking::get_avg_student_progress($users, $course_code, array(), $session_id); $avg_score_in_course = Tracking::get_avg_student_score($users, $course_code, array(), $session_id); $avg_score_in_exercise = Tracking::get_avg_student_exercise_score($users, $course_code, 0, $session_id); $avg_time_spent_in_course = Tracking::get_time_spent_on_the_course($users, $courseInfo['real_id'], $session_id); $avg_progress_in_course = round($avg_progress_in_course / $nb_students_in_course, 2); if (is_numeric($avg_score_in_course)) { $avg_score_in_course = round($avg_score_in_course / $nb_students_in_course, 2); } $avg_time_spent_in_course = api_time_to_hms($avg_time_spent_in_course / $nb_students_in_course); } else { $avg_time_spent_in_course = null; $avg_progress_in_course = null; $avg_score_in_course = null; $avg_score_in_exercise = null; $avg_messages_in_course = null; $avg_assignments_in_course = null; } $table_row = array(); $table_row[] = $row_course[1]; $table_row[] = $nb_students_in_course; $table_row[] = $avg_time_spent_in_course; $table_row[] = is_null($avg_progress_in_course) ? '' : $avg_progress_in_course . '%'; $table_row[] = is_null($avg_score_in_course) ? '' : $avg_score_in_course . '%'; $table_row[] = is_null($avg_score_in_exercise) ? '' : $avg_score_in_exercise . '%'; $table_row[] = $avg_messages_in_course; $table_row[] = $avg_assignments_in_course; //set the "from" value to know if I access the Reporting by the chamilo tab or the course link $table_row[] = '<center><a href="../../tracking/courseLog.php?cidReq=' . $course_code . '&from=myspace&id_session=' . $session_id . '"> <img src="' . api_get_path(WEB_IMG_PATH) . 'icons/22/2rightarrow.png" border="0" /></a> </center>'; $csv_content[] = array(api_html_entity_decode($row_course[1], ENT_QUOTES, $charset), $nb_students_in_course, $avg_time_spent_in_course, is_null($avg_progress_in_course) ? null : $avg_progress_in_course . '%', is_null($avg_score_in_course) ? null : is_numeric($avg_score_in_course) ? $avg_score_in_course . '%' : $avg_score_in_course, is_null($avg_score_in_exercise) ? null : $avg_score_in_exercise . '%', $avg_messages_in_course, $avg_assignments_in_course); $course_data[] = $table_row; } return $course_data; }
require_once '../inc/global.inc.php'; $isAllowedToEdit = api_is_allowed_to_edit(null, true); if (!$isAllowedToEdit) { api_not_allowed(true); } $lpTable = Database::get_course_table(TABLE_LP_MAIN); $lpId = isset($_GET['lp_id']) ? boolval($_GET['lp_id']) : false; $sessionId = api_get_session_id(); $courseId = api_get_course_int_id(); $courseCode = api_get_course_id(); $sessionUsers = SessionManager::get_users_by_session($sessionId, 0); $userList = []; $lpInfo = Database::select('*', $lpTable, array('where' => array('c_id = ? AND ' => $courseId, 'id = ?' => $lpId)), 'first'); foreach ($sessionUsers as $user) { $lpTime = Tracking::get_time_spent_in_lp($user['user_id'], $courseCode, array($lpId), $sessionId); $lpScore = Tracking::get_avg_student_score($user['user_id'], $courseCode, array($lpId), $sessionId); $lpPogress = Tracking::get_avg_student_progress($user['user_id'], $courseCode, array($lpId), $sessionId); $lpLastConnection = Tracking::get_last_connection_time_in_lp($user['user_id'], $courseCode, array($lpId), $sessionId); $lpLastConnection = empty($lpLastConnection) ? '-' : api_convert_and_format_date($lpLastConnection, DATE_TIME_FORMAT_LONG); $userList[] = ['id' => $user['user_id'], 'first_name' => $user['firstname'], 'last_name' => $user['lastname'], 'lp_time' => api_time_to_hms($lpTime), 'lp_score' => is_numeric($lpScore) ? "{$lpScore}%" : $lpScore, 'lp_progress' => "{$lpPogress}%", 'lp_last_connection' => $lpLastConnection]; } // View $interbreadcrumb[] = ['url' => api_get_path(WEB_CODE_PATH) . 'newscorm/lp_controller.php', 'name' => get_lang('LearningPaths')]; $actions = Display::url(Display::return_icon('back.png', get_lang('Back'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH) . 'newscorm/lp_controller.php?' . api_get_cidreq()); $template = new Template(get_lang('StudentScore')); $template->assign('user_list', $userList); $template->assign('session_id', api_get_session_id()); $template->assign('course_code', api_get_course_id()); $template->assign('lp_id', $lpId); $layout = $template->get_template('learnpath/report.tpl'); $template->assign('header', $lpInfo['name']);
$lp_id = $learnpath['id']; $lp_items = $array[$i]['lp'] = '<a href="' . api_get_path(WEB_CODE_PATH) . 'newscorm/lp_controller.php?cidReq=' . $course_code . '&action=view&lp_id=' . $lp_id . '" target="_blank">' . $learnpath['name'] . '</a>'; $array[$i]['teachers'] = ''; if (!empty($teacher_list)) { $array[$i]['teachers'] = implode(', ', $teacher_list); } $array[$i]['course_name'] = $course['title']; $count_students_accessing = 0; $count_students_complete_all_activities = 0; $count_students_complete_all_activities_at_50 = 0; $total_time_spent = 0; $total_average_progress = 0; if (!empty($students)) { foreach ($students as $student_id) { $avg_student_progress = Tracking::get_avg_student_progress($student_id, $course_code, array($lp_id), $session_id); $myavg_temp = Tracking::get_avg_student_score($student_id, $course_code, array($lp_id), $session_id); $avg_progress_in_course = Tracking::get_avg_student_progress($student_id, $course_code, array($lp_id), $session_id); if (intval($avg_progress_in_course) == 100) { $count_students_complete_all_activities++; } if (intval($avg_progress_in_course) > 0 && intval($avg_progress_in_course) <= 50) { $count_students_complete_all_activities_at_50++; } $total_average_progress += $avg_progress_in_course; $time_spent = Tracking::get_time_spent_on_the_course($student_id, $course_id, $session_id); $total_time_spent += $time_spent; if (!empty($time_spent)) { $count_students_accessing++; } } //$total_tools += $nb_assignments + $messages + $links + $chat_last_connection + $documents;
$any_result = true; } // Get last connection time in lp $start_time = Tracking::get_last_connection_time_in_lp($student_id, $course_code, $lp_id, $sessionId); if (!empty($start_time)) { $start_time = api_convert_and_format_date($start_time, DATE_TIME_FORMAT_LONG); } else { $start_time = '-'; } if (!empty($total_time)) { $any_result = true; } // Quiz in lp $score = Tracking::get_avg_student_score($student_id, $course_code, array($lp_id), $sessionId); // Latest exercise results in a LP $score_latest = Tracking::get_avg_student_score($student_id, $course_code, array($lp_id), $sessionId, false, true); if ($i % 2 == 0) { $css_class = "row_even"; } else { $css_class = "row_odd"; } $i++; // csv export content $csv_content[] = array(api_html_entity_decode(stripslashes($lp_name), ENT_QUOTES, $charset), api_time_to_hms($total_time), $score . '%', $score_latest . '%', $progress . '%', $start_time); echo '<tr class="' . $css_class . '">'; echo Display::tag('td', stripslashes($lp_name)); echo Display::tag('td', api_time_to_hms($total_time)); if (!is_null($score)) { if (is_numeric($score)) { $score = $score . '%'; }
function get_courses($from, $limit, $column, $direction) { $userId = api_get_user_id(); $sessionId = isset($_GET['session_id']) ? intval($_GET['session_id']) : 0; $keyword = isset($_GET['keyword']) ? $_GET['keyword'] : null; $follow = isset($_GET['follow']) ? true : false; $drhLoaded = false; if (api_is_drh()) { if (api_drh_can_access_all_session_content()) { $courses = SessionManager::getAllCoursesFollowedByUser($userId, $sessionId, $from, $limit, $column, $direction, false, $keyword); $drhLoaded = true; } } if ($drhLoaded == false) { $courses = CourseManager::getCoursesFollowedByUser($userId, COURSEMANAGER, $from, $limit, $column, $direction, false, $keyword, $sessionId, $follow); } $courseList = array(); if (!empty($courses)) { foreach ($courses as $data) { $courseCode = $data['code']; $courseInfo = api_get_course_info($courseCode); $userList = CourseManager::get_user_list_from_course_code($data['code'], $sessionId); $userIdList = array(); if (!empty($userList)) { foreach ($userList as $user) { $userIdList[] = $user['user_id']; } } $messagesInCourse = 0; $assignmentsInCourse = 0; $avgTimeSpentInCourse = 0; $avgProgressInCourse = 0; if (count($userIdList) > 0) { $countStudents = count($userIdList); // tracking data $avgProgressInCourse = Tracking::get_avg_student_progress($userIdList, $courseCode, array(), $sessionId); $avgScoreInCourse = Tracking::get_avg_student_score($userIdList, $courseCode, array(), $sessionId); $avgTimeSpentInCourse = Tracking::get_time_spent_on_the_course($userIdList, $courseInfo['real_id'], $sessionId); $messagesInCourse = Tracking::count_student_messages($userIdList, $courseCode, $sessionId); $assignmentsInCourse = Tracking::count_student_assignments($userIdList, $courseCode, $sessionId); $avgTimeSpentInCourse = api_time_to_hms($avgTimeSpentInCourse / $countStudents); $avgProgressInCourse = round($avgProgressInCourse / $countStudents, 2); if (is_numeric($avgScoreInCourse)) { $avgScoreInCourse = round($avgScoreInCourse / $countStudents, 2) . '%'; } } $thematic = new Thematic(); $tematic_advance = $thematic->get_total_average_of_thematic_advances($courseCode, $sessionId); $tematicAdvanceProgress = '-'; if (!empty($tematic_advance)) { $tematicAdvanceProgress = '<a title="' . get_lang('GoToThematicAdvance') . '" href="' . api_get_path(WEB_CODE_PATH) . 'course_progress/index.php?cidReq=' . $courseCode . '&id_session=' . $sessionId . '">' . $tematic_advance . '%</a>'; } $courseIcon = '<a href="' . api_get_path(WEB_CODE_PATH) . 'tracking/courseLog.php?cidReq=' . $courseCode . '&id_session=' . $sessionId . '"> ' . Display::return_icon('2rightarrow.png', get_lang('Details')) . ' </a>'; $title = Display::url($data['title'], $courseInfo['course_public_url'] . '?id_session=' . $sessionId); $attendanceLink = Display::url(Display::return_icon('attendance_list.png', get_lang('Attendance'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH) . 'attendance/index.php?cidReq=' . $courseCode . '&id_session=' . $sessionId . '&action=calendar_logins'); $courseList[] = array($title, $countStudents, is_null($avgTimeSpentInCourse) ? '-' : $avgTimeSpentInCourse, $tematicAdvanceProgress, is_null($avgProgressInCourse) ? '-' : $avgProgressInCourse . '%', is_null($avgScoreInCourse) ? '-' : $avgScoreInCourse, is_null($messagesInCourse) ? '-' : $messagesInCourse, is_null($assignmentsInCourse) ? '-' : $assignmentsInCourse, $attendanceLink, $courseIcon); } } return $courseList; }
} else { $csv_header[] = array(get_lang('LastName', ''), get_lang('FirstName', ''), get_lang('FirstLogin', ''), get_lang('LatestLogin', '')); } } $all_datas = array(); foreach ($students as $student_id) { $student_data = UserManager::get_user_info_by_id($student_id); if (!empty($session_id)) { $courses = Tracking::get_course_list_in_session_from_student($student_id, $session_id); } $avg_time_spent = $avg_student_score = $avg_student_progress = $total_assignments = $total_messages = 0; $nb_courses_student = 0; foreach ($courses as $courseId) { if (CourseManager::is_user_subscribed_in_course($student_id, $courseId, true)) { $avg_time_spent += Tracking::get_time_spent_on_the_course($student_id, $courseId, $session_id); $my_average = Tracking::get_avg_student_score($student_id, $courseId); if (is_numeric($my_average)) { $avg_student_score += $my_average; } $avg_student_progress += Tracking::get_avg_student_progress($student_id, $courseId); $total_assignments += Tracking::count_student_assignments($student_id, $courseId); $total_messages += Tracking::count_student_messages($student_id, $courseId); $nb_courses_student++; } } if ($nb_courses_student > 0) { $avg_time_spent = $avg_time_spent / $nb_courses_student; $avg_student_score = $avg_student_score / $nb_courses_student; $avg_student_progress = $avg_student_progress / $nb_courses_student; } else { $avg_time_spent = null;
// courses followed by user where we are coach if (!isset($_GET['id_coach'])) { $a_courses = Tracking::get_courses_followed_by_coach($_user['user_id']); } else { $a_courses = Tracking::get_courses_followed_by_coach(Security::remove_XSS($_GET['id_coach'])); } } if (count($a_courses) > 0) { $csv_content[] = array(); $csv_content[] = array(get_lang('Course'), get_lang('Time'), get_lang('Progress'), get_lang('Score')); foreach ($a_courses as $course_code) { if (CourseManager::is_user_subscribed_in_course($student_id, $course_code, true)) { $course_infos = CourseManager::get_course_information($course_code); $time_spent_on_course = api_time_to_hms(Tracking::get_time_spent_on_the_course($a_infosUser['user_id'], $course_code)); $progress = Tracking::get_avg_student_progress($a_infosUser['user_id'], $course_code) . ' %'; $score = Tracking::get_avg_student_score($a_infosUser['user_id'], $course_code) . ' %'; $csv_content[] = array($course_infos['title'], $time_spent_on_course, $progress, $score); echo ' <tr> <td align="right"> ' . $course_infos['title'] . ' </td> <td align="right"> ' . $time_spent_on_course . ' </td> <td align="right"> ' . $progress . ' </td> <td align="right"> ' . $score . ' </td>';
//"Left green cross" extended $total_score = Tracking::get_avg_student_score($my_studen_id, $courseId, $a_my_id, api_get_session_id(), false, true); } } else { // Extend all "left green cross" if ($origin == 'tracking') { $my_course_id = Database::escape_string($_GET['course']); $courseInfo = api_get_course_info($my_course_id); $courseId = $courseInfo['real_id']; if (!empty($student_id) && !empty($courseId)) { $total_score = Tracking::get_avg_student_score($student_id, $courseId, array(intval($_GET['lp_id'])), api_get_session_id(), false, false); } else { $total_score = 0; } } else { $total_score = Tracking::get_avg_student_score(api_get_user_id(), api_get_course_int_id(), array(intval($_GET['lp_id'])), api_get_session_id(), false, false); } } $total_time = learnpathItem::get_scorm_time('js', $total_time); $total_time = str_replace('NaN', '00' . $h . '00\'00"', $total_time); if (!$is_allowed_to_edit && $result_disabled_ext_all) { $final_score = Display::return_icon('invisible.gif', get_lang('ResultsHiddenByExerciseSetting')); } else { if (is_numeric($total_score)) { $final_score = $total_score . '%'; } else { $final_score = $total_score; } } if ($counter % 2 == 0) { $oddclass = 'row_odd';
/** * Creates a small table in the last column of the table with the user overview * * @param integer $user_id the id of the user * @param array $url_params additonal url parameters * @param array $row the row information (the other columns) * @return html code * * @author Patrick Cool <*****@*****.**>, Ghent University, Belgium * @version Dokeos 1.8.6 * @since October 2008 */ function course_info_tracking_filter($user_id, $url_params, $row) { // the table header $return .= '<table class="data_table" style="width: 100%;border:0;padding:0;border-collapse:collapse;table-layout: fixed">'; /*$return .= ' <tr>'; $return .= ' <th>'.get_lang('Course').'</th>'; $return .= ' <th>'.get_lang('AvgTimeSpentInTheCourse').'</th>'; $return .= ' <th>'.get_lang('AvgStudentsProgress').'</th>'; $return .= ' <th>'.get_lang('AvgCourseScore').'</th>'; $return .= ' <th>'.get_lang('AvgExercisesScore').'</th>'; $return .= ' <th>'.get_lang('AvgMessages').'</th>'; $return .= ' <th>'.get_lang('AvgAssignments').'</th>'; $return .= ' <th>'.get_lang('TotalExercisesScoreObtained').'</th>'; $return .= ' <th>'.get_lang('TotalExercisesScorePossible').'</th>'; $return .= ' <th>'.get_lang('TotalExercisesAnswered').'</th>'; $return .= ' <th>'.get_lang('TotalExercisesScorePercentage').'</th>'; $return .= ' <th>'.get_lang('FirstLogin').'</th>'; $return .= ' <th>'.get_lang('LatestLogin').'</th>'; $return .= ' </tr>';*/ // database table definition $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); // getting all the courses of the user $sql = "SELECT * FROM {$tbl_course_user} WHERE user_id = '" . Database::escape_string($user_id) . "'"; $result = api_sql_query($sql, __FILE__, __LINE__); while ($row = Database::fetch_row($result)) { $return .= '<tr>'; // course code $return .= ' <td width="157px" >' . cut($row[0], 20, true) . '</td>'; // time spent in the course $return .= ' <td><div>' . api_time_to_hms(Tracking::get_time_spent_on_the_course($user_id, $row[0])) . '</div></td>'; // student progress in course $return .= ' <td><div>' . round(Tracking::get_avg_student_progress($user_id, $row[0]), 2) . '</div></td>'; // student score $return .= ' <td><div>' . round(Tracking::get_avg_student_score($user_id, $row[0]), 2) . '</div></td>'; // student tes score //$return .= ' <td><div style="width:40px">'.round(Tracking :: get_avg_student_exercise_score ($user_id, $row[0]),2).'%</div></td>'; // student messages $return .= ' <td><div>' . Tracking::count_student_messages($user_id, $row[0]) . '</div></td>'; // student assignments $return .= ' <td><div>' . Tracking::count_student_assignments($user_id, $row[0]) . '</div></td>'; // student exercises results (obtained score, maximum score, number of exercises answered, score percentage) $exercises_results = exercises_results($user_id, $row[0]); $return .= ' <td width="105px"><div>' . $exercises_results['score_obtained'] . '/' . $exercises_results['score_possible'] . '(' . $exercises_results['percentage'] . '%)</div></td>'; //$return .= ' <td><div>'.$exercises_results['score_possible'].'</div></td>'; $return .= ' <td><div>' . $exercises_results['questions_answered'] . '</div></td>'; //$return .= ' <td><div>'.$exercises_results['percentage'].'% </div></td>'; // first connection //$return .= ' <td width="60px">'.Tracking :: get_first_connection_date_on_the_course ($user_id, $row[0]).'</td>'; // last connection $return .= ' <td><div>' . Tracking::get_last_connection_date_on_the_course($user_id, $row[0]) . '</div></td>'; $return .= '<tr>'; } $return .= '</table>'; return $return; }