From 628e8aa331d87008751abbc00d3d84f5ff3c709b Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 28 Jun 2017 16:38:53 -0500 Subject: [PATCH] Fix course history for sessions with duration - refs BT#12970 --- main/inc/lib/api.lib.php | 2 +- main/inc/lib/banner.lib.php | 15 +++++++++++---- main/inc/lib/display.lib.php | 4 +++- main/inc/lib/usermanager.lib.php | 28 +++++++++++++++++++++------- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/main/inc/lib/api.lib.php b/main/inc/lib/api.lib.php index b0c1d4a73f..42af1aac53 100644 --- a/main/inc/lib/api.lib.php +++ b/main/inc/lib/api.lib.php @@ -2279,7 +2279,7 @@ function api_get_session_visibility( $totalDuration = $firstAccess + $duration + $userDuration; - return $totalDuration > $currentTime ? SESSION_AVAILABLE : SESSION_INVISIBLE; + return $totalDuration > $currentTime ? SESSION_AVAILABLE : SESSION_VISIBLE_READ_ONLY; } return SESSION_AVAILABLE; diff --git a/main/inc/lib/banner.lib.php b/main/inc/lib/banner.lib.php index 8349ac8f44..77b5181af2 100755 --- a/main/inc/lib/banner.lib.php +++ b/main/inc/lib/banner.lib.php @@ -642,10 +642,17 @@ function return_breadcrumb($interbreadcrumb, $language_file, $nameTools) $user_id ); - $additonalBlocks .= Display::return_message( - sprintf(get_lang('SessionDurationXDaysLeft'), $daysLeft), - 'information' - ); + if ($daysLeft >= 0) { + $additonalBlocks .= Display::return_message( + sprintf(get_lang('SessionDurationXDaysLeft'), $daysLeft), + 'information' + ); + } else { + $additonalBlocks .= Display::return_message( + get_lang('YourSessionTimeHasExpired'), + 'warning' + ); + } } break; } diff --git a/main/inc/lib/display.lib.php b/main/inc/lib/display.lib.php index 3f9366695e..91b00a60e5 100755 --- a/main/inc/lib/display.lib.php +++ b/main/inc/lib/display.lib.php @@ -1576,7 +1576,9 @@ class Display ) { if (isset($session_info['duration']) && !empty($session_info['duration'])) { $daysLeft = SessionManager::getDayLeftInSession($session_info, api_get_user_id()); - $session['duration'] = sprintf(get_lang('SessionDurationXDaysLeft'), $daysLeft); + $session['duration'] = $daysLeft >= 0 + ? sprintf(get_lang('SessionDurationXDaysLeft'), $daysLeft) + : get_lang('YourSessionTimeHasExpired'); } $active = true; } else { diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index 8141ba54b8..b1e7884a5e 100755 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -2661,6 +2661,7 @@ class UserManager s.name, s.accessStartDate AS access_start_date, s.accessEndDate AS access_end_date, + s.duration, sc.id AS session_category_id, sc.name AS session_category_name, sc.dateStart AS session_category_date_start, @@ -2695,16 +2696,23 @@ class UserManager $user_id, $session_id ); + $daysLeft = SessionManager::getDayLeftInSession($row, $user_id); // User portal filters: if ($ignoreTimeLimit === false) { if ($is_time_over) { // History - if (empty($row['access_end_date'])) { - continue; + if ($row['duration']) { + if ($daysLeft >= 0) { + continue; + } } else { - if ($row['access_end_date'] > $now) { + if (empty($row['access_end_date'])) { continue; + } else { + if ($row['access_end_date'] > $now) { + continue; + } } } } else { @@ -2715,12 +2723,18 @@ class UserManager 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']) && - !empty($row['access_end_date']) - ) { - if ($row['access_end_date'] <= $now) { + if ($row['duration']) { + if ($daysLeft <= 0) { continue; } + } else { + if (isset($row['access_end_date']) && + !empty($row['access_end_date']) + ) { + if ($row['access_end_date'] <= $now) { + continue; + } + } } } }