Sessions: Fix order, if all sessions have position = 0 use course code

See BT#18430
pull/3766/head^2
Julio Montoya 5 years ago
parent d7a7ed04a1
commit 00b56b4daf
  1. 17
      main/inc/lib/usermanager.lib.php
  2. 33
      main/session/resume_session.php
  3. 2
      src/Chamilo/CoreBundle/Entity/Repository/SessionRepository.php

@ -3575,6 +3575,7 @@ class UserManager
$categoryStart = $row['session_category_date_start'] ? $row['session_category_date_start']->format('Y-m-d') : '';
$categoryEnd = $row['session_category_date_end'] ? $row['session_category_date_end']->format('Y-m-d') : '';
$courseList = self::get_courses_list_by_session($user_id, $session_id);
$daysLeft = SessionManager::getDayLeftInSession($row, $user_id);
// User portal filters:
@ -4077,9 +4078,19 @@ class UserManager
$checkPosition = array_filter(array_column($myCourseList, 'position'));
if (empty($checkPosition)) {
// The session course list doesn't have any position,
// then order the course list by course code
$list = array_column($myCourseList, 'course_code');
array_multisort($myCourseList, SORT_ASC, $list);
// then order the course list by course code.
$orderByCode = array_column($myCourseList, 'course_code');
sort($orderByCode, SORT_NATURAL);
$newCourseList = [];
foreach ($orderByCode as $code) {
foreach ($myCourseList as $course) {
if ($code === $course['course_code']) {
$newCourseList[] = $course;
break;
}
}
}
$myCourseList = $newCourseList;
}
}

@ -165,12 +165,41 @@ if ($session->getNbrCourses() === 0) {
} else {
$count = 0;
$courseItem = '';
$courses = $sessionRepository->getCoursesOrderedByPosition($session);
//$courses = $sessionRepository->getCoursesOrderedByPosition($session);
$courses = $session->getCourses();
$iterator = $courses->getIterator();
// define ordering closure, using preferred comparison method/field
$iterator->uasort(function ($first, $second) {
return (int) $first->getPosition() > (int) $second->getPosition() ? 1 : -1;
});
$courseList = [];
$positionList = [];
$courseListByCode = [];
/** @var \Chamilo\CoreBundle\Entity\SessionRelCourse $sessionRelCourse */
foreach ($iterator as $sessionRelCourse) {
$courseList[] = $sessionRelCourse->getCourse();
$courseListByCode[$sessionRelCourse->getCourse()->getCode()] = $sessionRelCourse->getCourse();
$positionList[] = $sessionRelCourse->getPosition();
}
$checkPosition = array_filter($positionList);
if (empty($checkPosition)) {
// The session course list doesn't have any position,
// then order the course list by course code.
$orderByCode = array_keys($courseListByCode);
sort($orderByCode, SORT_NATURAL);
$newCourseList = [];
foreach ($orderByCode as $code) {
$newCourseList[] = $courseListByCode[$code];
}
$courseList = $newCourseList;
}
$allowSkills = api_get_configuration_value('allow_skill_rel_items');
/** @var Course $course */
foreach ($courses as $course) {
foreach ($courseList as $course) {
// Select the number of users
$numberOfUsers = SessionManager::getCountUsersInCourseSession($course, $session);

@ -23,7 +23,7 @@ class SessionRepository extends EntityRepository
*
* @param Session $session The session
*
* @return array
* @return Course[]
*/
public function getCoursesOrderedByPosition(Session $session)
{

Loading…
Cancel
Save