From c34e48187168301d2b00f2be2c603854dcc87d4a Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 30 Nov 2018 11:52:50 +0100 Subject: [PATCH] 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 --- main/inc/local.inc.php | 71 ++++++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/main/inc/local.inc.php b/main/inc/local.inc.php index cec8fbfa49..5836aa0245 100755 --- a/main/inc/local.inc.php +++ b/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; + } } } }