Browse Source

Calculate total session duration when calculate duration days left - refs BT#12539

Angel Fernando Quiroz Campos 8 years ago
parent
commit
fdab116cf5

+ 1 - 13
main/inc/lib/display.lib.php

@@ -1567,19 +1567,7 @@ class Display
                 (empty($session_info['access_end_date']) && empty($session_info['access_start_date']))
             ) {
                 if (isset($session_info['duration']) && !empty($session_info['duration'])) {
-                    $userDurationData = SessionManager::getUserSession(
-                        api_get_user_id(),
-                        $session_id
-                    );
-
-                    $userDuration = isset($userDurationData['duration']) ? (int) $userDurationData['duration'] : 0;
-                    $totalDuration = $session_info['duration'] + $userDuration;
-
-                    $daysLeft = SessionManager::getDayLeftInSession(
-                        $session_id,
-                        api_get_user_id(),
-                        $totalDuration
-                    );
+                    $daysLeft = SessionManager::getDayLeftInSession($session_info, api_get_user_id());
                     $session['duration'] = sprintf(get_lang('SessionDurationXDaysLeft'), $daysLeft);
                 }
                 $active = true;

+ 7 - 5
main/inc/lib/sessionmanager.lib.php

@@ -6158,13 +6158,15 @@ class SessionManager
     /**
      * Returns the number of days the student has left in a session when using
      * sessions durations
-     * @param int $userId
-     * @param int $sessionId
-     * @param int $duration in days
-     * @return int
      */
-    public static function getDayLeftInSession($sessionId, $userId, $duration)
+    public static function getDayLeftInSession(array $sessionInfo, $userId)
     {
+        $sessionId = $sessionInfo['id'];
+        $userSubsubscription = SessionManager::getUserSession($userId, $sessionId);
+        $duration = empty($userSubsubscription['duration'])
+            ? $sessionInfo['duration']
+            : $sessionInfo['duration'] + $userSubsubscription['duration'];
+
         // Get an array with the details of the first access of the student to
         // this session
         $courseAccess = CourseManager::getFirstCourseAccessPerSessionAndUser(

+ 2 - 3
main/session/about.php

@@ -191,9 +191,8 @@ $template->assign(
 $template->assign(
     'user_session_time',
     SessionManager::getDayLeftInSession(
-        $session->getId(),
-        api_get_user_id(),
-        $session->getDuration()
+        ['id' => $session->getId(), 'duration' => $session->getDuration()],
+        api_get_user_id()
     )
 
 );

+ 9 - 10
main/session/session_user_edit.php

@@ -36,7 +36,6 @@ $interbreadcrumb[] = array(
 
 $form = new FormValidator('edit', 'post', api_get_self().'?session_id='.$sessionId.'&user_id='.$userId);
 $form->addHeader(get_lang('EditUserSessionDuration'));
-$data = SessionManager::getUserSession($userId, $sessionId);
 $userInfo = api_get_user_info($userId);
 
 // Show current end date for the session for this user, if any
@@ -50,14 +49,17 @@ if (count($userAccess) == 0) {
     $msg = sprintf(get_lang('UserNeverAccessedSessionDefaultDurationIsX'), $sessionInfo['duration']);
 } else {
     // The user already accessed the session. Show a clear detail of the days count.
-    $duration = $sessionInfo['duration'];
-    if (!empty($data['duration'])) {
-        $duration = $duration + $data['duration'];
-    }
-    $days = SessionManager::getDayLeftInSession($sessionId, $userId, $duration);
+    $days = SessionManager::getDayLeftInSession($sessionInfo, $userId);
     $firstAccess = api_strtotime($userAccess['login_course_date'], 'UTC');
     $firstAccessString = api_convert_and_format_date($userAccess['login_course_date'], DATE_FORMAT_SHORT, 'UTC');
     if ($days > 0) {
+        $userSubscription = SessionManager::getUserSession($userId, $sessionId);
+        $duration = $sessionInfo['duration'];
+
+        if (!empty($userSubscription['duration'])) {
+            $duration = $duration + $userSubscription['duration'];
+        }
+
         $msg = sprintf(get_lang('FirstAccessWasXSessionDurationYEndDateInZDays'), $firstAccessString, $duration, $days);
     } else {
         $endDateInSeconds = $firstAccess + $duration * 24 * 60 * 60;
@@ -72,10 +74,7 @@ $form->addElement('html', $msg);
 $form->addElement('text', 'duration', array(get_lang('ExtraDurationForUser'), null, get_lang('Days')));
 $form->addButtonSave(get_lang('Save'));
 
-if (empty($data['duration'])) {
-    $data['duration'] = 0;
-}
-$form->setDefaults($data);
+$form->setDefaults(['duration' => 0]);
 $message = null;
 if ($form->validate()) {
     $duration = $form->getSubmitValue('duration');