$Date: 2007-02-21 14:35:34 -0500 (Wed, 21 Feb 2007) $ | > $Revision: 855 $ | > $Author: bfarber $ +--------------------------------------------------------------------------- | | > Log in / log out module | > Module written by Matt Mecham | > Date started: 14th February 2002 | | > Module Version Number: 1.0.0 | > DBA Checked: Wed 19 May 2004 | > Quality Checked: Wed 15 Sept. 2004 +-------------------------------------------------------------------------- */ if ( ! defined( 'IN_IPB' ) ) { print "

Некорректный адрес

Вы не имеете доступа к этому файлу напрямую. Если вы недавно обновляли форум, вы должны обновить все соответствующие файлы."; exit(); } class login { # Classes var $ipsclass; # Others var $output = ""; var $page_title = ""; var $nav = array(); var $login_html = ""; var $modules = ""; var $han_login = ""; function auto_run() { $this->ipsclass->load_language('lang_login'); $this->ipsclass->load_template('skin_login'); if ( USE_MODULES == 1 ) { require ROOT_PATH."modules/ipb_member_sync.php"; $this->modules = new ipb_member_sync(); $this->modules->ipsclass =& $this->ipsclass; } //----------------------------------------- // Are we enforcing log ins? //----------------------------------------- if ( $this->ipsclass->vars['force_login'] == 1 ) { $msg = 'admin_force_log_in'; } else { $msg = ""; } //----------------------------------------- // What to do? //----------------------------------------- switch( $this->ipsclass->input['CODE'] ) { case '01': $this->do_log_in(); break; case '02': $this->log_in_form(); break; case '03': $this->do_log_out(); break; case '04': $this->markforum(); break; case '05': $this->markboard(); break; case '06': $this->delete_cookies(); break; case 'autologin': $this->auto_login(); break; default: $this->log_in_form($msg); break; } //----------------------------------------- // If we have any HTML to print, do so... //----------------------------------------- $this->ipsclass->print->add_output("$this->output"); $this->ipsclass->print->do_output( array( 'TITLE' => $this->page_title, 'JS' => 0, 'NAV' => $this->nav ) ); } /*-------------------------------------------------------------------------*/ // AUTO LOG IN /*-------------------------------------------------------------------------*/ function auto_login() { //----------------------------------------- // Universal routine. // If we have cookies / session created, simply return to the index screen // If not, return to the log in form //----------------------------------------- $this->ipsclass->member = $this->ipsclass->sess->authorise(); //----------------------------------------- // If there isn't a member ID set, do a quick check ourselves. // It's not that important to do the full session check as it'll // occur when they next click a link. //----------------------------------------- if ( ! $this->ipsclass->member['id'] ) { $mid = intval( $this->ipsclass->my_getcookie('member_id') ); $pid = substr( $this->ipsclass->my_getcookie('pass_hash'), 0, 32 ); If ( $mid and $pid ) { $this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where' => "id=$mid and member_login_key='$pid'" ) ); $this->ipsclass->DB->simple_exec(); if ( $member = $this->ipsclass->DB->fetch_row() ) { $this->ipsclass->member = $member; $this->ipsclass->session_id = ""; $this->ipsclass->my_setcookie('session_id', '0', -1 ); } } } $true_words = $this->ipsclass->lang['logged_in']; $false_words = $this->ipsclass->lang['not_logged_in']; $method = 'no_show'; if ($this->ipsclass->input['fromreg'] == 1) { $true_words = $this->ipsclass->lang['reg_log_in']; $false_words = $this->ipsclass->lang['reg_not_log_in']; $method = 'show'; } else if ($this->ipsclass->input['fromemail'] == 1) { $true_words = $this->ipsclass->lang['email_log_in']; $false_words = $this->ipsclass->lang['email_not_log_in']; $method = 'show'; } else if ($this->ipsclass->input['frompass'] == 1) { $true_words = $this->ipsclass->lang['pass_log_in']; $false_words = $this->ipsclass->lang['pass_not_log_in']; $method = 'show'; } if ($this->ipsclass->member['id']) { if ($method == 'show') { $this->ipsclass->print->redirect_screen( $true_words, "" ); } else { $this->ipsclass->boink_it($this->ipsclass->vars['board_url'].'/index.'.$this->ipsclass->vars['php_ext']); } } else { if ($method == 'show') { $this->ipsclass->print->redirect_screen( $false_words, 'act=login&CODE=00' ); } else { $this->ipsclass->boink_it($this->ipsclass->base_url.'&act=login&CODE=00'); } } } /*-------------------------------------------------------------------------*/ // DELETE IPB COOKIES /*-------------------------------------------------------------------------*/ function delete_cookies( $check_key=1 ) { if( $check_key ) { $key = $this->ipsclass->input['k']; # Check for funny business if ( $key != $this->ipsclass->md5_check ) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission' ) ); } } if (is_array($_COOKIE)) { foreach( $_COOKIE as $cookie => $value) { if (preg_match( "/^(".$this->ipsclass->vars['cookie_id']."ipbforum.*$)/i", $cookie, $match)) { $this->ipsclass->my_setcookie( str_replace( $this->ipsclass->vars['cookie_id'], "", $match[0] ) , '-', -1 ); } } } $this->ipsclass->my_setcookie('pass_hash' , '-1'); $this->ipsclass->my_setcookie('member_id' , '-1'); $this->ipsclass->my_setcookie('session_id', '-1'); $this->ipsclass->my_setcookie('topicsread', '-1'); $this->ipsclass->my_setcookie('anonlogin' , '-1'); $this->ipsclass->my_setcookie('forum_read', '-1'); $this->ipsclass->boink_it($this->ipsclass->base_url); exit(); } /*-------------------------------------------------------------------------*/ // MARK ALL AS READ /*-------------------------------------------------------------------------*/ function markboard() { //----------------------------------------- // Reset board marker //----------------------------------------- if ( $this->ipsclass->member['id'] ) { $this->ipsclass->member['members_markers']['board'] = time(); $this->ipsclass->DB->do_update( 'members', array( 'members_markers' => serialize( $this->ipsclass->member['members_markers'] ) ), 'id='.$this->ipsclass->member['id'] ); //----------------------------------------- // Update forum marker rows //----------------------------------------- $this->ipsclass->DB->do_update( 'topic_markers', array( 'marker_unread' => 0, 'marker_last_update' => time(), 'marker_last_cleared' => time(), 'marker_topics_read' => serialize(array()) ), 'marker_member_id='.$this->ipsclass->member['id'] ); } else { $this->ipsclass->forum_read[ 0 ] = time(); $this->ipsclass->hdl_forum_read_cookie('set'); } $this->ipsclass->boink_it($this->ipsclass->base_url.'act=idx'); } /*-------------------------------------------------------------------------*/ // MARK FORUM AS READ /*-------------------------------------------------------------------------*/ function markforum() { //----------------------------------------- // INIT //----------------------------------------- $forum_id = intval($this->ipsclass->input['f']); $from_forum_id = intval($this->ipsclass->input['fromforum']); $forum_data = $this->ipsclass->forums->forum_by_id[ $forum_id ]; $children = $this->ipsclass->forums->forums_get_children( $forum_data['id'] ); $save = array(); $delete = array(); //----------------------------------------- // Check //----------------------------------------- if ( ! $forum_data['id'] ) { $this->ipsclass->Error( array( LEVEL => 1, MSG => 'missing_files' ) ); } //----------------------------------------- // Come from the index? Add kids //----------------------------------------- if ( $this->ipsclass->input['i'] ) { if ( is_array( $children ) and count($children) ) { foreach( $children as $id ) { $this->ipsclass->forum_read[ $id ] = time(); $delete[] = $id; $save[ $id ] = array( 'marker_forum_id' => $id, 'marker_member_id' => $this->ipsclass->member['id'], 'marker_last_update' => time(), 'marker_unread' => 0, 'marker_last_cleared' => time() ); } } } //----------------------------------------- // Add in the current forum... //----------------------------------------- $this->ipsclass->forum_read[ $forum_data['id'] ] = time(); $delete[] = $forum_data['id']; $save[ $forum_data['id'] ] = array( 'marker_forum_id' => $forum_data['id'], 'marker_member_id' => $this->ipsclass->member['id'], 'marker_last_update' => time(), 'marker_unread' => 0, 'marker_last_cleared' => time() ); //----------------------------------------- // Reset topic markers //----------------------------------------- if ( $this->ipsclass->vars['db_topic_read_cutoff'] and $this->ipsclass->member['id'] ) { if ( count( $delete ) ) { $this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'topic_markers', 'where' => 'marker_member_id='.$this->ipsclass->member['id'].' AND marker_forum_id IN ('.implode(',',$delete ).')' ) ); foreach( $save as $data ) { $this->ipsclass->DB->do_insert( 'topic_markers', $data ); } } } //----------------------------------------- // Reset cookie //----------------------------------------- $this->ipsclass->hdl_forum_read_cookie('set'); //----------------------------------------- // Where are we going back to? //----------------------------------------- if ( $from_forum_id ) { //----------------------------------------- // Its a sub forum, lets go redirect to parent forum //----------------------------------------- $this->ipsclass->boink_it($this->ipsclass->base_url."showforum=".$from_forum_id); } else { $this->ipsclass->boink_it($this->ipsclass->base_url.'act=idx'); } } /*-------------------------------------------------------------------------*/ // LOG IN FORM /*-------------------------------------------------------------------------*/ function log_in_form($message="") { //----------------------------------------- // INIT //----------------------------------------- $extra_form = ""; $show_form = 1; //----------------------------------------- // Load handler... //----------------------------------------- require_once( ROOT_PATH.'sources/handlers/han_login.php' ); $this->han_login = new han_login(); $this->han_login->ipsclass =& $this->ipsclass; $this->han_login->init(); //----------------------------------------- // Are they banned? //----------------------------------------- if ( is_array( $this->ipsclass->cache['banfilters'] ) and count( $this->ipsclass->cache['banfilters'] ) ) { foreach ($this->ipsclass->cache['banfilters'] as $ip) { $ip = str_replace( '\*', '.*', preg_quote($ip, "/") ); if ( preg_match( "/^$ip$/", $this->ipsclass->ip_address ) ) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'you_are_banned', 'INIT' => 1 ) ); } } } if ( $message != "" ) { $message = $this->ipsclass->lang[ $message ]; $message = str_replace( "<#NAME#>", "{$this->ipsclass->input['UserName']}", $message ); $this->output .= $this->ipsclass->compiled_templates['skin_login']->errors($message); } //----------------------------------------- // Using an alternate log in form? //----------------------------------------- if ( $this->han_login->login_method['login_login_url'] ) { //----------------------------------------- // Simply redirect to the form now //----------------------------------------- $this->ipsclass->boink_it( $this->han_login->login_method['login_login_url'] ); exit(); } //----------------------------------------- // Extra HTML? //----------------------------------------- if ( $this->han_login->login_method['login_alt_login_html'] ) { if ( ! $this->han_login->login_method['login_replace_form'] ) { $extra_form = $this->han_login->login_method['login_alt_login_html']; $show_form = 1; } else { $this->output .= $this->han_login->login_method['login_alt_login_html']; $show_form = 0; } } //----------------------------------------- // Continue... //----------------------------------------- if ( $show_form ) { if ( !$this->ipsclass->my_getenv('HTTP_REFERER') OR !preg_match( "/" . preg_quote( $this->ipsclass->vars['board_url'], '/' ) . "/i", $this->ipsclass->my_getenv('HTTP_REFERER') ) ) { // HTTP_REFERER isn't set when force_login is enabled // This method will piece together the base url, and the querystring arguments // This is not anymore secure/insecure than IPB, as IPB will have to process // those arguments whether force_login is enabled or not. $argv = (is_array($this->ipsclass->my_getenv('argv')) && count($this->ipsclass->my_getenv('argv')) > 0) ? $this->ipsclass->my_getenv('argv') : array(); $http_referrer = $this->ipsclass->base_url.@implode( "&", $argv ); } else { $http_referrer = $this->ipsclass->my_getenv('HTTP_REFERER'); } $this->output .= $this->ipsclass->compiled_templates['skin_login']->ShowForm( $this->ipsclass->lang['please_log_in'], htmlentities(urldecode($http_referrer)), $extra_form ); } $this->nav = array( $this->ipsclass->lang['log_in'] ); $this->page_title = $this->ipsclass->lang['log_in']; $this->ipsclass->print->add_output("$this->output"); $this->ipsclass->print->do_output( array( 'TITLE' => $this->page_title, 'JS' => 0, 'NAV' => $this->nav, 'OVERRIDE' => $this->ipsclass->vars['board_offline'] ) ); exit(); } /*-------------------------------------------------------------------------*/ // DO LOG IN /*-------------------------------------------------------------------------*/ function do_log_in() { //----------------------------------------- // INIT //----------------------------------------- $url = ""; $member = array(); //----------------------------------------- // Load handler... //----------------------------------------- require_once( ROOT_PATH.'sources/handlers/han_login.php' ); $this->han_login = new han_login(); $this->han_login->ipsclass =& $this->ipsclass; $this->han_login->init(); //----------------------------------------- // Make sure the username and password were entered //----------------------------------------- if ( $_POST['UserName'] == "" ) { if( $this->ipsclass->vars['ipbli_usertype'] == 'username' ) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_username' ) ); } else { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_email_login' ) ); } } if ( $_POST['PassWord'] == "" ) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'pass_blank' ) ); } //----------------------------------------- // Check for input length //----------------------------------------- if ( $this->ipsclass->vars['ipbli_usertype'] == 'username' ) { if ( $this->ipsclass->txt_mb_strlen( $_POST['UserName'] ) > 32 ) { $this->ipsclass->Error( array( LEVEL => 1, MSG => 'username_long' ) ); } $username = strtolower(str_replace( '|', '|', $this->ipsclass->input['UserName']) ); } else { $username = strtolower( trim( $this->ipsclass->input['UserName'] ) ); } if ( $this->ipsclass->txt_mb_strlen( $_POST['PassWord'] ) > 32) { $this->ipsclass->Error( array( LEVEL => 1, MSG => 'pass_too_long' ) ); } $password = md5( $this->ipsclass->input['PassWord'] ); //----------------------------------------- // Check auth //----------------------------------------- $this->han_login->login_authenticate( $username, $this->ipsclass->input['PassWord'] ); //----------------------------------------- // Check return code... //----------------------------------------- $member = $this->han_login->member; if ( ( ! $member['id'] ) or ( $this->han_login->return_code == 'NO_USER' ) ) { $this->log_in_form( 'wrong_name' ); } if ( $this->han_login->return_code != 'SUCCESS' ) { if ( $this->han_login->return_code == 'ACCOUNT_LOCKED' ) { $extra = ""; if( $this->ipsclass->vars['ipb_bruteforce_unlock'] ) { if( $this->han_login->account_unlock ) { $time = time() - $this->han_login->account_unlock; $time = $this->ipsclass->vars['ipb_bruteforce_period'] - ceil( $time / 60 ); $extra = sprintf( $this->ipsclass->lang['bruteforce_account_unlock'], $time ); } } $this->ipsclass->Error( array( 'LEVEL' => 5, 'MSG' => 'bruteforce_account_lock', 'EXTRA' => $extra ) ); } else { $this->log_in_form( 'wrong_auth' ); } } //----------------------------------------- // Is this a partial member? // Not completed their sign in? //----------------------------------------- if ( $member['members_created_remote'] ) { $pmember = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'members_partial', 'where' => "partial_member_id={$member['id']}" ) ); if ( $pmember['partial_member_id'] ) { $this->ipsclass->print->redirect_screen( $this->ipsclass->lang['partial_login'], 'act=reg&CODE=complete_login&mid='.$member['id'].'&key='.$pmember['partial_date'] ); exit(); } } //----------------------------------------- // Generate a new log in key //----------------------------------------- $_ok = 1; $_time = ( $this->ipsclass->vars['login_key_expire'] ) ? ( time() + ( intval($this->ipsclass->vars['login_key_expire']) * 86400 ) ) : 0; $_sticky = $_time ? 0 : 1; $_days = $_time ? $this->ipsclass->vars['login_key_expire'] : 365; if ( $this->ipsclass->vars['login_change_key'] OR ! $member['member_login_key'] OR ( $this->ipsclass->vars['login_key_expire'] AND ( time() > $member['member_login_key_expire'] ) ) ) { $member['member_login_key'] = $this->ipsclass->converge->generate_auto_log_in_key(); $this->ipsclass->DB->do_update( 'members', array( 'member_login_key' => $member['member_login_key'], 'member_login_key_expire' => $_time ), 'id='.$member['id'] ); } //----------------------------------------- // Strong hold cookie? //----------------------------------------- $this->ipsclass->stronghold_set_cookie( $member['id'], $member['member_login_key'], 1 ); //----------------------------------------- // Cookie me softly? //----------------------------------------- if ( $this->ipsclass->input['CookieDate'] ) { $this->ipsclass->my_setcookie("member_id" , $member['id'] , 1); $this->ipsclass->my_setcookie("pass_hash" , $member['member_login_key'], $_sticky, $_days ); } //----------------------------------------- // Remove any COPPA cookies previously set //----------------------------------------- $this->ipsclass->my_setcookie("coppa", '0', 0); //----------------------------------------- // Update profile if IP addr missing //----------------------------------------- if ( $member['ip_address'] == "" OR $member['ip_address'] == '127.0.0.1' ) { $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => "ip_address='{$this->ipsclass->ip_address}'", 'where' => "id={$member['id']}" ) ); $this->ipsclass->DB->simple_exec(); } //----------------------------------------- // Create / Update session //----------------------------------------- $poss_session_id = ""; if ( $cookie_id = $this->ipsclass->my_getcookie('session_id') ) { $poss_session_id = $this->ipsclass->my_getcookie('session_id'); } else if ( $this->ipsclass->input['s'] ) { $poss_session_id = $this->ipsclass->input['s']; } //----------------------------------------- // Clean... //----------------------------------------- $poss_session_id = preg_replace("/([^a-zA-Z0-9])/", "", $poss_session_id); if ( $poss_session_id ) { $session_id = $poss_session_id; if( $this->ipsclass->vars['match_ipaddress'] ) { //----------------------------------------- // Delete any old sessions with this users IP // addy that doesn't match our session ID. //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'delete' => 'sessions', 'where' => "ip_address='".$this->ipsclass->ip_address."' AND id <> '$session_id'" ) ); $this->ipsclass->DB->simple_shutdown_exec(); } if( $this->ipsclass->vars['disable_anonymous'] ) { $privacy = 0; } else { $privacy = ( isset($this->ipsclass->input['Privacy']) AND $this->ipsclass->input['Privacy']) ? 1 : 0; } $this->ipsclass->DB->do_shutdown_update( 'sessions', array ( 'member_name' => $member['members_display_name'], 'member_id' => $member['id'], 'running_time' => time(), 'member_group' => $member['mgroup'], 'login_type' => $privacy ), "id='".$session_id."'" ); } else { $session_id = md5( uniqid(microtime()) ); if( $this->ipsclass->vars['disable_anonymous'] ) { $privacy = 0; } else { $privacy = $this->ipsclass->input['Privacy'] ? 1 : 0; } if( $this->ipsclass->vars['match_ipaddress'] ) { //----------------------------------------- // Delete any old sessions with this users IP addy. //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'delete' => 'sessions', 'where' => "ip_address='".$this->ipsclass->ip_address."'" ) ); $this->ipsclass->DB->simple_shutdown_exec(); } $this->ipsclass->DB->do_shutdown_insert( 'sessions', array ( 'id' => $session_id, 'member_name' => $member['members_display_name'], 'member_id' => $member['id'], 'running_time' => time(), 'member_group' => $member['mgroup'], 'ip_address' => $this->ipsclass->ip_address, 'browser' => substr($this->ipsclass->clean_value($this->ipsclass->my_getenv('HTTP_USER_AGENT')), 0, 50), 'login_type' => $privacy ) ); } $this->ipsclass->member = $member; $this->ipsclass->session_id = $session_id; if (isset($this->ipsclass->input['referer']) AND $this->ipsclass->input['referer'] && ($this->ipsclass->input['act'] != 'Reg')) { $url = str_replace( '&', '&', $this->ipsclass->input['referer'] ); $url = str_replace( "{$this->ipsclass->vars['board_url']}/index.{$this->ipsclass->vars['php_ext']}", "", $url ); $url = preg_replace( "!^\?!" , "" , $url ); $url = preg_replace( "!s=(\w){32}!", "" , $url ); $url = preg_replace( "!act=(login|reg|lostpass)!i", "", $url ); } //----------------------------------------- // Set our privacy status //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => "login_anonymous='".intval($privacy)."&1', failed_logins='', failed_login_count=0", 'where' => "id={$member['id']}" ) ); $this->ipsclass->DB->simple_shutdown_exec(); //----------------------------------------- // Clear out any passy change stuff //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'delete' => 'validating', 'where' => "member_id={$this->ipsclass->member['id']} AND lost_pass=1" ) ); $this->ipsclass->DB->simple_shutdown_exec(); //----------------------------------------- // Redirect them to either the board // index, or where they came from //----------------------------------------- $this->ipsclass->my_setcookie("session_id", $this->ipsclass->session_id, -1); $this->logged_in = 1; if ( USE_MODULES == 1 ) { $this->modules->register_class($this); $this->modules->on_login($member); } if ( isset($this->ipsclass->input['return']) AND $this->ipsclass->input['return'] != "" ) { $return = urldecode($this->ipsclass->input['return']); if ( preg_match( "#^http://#", $return ) ) { $this->ipsclass->boink_it($return); } } //----------------------------------------- // Check for dupemail //----------------------------------------- $member_extra = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'bio', 'from' => 'member_extra', 'where' => 'id='.$member['id'] ) ); if ( $member_extra['bio'] == 'dupemail' ) { $this->ipsclass->print->redirect_screen( "{$this->ipsclass->lang['thanks_for_login']} {$this->ipsclass->member['members_display_name']}", 'act=usercp&CODE=00' ); } else { $this->ipsclass->print->redirect_screen( "{$this->ipsclass->lang['thanks_for_login']} {$this->ipsclass->member['members_display_name']}", $url ); } } /*-------------------------------------------------------------------------*/ // DO LOG OUT /*-------------------------------------------------------------------------*/ function do_log_out( $return=1 ) { //----------------------------------------- // INIT //----------------------------------------- if ( $return ) { $key = $this->ipsclass->input['k']; # Check for funny business if ( $key != $this->ipsclass->md5_check ) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission' ) ); } } //----------------------------------------- // Set some cookies //----------------------------------------- $this->ipsclass->my_setcookie( "member_id" , "0" ); $this->ipsclass->my_setcookie( "pass_hash" , "0" ); $this->ipsclass->my_setcookie( "anonlogin" , "-1" ); if ( is_array($_COOKIE) ) { foreach( $_COOKIE as $cookie => $value ) { if ( preg_match( "/^(".$this->ipsclass->vars['cookie_id']."ipbforumpass_.*$)/i", $cookie, $match) ) { $this->ipsclass->my_setcookie( str_replace( $this->ipsclass->vars['cookie_id'], "", $match[0] ) , '-', -1 ); } } } //----------------------------------------- // Remote log out? //----------------------------------------- require_once( ROOT_PATH.'sources/handlers/han_login.php' ); $this->han_login = new han_login(); $this->han_login->ipsclass =& $this->ipsclass; $this->han_login->init(); //----------------------------------------- // Using an alternate log in form? //----------------------------------------- if ( $this->han_login->login_method['login_logout_url'] ) { //----------------------------------------- // Simply redirect to the form now //----------------------------------------- $this->ipsclass->boink_it( $this->han_login->login_method['login_logout_url'] ); exit(); } //----------------------------------------- // Do it.. //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'update' => 'sessions', 'set' => "member_name='',member_id='0',login_type='0',member_group={$this->ipsclass->vars['guest_group']}", 'where' => "id='". $this->ipsclass->sess->session_id ."'" ) ); $this->ipsclass->DB->simple_shutdown_exec(); list( $privacy, $loggedin ) = explode( '&', $this->ipsclass->member['login_anonymous'] ); $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => "login_anonymous='{$privacy}&0', last_visit=".time().", last_activity=".time(), 'where' => "id=".$this->ipsclass->member['id'] ) ); $this->ipsclass->DB->simple_shutdown_exec(); # Horrid hack: IPB 3.0: Separate out log out functions into class / function if ( $return ) { //----------------------------------------- // Redirect... //----------------------------------------- $url = ""; if ( isset($this->ipsclass->input['return']) AND $this->ipsclass->input['return'] != "" ) { $return = urldecode($this->ipsclass->input['return']); if ( preg_match( "#^http://#", $return ) ) { $this->ipsclass->boink_it($return); } } $this->ipsclass->print->redirect_screen( $this->ipsclass->lang['thanks_for_logout'], "" ); } else { return TRUE; } } } ?>