Esempio n. 1
0
 /**
  * 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;
 }
Esempio n. 2
0
</th>
        </tr>
        <?php 
            $csv_content[] = array();
            $csv_content[] = array(get_lang('Exercises'), get_lang('LearningPath'), get_lang('AvgCourseScore'), get_lang('Attempts'));
            $t_quiz = Database::get_course_table(TABLE_QUIZ_TEST);
            $sql = "SELECT quiz.title, id FROM " . $t_quiz . " AS quiz\n                WHERE\n                    quiz.c_id =  " . $info_course['real_id'] . " AND\n                    (quiz.session_id = {$sessionId} OR quiz.session_id = 0) AND\n                    active IN (0, 1)\n                ORDER BY quiz.title ASC ";
            $result_exercices = Database::query($sql);
            $i = 0;
            if (Database::num_rows($result_exercices) > 0) {
                while ($exercices = Database::fetch_array($result_exercices)) {
                    $exercise_id = intval($exercices['id']);
                    $count_attempts = Tracking::count_student_exercise_attempts($student_id, $courseInfo['real_id'], $exercise_id, 0, 0, $sessionId, 2);
                    $score_percentage = Tracking::get_avg_student_exercise_score($student_id, $course_code, $exercise_id, $sessionId, 1, 0);
                    if (!isset($score_percentage) && $count_attempts > 0) {
                        $scores_lp = Tracking::get_avg_student_exercise_score($student_id, $course_code, $exercise_id, $sessionId, 2, 1);
                        $score_percentage = $scores_lp[0];
                        $lp_name = $scores_lp[1];
                    } else {
                        $lp_name = '-';
                    }
                    $lp_name = !empty($lp_name) ? $lp_name : get_lang('NoLearnpath');
                    if ($i % 2) {
                        $css_class = 'row_odd';
                    } else {
                        $css_class = 'row_even';
                    }
                    echo '<tr class="' . $css_class . '"><td>' . $exercices['title'] . '</td>';
                    echo '<td>';
                    if (!empty($lp_name)) {
                        echo $lp_name;
Esempio n. 3
0
        echo get_lang('AllAttempts');
        ?>
</th>
        </tr>
		<?php 
        $csv_content[] = array();
        $csv_content[] = array(get_lang('Exercices'), get_lang('Score'), get_lang('Attempts'));
        $t_quiz = Database::get_course_table(TABLE_QUIZ_TEST);
        $sql_exercices = "SELECT quiz.title, iid FROM " . $t_quiz . " AS quiz\n\t\t\t\t\t\t  WHERE quiz.c_id =  " . $courseId . " AND\n\t\t\t\t\t\t  \t\tactive='1' AND\n\t\t\t\t\t\t\t\t(quiz.session_id = {$session_id} OR quiz.session_id = 0)\n                          ORDER BY quiz.title ASC ";
        $result_exercices = Database::query($sql_exercices);
        $i = 0;
        if (Database::num_rows($result_exercices) > 0) {
            while ($exercices = Database::fetch_array($result_exercices)) {
                $exercise_id = intval($exercices['iid']);
                $count_attempts = Tracking::count_student_exercise_attempts($student_id, $courseId, $exercise_id, 0, 0, $session_id);
                $score_percentage = Tracking::get_avg_student_exercise_score($student_id, $courseId, $exercise_id, $session_id);
                $csv_content[] = array($exercices['title'], $score_percentage . '%', $count_attempts);
                if ($i % 2) {
                    $css_class = 'row_odd';
                } else {
                    $css_class = 'row_even';
                }
                echo '<tr class="' . $css_class . '"><td>' . $exercices['title'] . '</td>';
                echo '<td>';
                if ($count_attempts > 0) {
                    echo $score_percentage . '%';
                } else {
                    echo '-';
                    $score_percentage = 0;
                }
                echo '</td>';
Esempio n. 4
0
$sql = "SELECT id, title FROM {$TABLEQUIZ}\n        WHERE c_id = {$course_id} AND active <> -1 AND session_id = {$session_id}";
$rs = Database::query($sql);
if ($export_csv) {
    $temp = array(get_lang('AverageProgressInLearnpath'), '');
    $csv_content[] = array('', '');
    $csv_content[] = $temp;
}
$course_path_params = '&cidReq=' . $course_code . '&id_session=' . $session_id;
if (Database::num_rows($rs) > 0) {
    $student_ids = array_keys($a_students);
    $count_students = count($student_ids);
    while ($quiz = Database::fetch_array($rs)) {
        $quiz_avg_score = 0;
        if ($count_students > 0) {
            foreach ($student_ids as $student_id) {
                $avg_student_score = Tracking::get_avg_student_exercise_score($student_id, $course_id, $quiz['id'], $session_id);
                $quiz_avg_score += $avg_student_score;
            }
        }
        $count_students = $count_students == 0 || is_null($count_students) || $count_students == '' ? 1 : $count_students;
        $quiz_avg_score = round($quiz_avg_score / $count_students, 2) . '%';
        $url = api_get_path(WEB_CODE_PATH) . 'exercice/overview.php?exerciseId=' . $quiz['id'] . $course_path_params;
        echo '<tr><td>' . Display::url($quiz['title'], $url) . '</td><td align="right">' . $quiz_avg_score . '</td></tr>';
        if ($export_csv) {
            $temp = array($quiz['title'], $quiz_avg_score);
            $csv_content[] = $temp;
        }
    }
} else {
    echo '<tr><td>' . get_lang('NoExercises') . '</td></tr>';
    if ($export_csv) {
/**
 * This function exports the table that we see in display_tracking_user_overview()
 *
 * @author Patrick Cool <*****@*****.**>, Ghent University, Belgium
 * @version Dokeos 1.8.6
 * @since October 2008
 */
function export_tracking_user_overview()
{
    // database table definitions
    $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
    // the values of the sortable table
    if ($_GET['tracking_user_overview_page_nr']) {
        $from = $_GET['tracking_user_overview_page_nr'];
    } else {
        $from = 0;
    }
    if ($_GET['tracking_user_overview_column']) {
        $orderby = $_GET['tracking_user_overview_column'];
    } else {
        $orderby = 0;
    }
    if ($_GET['tracking_user_overview_direction']) {
        $direction = $_GET['tracking_user_overview_direction'];
    } else {
        $direction = 'ASC';
    }
    $user_data = get_user_data_tracking_overview($from, 1000, $orderby, $direction);
    // the first line of the csv file with the column headers
    $csv_row = array();
    $csv_row[] = get_lang('OfficialCode');
    $csv_row[] = get_lang('LastName');
    $csv_row[] = get_lang('FirstName');
    $csv_row[] = get_lang('LoginName');
    $csv_row[] = get_lang('CourseCode');
    // the additional user defined fields (only those that were selected to be exported)
    require_once api_get_path(LIBRARY_PATH) . 'usermanager.lib.php';
    $fields = UserManager::get_extra_fields(0, 50, 5, 'ASC');
    foreach ($_SESSION['additional_export_fields'] as $key => $extra_field_export) {
        $csv_row[] = $fields[$extra_field_export][3];
        $field_names_to_be_exported[] = 'extra_' . $fields[$extra_field_export][1];
    }
    $csv_row[] = get_lang('AvgTimeSpentInTheCourse');
    $csv_row[] = get_lang('AvgStudentsProgress');
    $csv_row[] = get_lang('AvgCourseScore');
    $csv_row[] = get_lang('AvgExercisesScore');
    $csv_row[] = get_lang('AvgMessages');
    $csv_row[] = get_lang('AvgAssignments');
    $csv_row[] = get_lang('TotalExercisesScoreObtained');
    $csv_row[] = get_lang('TotalExercisesScorePossible');
    $csv_row[] = get_lang('TotalExercisesAnswered');
    $csv_row[] = get_lang('TotalExercisesScorePercentage');
    $csv_row[] = get_lang('FirstLogin');
    $csv_row[] = get_lang('LatestLogin');
    $csv_content[] = $csv_row;
    // the other lines (the data)
    foreach ($user_data as $key => $user) {
        // getting all the courses of the user
        $sql = "SELECT * FROM {$tbl_course_user} WHERE user_id = '" . Database::escape_string($user[4]) . "'";
        $result = api_sql_query($sql, __FILE__, __LINE__);
        while ($row = Database::fetch_row($result)) {
            $csv_row = array();
            // user official code
            $csv_row[] = $user[0];
            // user last name
            $csv_row[] = $user[1];
            // user first name
            $csv_row[] = $user[2];
            // user login name
            $csv_row[] = $user[3];
            // course code
            $csv_row[] = $row[0];
            // the additional defined user fields
            $extra_fields = get_user_overview_export_extra_fields($user[4]);
            foreach ($field_names_to_be_exported as $key => $extra_field_export) {
                $csv_row[] = $extra_fields[$extra_field_export];
            }
            // time spent in the course
            $csv_row[] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user[4], $row[0]));
            // student progress in course
            $csv_row[] = round(Tracking::get_avg_student_progress($user[4], $row[0]), 2);
            // student score
            $csv_row[] = round(Tracking::get_avg_student_score($user[4], $row[0]), 2);
            // student tes score
            $csv_row[] = round(Tracking::get_avg_student_exercise_score($user[4], $row[0]), 2);
            // student messages
            $csv_row[] = Tracking::count_student_messages($user[4], $row[0]);
            // student assignments
            $csv_row[] = Tracking::count_student_assignments($user[4], $row[0]);
            // student exercises results
            $exercises_results = exercises_results($user[4], $row[0]);
            $csv_row[] = $exercises_results['score_obtained'];
            $csv_row[] = $exercises_results['score_possible'];
            $csv_row[] = $exercises_results['questions_answered'];
            $csv_row[] = $exercises_results['percentage'];
            // first connection
            $csv_row[] = Tracking::get_first_connection_date_on_the_course($user[4], $row[0]);
            // last connection
            $csv_row[] = strip_tags(Tracking::get_last_connection_date_on_the_course($user[4], $row[0]));
            $csv_content[] = $csv_row;
        }
    }
    Export::export_table_csv($csv_content, 'reporting_user_overview');
}