Reports: Fix works in session table when users are in different courses

See BT#18700
pull/3860/head
Julio Montoya 5 years ago
parent dfbfee714d
commit 471996a62e
  1. 56
      main/mySpace/works_in_session_report.php

@ -2,8 +2,8 @@
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Session; use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\SessionRelCourse;
use Chamilo\UserBundle\Entity\User; use Chamilo\UserBundle\Entity\User;
require_once __DIR__.'/../inc/global.inc.php'; require_once __DIR__.'/../inc/global.inc.php';
@ -43,23 +43,22 @@ if (!empty($sessionId)) {
$session = api_get_session_entity($sessionId); $session = api_get_session_entity($sessionId);
} }
$coursesInfo = []; $courses = [];
$usersInfo = []; $users = [];
if ($session) { if ($session) {
$sessionCourses = $session->getCourses(); $sessionCourses = $session->getCourses();
/** @var SessionRelCourse $sessionCourse */
foreach ($sessionCourses as $sessionCourse) { foreach ($sessionCourses as $sessionCourse) {
/** @var Course $course */
$course = $sessionCourse->getCourse(); $course = $sessionCourse->getCourse();
$coursesInfo[$course->getId()] = $course->getCode(); $courses[$course->getId()] = $course->getCode();
$userCourseSubscriptions = $session->getUserCourseSubscriptionsByStatus($course, Session::STUDENT); $userCourseSubscriptions = $session->getUserCourseSubscriptionsByStatus($course, Session::STUDENT);
$usersInSession = $session->getUsers();
foreach ($userCourseSubscriptions as $userCourseSubscription) { // Set defaults.
/** @var User $user */ foreach ($usersInSession as $userInSession) {
$user = $userCourseSubscription->getUser(); $user = $userInSession->getUser();
if (!array_key_exists($user->getId(), $users)) {
if (!array_key_exists($user->getId(), $usersInfo)) { $users[$user->getId()] = [
$usersInfo[$user->getId()] = [
'code' => $user->getOfficialCode(), 'code' => $user->getOfficialCode(),
'complete_name' => UserManager::formatUserFullName($user), 'complete_name' => UserManager::formatUserFullName($user),
'time_in_platform' => api_time_to_hms( 'time_in_platform' => api_time_to_hms(
@ -69,16 +68,18 @@ if ($session) {
'last_connection' => Tracking::get_last_connection_date($user->getId()), 'last_connection' => Tracking::get_last_connection_date($user->getId()),
]; ];
} }
$users[$user->getId()][$course->getId().'_score'] = null;
$users[$user->getId()][$course->getId().'_progress'] = null;
$users[$user->getId()][$course->getId().'_last_sent_date'] = null;
}
$usersInfo[$user->getId()][$course->getId().'_score'] = null; foreach ($userCourseSubscriptions as $userCourseSubscription) {
$usersInfo[$user->getId()][$course->getId().'_progress'] = null; /** @var User $user */
$usersInfo[$user->getId()][$course->getId().'_last_sent_date'] = null; $user = $userCourseSubscription->getUser();
if (!$session->hasStudentInCourse($user, $course)) { if (!$session->hasStudentInCourse($user, $course)) {
continue; continue;
} }
$users[$user->getId()][$course->getId().'_score'] = Tracking::get_avg_student_score(
$usersInfo[$user->getId()][$course->getId().'_score'] = Tracking::get_avg_student_score(
$user->getId(), $user->getId(),
$course->getCode(), $course->getCode(),
[], [],
@ -87,7 +88,7 @@ if ($session) {
false, false,
true true
); );
$usersInfo[$user->getId()][$course->getId().'_progress'] = Tracking::get_avg_student_progress( $users[$user->getId()][$course->getId().'_progress'] = Tracking::get_avg_student_progress(
$user->getId(), $user->getId(),
$course->getCode(), $course->getCode(),
[], [],
@ -105,14 +106,14 @@ if ($session) {
continue; continue;
} }
$usersInfo[$user->getId()][$course->getId().'_last_sent_date'] = api_get_local_time( $users[$user->getId()][$course->getId().'_last_sent_date'] = api_get_local_time(
$lastPublication->getSentDate()->getTimestamp() $lastPublication->getSentDate()->getTimestamp()
); );
} }
} }
} }
if (isset($_GET['export']) && $session && ($coursesInfo && $usersInfo)) { if (isset($_GET['export']) && $session && $courses && $users) {
$fileName = 'works_in_session_'.api_get_local_time(); $fileName = 'works_in_session_'.api_get_local_time();
$dataToExport = []; $dataToExport = [];
@ -123,13 +124,13 @@ if (isset($_GET['export']) && $session && ($coursesInfo && $usersInfo)) {
$dataToExport['headers'][] = get_lang('FirstLoginInPlatform'); $dataToExport['headers'][] = get_lang('FirstLoginInPlatform');
$dataToExport['headers'][] = get_lang('LatestLoginInPlatform'); $dataToExport['headers'][] = get_lang('LatestLoginInPlatform');
foreach ($coursesInfo as $courseCode) { foreach ($courses as $courseCode) {
$dataToExport['headers'][] = $courseCode.' ('.get_lang('BestScore').')'; $dataToExport['headers'][] = $courseCode.' ('.get_lang('BestScore').')';
$dataToExport['headers'][] = get_lang('Progress'); $dataToExport['headers'][] = get_lang('Progress');
$dataToExport['headers'][] = get_lang('LastSentWorkDate'); $dataToExport['headers'][] = get_lang('LastSentWorkDate');
} }
foreach ($usersInfo as $user) { foreach ($users as $user) {
$dataToExport[] = $user; $dataToExport[] = $user;
} }
@ -167,8 +168,8 @@ $view->assign('form', $form->returnForm());
if ($session) { if ($session) {
$view->assign('session', ['name' => $session->getName()]); $view->assign('session', ['name' => $session->getName()]);
$view->assign('courses', $coursesInfo); $view->assign('courses', $courses);
$view->assign('users', $usersInfo); $view->assign('users', $users);
} }
$template = $view->get_template('my_space/works_in_session_report.tpl'); $template = $view->get_template('my_space/works_in_session_report.tpl');
@ -177,10 +178,7 @@ $content = $view->fetch($template);
$view->assign('header', $toolName); $view->assign('header', $toolName);
if ($actions) { if ($actions) {
$view->assign( $view->assign('actions', Display::toolbarAction('toolbar', [$actions]));
'actions',
Display::toolbarAction('toolbar', [$actions])
);
} }
$view->assign('content', $content); $view->assign('content', $content);

Loading…
Cancel
Save