================================================================================
			INSTALLATION: PHP BOTS MOD (fr phpBB 2.0.11)
================================================================================

Translation Copyright: (c) 2005 by "tomtom" for http://www.deutsche-phpbb-mods.de.vu/

Dieser MOD wurde von Adam Marcus geschrieben und ist ein Versuch, nachzuvollziehen,
was hoffentlich in PHP2.2 kommen wird. Nach der Installation wirst du im Admin
Bereich auf der linken Seite einen Eintrag "Bots verwalten" vorfinden.

Updatenaleitung:

1) Kopiere alle Datien aus dem Zip-Archiv (ausser dieser install.txt und der
   update.txt) in das Root-Verzeichnis deines phpBBs. Solltest du gefragt werden, 
   ob du die Dateien berschreiben willst, drcke "JA".

   WARNUNG: Einige BOT-Daten knnten bei der Installation verloren gehen, daher solltest
   du vorher auf jeden Fall Sicherungskopien anlegen!

2) Rufe die "bot_install.php"-Datei in deinem Webbrowser auf:
   z.B.: www.yourdomain.com/yourphpinstall/bot_install.php

3) Aus Sicherheitsgrnden lsche die "bot_install.php"-Datei von deinem Webspace.

4) fhre die u.g. nderungen an deinen phpBB Dateien durch. (vorher
   Backups erstellen!)

5) Der MOD sollte nun voll einsatzfhig sein!

Hinweis: Es ist sinnvoll, alle Bot-Daten der anstehenden Bots zu lschen, um die
Installation fertigzustellen.

===============================================================================

#-----[ OPEN  ]------------------------------------------------------
includes/sessions.php

#-----[ FIND ]-------------------------------------------------------
global $SID;

if ( !empty($SID) && !preg_match('#sid=#', $url) && !defined('IS_ROBOT') )

#-----[ REPLACE WITH ]-----------------------------------------------
global $SID;

if ( !empty($SID) && !preg_match('#sid=#', $url) && !IS_ROBOT )

#-----[ FIND ]-------------------------------------------------------
	// Create or update the session

#-----[ INSERT BEFORE ]----------------------------------------------
	$robot = ( ( defined('IS_ROBOT') ) ? IS_ROBOT : 0 );

#-----[ INLINE FIND ]------------------------------------------------
session_page = $page_id, session_logged_in = $login

#-----[ INLINE AFTER, ADD ]------------------------------------------
, is_robot = '$robot'

#-----[ INLINE FIND ]------------------------------------------------
session_page, session_logged_in

#-----[ INLINE AFTER, ADD ]------------------------------------------
, is_robot

#-----[ INLINE FIND ]------------------------------------------------
'$user_ip', $page_id, $login

#-----[ INLINE AFTER, ADD ]------------------------------------------
, '$robot'

#-----[ OPEN  ]------------------------------------------------------
viewonline.php

#-----[ INLINE FIND ]------------------------------------------------
s.session_page, s.session_ip

#-----[ INLINE AFTER, ADD ]------------------------------------------
, s.is_robot

#-----[ FIND ]-------------------------------------------------------
			$username = $lang['Guest'];

#-----[ REPLACE WITH ]-----------------------------------------------
			if($row['is_robot'])
			{
				$username = $row['is_robot'] . ' ( Bots )';
			} else {
				$username = $lang['Guest'];
			}

#-----[ OPEN  ]------------------------------------------------------
includes/page_header.php

#-----[ INLINE FIND ]------------------------------------------------
s.session_logged_in, s.session_ip

#-----[ INLINE AFTER, ADD ]------------------------------------------
, s.is_robot

#-----[ FIND ]-------------------------------------------------------
				$guests_online++;

#-----[ AFTER, ADD ]-----------------------------------------------
				if( $row['is_robot'] )
				{
					$online_userlist = $row['is_robot'] . (($online_userlist!='') ? ', ' : '') . $online_userlist;
				}

#-----[ OPEN  ]------------------------------------------------------
common.php

#-----[ FIND ]-------------------------------------------------------
if ( is_robot() ) define('IS_ROBOT', true);

#-----[ REPLACE WITH ]----------------------------------------------
define('IS_ROBOT', is_robot() );

#-----[ OPEN  ]------------------------------------------------------
includes/functions.php

#-----[ FIND  ]------------------------------------------------------
	global $board_config, $theme, $images;

#-----[ REPLACE WITH  ]----------------------------------------------
	global $board_config, $theme, $images, $db, $table_prefix;

#-----[ FIND  ]------------------------------------------------------
	$theme = setup_style($board_config['default_style']);

#-----[ REPLACE WITH  ]----------------------------------------------
	if (IS_ROBOT)
	{
		$sql = "SELECT bot_style FROM " . $table_prefix . "bots WHERE bot_name='" . IS_ROBOT . "'";
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$theme = setup_style($row['bot_style']);
	} else {
		$theme = setup_style($board_config['default_style']);
	}

#-----[ FIND ]-------------------------------------------------------
//
// Part of bot MOD: This function checks whether the user agent or ip is
// listed as a bot and returns true otherwise false.
//
function is_robot()
{
...
}

#-----[ REPLACE WITH ]------------------------------------------

//
// Part of bot MOD: This function checks whether the user agent or ip is
// listed as a bot and returns true otherwise false.
//
function is_robot()
{
	global $db, $HTTP_SERVER_VARS, $table_prefix;

	// define bots table - for the users who are to lazy to edit constants.php hehehe!
	define('BOTS_TABLE', $table_prefix . "bots");

	// get required user data
	$user_ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
	$user_agent = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];

	// get bot table data
	$sql = "SELECT bot_agent, bot_ip, bot_id, bot_visits, last_visit, bot_pages, bot_name
	FROM " . BOTS_TABLE;

	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain bot data.', '', __LINE__, __FILE__, $sql);
	}

	// loop through bots table
	while ($row = $db->sql_fetchrow($result))
	{
		// clear vars
		$agent_match = 0;
		$ip_match = 0;

		// check for user agent match
		foreach (explode('|', $row['bot_agent']) as $bot_agent)
		{
			if ($row['bot_agent'] && $bot_agent != '' && preg_match('#' . preg_quote($bot_agent, '#') . '#i', $user_agent)) $agent_match = 1;
		}

		// check for ip match
		foreach (explode('|', $row['bot_ip']) as $bot_ip)
		{
			if ($row['bot_ip'] && $bot_ip != '' && strpos($user_ip, $bot_ip) === 0)
			{
				$ip_match = 1;
				break;
			}
		}

		// if both ip and agent matched update table and return true
		if ($agent_match == 1 && $ip_match == 1)
		{
			// get time - seconds from epoch
			$today = time();

			$last_visits = explode('|', $row['last_visit']);

			// if half an hour has passed since last visit
			if (($today - (($last_visits[0] == '') ? 0 : $last_visits[0])) > 2700)
			{
				for ($i = ((4 > sizeof($last_visits)) ? sizeof($last_visits) : 4); $i >= 0; $i--)
				{
					if ($last_visits[$i-1] != '') $last_visits[$i] = $last_visits[$i-1];
				}

				// increment the new visit counter
				$row['bot_visits']++;

				// clear prior indexed pages
				$row['bot_pages'] = 1;
			} else {
				// add to indexed pages
				$row['bot_pages']++;
			}

			$last_visits[0] = $today;

			// compress it all together
			$last_visit = implode("|", $last_visits);

			// update table
			$sql = "UPDATE " . BOTS_TABLE . "
			SET last_visit='$last_visit', bot_visits='" . $row['bot_visits'] . "', bot_pages='" . $row['bot_pages'] . "'
			WHERE bot_id = " . $row['bot_id'];

			if ( !($result2 = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Couldn\'t update data in bots table.', '', __LINE__, __FILE__, $sql);
			}

			return $row['bot_name'];

		}
		else
		{
			if ($agent_match == 1 || $ip_match == 1)

			{

				// get data from table
				$sql = "SELECT pending_" . ((!$agent_match) ? 'agent' : 'ip') . "
				FROM " . BOTS_TABLE . "
				WHERE bot_id = " . $row['bot_id'];

				if ( !($result2 = $db->sql_query($sql)) )
				{
					message_die(GENERAL_ERROR, 'Could not obtain bot data.', '', __LINE__, __FILE__, $sql);
				}

				$row2 = $db->sql_fetchrow($result2);

				// add ip/agent to the list
				$pending_array = (( $row2['pending_' . ((!$agent_match) ? 'agent' : 'ip')] ) ? explode('|', $row2['pending_' . ((!$agent_match) ? 'agent' :  'ip')]) : array());

				$found = 0;

				if ( sizeof($pending_array) )
				{
					for ($loop = 0; $loop < count($pending_array); $loop+=2)
					{
						if ($pending_array[$loop] == ((!$agent_match) ? $user_agent : $user_ip)) $found = 1;
					}
				}

				if ($found == 0)
				{
					$pending_array[] = ((!$agent_match) ? str_replace("|", "&#124;", $user_agent) : $user_ip);
					$pending_array[] = ((!$agent_match) ? $user_ip : str_replace("|", "&#124;", $user_agent));
				}
				$pending = implode("|", $pending_array);

				// update table
				$sql = "UPDATE " . BOTS_TABLE . "
				SET pending_" . ((!$agent_match) ? 'agent' : 'ip') . "='$pending'
				WHERE bot_id = " . $row['bot_id'];

				if ( !($result2 = $db->sql_query($sql)) )
				{
					message_die(GENERAL_ERROR, 'Couldn\'t update data in bots table.', '', __LINE__, __FILE__, $sql);
				}
			}
		}

	}

	return 0;
}

#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM