diff --git a/main/admin/resume_session.php b/main/admin/resume_session.php index 8d5561702c..f8d91add8b 100755 --- a/main/admin/resume_session.php +++ b/main/admin/resume_session.php @@ -230,11 +230,23 @@ if ($multiple_url_is_on) { echo ''; echo ''; $url_list = UrlManager::get_access_url_from_session($id_session); - foreach($url_list as $url_data) { + foreach ($url_list as $url_data) { echo $url_data['url'].'
'; } echo ''; } + +if (SessionManager::durationPerUserIsEnabled()) { + $sessionInfo = api_get_session_info($id_session); + echo ''; + echo get_lang('Duration'); + echo ''; + echo ''; + echo $sessionInfo['duration'].' '; + echo get_lang('Days'); + echo ''; + +} ?>
@@ -387,11 +399,8 @@ $url .= Display::url( "session_user_import.php?id_session=$id_session" ); echo Display::page_subheader(get_lang('UserList').$url); - ?> - - - '; } @@ -460,11 +482,16 @@ if ($session['nbr_users']==0) { ?>
@@ -444,15 +453,28 @@ if ($session['nbr_users']==0) { $link_to_add_user_in_url = ''.$add.''; } } + + $editUrl = null; + if (SessionManager::durationPerUserIsEnabled()) { + if (isset($sessionInfo['duration']) && !empty($sessionInfo['duration'])) { + $editUrl = api_get_path(WEB_CODE_PATH) . 'admin/session_user_edit.php?session_id=' . $id_session . '&user_id=' . $user['user_id']; + $editUrl = Display::url( + Display::return_icon('edit.png', get_lang('Edit')), + $editUrl + ); + } + } echo '
+ '.$user_link.' + '.$editUrl.' '.Display::return_icon('statistics.gif', get_lang('Reporting')).'  '.Display::return_icon('course.gif', get_lang('BlockCoursesForThisUser')).'  '.Display::return_icon('delete.png', get_lang('Delete')).' '.$link_to_add_user_in_url.' +
'index.php', 'name' => get_lang('PlatformAdmin')); +$interbreadcrumb[] = array('url' => 'session_list.php','name' => get_lang('SessionList')); +$interbreadcrumb[] = array('url' => "resume_session.php?id_session=".$sessionId, "name" => get_lang('SessionOverview')); + +$form = new FormValidator('edit', 'post', api_get_self().'?session_id='.$sessionId.'&user_id='.$userId); +$form->add_header(get_lang('EditUserSessionDuration')); +$data = SessionManager::getUserSession($userId, $sessionId); + +$form->addElement('text', 'duration', array(get_lang('Duration'), null, get_lang('Days'))); +$form->addElement('button', 'submit', get_lang('Send')); +$form->setDefaults($data); +$message = null; +if ($form->validate()) { + $duration = $form->getSubmitValue('duration'); + SessionManager::editUserSessionDuration($duration, $userId, $sessionId); + $message = Display::return_message(get_lang('ItemUpdated'), 'confirmation'); +} + +// display the header +Display::display_header(get_lang('Edit')); + +echo $message; +$form->display(); + +Display :: display_footer(); diff --git a/main/inc/lib/display.lib.php b/main/inc/lib/display.lib.php index 52494ad7a8..3af1ac6aa5 100755 --- a/main/inc/lib/display.lib.php +++ b/main/inc/lib/display.lib.php @@ -1389,7 +1389,18 @@ class Display $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($session_info['firstname'], $session_info['lastname']); } if (isset($session_info['duration']) && !empty($session_info['duration'])) { - $daysLeft = SessionManager::getDayLeftInSession($session_id, api_get_user_id(), $session_info['duration']); + + $userDurationData = SessionManager::getUserSession( + api_get_user_id(), + $session_id + ); + $totalDuration = $session_info['duration'] + intval($userDurationData['duration']); + + $daysLeft = SessionManager::getDayLeftInSession( + $session_id, + api_get_user_id(), + $totalDuration + ); $session['duration'] = sprintf(get_lang('SessionDurationXDaysLeft'), $daysLeft); } $active = true; diff --git a/main/inc/lib/main_api.lib.php b/main/inc/lib/main_api.lib.php index 1f544f7329..00b3f17c3b 100755 --- a/main/inc/lib/main_api.lib.php +++ b/main/inc/lib/main_api.lib.php @@ -2026,7 +2026,14 @@ function api_get_session_visibility($session_id, $course_code = null, $ignore_vi ); $currentTime = time(); $firstAccess = api_strtotime($courseAccess['login_course_date'], 'UTC'); - if (($firstAccess + $duration) > $currentTime) { + $userDurationData = SessionManager::getUserSession( + api_get_user_id(), + $session_id + ); + $userDuration = intval($userDurationData['duration'])*24*60*60; + + $totalDuration = $firstAccess + $duration + $userDuration; + if ($totalDuration > $currentTime) { return SESSION_AVAILABLE; } else { return SESSION_INVISIBLE; diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 2a251fa759..8a95c2e9bd 100755 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -4666,7 +4666,9 @@ class SessionManager /** * Use the session duration to allow/block user access see BT#8317 - * Needs "ALTER TABLE session ADD COLUMN duration int;" + * Needs these DB changes + * ALTER TABLE session ADD COLUMN duration int; + * ALTER TABLE session_rel_user ADD COLUMN duration int; */ public static function durationPerUserIsEnabled() { @@ -4683,24 +4685,70 @@ class SessionManager /** * @param int $userId * @param int $sessionId + * @param int $duration in days * @return int */ - public function getDayLeftInSession($sessionId, $userId, $duration) + public static function getDayLeftInSession($sessionId, $userId, $duration) { $courseAccess = CourseManager::getFirstCourseAccessPerSessionAndUser( $sessionId, $userId ); + $currentTime = time(); $firstAccess = api_strtotime($courseAccess['login_course_date'], 'UTC'); - //var_dump(api_get_utc_datetime($firstAccess)); - //var_dump($duration); + $endDateInSeconds = $firstAccess + $duration*24*60*60; $leftDays = round(($endDateInSeconds- $currentTime) / 60 / 60 / 24); - /*var_dump(api_get_utc_datetime($endDateInSeconds)); - var_dump(api_get_utc_datetime($currentTime));*/ + return $leftDays; + } + + /** + * @param int $duration + * @param int $userId + * @param int $sessionId + */ + public static function editUserSessionDuration($duration, $userId, $sessionId) + { + $duration = intval($duration); + $userId = intval($userId); + $sessionId = intval($sessionId); + + if (empty($userId) || empty($sessionId)) { + return false; + } + + $table = Database::get_main_table(TABLE_MAIN_SESSION_USER); + $parameters = array('duration' => $duration); + $where = array('id_session = ? AND id_user = ? ' => array($sessionId, $userId)); + Database::update($table, $parameters, $where); + } + + /** + * @param int $userId + * @param int $sessionId + * + * @param return array + */ + public static function getUserSession($userId, $sessionId) + { + $userId = intval($userId); + $sessionId = intval($sessionId); + + if (empty($userId) || empty($sessionId)) { + return false; + } + + $table = Database::get_main_table(TABLE_MAIN_SESSION_USER); + $sql = "SELECT * FROM $table WHERE id_session =$sessionId AND id_user = $userId"; + $result = Database::query($sql); + $values = array(); + if (Database::num_rows($result)) { + $values = Database::fetch_array($result, 'ASSOC'); + } + return $values; } }