Fix session course redirection

Checking the visibility and visibility priority:

SESSION_AVAILABLE,
SESSION_VISIBLE
SESSION_VISIBLE_READ_ONLY

If the user is subscribed in different sessions with the same course

See BT#12083 BT#15106
pull/2757/head
Julio Montoya 7 years ago
parent e662194654
commit c34e481871
  1. 71
      main/inc/local.inc.php

@ -1358,29 +1358,60 @@ if ((isset($uidReset) && $uidReset) || $cidReset) {
$_course['real_id']
);
if (!empty($courseSession) && isset($courseSession[0])) {
$courseSessionItem = $courseSession[0];
if (isset($courseSessionItem['session_id'])) {
$customSessionId = $courseSessionItem['session_id'];
$currentUrl = htmlentities($_SERVER['REQUEST_URI']);
$currentUrl = str_replace('id_session=0', '', $currentUrl);
$currentUrl = str_replace('&', '&', $currentUrl);
if (strpos($currentUrl, '?') !== false) {
$currentUrl = rtrim($currentUrl, '&');
$url = $currentUrl.'&id_session='.$customSessionId;
} else {
$url = $currentUrl.'?id_session='.$customSessionId;
$priorityList = [];
if (!empty($courseSession)) {
foreach ($courseSession as $courseSessionItem) {
if (isset($courseSessionItem['session_id'])) {
$customSessionId = $courseSessionItem['session_id'];
$visibility = api_get_session_visibility($customSessionId, $_course['real_id']);
if ($visibility == SESSION_INVISIBLE) {
continue;
}
switch ($visibility) {
case SESSION_AVAILABLE:
$priorityList[1][] = $customSessionId;
break;
case SESSION_VISIBLE:
$priorityList[2][] = $customSessionId;
break;
case SESSION_VISIBLE_READ_ONLY:
$priorityList[3][] = $customSessionId;
break;
}
}
$url = str_replace('&&', '&', $url);
//$url = $_course['course_public_url'].'?id_session='.$customSessionId;
}
}
Session::erase('_real_cid');
Session::erase('_cid');
Session::erase('_course');
if (!empty($priorityList)) {
ksort($priorityList);
foreach ($priorityList as $sessionList) {
if (empty($sessionList)) {
continue;
}
foreach ($sessionList as $customSessionId) {
$currentUrl = htmlentities($_SERVER['REQUEST_URI']);
$currentUrl = str_replace('id_session=0', '', $currentUrl);
$currentUrl = str_replace('&', '&', $currentUrl);
if (strpos($currentUrl, '?') !== false) {
$currentUrl = rtrim($currentUrl, '&');
$url = $currentUrl.'&id_session='.$customSessionId;
} else {
$url = $currentUrl.'?id_session='.$customSessionId;
}
$url = str_replace('&&', '&', $url);
//$url = $_course['course_public_url'].'?id_session='.$customSessionId;
header('Location: '.$url);
exit;
Session::erase('_real_cid');
Session::erase('_cid');
Session::erase('_course');
header('Location: '.$url);
exit;
}
}
}
}

Loading…
Cancel
Save