ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilSessionReminderCheck.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
3
10{
15 public function getJsonResponse($sessionIdHash)
16 {
22 global $DIC;
23
24 $ilDB = $DIC['ilDB'];
25 $lng = $DIC['lng'];
26 $ilClientIniFile = $DIC['ilClientIniFile'];
27
28 $GLOBALS['DIC']->logger()->auth()->debug('Session reminder call for session id hash: ' . $sessionIdHash);
29
30 // disable session writing and extension of expiration time
32
33 $response = array('remind' => false);
34
35 $res = $ilDB->queryF(
36 '
37 SELECT expires, user_id, data
38 FROM usr_session
39 WHERE MD5(session_id) = %s
40 ',
41 ['text'],
42 [$sessionIdHash]
43 );
44
45 $num = $ilDB->numRows($res);
46
47 if ($num > 1) {
48 $response['message'] = 'The determined session data is not unique.';
50 }
51
52 if ($num == 0) {
53 $response['message'] = 'ILIAS could not determine the session data.';
55 }
56
57 $data = $ilDB->fetchAssoc($res);
58 if (!$this->isAuthenticatedUsrSession($data)) {
59 $response['message'] = 'ILIAS could not fetch the session data or the corresponding user is no more authenticated.';
61 }
62
67 $expiretime = $data['expires'];
68 if ($this->isSessionAlreadyExpired($expiretime)) {
69 $response['message'] = 'The session is already expired. The client should have received a remind command before.';
71 }
72
73 if (null === $expiretime) {
74 $response['message'] = 'ILIAS could not determine the expire time from the session data.';
76 }
77
78 if ($this->isSessionAlreadyExpired($expiretime)) {
79 $response['message'] = 'The session is already expired. The client should have received a remind command before.';
81 }
82
87
88 include_once './Services/Authentication/classes/class.ilSessionReminder.php';
89 $remind_time = $expiretime - max(ilSessionReminder::MIN_LEAD_TIME, (float) $ilUser->getPref('session_reminder_lead_time')) * 60;
90 if ($remind_time > time()) {
91 // session will expire in <lead_time> minutes
92 $response['message'] = 'Lead time not reached, yet. Current time: ' . date('Y-m-d H:i:s', time()) . ', Reminder time: ' . date('Y-m-d H:i:s', $remind_time);
94 }
95
96 $dateTime = new ilDateTime($expiretime, IL_CAL_UNIX);
97 switch ($ilUser->getTimeFormat()) {
99 $formatted_expiration_time = $dateTime->get(IL_CAL_FKT_DATE, 'g:ia', $ilUser->getTimeZone());
100 break;
101
103 default:
104 $formatted_expiration_time = $dateTime->get(IL_CAL_FKT_DATE, 'H:i', $ilUser->getTimeZone());
105 break;
106 }
107
108 $response = array(
109 'extend_url' => './ilias.php?baseClass=ilPersonalDesktopGUI',
110 'txt' => str_replace("\\n", '%0A', sprintf($lng->txt('session_reminder_alert'), ilDatePresentation::secondsToString($expiretime - time()), $formatted_expiration_time, $ilClientIniFile->readVariable('client', 'name') . ' | ' . ilUtil::_getHttpPath())),
111 'remind' => true
112 );
113
115 }
116
121 protected function isSessionAlreadyExpired($expiretime)
122 {
123 return $expiretime < time();
124 }
125
131 {
132 return is_array($data) && isset($data['user_id']) && $data['user_id'] > 0 && $data['user_id'] != ANONYMOUS_USER_ID;
133 }
134}
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
const IL_CAL_FKT_DATE
static secondsToString($seconds, $force_with_seconds=false, $a_lng=null)
converts seconds to string: Long: 7 days 4 hour(s) ...
@classDescription Date and time handling
static encode($mixed, $suppress_native=false)
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
static enableWebAccessWithoutSession($enable_web_access_without_session)
static _getHttpPath()
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
$response
global $DIC
Definition: saml.php:7
$lng
foreach($_POST as $key=> $value) $res
global $ilDB
$ilUser
Definition: imgupload.php:18
$data
Definition: bench.php:6