Browse Source

Merge pull request #478 from AngelFQC/BT9087

Display courses without session in report - refs BT#9087
Yannick Warnier 10 years ago
parent
commit
cc1a647f76

+ 95 - 31
main/admin/teacher_time_report.php

@@ -70,6 +70,35 @@ if (!empty($selectedCourse)) {
     $course = api_get_course_info($selectedCourse);
 
     $reportTitle = sprintf(get_lang('TimeReportForCourseX'), $course['title']);
+    
+    $teachers = CourseManager::get_teacher_list_from_course_code($selectedCourse);
+    
+    foreach ($teachers as $teacher) {
+        $totalTime = UserManager::getExpendedTimeInCourses(
+            $teacher['user_id'],
+            $selectedCourse,
+            0,
+            $selectedFrom,
+            $selectedUntil
+        );
+        $formatedTime = api_format_time($totalTime);
+
+        $timeReport->data[] = array(
+            'session' => null,
+            'course' => array(
+                'id' => $course['real_id'],
+                'name' => $course['title']
+            ),
+            'coach' => array(
+                'userId' => $teacher['user_id'],
+                'lastname' => $teacher['lastname'],
+                'firstname' => $teacher['firstname'],
+                'username' => $teacher['username'],
+                'completeName' => api_get_person_name($teacher['firstname'], $teacher['lastname'])
+            ),
+            'totalTime' => $formatedTime
+        );
+    }
 
     $sessionsByCourse = SessionManager::get_session_by_course($selectedCourse);
 
@@ -78,13 +107,14 @@ if (!empty($selectedCourse)) {
 
         if ($coaches) {
             foreach ($coaches as $coach) {
-                $totalTime = SessionManager::getUserTimeInCourse(
+                $totalTime = UserManager::getExpendedTimeInCourses(
                     $coach['user_id'],
                     $selectedCourse,
                     $session['id'],
                     $selectedFrom,
                     $selectedUntil
                 );
+                $formatedTime = api_format_time($totalTime);
 
                 $timeReport->data[] = array(
                     'session' => array(
@@ -102,7 +132,7 @@ if (!empty($selectedCourse)) {
                         'username' => $coach['username'],
                         'completeName' => api_get_person_name($coach['firstname'], $coach['lastname'])
                     ),
-                    'totalTime' => $totalTime
+                    'totalTime' => $formatedTime
                 );
             }
         }
@@ -113,33 +143,37 @@ if (!empty($selectedSession)) {
     $withFilter = true;
 
     $session = api_get_session_info($selectedSession);
+    $sessionData = array(
+        'id' => $session['id'],
+        'name' => $session['name']
+    );
 
     $reportTitle = sprintf(get_lang('TimeReportForSessionX'), $session['name']);
 
     $courses = SessionManager::get_course_list_by_session_id($selectedSession);
 
     foreach ($courses as $course) {
+        $courseData = array(
+            'id' => $course['id'],
+            'name' => $course['title']
+        );
+
         $coaches = CourseManager::get_coachs_from_course($selectedSession, $course['code']);
 
         if ($coaches) {
             foreach ($coaches as $coach) {
-                $totalTime = SessionManager::getUserTimeInCourse(
+                $totalTime = UserManager::getExpendedTimeInCourses(
                     $coach['user_id'],
                     $course['code'],
                     $selectedSession,
                     $selectedFrom,
                     $selectedUntil
                 );
+                $formatedTime = api_format_time($totalTime);
 
                 $timeReport->data[] = array(
-                    'session' => array(
-                        'id' => $session['id'],
-                        'name' => $session['name']
-                    ),
-                    'course' => array(
-                        'id' => $course['id'],
-                        'name' => $course['title']
-                    ),
+                    'session' => $sessionData,
+                    'course' => $courseData,
                     'coach' => array(
                         'userId' => $coach['user_id'],
                         'lastname' => $coach['lastname'],
@@ -147,7 +181,7 @@ if (!empty($selectedSession)) {
                         'username' => $coach['username'],
                         'completeName' => api_get_person_name($coach['firstname'], $coach['lastname'])
                     ),
-                    'totalTime' => $totalTime
+                    'totalTime' => $formatedTime
                 );
             }
         }
@@ -157,42 +191,73 @@ if (!empty($selectedSession)) {
 if (!empty($selectedTeacher)) {
     $withFilter = true;
 
-    $coach = api_get_user_info($selectedTeacher);
-
-    $reportTitle = sprintf(get_lang('TimeReportForTeacherX'), $coach['complete_name']);
+    $teacher = api_get_user_info();
+    
+    $teacherData = array(
+        'userId' => $teacher['user_id'],
+        'lastname' => $teacher['lastname'],
+        'firstname' => $teacher['firstname'],
+        'username' => $teacher['username'],
+        'completeName' => $teacher['complete_name']
+    );
+
+    $reportTitle = sprintf(get_lang('TimeReportForTeacherX'), $teacher['complete_name']);
+
+    $courses = CourseManager::get_courses_list_by_user_id($selectedTeacher, false);
+
+    if (!empty($courses)) {
+        foreach ($courses as $course) {
+            $courseInfo = api_get_course_info($course['code']);
+
+            $totalTime = UserManager::getExpendedTimeInCourses(
+                $selectedTeacher,
+                $course['code'],
+                0,
+                $selectedFrom,
+                $selectedUntil
+            );
+            $formatedTime = api_format_time($totalTime);
+
+            $timeReport->data[] = array(
+                'session' => null,
+                'course' => array(
+                    'id' => $courseInfo['real_id'],
+                    'name' => $courseInfo['title']
+                ),
+                'coach' => $teacherData,
+                'totalTime' => $formatedTime
+            );
+        }
+    }
 
-    $courses = SessionManager::getCoursesListByCourseCoach($selectedTeacher);
+    $coursesInSession = SessionManager::getCoursesListByCourseCoach($selectedTeacher);
 
-    foreach ($courses as $course) {
+    foreach ($coursesInSession as $course) {
         $session = api_get_session_info($course['id_session']);
+        $sessionData = array(
+            'id' => $session['id'],
+            'name' => $session['name']
+        );
 
         $courseInfo = api_get_course_info($course['course_code']);
 
-        $totalTime = SessionManager::getUserTimeInCourse(
+        $totalTime = UserManager::getExpendedTimeInCourses(
             $selectedTeacher,
             $course['course_code'],
             $session['id'],
             $selectedFrom,
             $selectedUntil
         );
+        $formatedTime = api_format_time($totalTime);
 
         $timeReport->data[] = array(
-            'session' => array(
-                'id' => $session['id'],
-                'name' => $session['name']
-            ),
+            'session' => $sessionData,
             'course' => array(
                 'id' => $courseInfo['real_id'],
                 'name' => $courseInfo['title']
             ),
-            'coach' => array(
-                'userId' => $coach['user_id'],
-                'lastname' => $coach['lastname'],
-                'firstname' => $coach['firstname'],
-                'username' => $coach['username'],
-                'completeName' => $coach['complete_name']
-            ),
-            'totalTime' => $totalTime
+            'coach' => $teacherData,
+            'totalTime' => $formatedTime
         );
     }
 }
@@ -234,7 +299,6 @@ if (isset($_GET['export'])) {
             Export::export_html_to_pdf($pdfContent, $params);
             break;
         case 'xls':
-
             array_unshift($dataToExport, array(
                 $reportTitle
             ), array(

+ 22 - 0
main/inc/lib/main_api.lib.php

@@ -7537,3 +7537,25 @@ function api_site_use_cookie_warning_cookie_exist()
 {
     return isset($_COOKIE['ChamiloUsesCookies']);
 }
+
+/**
+ * Given a number of seconds, format the time to show hours, minutes and seconds
+ * @param int $time The time in seconds
+ * @param string $originFormat Optional. PHP o JS
+ * @return string (00h00'00")
+ */
+function api_format_time($time, $originFormat = 'php')
+{
+    $h = get_lang('h');
+    $hours = $time / 3600;
+    $mins = ($time % 3600) / 60;
+    $secs = ($time % 60);
+
+    if ($originFormat == 'js') {
+        $scormTime = trim(sprintf("%02d : %02d : %02d", $hours, $mins, $secs));
+    } else {
+        $scormTime = trim(sprintf("%02d$h%02d'%02d\"", $hours, $mins, $secs));
+    }
+
+    return $scormTime;
+}

+ 0 - 42
main/inc/lib/sessionmanager.lib.php

@@ -5477,48 +5477,6 @@ class SessionManager
         return '00:00:00';
     }
 
-    /**
-     * Calc the expended time (hh::mm:ss) by a user in a course
-     * @param int $userId The user id
-     * @param string $courseCode The course id
-     * @param int $sessionId Optional. The session id
-     * @param string $from Optional. From date
-     * @param string $until Optional. Until date
-     * @return string The time
-     */
-    public static function getUserTimeInCourse($userId, $courseCode, $sessionId = 0, $from = '', $until = '')
-    {
-        $userId = intval($userId);
-        $sessionId = intval($sessionId);
-
-        $trackCourseAccessTable = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
-
-        $whereConditions = array(
-            'user_id = ? ' => $userId,
-            "AND course_code = '?' " => $courseCode,
-            'AND session_id = ? ' => $sessionId
-        );
-
-        if (!empty($from) && !empty($until)) {
-            $whereConditions["AND (login_course_date >= '?' "] = $from;
-            $whereConditions["AND logout_course_date <= DATE_ADD('?', INTERVAL 1 DAY)) "] = $until;
-        }
-
-        $trackResult = Database::select(
-            'SEC_TO_TIME(SUM(UNIX_TIMESTAMP(logout_course_date) - UNIX_TIMESTAMP(login_course_date))) as total_time',
-            $trackCourseAccessTable,
-            array(
-                'where' => $whereConditions
-            ), 'first'
-        );
-
-        if ($trackResult != false) {
-            return $trackResult['total_time'] ? $trackResult['total_time'] : '00:00:00';
-        }
-
-        return '00:00:00';
-    }
-
     /**
      * Get the courses list by a course coach
      * @param int $coachId The coach id

+ 42 - 0
main/inc/lib/usermanager.lib.php

@@ -5069,4 +5069,46 @@ EOF;
         return $users;
     }
 
+    /**
+     * Calc the expended time (in seconds) by a user in a course
+     * @param int $userId The user id
+     * @param string $courseCode The course id
+     * @param int $sessionId Optional. The session id
+     * @param string $from Optional. From date
+     * @param string $until Optional. Until date
+     * @return int The time
+     */
+    public static function getExpendedTimeInCourses($userId, $courseCode, $sessionId = 0, $from = '', $until = '')
+    {
+        $userId = intval($userId);
+        $sessionId = intval($sessionId);
+
+        $trackCourseAccessTable = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
+
+        $whereConditions = array(
+            'user_id = ? ' => $userId,
+            "AND course_code = '?' " => $courseCode,
+            'AND session_id = ? ' => $sessionId
+        );
+
+        if (!empty($from) && !empty($until)) {
+            $whereConditions["AND (login_course_date >= '?' "] = $from;
+            $whereConditions["AND logout_course_date <= DATE_ADD('?', INTERVAL 1 DAY)) "] = $until;
+        }
+
+        $trackResult = Database::select(
+            'SUM(UNIX_TIMESTAMP(logout_course_date) - UNIX_TIMESTAMP(login_course_date)) as total_time',
+            $trackCourseAccessTable,
+            array(
+                'where' => $whereConditions
+            ), 'first'
+        );
+
+        if ($trackResult != false) {
+            return $trackResult['total_time'] ? $trackResult['total_time'] : 0;
+        }
+
+        return 0;
+    }
+
 }

+ 2 - 27
main/newscorm/learnpathItem.class.php

@@ -1798,7 +1798,7 @@ class learnpathItem
                 return '00 ' . $h . ' 00 \' 00"';
             }
         } else {
-            return self::calculateScormTime($origin, $time);
+            return api_format_time($time, $origin);
         }
     }
 
@@ -1856,36 +1856,11 @@ class learnpathItem
                 0
             );
         }
-        $time = self::calculateScormTime($origin, $time);
+        $time = api_format_time($time, $origin);
 
         return $time;
     }
 
-    /**
-     * @param string $origin
-     * @param string $time
-     * @return string
-     */
-    public static function calculateScormTime($origin, $time)
-    {
-        $h = get_lang('h');
-        $hours = $time / 3600;
-        $mins = ($time % 3600) / 60;
-        $secs = ($time % 60);
-
-        if ($origin == 'js') {
-            $scormTime = trim(sprintf("%02d : %02d : %02d", $hours, $mins, $secs));
-        } else {
-            $scormTime = trim(sprintf("%02d$h%02d'%02d\"", $hours, $mins, $secs));
-        }
-
-        if (self::debug > 2) {
-            error_log('learnpathItem::get_scorm_time(' . $scormTime . ')', 0);
-        }
-
-        return $scormTime;
-    }
-
     /**
      * Get the extra terms (tags) that identify this item
      * @return mixed

+ 1 - 1
main/template/default/admin/teacher_time_report.tpl

@@ -116,7 +116,7 @@
                 {% for row in rows %}
                     <tr>
                         {% if withFilter %}
-                            <td>{{ row.session.name }}</td>
+                            <td>{{ row.session ? row.session.name : '&nbsp' }}</td>
                             <td>{{ row.course.name }}</td>
                         {% endif %}
                         <td>{{ row.coach.completeName }} ({{ row.coach.username}})</td>