|
1258 | 1258 | }
|
1259 | 1259 | }
|
1260 | 1260 | $timeSpentLastWeek = api_time_to_hms($timeSeconds);
|
| 1261 | + $detailsUrl = api_get_path(WEB_CODE_PATH) |
| 1262 | + .'mySpace/time_report_last_week.php?student='.$student_id |
| 1263 | + .'&start='.$startWeek.'&end='.$endWeek; |
1261 | 1264 | $timeContent = '<div class="text-center">';
|
1262 | 1265 | $timeContent .= Display::return_icon('clock.png', get_lang('TimeSpentLastWeek'), [], ICON_SIZE_MEDIUM);
|
1263 |
| - $timeContent .= ' '.$timeSpentLastWeek; |
| 1266 | + $timeContent .= '<div>'.$timeSpentLastWeek.'</div>'; |
| 1267 | + $timeContent .= '<div> </div>'; |
| 1268 | + $timeContent .= '<div><a href="'.$detailsUrl.'"' |
| 1269 | + .' onclick="window.open(this.href, \'timeReportDetails\',' |
| 1270 | + .' \'width=800,height=600,scrollbars=yes\'); return false;">' |
| 1271 | + .get_lang('Details').'</a></div>'; |
| 1272 | + $timeContent .= '<div> </div>'; |
| 1273 | + $timeContent .= '<div>' |
| 1274 | + .'<a href="'.$detailsUrl.'&export=pdf">' |
| 1275 | + .Display::return_icon('pdf.png', get_lang('ExportPDF'), [], ICON_SIZE_MEDIUM) |
| 1276 | + .'</a> ' |
| 1277 | + .'<a href="'.$detailsUrl.'&export=xls">' |
| 1278 | + .Display::return_icon('export_excel.png', get_lang('ExportAsXLS'), [], ICON_SIZE_MEDIUM) |
| 1279 | + .'</a></div>'; |
1264 | 1280 | $timeContent .= '</div>';
|
1265 | 1281 | $timePanel = Display::panel($timeContent, get_lang('TimeSpentInCoursesLastWeek'));
|
1266 | 1282 |
|
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')); |
| 1283 | + $avgProgressContent = '<div class="text-center">'; |
| 1284 | + $avgProgressContent .= '<div id="avg-sessions-progress" class="easypiechart" data-percent="'.$avgSessionsProgress.'">'; |
| 1285 | + $avgProgressContent .= '<span class="percent">'.$avgSessionsProgress.'%</span>'; |
| 1286 | + $avgProgressContent .= '</div>'; |
| 1287 | + $avgProgressContent .= '</div>'; |
| 1288 | + $avgProgressContent .= "<script>\n $(function() {\n $('#avg-sessions-progress').easyPieChart({\n scaleColor: false,\n lineWidth: 8,\n barColor: '#3ba557',\n trackColor: '#f2f2f2'\n });\n });\n </script>"; |
| 1289 | + $avgProgressPanel = Display::panel($avgProgressContent, get_lang('AverageProgressInSessions')); |
1273 | 1290 |
|
1274 | 1291 | $sessionBars = '';
|
1275 | 1292 | foreach ($sessionProgressList as $item) {
|
|
1278 | 1295 | $sessionBars .= '<div class="progress-bar progress-bar-success" role="progressbar" style="width: '.$item['progress'].'%;">'.$item['progress'].'%</div>';
|
1279 | 1296 | $sessionBars .= '</div>';
|
1280 | 1297 | }
|
1281 |
| - $sessionBarsPanel = Display::panel($sessionBars); |
| 1298 | + $sessionBarsAccordion = Display::panelCollapse( |
| 1299 | + get_lang('ProgressionInSessions'), |
| 1300 | + $sessionBars, |
| 1301 | + 'panel-session-progress', |
| 1302 | + [], |
| 1303 | + 'accordion-session-progress', |
| 1304 | + 'collapse-session-progress', |
| 1305 | + false, |
| 1306 | + true |
| 1307 | + ); |
1282 | 1308 |
|
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>'; |
| 1309 | + $sessionProgressHtml = '<div class="row session-progress-section" style="display:flex;flex-wrap:wrap;align-items:stretch;">'; |
| 1310 | + $sessionProgressHtml .= '<div class="col-md-6 text-center" style="display:flex;"><div style="flex:1;">'.$avgProgressPanel.'</div></div>'; |
| 1311 | + $sessionProgressHtml .= '<div class="col-md-6" style="display:flex;"><div style="flex:1;">'.$timePanel.'</div></div>'; |
1289 | 1312 | $sessionProgressHtml .= '</div>';
|
| 1313 | + $sessionProgressHtml .= $sessionBarsAccordion; |
| 1314 | + |
| 1315 | + // Weekly time spent summary table - vertical layout displayed in 4 columns |
| 1316 | + $weeksToShow = 52; |
| 1317 | + $currentMonday = strtotime('monday this week'); |
| 1318 | + $weekData = []; |
| 1319 | + for ($i = 1; $i <= $weeksToShow; $i++) { |
| 1320 | + $weekStart = strtotime('-'.$i.' week', $currentMonday); |
| 1321 | + $weekEnd = $weekStart + (6 * 86400); |
| 1322 | + $startDate = date('Y-m-d', $weekStart); |
| 1323 | + $endDate = date('Y-m-d', $weekEnd); |
| 1324 | + $reportWeek = Tracking::generateReport('time_report', [$student_id], $startDate, $endDate); |
| 1325 | + $weekSeconds = 0; |
| 1326 | + foreach ($reportWeek['rows'] as $reportRow) { |
| 1327 | + $parts = explode(':', $reportRow[6]); |
| 1328 | + if (count($parts) === 3) { |
| 1329 | + [$h, $m, $s] = array_map('intval', $parts); |
| 1330 | + $weekSeconds += ($h * 3600) + ($m * 60) + $s; |
| 1331 | + } |
| 1332 | + } |
| 1333 | + $label = date('Y', $weekStart).' - '.date('W', $weekStart); |
| 1334 | + $weekData[] = [ |
| 1335 | + 'label' => $label, |
| 1336 | + 'time' => api_time_to_hms($weekSeconds), |
| 1337 | + ]; |
| 1338 | + } |
| 1339 | + |
| 1340 | + $tablesHtml = '<div class="row">'; |
| 1341 | + $tablesCount = 4; |
| 1342 | + $weeksPerTable = (int) ceil($weeksToShow / $tablesCount); |
| 1343 | + $index = 0; |
| 1344 | + for ($table = 0; $table < $tablesCount; $table++) { |
| 1345 | + $tableHtml = '<table class="table table-bordered table-condensed">'; |
| 1346 | + $tableHtml .= '<thead><tr><th>'.get_lang('Week').'</th><th>'.get_lang('LatencyTimeSpent').'</th></tr></thead><tbody>'; |
| 1347 | + for ($j = 0; $j < $weeksPerTable && $index < count($weekData); $j++, $index++) { |
| 1348 | + $label = Security::remove_XSS($weekData[$index]['label']); |
| 1349 | + $time = $weekData[$index]['time']; |
| 1350 | + $tableHtml .= '<tr><th class="text-center">'.$label.'</th><td class="text-right">'.$time.'</td></tr>'; |
| 1351 | + } |
| 1352 | + $tableHtml .= '</tbody></table>'; |
| 1353 | + $tablesHtml .= '<div class="col-md-3">'.$tableHtml.'</div>'; |
| 1354 | + } |
| 1355 | + $tablesHtml .= '</div>'; |
| 1356 | + $weeklySummaryPanel = Display::panelCollapse( |
| 1357 | + get_lang('WeeklyTimeSummary'), |
| 1358 | + $tablesHtml, |
| 1359 | + 'panel-weekly-summary', |
| 1360 | + [], |
| 1361 | + 'accordion-weekly-summary', |
| 1362 | + 'collapse-weekly-summary', |
| 1363 | + false |
| 1364 | + ); |
| 1365 | + |
| 1366 | + $sessionProgressHtml .= $weeklySummaryPanel; |
1290 | 1367 | 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 | 1368 | }
|
1302 | 1369 |
|
1303 | 1370 | echo MyStudents::getBlockForSkills(
|
|
0 commit comments