/** * @return void Directly redirects the user or leaves him where he is, but doesn't return anything * @param int $userId * @param bool $logout_redirect * @author Fernando P. GarcĂa <*****@*****.**> */ public static function logout($user_id = null, $logout_redirect = false) { global $extAuthSource; // Database table definition $tbl_track_login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); if (empty($user_id)) { $user_id = api_get_user_id(); } $user_id = intval($user_id); // Changing global chat status to offline if (api_is_global_chat_enabled()) { $chat = new Chat(); $chat->set_user_status(0); } // selecting the last login of the user $sql_last_connection = "SELECT login_id, login_date FROM {$tbl_track_login}\n WHERE login_user_id='{$user_id}' ORDER BY login_date DESC LIMIT 0,1"; $q_last_connection = Database::query($sql_last_connection); $i_id_last_connection = null; if (Database::num_rows($q_last_connection) > 0) { $i_id_last_connection = Database::result($q_last_connection, 0, "login_id"); } if (!isset($_SESSION['login_as']) && !empty($i_id_last_connection)) { $current_date = api_get_utc_datetime(); $s_sql_update_logout_date = "UPDATE {$tbl_track_login} SET logout_date='" . $current_date . "' WHERE login_id = '{$i_id_last_connection}'"; Database::query($s_sql_update_logout_date); } Online::loginDelete($user_id); //from inc/lib/online.inc.php - removes the "online" status //the following code enables the use of an external logout function. //example: define a $extAuthSource['ldap']['logout']="file.php" in configuration.php // then a function called ldap_logout() inside that file // (using *authent_name*_logout as the function name) and the following code // will find and execute it $uinfo = api_get_user_info($user_id); if (isset($uinfo['auth_source']) && $uinfo['auth_source'] != PLATFORM_AUTH_SOURCE && is_array($extAuthSource)) { if (is_array($extAuthSource[$uinfo['auth_source']])) { $subarray = $extAuthSource[$uinfo['auth_source']]; if (!empty($subarray['logout']) && file_exists($subarray['logout'])) { require_once $subarray['logout']; $logout_function = $uinfo['auth_source'] . '_logout'; if (function_exists($logout_function)) { $logout_function($uinfo); } } } } require_once api_get_path(SYS_PATH) . 'main/chat/chat_functions.lib.php'; exit_of_chat($user_id); if ($logout_redirect) { header("Location: index.php"); exit; } }
} if (api_get_setting('allow_global_chat') == 'false') { exit; } $to_user_id = isset($_GET['to']) ? $_GET['to'] : null; $message = isset($_GET['message']) ? $_GET['message'] : null; if (!isset($_SESSION['chatHistory'])) { $_SESSION['chatHistory'] = array(); } if (!isset($_SESSION['openChatBoxes'])) { $_SESSION['openChatBoxes'] = array(); } $chat = new Chat(); if ($chat->is_chat_blocked_by_exercises()) { // Disconnect the user $chat->set_user_status(0); exit; } switch ($action) { case 'chatheartbeat': $chat->heartbeat(); break; case 'closechat': $chat->close(); break; case 'sendchat': $chat->send(api_get_user_id(), $to_user_id, $message); break; case 'startchatsession': $chat->start_session(); break;