load->model('user_login_history_model'); $sessID = session_id(); $loginH = [ 'session_id' => $sessID, 'role_id' => $userData['role_id'], 'user_id' => $userData['user_id'] ]; /** * This is when BO User login as Subscriber * Add access token to history log * */ if (isset($userData['token_id']) && !empty($userData['token_id'])) { $loginH['access_token_id'] = $userData['token_id']; } // Add signin history $login_id = $CI->user_login_history_model->client_checkdb( array_merge(Request::metaData($CI), $loginH), "LOGIN" ); if (!$login_id) return false; // Lets create session! $sessionData = new Session(array_merge( [ "session_id" => $sessID, "login_id" => $login_id ], $userData ) ); // Invalidate previous Remember Me Rememberme::forget(); // Then create new one on-demand if ($userData['remember_me']) { Rememberme::create( $userData['user_id'], $userData['role_id'], $userData['isBOUser'] ); } // Register session data $CI->session->set_userdata([ self::KEY => $sessionData->toArray() ]); return !!$CI->session->userdata(self::KEY); } public static function logout() { // Get CodeIgniter instance $CI =& get_instance(); // Immediate redirection if (!self::isAuth()) return Response::backToReferrerDefaultPage(); $userSession = self::auth(); // Invalidate access token if (self::isLoggedInAsSubscriber()) { $CI->user_model->update_access_token($userSession['token_id']); } // Add signout history $CI->user_login_history_model->client_checkdb(array_merge( Request::metaData($CI), [ 'session_id' => $userSession['session_id'], 'login_id' => $userSession['login_id'], 'user_id' => $userSession['user_id'], 'role_id' => $userSession['role_id'] ] ), "LOGOUT"); // Finally reset login session $CI->session->unset_userdata(self::KEY); // Invalidate Remember Me if (!$userSession['remember_me']) Rememberme::forget(); // Redirect to respective page if ($userSession["isBOUser"]) redirect(base_url('auth')); else redirect(base_url('home')); } /** * Get session data * @return void */ public static function auth(): array { // Get CodeIgniter instance $CI =& get_instance(); if (!self::isAuth()) return []; return $CI->session->userdata(self::KEY); } public static function isAuth(): bool { // Get CodeIgniter instance $CI =& get_instance(); $loggedIn = $CI->session->userdata(self::KEY); if (!$loggedIn) return false; $CI->load->model('user_model'); return !!$CI->user_model->check_if_session_is_active($loggedIn); } public static function isBOUser(): bool { // Get CodeIgniter instance $CI =& get_instance(); return !!@$CI->session->userdata(self::KEY)['isBOUser']; } public static function isFOUser(): bool { // Get CodeIgniter instance $CI =& get_instance(); return !!!$CI->session->userdata(self::KEY)['isBOUser']; } public static function isFirstLogin(): bool { // Get CodeIgniter instance $CI =& get_instance(); return !!@$CI->session->userdata(self::KEY)['isFirstLogin']; } public static function isLoggedInAsSubscriber(): bool { // Get CodeIgniter instance $CI =& get_instance(); return !!$CI->session->userdata(self::KEY)['token_id']; } public static function isLoggedBySSO(): bool { // Get CodeIgniter instance $CI =& get_instance(); return !!$CI->session->userdata(self::KEY)['sso'] && count($CI->session->userdata(self::KEY)['sso']); } public static function isPremium(): bool { // Get CodeIgniter instance $CI =& get_instance(); return !!$CI->session->userdata(self::KEY)['premium']; } public static function updateSession($key, $value) { $editableFields = ['first_name', 'last_name']; if (in_array($key, $editableFields)) { // Get CodeIgniter instance $CI =& get_instance(); $loggedIn = $CI->session->userdata(self::KEY); $loggedIn[$key] = $value; $loggedIn['fullname'] = $loggedIn['first_name']." ".$loggedIn['last_name']; // Register session data $CI->session->set_userdata([ self::KEY => $loggedIn ]); } } }