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 
130  protected function isAuthenticatedUsrSession($data)
131  {
132  return is_array($data) && isset($data['user_id']) && $data['user_id'] > 0 && $data['user_id'] != ANONYMOUS_USER_ID;
133  }
134 }
static enableWebAccessWithoutSession($enable_web_access_without_session)
global $DIC
Definition: saml.php:7
const IL_CAL_UNIX
static encode($mixed, $suppress_native=false)
static secondsToString($seconds, $force_with_seconds=false, $a_lng=null)
converts seconds to string: Long: 7 days 4 hour(s) ...
foreach($_POST as $key=> $value) $res
$lng
const IL_CAL_FKT_DATE
Date and time handling
$ilUser
Definition: imgupload.php:18
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
static _getHttpPath()
global $ilDB
$response
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
$data
Definition: bench.php:6