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; }
if ($last_connection_date !== false) { if (time() - 3600 * 24 * 7 > $last_connection_date) { $nb_inactive_students++; } } 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;
$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; } $tematic_advance_progress = 0; $thematic = new Thematic($course);
$table->set_header(9, get_lang('LatestLogin'), false, 'align="center"'); $table->set_header(10, get_lang('Details'), false); if ($export_csv) { $csv_content[] = array(); } $all_datas = array(); $course_code = $_course['id']; foreach ($a_students as $student_id => $student) { $student_datas = UserManager::get_user_info_by_id($student_id); $avg_time_spent = $avg_student_score = $avg_student_progress = $total_assignments = $total_messages = 0; $nb_courses_student = 0; $avg_time_spent = Tracking::get_time_spent_on_the_course($student_id, $course_code); $avg_student_score = Tracking::get_average_test_scorm_and_lp($student_id, $course_code); $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); $row = array(); $row[] = $student_datas['official_code']; $row[] = $student_datas['lastname']; $row[] = $student_datas['firstname']; $row[] = api_time_to_hms($avg_time_spent); if (is_null($avg_student_score)) { $avg_student_score = 0; } if (is_null($avg_student_progress)) { $avg_student_progress = 0; } $row[] = $avg_student_progress . ' %'; $row[] = $avg_student_score . ' %'; $row[] = $total_assignments; $row[] = $total_messages;
/** * 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; }
$countAssignments = Tracking::count_student_assignments($studentIds); $studentIds = array_values($students); $countHumanResourcesUsers = count($humanResourcesUsers); // average progress $avg_total_progress = $progress / $nb_students; // average assignments $nb_assignments = $countAssignments / $nb_students; $avg_courses_per_student = $count_courses / $nb_students; } if (!empty($teachers)) { $numberTeachers = count($teachers); } // Inactive students //$countInactiveUsers = Tracking::getInactiveUsers($studentIds, $daysAgo); $totalTimeSpent = Tracking::get_time_spent_on_the_platform($studentIds); $posts = Tracking::count_student_messages($studentIds); $averageScore = Tracking::getAverageStudentScore($studentIds); $avg_results_to_exercises = $averageScore; // average posts $nb_posts = $posts; $avg_time_spent = $totalTimeSpent; $linkAddUser = null; $linkCourseDetailsAsTeacher = null; $linkAddCourse = null; $linkAddSession = null; if (api_is_platform_admin()) { $linkAddUser = '******' . Display::url(Display::return_icon('2rightarrow.gif', get_lang('Add')), api_get_path(WEB_CODE_PATH) . 'admin/dashboard_add_users_to_user.php?user='******'class' => '')); $linkCourseDetailsAsTeacher = ' ' . Display::url(Display::return_icon('2rightarrow.gif', get_lang('Details')), api_get_path(WEB_CODE_PATH) . 'mySpace/course.php', array('class' => '')); $linkAddCourse = ' ' . Display::url(Display::return_icon('2rightarrow.gif', get_lang('Details')), api_get_path(WEB_CODE_PATH) . 'mySpace/course.php?follow', array('class' => '')); $linkAddSession = ' ' . Display::url(Display::return_icon('2rightarrow.gif', get_lang('Add')), api_get_path(WEB_CODE_PATH) . 'admin/dashboard_add_sessions_to_user.php?user='******'class' => '')); }
if ($row % 2) { $class = 'class="row_even"'; } $table->setRowAttributes($row, $class, true); $column++; $row++; } } echo $table->toHtml(); } } // line about other tools echo '<table class="data_table">'; $csv_content[] = array(); $nb_assignments = Tracking::count_student_assignments($student_id, $course_code, $sessionId); $messages = Tracking::count_student_messages($student_id, $course_code, $sessionId); $links = Tracking::count_student_visited_links($student_id, $info_course['real_id'], $sessionId); $chat_last_connection = Tracking::chat_last_connection($student_id, $info_course['real_id'], $sessionId); $documents = Tracking::count_student_downloaded_documents($student_id, $info_course['real_id'], $sessionId); $uploaded_documents = Tracking::count_student_uploaded_documents($student_id, $course_code, $sessionId); $csv_content[] = array(get_lang('OtherTools')); $csv_content[] = array(get_lang('Student_publication'), $nb_assignments); $csv_content[] = array(get_lang('Messages'), $messages); $csv_content[] = array(get_lang('LinksDetails'), $links); $csv_content[] = array(get_lang('DocumentsDetails'), $documents); $csv_content[] = array(get_lang('UploadedDocuments'), $uploaded_documents); $csv_content[] = array(get_lang('ChatLastConnection'), $chat_last_connection); ?> <tr> <th colspan="2"><?php echo get_lang('OtherTools');
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; }
$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; $avg_student_score = null; $avg_student_progress = null; } $row = array(); if ($is_western_name_order) { $row[] = $student_data['firstname'];
} } else { echo "\t<tr>\t\n\t\t\t\t\t\t\t<td colspan='6'>\n\t\t\t\t\t\t\t\t" . get_lang('NoExercise') . "\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t "; } ?> </table> <!-- line about other tools --> <table class="data_table"> <tr> <td> <?php $csv_content[] = array(); $nb_assignments = Tracking::count_student_assignments($a_infosUser['user_id'], $a_infosCours['code']); $messages = Tracking::count_student_messages($a_infosUser['user_id'], $a_infosCours['code']); $links = Tracking::count_student_visited_links($a_infosUser['user_id'], $a_infosCours['code']); $documents = Tracking::count_student_downloaded_documents($a_infosUser['user_id'], $a_infosCours['code']); $chat_last_connection = Tracking::chat_last_connection($a_infosUser['user_id'], $a_infosCours['code']); $csv_content[] = array(get_lang('Student_publication'), $nb_assignments); $csv_content[] = array(get_lang('Messages'), $messages); $csv_content[] = array(get_lang('LinksDetails'), $links); $csv_content[] = array(get_lang('DocumentsDetails'), $documents); $csv_content[] = array(get_lang('ChatLastConnection'), $chat_last_connection); ?> <tr> <th colspan="2"> <?php echo get_lang('OtherTools'); ?> </th>
if ($row % 2) { $class = 'class="row_even"'; } $table->setRowAttributes($row, $class, true); $column++; $row++; } } echo $table->toHtml(); } } // line about other tools echo '<table class="data_table">'; $csv_content[] = array(); $nb_assignments = Tracking::count_student_assignments($student_id, $courseId, $session_id); $messages = Tracking::count_student_messages($student_id, $courseId, $session_id); $links = Tracking::count_student_visited_links($student_id, $courseId, $session_id); $chat_last_connection = Tracking::chat_last_connection($student_id, $courseId, $session_id); $documents = Tracking::count_student_downloaded_documents($student_id, $courseId, $session_id); $uploaded_documents = Tracking::count_student_uploaded_documents($student_id, $courseId, $session_id); $csv_content[] = array(get_lang('Student_publication'), $nb_assignments); $csv_content[] = array(get_lang('Messages'), $messages); $csv_content[] = array(get_lang('LinksDetails'), $links); $csv_content[] = array(get_lang('DocumentsDetails'), $documents); $csv_content[] = array(get_lang('UploadedDocuments'), $uploaded_documents); $csv_content[] = array(get_lang('ChatLastConnection'), $chat_last_connection); ?> <tr> <th colspan="2"><?php echo get_lang('OtherTools'); ?>
/** * 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; }