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.
pull/2487/head
jmontoyaa 8 years ago
parent f34b8c1132
commit 322fc4af95
  1. 3
      main/install/configuration.dist.php
  2. 200
      main/mySpace/index.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;

@ -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

Loading…
Cancel
Save