diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 0123745d56..b81c629aa5 100755 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -6822,7 +6822,7 @@ class SessionManager */ public static function getSessionVisibility($sessionInfo) { - switch($sessionInfo['visibility']) { + switch ($sessionInfo['visibility']) { case 1: return get_lang('ReadOnly'); case 2: @@ -6844,12 +6844,25 @@ class SessionManager private static function convertSessionDateToString($startDate, $endDate, $showTime, $dateHuman) { // api_get_local_time returns empty if date is invalid like 0000-00-00 00:00:00 - $startDateToLocal = api_get_local_time($startDate, null, null, true, $showTime, $dateHuman); - $endDateToLocal = api_get_local_time($endDate, null, null, true, $showTime, $dateHuman); + $startDateToLocal = api_get_local_time( + $startDate, + null, + null, + true, + $showTime, + $dateHuman + ); + $endDateToLocal = api_get_local_time( + $endDate, + null, + null, + true, + $showTime, + $dateHuman + ); $result = ''; if (!empty($startDateToLocal) && !empty($endDateToLocal)) { - //$result = sprintf(get_lang('FromDateXToDateY'), $startDateToLocal, $endDateToLocal); $result = sprintf( get_lang('FromDateXToDateY'), api_format_date($startDateToLocal, DATE_TIME_FORMAT_LONG_24H), @@ -6866,6 +6879,7 @@ class SessionManager if (empty($result)) { $result = get_lang('NoTimeLimits'); } + return $result; } diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index b937e55bb7..1ec1dc139f 100755 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -1717,7 +1717,6 @@ class UserManager $gravatarEnabled = api_get_setting('gravatar_enabled'); $anonymousPath = Display::returnIconPath('unknown.png', $pictureAnonymousSize); if ($pictureWebFile == 'unknown.jpg' || empty($pictureWebFile)) { - if ($gravatarEnabled === 'true') { $file = self::getGravatar( $imageWebPath['email'], @@ -2631,23 +2630,34 @@ class UserManager $categories = []; foreach ($sessionData as $row) { + $session_id = $row['id']; + $coachList = SessionManager::getCoachesBySession($session_id); + + $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 = UserManager::get_courses_list_by_session( + $user_id, + $session_id + ); + // User portal filters: if ($ignoreTimeLimit === false) { if ($is_time_over) { // History if (empty($row['access_end_date'])) { continue; - } - - if (!empty($row['access_end_date'])) { + } else { if ($row['access_end_date'] > $now) { continue; } - } } else { // Current user portal - if (api_is_allowed_to_create_course()) { + $isGeneralCoach = SessionManager::user_is_general_coach($user_id, $row['id']); + $isCoachOfCourse = in_array($user_id, $coachList); + + if (api_is_platform_admin() || $isGeneralCoach || $isCoachOfCourse) { // Teachers can access the session depending in the access_coach date } else { if (isset($row['access_end_date']) && @@ -2661,9 +2671,6 @@ 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') : ''; - $categories[$row['session_category_id']]['session_category'] = array( 'id' => $row['session_category_id'], 'name' => $row['session_category_name'], @@ -2671,12 +2678,6 @@ class UserManager 'date_end' => $categoryEnd ); - $session_id = $row['id']; - $courseList = UserManager::get_courses_list_by_session( - $user_id, - $session_id - ); - $visibility = api_get_session_visibility( $session_id, null, @@ -3006,7 +3007,7 @@ class UserManager scu.user_id = $user_id AND scu.session_id = $session_id $where_access_url - ORDER BY sc.position ASC"; + ORDER BY sc.position ASC, c.id"; $personal_course_list = array(); $courses = array(); diff --git a/main/inc/lib/userportal.lib.php b/main/inc/lib/userportal.lib.php index c84c2f4869..aa221be442 100755 --- a/main/inc/lib/userportal.lib.php +++ b/main/inc/lib/userportal.lib.php @@ -1177,6 +1177,8 @@ class IndexManager // Declared listSession variable $listSession = []; + + $session_now = time(); if (is_array($session_categories)) { foreach ($session_categories as $session_category) { $session_category_id = $session_category['session_category']['id']; @@ -1195,12 +1197,10 @@ class IndexManager } // Courses inside the current session. - $date_session_start = api_get_local_time($session['access_start_date']); - $date_session_end = api_get_local_time($session['access_end_date']); - $coachAccessStartDate = api_get_local_time($session['coach_access_start_date']); - $coachAccessEndDate = api_get_local_time($session['coach_access_end_date']); - - $session_now = time(); + $date_session_start = $session['access_start_date']; + $date_session_end = $session['access_end_date']; + $coachAccessStartDate = $session['coach_access_start_date']; + $coachAccessEndDate = $session['coach_access_end_date']; $count_courses_session = 0; // Loop course content @@ -1211,6 +1211,7 @@ class IndexManager $is_coach_course = api_is_coach($session_id, $course['real_id']); $allowed_time = 0; $allowedEndTime = true; + if (!empty($date_session_start)) { if ($is_coach_course) { $allowed_time = api_strtotime($coachAccessStartDate); @@ -1220,13 +1221,29 @@ class IndexManager if (!isset($_GET['history'])) { if (!empty($date_session_end)) { - $endSessionToTms = api_strtotime($date_session_end); - if ($session_now > $endSessionToTms) { - $allowedEndTime = false; + if ($is_coach_course) { + // if coach end date is empty we use the default end date + if (empty($coachAccessEndDate)) { + $endSessionToTms = api_strtotime($date_session_end); + if ($session_now > $endSessionToTms) { + $allowedEndTime = false; + } + } else { + $endSessionToTms = api_strtotime($coachAccessEndDate); + if ($session_now > $endSessionToTms) { + $allowedEndTime = false; + } + } + } else { + $endSessionToTms = api_strtotime($date_session_end); + if ($session_now > $endSessionToTms) { + $allowedEndTime = false; + } } } } } + if ($session_now >= $allowed_time && $allowedEndTime) { // Read only and accessible. $atLeastOneCourseIsVisible = true; @@ -1321,35 +1338,44 @@ class IndexManager $coachAccessStartDate = $session['coach_access_start_date']; $coachAccessEndDate = $session['coach_access_end_date']; - $session_now = time(); $html_courses_session = []; $count = 0; foreach ($session['courses'] as $course) { - $is_coach_course = api_is_coach( - $session_id, - $course['real_id'] - ); - + $is_coach_course = api_is_coach($session_id, $course['real_id']); $allowed_time = 0; $allowedEndTime = true; - if ($is_coach_course) { - if (!empty($date_session_start)) { + if (!empty($date_session_start)) { + if ($is_coach_course) { $allowed_time = api_strtotime($coachAccessStartDate); + } else { + $allowed_time = api_strtotime($date_session_start); } + if (!isset($_GET['history'])) { if (!empty($date_session_end)) { - $endSessionToTms = api_strtotime($date_session_end); - if ($session_now > $endSessionToTms) { - $allowedEndTime = false; + if ($is_coach_course) { + // if coach end date is empty we use the default end date + if (empty($coachAccessEndDate)) { + $endSessionToTms = api_strtotime($date_session_end); + if ($session_now > $endSessionToTms) { + $allowedEndTime = false; + } + } else { + $endSessionToTms = api_strtotime($coachAccessEndDate); + if ($session_now > $endSessionToTms) { + $allowedEndTime = false; + } + } + } else { + $endSessionToTms = api_strtotime($date_session_end); + if ($session_now > $endSessionToTms) { + $allowedEndTime = false; + } } } } - } else { - $allowed_time = api_strtotime( - $date_session_start - ); } if ($session_now >= $allowed_time && $allowedEndTime) {