Browse Source

Add 'tracking_skip_generic_data' setting to skip stats BT#12824

Some stats take too long to process when you have a lot of students
and sessions.
jmontoyaa 7 years ago
parent
commit
322fc4af95
2 changed files with 105 additions and 98 deletions
  1. 3 0
      main/install/configuration.dist.php
  2. 102 98
      main/mySpace/index.php

+ 3 - 0
main/install/configuration.dist.php

@@ -383,3 +383,6 @@ $_configuration['agenda_legend'] = [
 // $_configuration['document_pdf_orientation'] = 'landscape'; // It can be 'portrait' or 'landscape'
 // Use alternative footer when exporting document to PDF
 //$_configuration['use_alternative_document_pdf_footer'] = false;
+// If the MySpace page takes too long to load, you might want to remove the
+// processing of generic statistics for the user. In this case set the following to true.
+//$_configuration['tracking_skip_generic_data'] = false;

+ 102 - 98
main/mySpace/index.php

@@ -5,6 +5,7 @@
  * Homepage for the MySpace directory
  * @package chamilo.reporting
  */
+
 // resetting the course id
 $cidReset = true;
 
@@ -28,8 +29,8 @@ $is_coach = api_is_coach($session_id);
 $is_platform_admin = api_is_platform_admin();
 $is_drh = api_is_drh();
 $is_session_admin = api_is_session_admin();
-$count_sessions = 0;
 $title = '';
+$skipData = api_get_configuration_value('tracking_skip_generic_data');
 
 // Access control
 api_block_anonymous_users();
@@ -182,6 +183,7 @@ echo '</div>';
 $userId = api_get_user_id();
 $stats = Tracking::getStats($userId, true);
 
+$numberStudents = $stats['student_count'];
 $students = $stats['student_list'];
 $numberStudentBosses = $stats['student_bosses'];
 $numberTeachers = $stats['teachers'];
@@ -198,33 +200,16 @@ if (!empty($sessions)) {
 }
 
 // Sessions for the user
-$count_sessions = count($sessions);
+$countSessions = count($sessions);
 $total_time_spent = 0;
 $total_courses = 0;
 $avgTotalProgress = 0;
 $nb_inactive_students = 0;
 $numberAssignments = 0;
 $inactiveTime = time() - (3600 * 24 * 7);
-$nb_students = 0;
 $daysAgo = 7;
 $studentIds = array();
 $avg_courses_per_student = 0;
-if (!empty($students)) {
-    // Students
-    $nb_students = count($students);
-    $studentIds = array_values($students);
-    $progress = Tracking::get_avg_student_progress($studentIds);
-    $countAssignments = Tracking::count_student_assignments($studentIds);
-    // average progress
-    $avgTotalProgress = $progress / $nb_students;
-    // average assignments
-    $numberAssignments = $countAssignments / $nb_students;
-    $avg_courses_per_student = $countCourses / $nb_students;
-}
-
-$totalTimeSpent = Tracking::get_time_spent_on_the_platform($studentIds);
-$posts = Tracking::count_student_messages($studentIds);
-$averageScore = Tracking::getAverageStudentScore($studentIds);
 
 $linkAddUser = null;
 $linkCourseDetailsAsTeacher = null;
@@ -262,7 +247,7 @@ echo '<div class="report_section">
                     get_lang('FollowedStudents'),
                     api_get_path(WEB_CODE_PATH).'mySpace/student.php'
                 ).'</td>
-                <td align="right">'.$nb_students.'</td>
+                <td align="right">'.$numberStudents.'</td>
             </tr>
             <tr>
                 <td>'.Display::url(
@@ -293,7 +278,7 @@ echo '<div class="report_section">
                 api_get_path(WEB_CODE_PATH).'mySpace/users.php'
             ).
             '</td>
-                <td align="right">'.($nb_students + $numberStudentBosses + $numberTeachers + $countHumanResourcesUsers).$linkAddUser.'</td>
+                <td align="right">'.($numberStudents + $numberStudentBosses + $numberTeachers + $countHumanResourcesUsers).$linkAddUser.'</td>
             </tr>
             <tr>
                 <td>'.Display::url(
@@ -317,90 +302,109 @@ echo '<div class="report_section">
                     api_get_path(WEB_CODE_PATH).'mySpace/session.php'
                 ).
                 '</td>
-            <td align="right">'.$count_sessions.$linkAddSession.'</td>
+            <td align="right">'.$countSessions.$linkAddSession.'</td>
             </tr>
             </table>';
 echo '</div>';
 
-echo Display::page_subheader(get_lang('Students').' ('.$nb_students.')');
+echo Display::page_subheader(get_lang('Students').' ('.$numberStudents.')');
 
-if ($export_csv) {
-    //csv part
-    $csv_content[] = array(get_lang('Students'));
-    $csv_content[] = array(get_lang('InactivesStudents'), $nb_inactive_students);
-    $csv_content[] = array(get_lang('AverageTimeSpentOnThePlatform'), $totalTimeSpent);
-    $csv_content[] = array(get_lang('AverageCoursePerStudent'), $avg_courses_per_student);
-    $csv_content[] = array(get_lang('AverageProgressInLearnpath'), is_null($avgTotalProgress) ? null : round($avgTotalProgress, 2).'%');
-    $csv_content[] = array(get_lang('AverageResultsToTheExercices'), is_null($averageScore) ? null : round($averageScore, 2).'%');
-    $csv_content[] = array(get_lang('AveragePostsInForum'), $posts);
-    $csv_content[] = array(get_lang('AverageAssignments'), $numberAssignments);
-    $csv_content[] = array();
-} else {
-    $lastConnectionDate = api_get_utc_datetime(strtotime('15 days ago'));
-    $countActiveUsers = SessionManager::getCountUserTracking(
-        null,
-        1,
-        null,
-        array(),
-        array()
-    );
-    $countSleepingTeachers = SessionManager::getTeacherTracking(
-        api_get_user_id(),
-        1,
-        $lastConnectionDate,
-        true,
-        $sessionIdList
-    );
+$form = new FormValidator(
+    'search_user',
+    'get',
+    api_get_path(WEB_CODE_PATH).'mySpace/student.php'
+);
+$form = Tracking::setUserSearchForm($form);
+$form->display();
 
-    $countSleepingStudents = SessionManager::getCountUserTracking(
-        null,
-        1,
-        $lastConnectionDate,
-        $sessionIdList,
-        $studentIds
-    );
+$skipData = api_get_configuration_value('tracking_skip_generic_data');
 
-    $form = new FormValidator(
-        'search_user',
-        'get',
-        api_get_path(WEB_CODE_PATH).'mySpace/student.php'
-    );
-    $form = Tracking::setUserSearchForm($form);
-    $form->display();
-
-    // html part
-    echo '<div class="report_section">
-            <table class="table table-bordered table-striped">
-                <tr>
-                    <td>'.get_lang('AverageCoursePerStudent').'</td>
-                    <td align="right">'.(is_null($avg_courses_per_student) ? '' : round($avg_courses_per_student, 2)).'</td>
-                </tr>
-                <tr>
-                    <td>'.get_lang('InactivesStudents').'</td>
-                    <td align="right">'.$nb_inactive_students.'</td>
-                </tr>
-                <tr>
-                    <td>'.get_lang('AverageTimeSpentOnThePlatform').'</td>
-                    <td align="right">'.(is_null($totalTimeSpent) ? '' : api_time_to_hms($totalTimeSpent)).'</td>
-                </tr>
-                <tr>
-                    <td>'.get_lang('AverageProgressInLearnpath').'</td>
-                    <td align="right">'.(is_null($avgTotalProgress) ? '' : round($avgTotalProgress, 2).'%').'</td>
-                </tr>
-                <tr>
-                    <td>'.get_lang('AvgCourseScore').'</td>
-                    <td align="right">'.(is_null($averageScore) ? '' : round($averageScore, 2).'%').'</td>
-                </tr>
-                <tr>
-                    <td>'.get_lang('AveragePostsInForum').'</td>
-                    <td align="right">'.(is_null($posts) ? '' : round($posts, 2)).'</td>
-                </tr>
-                <tr>
-                    <td>'.get_lang('AverageAssignments').'</td>
-                    <td align="right">'.(is_null($numberAssignments) ? '' : round($numberAssignments, 2)).'</td>
-                </tr>
-            </table>
-         </div>';
+if ($skipData == false) {
+    if (!empty($students)) {
+        // Students
+        $studentIds = array_values($students);
+        $progress = Tracking::get_avg_student_progress($studentIds);
+        $countAssignments = Tracking::count_student_assignments($studentIds);
+        // average progress
+        $avgTotalProgress = $progress / $numberStudents;
+        // average assignments
+        $numberAssignments = $countAssignments / $numberStudents;
+        $avg_courses_per_student = $countCourses / $numberStudents;
+        $totalTimeSpent = Tracking::get_time_spent_on_the_platform($studentIds);
+        $posts = Tracking::count_student_messages($studentIds);
+        $averageScore = Tracking::getAverageStudentScore($studentIds);
+    }
+
+    if ($export_csv) {
+        //csv part
+        $csv_content[] = array(get_lang('Students'));
+        $csv_content[] = array(get_lang('InactivesStudents'), $nb_inactive_students);
+        $csv_content[] = array(get_lang('AverageTimeSpentOnThePlatform'), $totalTimeSpent);
+        $csv_content[] = array(get_lang('AverageCoursePerStudent'), $avg_courses_per_student);
+        $csv_content[] = array(get_lang('AverageProgressInLearnpath'), is_null($avgTotalProgress) ? null : round($avgTotalProgress, 2).'%');
+        $csv_content[] = array(get_lang('AverageResultsToTheExercices'), is_null($averageScore) ? null : round($averageScore, 2).'%');
+        $csv_content[] = array(get_lang('AveragePostsInForum'), $posts);
+        $csv_content[] = array(get_lang('AverageAssignments'), $numberAssignments);
+        $csv_content[] = array();
+    } else {
+        $lastConnectionDate = api_get_utc_datetime(strtotime('15 days ago'));
+        $countActiveUsers = SessionManager::getCountUserTracking(
+            null,
+            1,
+            null,
+            array(),
+            array()
+        );
+        $countSleepingTeachers = SessionManager::getTeacherTracking(
+            api_get_user_id(),
+            1,
+            $lastConnectionDate,
+            true,
+            $sessionIdList
+        );
+
+        $countSleepingStudents = SessionManager::getCountUserTracking(
+            null,
+            1,
+            $lastConnectionDate,
+            $sessionIdList,
+            $studentIds
+        );
+
+        // html part
+        echo '<div class="report_section">
+                <table class="table table-bordered table-striped">
+                    <tr>
+                        <td>'.get_lang('AverageCoursePerStudent').'</td>
+                        <td align="right">'.(is_null($avg_courses_per_student) ? '' : round($avg_courses_per_student, 2)).'</td>
+                    </tr>
+                    <tr>
+                        <td>'.get_lang('InactivesStudents').'</td>
+                        <td align="right">'.$nb_inactive_students.'</td>
+                    </tr>
+                    <tr>
+                        <td>'.get_lang('AverageTimeSpentOnThePlatform').'</td>
+                        <td align="right">'.(is_null($totalTimeSpent) ? '' : api_time_to_hms($totalTimeSpent)).'</td>
+                    </tr>
+                    <tr>
+                        <td>'.get_lang('AverageProgressInLearnpath').'</td>
+                        <td align="right">'.(is_null($avgTotalProgress) ? '' : round($avgTotalProgress, 2).'%').'</td>
+                    </tr>
+                    <tr>
+                        <td>'.get_lang('AvgCourseScore').'</td>
+                        <td align="right">'.(is_null($averageScore) ? '' : round($averageScore, 2).'%').'</td>
+                    </tr>
+                    <tr>
+                        <td>'.get_lang('AveragePostsInForum').'</td>
+                        <td align="right">'.(is_null($posts) ? '' : round($posts, 2)).'</td>
+                    </tr>
+                    <tr>
+                        <td>'.get_lang('AverageAssignments').'</td>
+                        <td align="right">'.(is_null($numberAssignments) ? '' : round($numberAssignments, 2)).'</td>
+                    </tr>
+                </table>
+             </div>';
+    }
 }
 
 // Send the csv file if asked