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);
-
?>
-
-
'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;
}
}