online.php

来自「sabreipb 2.1.6 utf-8中文版本!」· PHP 代码 · 共 522 行

PHP
522
字号
<?php/*+--------------------------------------------------------------------------|   Invision Power Board v2.1.5|   =============================================|   by Matthew Mecham|   (c) 2001 - 2005 Invision Power Services, Inc.|   |   =============================================|   Web: |   Time: Wed, 01 Mar 2006 19:11:27 GMT|   Release: |   Licence Info: +---------------------------------------------------------------------------|   > $Date: 2005-10-10 14:08:54 +0100 (Mon, 10 Oct 2005) $|   > $Revision: 23 $|   > $Author: matt $+---------------------------------------------------------------------------||   > Show online users|   > Module written by Matt Mecham|   > Date started: 12th March 2002||	> Module Version Number: 1.0.0|   > DBA Checked: Thu 20 May 2004|   > Quality Checked: Wed 15 Sept. 2004+--------------------------------------------------------------------------*/if ( ! defined( 'IN_IPB' ) ){	print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";	exit();}class online{    var $output     = "";    var $page_title = "";    var $nav        = array();    var $html       = "";    var $first      = 0;    var $perpage    = 25;        var $forums     = array();    var $cats       = array();    var $sessions   = array();    var $where      = array();        var $seen_name  = array();        /*-------------------------------------------------------------------------*/	// AUTO RUN	/*-------------------------------------------------------------------------*/    function auto_run()    {		//-----------------------------------------    	// Are we allowed to see the online list?    	//-----------------------------------------    	    	$this->ipsclass->input['st'] = intval($this->ipsclass->input['st']);    	    	if ( $this->ipsclass->vars['allow_online_list'] != 1 )    	{    		$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );    	}    	    	//-----------------------------------------    	// Require the HTML and language modules    	//-----------------------------------------    			$this->ipsclass->load_language('lang_online');    	$this->ipsclass->load_template('skin_online');    	    	$this->base_url        = $this->ipsclass->base_url;    	    	//-----------------------------------------    	// Build up our language hash    	//-----------------------------------------    	    	foreach ($this->ipsclass->lang as $k => $v)    	{    		if ( preg_match( "/^WHERE_(\w+)$/", $k, $match ) )    		{    			$this->where[ $match[1] ] = $this->ipsclass->lang[$k];    		}    	}    	    	unset($match);    	    	//-----------------------------------------    	// What to do?    	//-----------------------------------------    	    	switch($this->ipsclass->input['CODE'])    	{    		case 'listall':    			$this->list_all();    			break;    		default:    			$this->list_all();    			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 ) ); 	} 	 		/*-------------------------------------------------------------------------*/	// list_all	// ------------------	// List all online users	/*-------------------------------------------------------------------------*/		function list_all()	{		//-----------------------------------------		// INIT		//-----------------------------------------				$this->first      = intval($this->ipsclass->input['st']);		$show_mem_html    = "";		$sort_order_html  = "";		$sort_key_html    = "";				$final            = array();		$tid_array        = array();		$topics           = array();		$modules          = array();		$final_modules    = array();				$show_mem         = array( 'reg', 'guest', 'all' );		$sort_order       = array( 'desc', 'asc' );		$sort_key         = array( 'click', 'name' );				$show_mem_value   = $this->ipsclass->input['show_mem']   ? $this->ipsclass->input['show_mem']   : 'all';		$sort_order_value = $this->ipsclass->input['sort_order'] ? $this->ipsclass->input['sort_order'] : 'desc';		$sort_key_value   = $this->ipsclass->input['sort_key']   ? $this->ipsclass->input['sort_key']   : 'click';				//-----------------------------------------		// Build lists		//-----------------------------------------				$oo = "<option ";		$oc = "</option>\n";				foreach( $show_mem as $k )		{			$s = "";						if ( $show_mem_value == $k )			{				$s = ' selected="selected" ';			}						$show_mem_html .= $oo.'value="'.$k.'"'.$s.'>'.$this->ipsclass->lang['s_show_mem_'.$k].$oc;		}				foreach( $sort_order as $k )		{			$s = "";						if ( $sort_order_value == $k )			{				$s = ' selected="selected" ';			}						$sort_order_html .= $oo.'value="'.$k.'"'.$s.'>'.$this->ipsclass->lang['s_sort_order_'.$k].$oc;		}				foreach( $sort_key as $k )		{			$s = "";						if ( $sort_key_value == $k )			{				$s = ' selected="selected" ';			}						$sort_key_html .= $oo.'value="'.$k.'"'.$s.'>'.$this->ipsclass->lang['s_sort_key_'.$k].$oc;		}				if ($this->ipsclass->vars['au_cutoff'] == "")		{			$this->ipsclass->vars['au_cutoff'] = 15;		}					$cut_off  = $this->ipsclass->vars['au_cutoff'] * 60;		$t_time   = time() - $cut_off;				$db_order = $sort_order_value == 'asc' ? 'asc' : 'desc';		$db_key   = $sort_key_value   == 'click' ? 'running_time' : 'member_name';				switch ($show_mem_value)		{			case 'reg':				$db_mem = " AND s.member_id != 0 AND s.member_group <> {$this->ipsclass->vars['guest_group']}";				break;			case 'guest':				$db_mem = " AND s.member_group = {$this->ipsclass->vars['guest_group']} ";				break;			default:				$db_mem = "";				break;		}				$max   = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'COUNT(*) as total_sessions', 'from' => 'sessions s', 'where' => "running_time > $t_time".$db_mem ) );				$links = $this->ipsclass->build_pagelinks(  array( 'TOTAL_POSS'  => $max['total_sessions'],														   'PER_PAGE'    => 25,														   'CUR_ST_VAL'  => $this->first,														   'L_SINGLE'     => "",														   'L_MULTI'      => $this->ipsclass->lang['pages'],														   'BASE_URL'     => $this->base_url."act=Online&amp;CODE=listall&amp;sort_key=$sort_key_value&amp;sort_order=$sort_order_value&amp;show_mem=$show_mem_value"														 )												  );									   		$this->output = $this->ipsclass->compiled_templates['skin_online']->Page_header($links);				//-----------------------------------------		// Grab all the current sessions.		//-----------------------------------------				$this->ipsclass->DB->simple_construct( array( 'select' => '*',													  'from'   => 'sessions s',													  'where'  => "s.running_time > $t_time $db_mem",													  'order'  => "$db_key $db_order",													  'limit'  => array( $this->first, 25 )											)       );									$this->ipsclass->DB->simple_exec();				while( $r = $this->ipsclass->DB->fetch_row() )		{			$r['prefix'] = $this->ipsclass->cache['group_cache'][ $r['member_group'] ]['prefix'];			$r['suffix'] = $this->ipsclass->cache['group_cache'][ $r['member_group'] ]['suffix'];						$final[ $r['id'] ] = $r;						//-----------------------------------------			// Module?			//-----------------------------------------						if ( strstr( $r['location'], 'mod:' ) )			{				$modules[ str_replace( 'mod:', '', $r['location'] ) ] [ $r['id'] ] = $r;			}						//-----------------------------------------			// IN topic?			//-----------------------------------------						if ( $r['location_1_id'] AND $r['location_1_type'] == 'topic' )			{				$tid_array[ $r['location_1_id'] ] = $r['location_1_id'];			}		}				//-----------------------------------------		// Post process modules		//-----------------------------------------				if ( count( $modules ) )		{			foreach( $modules as $module_name => $module_array )			{				$filename = ROOT_PATH.'sources/components_location/'.$this->ipsclass->txt_alphanumerical_clean( $module_name ).'.php';								if ( file_exists( $filename ) )				{					require_once( $filename );					$toload           = 'components_location_'.$module_name;					$loader           = new $toload;					$loader->ipsclass =& $this->ipsclass;										$tmp = $loader->parse_online_entries( $module_array );										if ( is_array( $tmp ) and count( $tmp ) )					{						foreach( $tmp as $ssid => $arr )						{							$final[ $ssid ] = $arr;						}					}				}			}		}				//-----------------------------------------		// Do topics		//-----------------------------------------				if ( count($tid_array) > 0 )		{			$tid_string = implode( ",", $tid_array );						$this->ipsclass->DB->simple_construct( array( 'select' => 'tid, title', 'from' => 'topics', 'where' => "tid IN ($tid_string)" ) );			$this->ipsclass->DB->simple_exec();					while ( $t = $this->ipsclass->DB->fetch_row() )			{				$topics[ $t['tid'] ] = $t['title'];			}		}				//-----------------------------------------		// LOOPY		//-----------------------------------------				foreach( $final as $idx => $sess )		{			//-----------------------------------------			// Is this a member, and have we seen them before?			// Proxy servers, etc can confuse the session handler,			// creating duplicate session IDs for the same user when			// their IP address changes.			//-----------------------------------------						$inv = '';						if ( strstr( $sess['id'], '_session' ) )			{				$sess['is_bot'] = 1;								if ( $this->ipsclass->vars['spider_anon'] )				{					if ( $this->ipsclass->member['mgroup'] == $this->ipsclass->vars['admin_group'] )					{						$inv = '*';					}					else					{						$sess['member_id']   = '';						$sess['member_name'] = '';						$sess['in_error']    = 1;					}				}			}			else if ($sess['login_type'] == 1)			{				if ( ($this->ipsclass->member['mgroup'] == $this->ipsclass->vars['admin_group']) and ($this->ipsclass->vars['disable_admin_anon'] != 1) )				{					$inv = '*';				}				else				{					$sess['member_id']   = '';					$sess['member_name'] = '';					$sess['in_error']    = 1;					$sess['prefix']      = "";					$sess['suffix']      = ""; 				}			}						//-----------------------------------------			// ICheck for dupes			//-----------------------------------------						if ( ! empty($sess['member_name']) )			{				if (isset($this->seen_name[ $sess['member_name'] ]) )				{					continue;				}				else				{					$this->seen_name[ $sess['member_name'] ] = 1;				}			}						//-----------------------------------------			// Figure out location			//-----------------------------------------						if ( $sess['in_error'] )			{				$line = " {$this->ipsclass->lang['board_index']}";			}			else if ( $sess['location'] OR $sess['_parsed'] )			{				$line = "";								//-----------------------------------------				// PARSED?				//-----------------------------------------								if ( $sess['_parsed'] )				{					$line = "<a href='{$sess['_url']}'>{$sess['_text']}</a>";				}								//-----------------------------------------				// NOT PARSED				//-----------------------------------------								else				{					list($act, $pid) = explode( ",", $sess['location'] );										$fid = ($sess['location_2_type'] == 'forum' AND $sess['location_2_id']) ? $sess['location_2_id'] : 0;					$tid = ($sess['location_1_type'] == 'topic' AND $sess['location_1_id']) ? $sess['location_1_id'] : 0;					$act = strtolower($act);										//-----------------------------------------					// Really in a forum?					//-----------------------------------------										if ( $act == 'sf' && ! $fid )					{						$act = '';					}										if ( $act == 'st' && ! $tid )					{						$act = '';					}										if ( $act == 'post' && ! $fid )					{						$act = '';					}										if ( isset($act) )					{						$line = isset($this->where[ $act ]) ? $this->where[ $act ] : $this->ipsclass->lang['board_index'];					}										if ( $fid != "" and ($act == 'sf' or $act == 'st' or $act == 'post'))					{						$deny = 1;												$deny = $this->ipsclass->forums->forums_quick_check_access( $fid );												if ($deny != 1)						{							if ( ($tid > 0) and ($act != 'post') )							{								$line .= " <a href='{$this->base_url}showtopic=$tid'>{$topics[$tid]}</a>";							}							else							{								$line .= " <a href='{$this->base_url}showforum=$fid'>{$this->ipsclass->forums->forum_by_id[ $fid ]['name']}</a>";							}						}						else						{							$line = " {$this->ipsclass->lang['board_index']}";						}					}				}			}			else			{				$line = " {$this->ipsclass->lang['board_index']}";			}						$sess['where_line'] = $line;						if ( ($this->ipsclass->member['mgroup'] == $this->ipsclass->vars['admin_group']) and ($this->ipsclass->vars['disable_online_ip'] != 1) )			{				$sess['ip_address'] = " ( ".$sess['ip_address']." )";			}			else			{				$sess['ip_address'] = "";			}						if ( ($sess['member_id']) )			{				$sess['member_name'] = "<a href='{$this->base_url}showuser={$sess['member_id']}'>{$sess['prefix']}{$sess['member_name']}{$sess['suffix']}</a>$inv {$sess['ip_address']}";			}						$sess['running_time'] = $this->ipsclass->get_date( $sess['running_time'], 'LONG' );						$this->output .= $this->do_html_row($sess);					}				$this->output .= $this->ipsclass->compiled_templates['skin_online']->Page_end($show_mem_html, $sort_order_html, $sort_key_html, $links);				$this->page_title = $this->ipsclass->lang['page_title'];		$this->nav        = array( $this->ipsclass->lang['page_title']);	}		/*-------------------------------------------------------------------------*/	// Process row	/*-------------------------------------------------------------------------*/		function do_html_row($sess)	{		if ($sess['member_name'] and $sess['member_id'])		{			$sess['msg_icon'] = "<a href='{$this->base_url}act=Msg&amp;CODE=04&amp;MID={$sess['member_id']}'><{P_MSG}></a>";		}		else		{			if ( ! $sess['is_bot'] )			{				$sess['member_name']  = $sess['prefix'].$this->ipsclass->lang['guest'].$sess['suffix']." ".$sess['ip_address'];				$sess['msg_icon']     = '&nbsp;';			}			else			{				$sess['member_name']  .= ' '.$sess['ip_address'];			}		}				return $this->ipsclass->compiled_templates['skin_online']->show_row($sess);	}        }?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?