Skip to content

Commit 2f4d913

Browse files
authored
Tracking: #add option to enable progress summary section in the sessions in mystudents.php (#6531)
Author: @yverhenne
1 parent 12da449 commit 2f4d913

File tree

3 files changed

+115
-4
lines changed

3 files changed

+115
-4
lines changed

main/inc/lib/tracking.lib.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8709,12 +8709,15 @@ public static function generateReport(string $reportType, array $selectedUserLis
87098709
$session = api_get_session_info($row['session_id']);
87108710
$course = api_get_course_info_by_id($row['c_id']);
87118711

8712+
$sessionName = $session['name'] ?? '';
8713+
$courseTitle = $course['title'] ?? '';
8714+
87128715
if ($reportType == 'time_report') {
87138716
$rows[] = [
87148717
$user['lastname'],
87158718
$user['firstname'],
8716-
$session['name'],
8717-
$course['title'],
8719+
$sessionName,
8720+
$courseTitle,
87188721
api_get_local_time($row['login_course_date']),
87198722
api_get_local_time($row['logout_course_date']),
87208723
gmdate('H:i:s', $row['time']),
@@ -8724,8 +8727,8 @@ public static function generateReport(string $reportType, array $selectedUserLis
87248727
$rows[] = [
87258728
$user['lastname'],
87268729
$user['firstname'],
8727-
$session['name'],
8728-
$course['title'],
8730+
$sessionName,
8731+
$courseTitle,
87298732
$row['lp_name'],
87308733
api_get_local_time(date('Y-m-d H:i:s', $row['start_time'])),
87318734
$extraFieldValue['value'] ?? '',

main/install/configuration.dist.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1953,6 +1953,9 @@
19531953
//Create an extra field for courses with identifier "theoretical_time"
19541954
//$_configuration['display_theoretical_time'] = false;
19551955

1956+
// Enable improved tracking section in main/mySpace/myStudents.php
1957+
//$_configuration['improve_tracking_in_mystudent_php'] = false;
1958+
19561959
// Add teachers column in course list.
19571960
// $_configuration['add_teachers_in_course_list'] = false;
19581961

main/mySpace/myStudents.php

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,6 +1195,111 @@
11951195
echo MyStudents::userCareersTable($student_id);
11961196
}
11971197

1198+
// Session progress section
1199+
if (api_get_configuration_value('improve_tracking_in_mystudent_php')) {
1200+
$orderCondition = null;
1201+
if (api_get_configuration_value('session_list_order')) {
1202+
$orderCondition = ' ORDER BY s.position ASC';
1203+
}
1204+
$sessions = SessionManager::getSessionsFollowedByUser(
1205+
$student_id,
1206+
null,
1207+
null,
1208+
null,
1209+
false,
1210+
false,
1211+
false,
1212+
$orderCondition
1213+
);
1214+
$sessionProgressTitle = get_lang('synthesis');
1215+
$sessionProgressHeading = '<h3 class="panel-title text-center"><strong>'.$sessionProgressTitle.'</strong></h3>';
1216+
$sessionProgressList = [];
1217+
$totalSessionsProgress = 0;
1218+
foreach ($sessions as $sessionItem) {
1219+
$courses = SessionManager::get_course_list_by_session_id($sessionItem['id']);
1220+
$courseProgressSum = 0;
1221+
$courseCount = 0;
1222+
foreach ($courses as $courseItem) {
1223+
$courseInfoItem = api_get_course_info_by_id($courseItem['real_id']);
1224+
$courseCodeItem = $courseInfoItem['code'];
1225+
if (CourseManager::is_user_subscribed_in_course($student_id, $courseCodeItem, true, $sessionItem['id'])) {
1226+
$progressValue = Tracking::get_avg_student_progress(
1227+
$student_id,
1228+
$courseCodeItem,
1229+
[],
1230+
$sessionItem['id']
1231+
);
1232+
if (is_numeric($progressValue)) {
1233+
$courseProgressSum += $progressValue;
1234+
}
1235+
$courseCount++;
1236+
}
1237+
}
1238+
$progress = $courseCount > 0 ? round($courseProgressSum / $courseCount, 2) : 0;
1239+
$sessionProgressList[] = [
1240+
'name' => $sessionItem['name'],
1241+
'progress' => $progress,
1242+
];
1243+
$totalSessionsProgress += $progress;
1244+
}
1245+
$avgSessionsProgress = !empty($sessionProgressList) ? round($totalSessionsProgress / count($sessionProgressList), 2) : 0;
1246+
1247+
// Calculate last week's time spent in courses using Tracking::generateReport
1248+
$aLastWeek = get_last_week();
1249+
$startWeek = date('Y-m-d', $aLastWeek[0]);
1250+
$endWeek = date('Y-m-d', $aLastWeek[6]);
1251+
$report = Tracking::generateReport('time_report', [$student_id], $startWeek, $endWeek);
1252+
$timeSeconds = 0;
1253+
foreach ($report['rows'] as $reportRow) {
1254+
$timeParts = explode(':', $reportRow[6]);
1255+
if (count($timeParts) === 3) {
1256+
[$hours, $minutes, $seconds] = array_map('intval', $timeParts);
1257+
$timeSeconds += ($hours * 3600) + ($minutes * 60) + $seconds;
1258+
}
1259+
}
1260+
$timeSpentLastWeek = api_time_to_hms($timeSeconds);
1261+
$timeContent = '<div class="text-center">';
1262+
$timeContent .= Display::return_icon('clock.png', get_lang('TimeSpentLastWeek'), [], ICON_SIZE_MEDIUM);
1263+
$timeContent .= ' '.$timeSpentLastWeek;
1264+
$timeContent .= '</div>';
1265+
$timePanel = Display::panel($timeContent, get_lang('TimeSpentInCoursesLastWeek'));
1266+
1267+
$donutContent = '<div class="easy-donut text-center">';
1268+
$donutContent .= '<div id="easypiechart-session-avg" class="easypiechart" data-percent="'.$avgSessionsProgress.'">';
1269+
$donutContent .= '<span class="percent">'.$avgSessionsProgress.'%</span>';
1270+
$donutContent .= '</div>';
1271+
$donutContent .= '</div>';
1272+
$donutPanel = Display::panel($donutContent, get_lang('AverageProgressInSessions'));
1273+
1274+
$sessionBars = '';
1275+
foreach ($sessionProgressList as $item) {
1276+
$sessionBars .= '<p>'.Security::remove_XSS($item['name']).'</p>';
1277+
$sessionBars .= '<div class="progress">';
1278+
$sessionBars .= '<div class="progress-bar progress-bar-success" role="progressbar" style="width: '.$item['progress'].'%;">'.$item['progress'].'%</div>';
1279+
$sessionBars .= '</div>';
1280+
}
1281+
$sessionBarsPanel = Display::panel($sessionBars);
1282+
1283+
$sessionProgressHtml = '<div class="row session-progress-section">';
1284+
$sessionProgressHtml .= '<div class="col-md-6">'.$sessionBarsPanel.'</div>';
1285+
$sessionProgressHtml .= '<div class="col-md-6 text-center">';
1286+
$sessionProgressHtml .= $donutPanel;
1287+
$sessionProgressHtml .= $timePanel;
1288+
$sessionProgressHtml .= '</div>';
1289+
$sessionProgressHtml .= '</div>';
1290+
echo Display::panel($sessionProgressHtml, '', '', 'default', $sessionProgressHeading);
1291+
echo "<script>
1292+
$(function () {
1293+
$('#easypiechart-session-avg').easyPieChart({
1294+
scaleColor: false,
1295+
barColor: '#30a5ff',
1296+
lineWidth: 8,
1297+
trackColor: '#f2f2f2'
1298+
});
1299+
});
1300+
</script>";
1301+
}
1302+
11981303
echo MyStudents::getBlockForSkills(
11991304
$student_id,
12001305
$courseInfo ? $courseInfo['real_id'] : 0,

0 commit comments

Comments
 (0)