public static function getLoggedInUsers() { $items = self::getAll(); if (count($items) == 0) { return array(); } $users = array(); foreach ($items as $item) { $data = adodb_unserialize(urldecode($item['sessdata'])); if ($data[self::PREFIX . 'user_id'] > 0) { $users[] = array('user_id' => $data[self::PREFIX . 'user_id'], 'user_name' => $data[self::PREFIX . 'user_name'], 'user_email' => $data[self::PREFIX . 'user_email'], 'user_realname' => $data[self::PREFIX . 'user_realname'], 'user_logon' => $item['created']); } } return $users; }
function LogoutNotification($SessionID) { global $CFG, $SESSION, $DB; // Delete session of user using $SessionID if (empty($CFG->dbsessions)) { // File session $dir = $CFG->dataroot . '/sessions'; if (is_dir($dir)) { if ($dh = opendir($dir)) { // Read all session files while (($file = readdir($dh)) !== false) { // Check if it is a file if (is_file($dir . '/' . $file)) { $session_key = preg_replace('/sess_/', '', $file); // Read session file data $data = file($dir . '/' . $file); if (isset($data[0])) { $user_session = unserializesession($data[0]); // Check if we have found session that shall be deleted if (isset($user_session['SESSION']) && isset($user_session['SESSION']->shibboleth_session_id)) { // If there is a match, delete file if ($user_session['SESSION']->shibboleth_session_id == $SessionID) { // Delete session file if (!unlink($dir . '/' . $file)) { return new SoapFault('LogoutError', 'Could not delete Moodle session file.'); } } } } } } closedir($dh); } } } else { // DB Session //TODO: this needs to be rewritten to use new session stuff if (!empty($CFG->sessiontimeout)) { $ADODB_SESS_LIFE = $CFG->sessiontimeout; } if ($user_session_data = $DB->get_records_sql('SELECT sesskey, sessdata FROM {sessions2} WHERE expiry > NOW()')) { foreach ($user_session_data as $session_data) { // Get user session $user_session = adodb_unserialize(urldecode($session_data->sessdata)); if (isset($user_session['SESSION']) && isset($user_session['SESSION']->shibboleth_session_id)) { // If there is a match, delete file if ($user_session['SESSION']->shibboleth_session_id == $SessionID) { // Delete this session entry if (ADODB_Session::destroy($session_data->sesskey) !== true) { return new SoapFault('LogoutError', 'Could not delete Moodle session entry in database.'); } } } } } } // If now SoapFault was thrown the function will return OK as the SP assumes }