/** * @param Request $request * @return null|RedirectResponse */ public function onLogoutSuccess(Request $request) { // Chamilo logout $request->getSession()->remove('_locale'); $request->getSession()->remove('_locale_user'); if (api_is_global_chat_enabled()) { $chat = new \Chat(); $chat->setUserStatus(0); } $userId = $this->storage->getToken()->getUser()->getId(); $tbl_track_login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); $sql = "SELECT login_id, login_date\n FROM {$tbl_track_login}\n WHERE login_user_id = {$userId}\n ORDER BY login_date DESC\n LIMIT 0,1"; $row = Database::query($sql); $loginId = null; if (Database::num_rows($row) > 0) { $loginId = Database::result($row, 0, "login_id"); } $loginAs = $this->checker->isGranted('ROLE_PREVIOUS_ADMIN'); if (!$loginAs) { $current_date = api_get_utc_datetime(); $sql = "UPDATE {$tbl_track_login}\n SET logout_date='" . $current_date . "'\n \t\t WHERE login_id='{$loginId}'"; Database::query($sql); } $online_table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ONLINE); $query = "DELETE FROM " . $online_table . " WHERE login_user_id = {$userId}"; Database::query($query); require_once api_get_path(SYS_PATH) . 'main/chat/chat_functions.lib.php'; exit_of_chat($userId); $login = $this->router->generate('home'); $response = new RedirectResponse($login); return $response; }
/** * @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; } }