Browse Source

Report: Lesson progress of course refs BT#7015

César Perales 11 years ago
parent
commit
92a6e58481

+ 23 - 5
main/inc/ajax/model.ajax.php

@@ -238,9 +238,9 @@ switch ($action) {
         $count = SessionManager::get_count_admin($where_condition);
         break;
     case 'get_session_lp_progress':
-        $count = SessionManager::get_count_session_lp_progress(intval($_GET['session_id']));
-        break;
     case 'get_session_progress':
+        #$count = SessionManager::get_count_session_lp_progress(intval($_GET['session_id']));
+        #break;
         $courses = SessionManager::get_course_list_by_session_id(intval($_GET['session_id']));
         //TODO let select course
         $course = current($courses);
@@ -564,14 +564,32 @@ switch ($action) {
         );
         break;
     case 'get_session_lp_progress':
-        $columns = array(
-            'username', 'firstname', 'lastname', 'name', 'progress'
-        );
         $sessionId = 0;
         if (isset($_GET['session_id']) && !empty($_GET['session_id']))
         {
             $sessionId = intval($_GET['session_id']);
+            $courses = SessionManager::get_course_list_by_session_id($sessionId);
+            //TODO let select course
+            $course = current($courses);
+        }
+
+        /**
+         * Add lessons of course
+         * 
+         */
+        $columns = array(
+            'username',
+            'firstname',
+            'lastname',
+        );
+        require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
+        $lessons = LearnpathList::get_course_lessons($course['code'], $sessionId);
+        foreach ($lessons as $lesson_id => $lesson) 
+        {
+            $columns[] = $lesson_id;
         }
+        $columns[] = 'total';
+
         $result = SessionManager::get_session_lp_progress($sessionId,
             array(
                 'where' => $where_condition,

+ 68 - 29
main/inc/lib/sessionmanager.lib.php

@@ -509,45 +509,84 @@ class SessionManager
      */
     public static function get_session_lp_progress($sessionId = 0, $options)
     {
-        $tbl_lp         = Database::get_course_table(TABLE_LP_MAIN);
-        $tbl_lp_view    = Database::get_course_table(TABLE_LP_VIEW);
-        $tbl_user       = Database::get_main_table(TABLE_MAIN_USER);
-        $tbl_course     = Database::get_main_table(TABLE_MAIN_COURSE);
+        //tables
+        $session_course_user    = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
+        $user                   = Database::get_main_table(TABLE_MAIN_USER);
+        $tbl_course_lp_view     = Database::get_course_table(TABLE_LP_VIEW);
 
+        $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']);
 
-        $select = "select  u.username, u.firstname, u.lastname, l.name, v.progress
-                FROM $tbl_lp_view v
-                INNER JOIN $tbl_lp l ON l.id = v.lp_id
-                INNER JOIN $tbl_user u ON u.user_id = v.user_id
-                INNER JOIN $tbl_course c
-                ";
+        //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";
 
-        $where = ' WHERE 1=1 ';
-        if (!empty($options['where'])) {
-           $where .= ' AND '.$options['where'];
+        $sql_query = sprintf($sql, $course['code'], $sessionId);
+
+        $rs = Database::query($sql_query);
+        while ($user = Database::fetch_array($rs))
+        {
+            $users[$user['user_id']] = $user;
         }
 
-        $where .= ' AND v.session_id = ' . $sessionId;
+        //Get lessons
+        require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
+        $lessons = LearnpathList::get_course_lessons($course['code'], $sessionId);
 
-        $order = null;
-        if (!empty($options['order'])) {
-            $order = " ORDER BY ".$options['order'];
-        }
+        $table = array();
+        foreach ($users as $user)
+        {
+            $data = array(
+                'lastname'  => $user[1],
+                'firstname' => $user[2],
+                'username'  => $user[3],
+            );
 
-        $limit = null;
-        if (!empty($options['limit'])) {
-            $limit = " LIMIT ".$options['limit'];
-        }
+            //Get lessons progress by user
+            $sql = "SELECT v.lp_id as id, v.progress
+            FROM  $tbl_course_lp_view v
+            WHERE v.session_id = %d 
+            AND v.c_id = %d
+            AND v.user_id = %d";
+            $sql_query = sprintf($sql, $sessionId, $course_info['real_id'], $user['user_id']);
+            $result = Database::query($sql_query);
 
-        $select .= $where.$order.$limit;
-        $result = Database::query($select);
-        $formatted_sessions = array();
-        if (Database::num_rows($result) > 0) {
-            while ($row = Database::fetch_assoc($result)) {
-                $formatted_sessions[] = $row;
+
+            $user_lessons = array();
+            while ($row = Database::fetch_array($result))
+            {
+                $user_lessons[$row['id']] = $row;
             }
+
+            //Match course lessons with user progress
+            $progress = 0;
+            $count = 0;
+            foreach ($lessons as $lesson)
+            {
+                $data[$lesson['id']] = (!empty($user_lessons[$lesson['id']]['progress'])) ? $user_lessons[$lesson['id']]['progress'] : 0;
+                $progress += $data[$lesson['id']];
+                $count++;
+            }
+
+            $data['total'] = round($progress / $count, 2);
+
+            $table[] = $data;
         }
-        return $formatted_sessions;
+        return $table;
     }
     /**
      * Gets the progress of the given session

+ 33 - 6
main/mySpace/myspace.lib.php

@@ -276,17 +276,44 @@ class MySpace {
      */
     function display_tracking_lp_progress_overview($sessionId = 0) {
 
-       //The order is important you need to check the the $column variable in the model.ajax.php file
-        $columns = array(get_lang('Username'), get_lang('FirstName'), get_lang('LastName'), get_lang('Name'), get_lang('Progress'));
+        $courses = SessionManager::get_course_list_by_session_id($sessionId);
+        //TODO let select course
+        $course = current($courses); 
+        /**
+         * Column name
+         * The order is important you need to check the $column variable in the model.ajax.php file
+         */
+        $columns = array(
+            get_lang('Username'), 
+            get_lang('FirstName'), 
+            get_lang('LastName'), 
+        );
+        //add lessons of course
+        require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
+        $lessons = LearnpathList::get_course_lessons($course['code'], $sessionId);
+        foreach ($lessons as $lesson_id => $lesson) 
+        {
+            $columns[] = $lesson['name'];
+        }
 
-        //Column config
+        $columns[] = get_lang('Total');
+
+        /**
+         * Column config
+         */
         $column_model   = array(
             array('name'=>'username',   'index'=>'username',  'width'=>'160',  'align'=>'left', 'search' => 'true', 'wrap_cell' => "true"),
             array('name'=>'firstname',  'index'=>'firstname',   'width'=>'100',   'align'=>'left', 'search' => 'true'),
             array('name'=>'lastname',   'index'=>'lastname',    'width'=>'100',   'align'=>'left', 'search' => 'true'),
-            array('name'=>'name',       'index'=>'name',        'width'=>'100',   'align'=>'left', 'search' => 'true'),
-            array('name'=>'progress',   'index'=>'progress',    'width'=>'70',   'align'=>'left', 'search' => 'true'),
-            );
+        );
+        //get dinamic column names
+        foreach ($lessons as $lesson_id => $lesson) 
+        {
+            $column_model[] = array('name'=> $lesson['id'],   'index'=>$lesson['id'],    'width'=>'70',   'align'=>'left', 'search' => 'true');
+        }
+
+        $column_model[] = array('name'=>'total',   'index'=>'total',    'width'=>'70',   'align'=>'left', 'search' => 'true');
+
         $action_links = '';
         // jqgrid will use this URL to do the selects
         $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_session_lp_progress&session_id=' . intval($sessionId);

+ 27 - 0
main/newscorm/learnpathList.class.php

@@ -163,4 +163,31 @@ class learnpathList {
     function get_flat_list() {
         return $this->list;
     }
+    /**
+     *  Gets a list of lessons  of the given course_code and session_id
+     *  This functions doesn't need user_id
+     *  @param string Text code of the course
+     *  @param int  Id of session
+     *  @return array List of lessons with lessons id as keys
+     */
+    function get_course_lessons($course_code, $session_id) {
+        $tbl_course_lp          = Database::get_course_table(TABLE_LP_MAIN);
+
+        $course = api_get_course_info($course_code);
+        //QUery
+        $sql = "SELECT * FROM $tbl_course_lp
+        WHERE c_id = %s ";  //TODO AND session_id = %s ? 
+        $sql_query = sprintf($sql, $course['real_id']);
+        $result = Database::query($sql_query);
+
+        $lessons = array();
+        while ($row = Database::fetch_array($result))
+        {
+            if (api_get_item_visibility($course, 'learnpath', $row['id'],  $session_id))
+            {
+                $lessons[$row['id']] = $row;
+            }
+        }
+        return $lessons;
+    }
 }