#native_company# #native_desc#
#native_cta#

Threaded message board with search, NO SQL

By Huw S
on February 14, 2005

Version: 1.0

Type: Full Script

Category: BBS/Discussion

License: GNU General Public License

Description: A threaded message board/guestbook with search functionality, which does NOT require sql.

In the download are 3 files
html.inc
view.php
modify.php
the will need to be split to its 3 parts

See it working or download it at
www.huenik.com

//html.inc
<?PHP

/*

This script / application is copyright to Huw (C) 2002
Huw from Huenik.com

READ  THE TERMS  OF THIS  AGREEMENT AND  ANY PROVIDED  SUPPLEMENTAL LICENSE
TERMS (COLLECTIVELY  "AGREEMENT") CAREFULLY  BEFORE  MODIFYING OR USING THE
SOFTWARE PACKAGE. BY OPENING THE SOFTWARE MEDIA  PACKAGE, YOU AGREE  TO THE
TERMS OF THIS AGREEMENT.  IF YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY,
INDICATE YOUR ACCEPTANCE OF THESE TERMS BY DOWNLOADING. IF YOU DO NOT AGREE
TO ALL OF THESE TERMS, PROMPTLY REMOVE THE UNUSED SOFTWARE FROM YOUR SYSTEM

1. After any modification to the code should it must be uploaded to the web
   site  from  which  it  originated if  possible.  Otherwise it should  be
   uploaded to phpbuilder.com => code library => BBS/Discussion => 427 With
   the version number ending with Alpha.

2. All modified versions must include the following  line to be  printed or
   echoed on every viewable page 'Copyright to Huw.Ukso.com v1.0'

*/

# retreive querry commands
global $admin,$ColourSet,$thread;
# retreive querry commands, if sent by form
if (($admin=="")&&(isset($FORM_ADMIN))) $admin = $FORM_ADMIN;
/*

user modifiable strings

*/
$AdminPassword = "password"; # webmasters password
$AdminUser = "username"; # webmasters username
$webmaster_email = "[email protected]"; # webmasters email address
$web_address = "yoursite.com"; # website url
$delimeter = "!!!"; # string to sepporate all parts in data files
$results_guest = 20; # value of results to display for guest
$results_pole = 20; # value of results to display for pole
# data files
$guest_dat = "guest.data.file.dat"; # file storing guest board threads
$pole_dat = "pole.data.file.dat"; # file storing questions
# php files
$modify_php = "modify.php"; # file with modification / add / reply / remove commands
$view_php = "view.php"; # file with view / search commands
/*

end of user modifiable strings

Data file organisation. Not all parts of the databases are used.

File	Guest			Pole			Log
										
0		$uidn			$uidn			$uidn
1		$person_name	$person_name	$HTTP_HOST
2		$email			$email			
3		$url			$url			$QUERY_STRING
4		$ip				$ip				$ip
5		$posted_on		$posted_on		$posted_on
6		$icq			$icq			$HTTP_REFERER
7		$message		$question		$HTTP_USER_AGENT
8		$subject						
9		$level							$PHP_SELF
10						$option1		
11		$locked			$option2		
12						$option3		
13						$ans1			
14						$ans2			
15						$ans3			
16										
17										
18										
19										

*/
# default result values
if (isset($app))
{
	if ($app == "guest")
		$results = $results_guest;
	else
		$results = $results_pole;
}
# clear refresh, untill needed
$refresh = "";
# get ip, used in many functions
$ip = ip_retrieve();
# as multiple commands have been combined so have the files
$search_php = $view_php;
$add_php = $modify_php;
$remove_php = $modify_php;
$reply_php = $modify_php;
# dont report errors unless terminal
error_reporting(0);
# copy right link
$copy_right = "Copyright to Huenik.com v1.0";
# make all pages expire, so no browser caching occures
header ("Expires: " . gmdate("r", time()));							// Current date
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");		// Current time
header ("Cache-Control: no-cache, must-revalidate");				// HTTP/1.1, no cache command
header ("Pragma: no-cache");										// HTTP/1.0, no cache command
# admin username and password check
$admin_string = "";
$admin_page_enum = "";
if ($admin == true)
{
	$admin = false;
	$admin_pas_true = false;
	if (($PHP_AUTH_USER == $AdminUser) && ($PHP_AUTH_PW == $AdminPassword))
	{
		$admin = true;
		$admin_string = '<input name="admin" id="input" type="hidden" value="true">';
		$admin_page_enum = "&admin=true";
	}
	else
	{
		header('WWW-Authenticate: Basic realm="Admin Log In Attempt"');
		header('HTTP/1.0 401 Unauthorized');
		echo "Please log on";
		exit;
	}
}
# view EOTs
$html1 = <<<EOT

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<Base target="_parent">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<meta http-equiv="Reply-to" content="http://www.huw.ukso.com">

EOT;

$html2 = <<<EOT

</HEAD>
<BODY>
	<b style="font-style: italic; text-align: center;">

EOT;

$html3 = <<<EOT

	</b>
	<hr width="75%">
	<a href="$view_php?app=guest$admin_page_enum">GUEST BOOK</a> - <a href="$view_php?app=pole$admin_page_enum">VISITOR POLE</a> - <a href="$view_php?app=guest&admin=true">ADMIN GUEST BOOK</a> - <a href="$view_php?app=pole&admin=true">ADMIN VISITOR POLE</a> - <a href="mailto:$webmaster_email">Webmaster&nbsp;Email</a>
	<hr width="75%">

EOT;

$html4 = <<<EOT

	<hr width="75%">

EOT;

$html5 = <<<EOT

	<hr width="75%">
	$copy_right

EOT;

$html6 = <<<EOT

</BODY>
</html>

EOT;

# find next available uidn
function next_uidn($file_contents)
{
	global $delimeter;
	# detect the next uidn value in the database
	$uidn = 0;
	for ($i = 1; $i < count($file_contents); $i++)
	{
		$exploded_line = explode($delimeter,$file_contents[$i]);
		if (($exploded_line[0]) >= $uidn)
			$uidn = ($exploded_line[0] + 1);
	}
	return ($uidn);
}
# find ip
function ip_retrieve()
{
	global $view_php;
	# define ip removed by to eq the ip address of the administrator
	$fp = fopen($view_php,"r+");
	$ippost = fread($fp,15);
	fclose($fp);
	$ip_removed_by = getenv("REMOTE_ADDR");
	return ($ip_removed_by);
}
# find line with uidn value
function line_no($uidn_no, $file_contents)
{
	global $delimeter;
	for ($i = 0; $i < count($file_contents); $i++)
	{
		$line_no = explode($delimeter,$file_contents[$i]);
		if ($line_no[0] == $uidn_no)
			return ($i);
	}
	return (false);
}
# find uidn with line value
function uidn_no($line_no, $file_contents)
{
	global $delimeter;
	$uidn_no = explode($delimeter,$file_contents[$line_no]);
	return ($uidn_no[0]);
}
# find the end of a thread for remove and search, returns uidn no
function thread_ending($from_uidn, $file_contents)
{
	global $delimeter;
	# get the line number for the specified uidn
	$backfrom = line_no($from_uidn, $file_contents);
	if ($backfrom != false)
	{
		$tmp_explode = explode($delimeter,$file_contents[$backfrom]);
		$return_line = $backfrom;
		$tmp_data = $tmp_explode[9];
		$i = $backfrom-1;
		$tmp_explode = explode($delimeter,$file_contents[$i]);
		while ($tmp_explode[9] > $tmp_data)
		{
			$return_line = $i;
			$i--;
			$tmp_explode = explode($delimeter,$file_contents[$i]);
		}
		$return_uidn = uidn_no($return_line,$file_contents);
		return ($return_uidn);
	}
	else
		return (false);
}
# find the start of a thread for search, returns uidn no
function thread_starting($from_uidn, $file_contents)
{
	global $delimeter;
	# get the line number for the specified uidn
	$i = line_no($from_uidn, $file_contents);
	if ($i != false)
	{
		$return_line = $i;
		$tmp_explode = explode($delimeter,$file_contents[$i]);
		if ($tmp_explode[9] == 1)
			$return_uidn = uidn_no($i,$file_contents);
		else
		{
			while ($tmp_explode[9] > 1)
			{
				$return_line = $i;
				$i++;
				$tmp_explode = explode($delimeter,$file_contents[$i]);
			}
			$return_uidn = uidn_no(($return_line+1),$file_contents);
		}
		return ($return_uidn);
	}
	else
		return (false);
}
# strip certain tags prior to data writes, so the view cannot be corrupted
function stripstrings ($in)
{
	global $delimeter;
	$in = strip_tags ($in, "<a><img><b><br><hr>");
	$in = str_replace($delimeter,"",$in);
	$in = str_replace("n","|'new_line|",$in);
	$in = str_replace("r","|'new_line|",$in);
	$in = str_replace("|'new_line|","<br>",$in);
	$in = str_replace("'","'",$in);
	$in = str_replace('"','"',$in);
	return ($in);
}

?>

//view.php
<?PHP

/*

This script / application is copyright to Huw (C) 2002
Huw from Huenik.com

READ  THE TERMS  OF THIS  AGREEMENT AND  ANY PROVIDED  SUPPLEMENTAL LICENSE
TERMS (COLLECTIVELY  "AGREEMENT") CAREFULLY  BEFORE  MODIFYING OR USING THE
SOFTWARE PACKAGE. BY OPENING THE SOFTWARE MEDIA  PACKAGE, YOU AGREE  TO THE
TERMS OF THIS AGREEMENT.  IF YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY,
INDICATE YOUR ACCEPTANCE OF THESE TERMS BY DOWNLOADING. IF YOU DO NOT AGREE
TO ALL OF THESE TERMS, PROMPTLY REMOVE THE UNUSED SOFTWARE FROM YOUR SYSTEM

1. After any modification to the code should it must be uploaded to the web
   site  from  which  it  originated if  possible.  Otherwise it should  be
   uploaded to phpbuilder.com => code library => BBS/Discussion => 427 With
   the version number ending with Alpha.

2. All modified versions must include the following  line to be  printed or
   echoed on every viewable page 'Copyright to Huw.Ukso.com v1.0'

*/

# retreive querry commands
global $app,$sort,$search,$data,$type,$page,$from,$ord;
if (($app=="")&&(isset($FORM_APP))) $app = $FORM_APP;
if (($sort=="")&&(isset($FORM_SORT))) $sort = $FORM_SORT;
if (($search=="")&&(isset($FORM_SEARCH))) $search = $FORM_SEARCH;
if (($data=="")&&(isset($FORM_DATA))) $data = $FORM_DATA;
if (($type=="")&&(isset($FORM_TYPE))) $type = $FORM_TYPE;
if (($page=="")&&(isset($FORM_PAGE))) $page = $FORM_PAGE;
if (($from=="")&&(isset($FORM_FROM))) $from = $FORM_FROM;
if (($ord=="")&&(isset($FORM_ORD))) $ord = $FORM_ORD;
if ($app != "")
	$query_string = "&app=" . $app;
if ($sort != "")
	$query_string .= "&sort=" . $sort;
if ($search != "")
	$query_string .= "&search=" . $search;
if ($data != "")
	$query_string .= "&data=" . $data;
if ($type != "")
	$query_string .= "&type=" . $type;
if ($page != "")
	$query_string .= "&page=" . $page;
if ($from != "")
	$query_string .= "&from=" . $from;
if ($ord != "")
	$query_string .= "&ord=" . $ord;
include("html.inc");
if ($page == "")
	$page = 1;
# setup data file
if ($app == "pole")
{
	$file_contents = file($pole_dat);
	$command_links = "<a href='" . $add_php . "?app=" . $app . "$admin_page_enum'>Add New Question</a>";
	$additional_search_forms = <<<EOT

						<option value="all" selected>All</option>
						<option value="1">Name</option>
						<option value="7">Question</option>
						<option value="10">Answer 1</option>
						<option value="11">Answer 2</option>
						<option value="12">Answer 3</option>

EOT;
	$outline_data = "Viewing the visitor pole, ask a question or answer another. To reorder the data click on the appropriate links.";
	# used for search form title
	$app_name = "the visitor pole";
	# set default sort function if undefined
	if ($sort == "")
		$sort = 13;
	# if ord undefined set to 1
	if ($ord == "")
		$ord = 1;
}
else
{
	$app = "guest";
	$file_contents = file($guest_dat);
	$command_links = "<a href='" . $add_php . "?app=" . $app . "$admin_page_enum$thread_page_enum'>Add New Thread</a>";
	$additional_search_forms = <<<EOT

						<option value="all" selected>All</option>
						<option value="1">Name</option>
						<option value="7">Message</option>
						<option value="8">Subject</option>

EOT;
	# used for search form title
	$app_name = "the guest book";
	if ($thread != "")
		$app_name = "the message board";
	$outline_data = "Viewing $app_name, add a message, get help or anything else you can think of.";
	if ($search != "")
		$outline_data .= "<br><br>Click on a post to view the rest of the searched thread.";
}
$title = "Viewing " . $app_name;
# if from is unset then set as last post
if ($from == "")
	for ($i = 0; $i < count($file_contents); $i++)
		$from_array[$i] = uidn_no((count($file_contents)-$i-1),$file_contents);
else
{
	# get lines of from and above for search => view thread
	$from_line_no = line_no($from,$file_contents);
	$to_uidn_no = thread_ending($from, $file_contents);
	$to_line_no = line_no($to_uidn_no,$file_contents);
	$j = 0;
	$i = $from_line_no;
	while ($i >= $to_line_no)
	{
		$from_array[$j] = uidn_no($i,$file_contents);
		$j++;
		$i--;
	}
	# create from command for page links in search => thread view
	$from_command = "&from=" . $from;
}
# define posts to be viewed if not pre defined else search
if ($search != "")
{
	$val_of_from = 0;
	$from_array = false;
	# check all lines in app
	for ($i = (count($file_contents)-1); $i > 0; $i--)
	{
		# clear for next line proccessing
		$data_to_search = "";
		# if data set then only search that part
		$exploded_search_data = explode($delimeter,$file_contents[$i]);
		if ( ($data != "") && ($data != "all") )
		{
			$data_to_search = " ".$exploded_search_data[$data]." ";
			$from_array[$val_of_from] = search($data_to_search,$search,$i,$file_contents,$type);
			if ($from_array[$val_of_from] != "")
				$val_of_from++;
		}
		else if ( ($data == "") || ($data == "all") )
		{
			if ($app == "guest")
				$data_to_search = " $exploded_search_data[1] $exploded_search_data[7] $exploded_search_data[8] ";
			else if ($app == "pole")
				$data_to_search = " $exploded_search_data[1] $exploded_search_data[7] $exploded_search_data[10] $exploded_search_data[11] $exploded_search_data[12] ";
			$from_array[$val_of_from] = search($data_to_search,$search,$i,$file_contents,$type);
			if ($from_array[$val_of_from] != "")
				$val_of_from++;
		}
	}
	$search_command = "&search=" . $search . "&data=" . $data . "&type=" . $type;
	$title = "Searching " . $app_name . " for : " . $search;
}
# search function
function search($data_to_search,$search,$i,$file_contents,$type)
{
	# get all search words
	$search = strtolower($search);
	$search = str_replace("-"," ",$search);
	$search = str_replace("+"," ",$search);
	$search = str_replace("  "," ",$search);
	$search = str_replace("   "," ",$search);
	$search = str_replace("    "," ",$search);
	$search = str_replace("     "," ",$search);
	$search_array = explode(" ",$search);
	$data_to_search = strtolower($data_to_search);
	if ($type == "or")
	{
		$found_check1 = false;
		for ($m = 0; $m < count($search_array); $m++)
		{
			$found_check = false;
			# find search within required data
			$found_check = explode($search_array[$m],$data_to_search);
			if ($found_check[1] != false)
				$found_check1 = true;
		}
		# if found record location, in uidn format
		if ($found_check1)
			$from = uidn_no($i,$file_contents);
		else
			$from = false;
	}
	else
	{
		$found_check1 = true;
		for ($m = 0; $m < count($search_array); $m++)
		{
			$found_check = false;
			# find search within required data
			$found_check = explode($search_array[$m],$data_to_search);
			if ($found_check[1] != true)
				$found_check1 = false;
		}
		# if found record location, in uidn format
		if ($found_check1)
			$from = uidn_no($i,$file_contents);
		else
			$from = false;
	}
	return($from);
}
# define search form
$search_form = <<<EOT

			<br><br>
			<form action="$view_php" name="search" onsubmit="return '$view_php'" method="post">
				<table cellspacing="0" cellpadding="0" border="0" align="center" class="main" width="100%">
					<tr>
						<td colspan="2">
							Search $app_name
						</td>
					</tr>
					<tr>
						<td colspan="2">
							<input type="text" name="search" size="22" id="input" class="input">
						</td>
					</tr>
					<!--
					<tr>
						<td valign="top">
							and :
						</td>
						<td>
							<input type="radio" name="type" value="and" checked class="input">
							</td>
					</tr>
					<tr>
						<td valign="top">
							or :
						</td>
						<td>
							<input type="radio" name="type" value="or" class="input">
						</td>
					</tr>
					-->
					<tr>
						<td colspan="2">
							<select name="data" class="input">
$additional_search_forms
							</select>
							<input type="Submit" name="submit" value="&nbsp;Go&nbsp;" class=button>
						</td>
					</tr>
					<tr>
						<td colspan="2">
							<input name="app" id="input" type="hidden" value="$app">
							$admin_string
							$thread_string
						</td>
					</tr>
				</table>
			</form>

EOT;
# sort the posts according to selected sort command. dont sort thread.search or not guest.not sort
if ( ($sort != 0) && ($app != "guest") )
{
	for ($i = 0; $i < count($from_array); $i++)
	{
		$explode = explode($delimeter, $from_array[$i]);
		$from_line_tmp = line_no($explode[0],$file_contents);
		if ($from_line_tmp != false)
		{
			$exploded_line = explode($delimeter,$file_contents[$from_line_tmp]);
			# 13 to 15 all do the same
			if ( ($app == "pole") && ( ($sort == 13) || ($sort == 14) || ($sort == 15) ) )
				$from_line_array[$i] = ($exploded_line[13] + $exploded_line[14] + $exploded_line[15]) . $delimeter . $from_array[$i] . $delimeter;
			else
				$from_line_array[$i] = $exploded_line[$sort] . $delimeter . $from_array[$i] . $delimeter;
			if ($explode[1] != "")
				$from_line_array[$i] .= $explode[1];
		}
		else
			$from_line_array[$i] = false;
	}
	sort($from_line_array);
	if ( ($ord == "") || ($ord == 0) )
	{
		for ($i = 0; $i < count($from_line_array); $i++)
		{
			$exploded_line = explode($delimeter,$from_line_array[$i]);
			$from_array[$i] = $exploded_line[1];
			if ($exploded_line[2] != "")
				$from_array[$i] .= $delimeter . $exploded_line;
		}
	}
	else
	{
		for ($i = 0; $i < count($from_line_array); $i++)
		{
			$array_position = (count($from_line_array)-$i-1);
			$exploded_line = explode($delimeter,$from_line_array[$array_position]);
			$from_array[$i] = $exploded_line[1];
			if ($exploded_line[2] != "")
				$from_array[$i] .= $delimeter . $exploded_line;
		}
	}
	$ord_command = "&sort=" . $sort . "&ord=" . $ord;
	# define ord(current sort no) to eq 1 if they are in use, if not in use leave ord values blank
	if ( ($sort == 1) && ( ($ord == "") || ($ord == 0) ) )
		$ord1 = "&ord=1";
	else if ( ($sort == 2) && ( ($ord == "") || ($ord == 0) ) )
		$ord2 = "&ord=1";
	else if ( ($sort == 3) && ( ($ord == "") || ($ord == 0) ) )
		$ord3 = "&ord=1";
	else if ( ($sort == 4) && ( ($ord == "") || ($ord == 0) ) )
		$ord4 = "&ord=1";
	else if ( ($sort == 5) && ( ($ord == "") || ($ord == 0) ) )
		$ord5 = "&ord=1";
	else if ( ($sort == 6) && ( ($ord == "") || ($ord == 0) ) )
		$ord6 = "&ord=1";
	else if ( ($sort == 7) && ( ($ord == "") || ($ord == 0) ) )
		$ord7 = "&ord=1";
	else if ( ($sort == 8) && ( ($ord == "") || ($ord == 0) ) )
		$ord8 = "&ord=1";
	else if ( ($sort == 9) && ( ($ord == "") || ($ord == 0) ) )
		$ord9 = "&ord=1";
	else if ( ($sort == 10) && ( ($ord == "") || ($ord == 0) ) )
		$ord10 = "&ord=1";
	else if ( ($sort == 11) && ( ($ord == "") || ($ord == 0) ) )
		$ord11 = "&ord=1";
	else if ( ($sort == 12) && ( ($ord == "") || ($ord == 0) ) )
		$ord12 = "&ord=1";
	else if ( ($sort == 13) && ( ($ord == "") || ($ord == 0) ) )
		$ord13 = "&ord=1";
	else if ( ($sort == 14) && ( ($ord == "") || ($ord == 0) ) )
		$ord14 = "&ord=1";
	else if ( ($sort == 15) && ( ($ord == "") || ($ord == 0) ) )
		$ord15 = "&ord=1";
	else if ( ($sort == 16) && ( ($ord == "") || ($ord == 0) ) )
		$ord16 = "&ord=1";
	else if ( ($sort == 17) && ( ($ord == "") || ($ord == 0) ) )
		$ord17 = "&ord=1";
	else if ( ($sort == 18) && ( ($ord == "") || ($ord == 0) ) )
		$ord18 = "&ord=1";
	else if ( ($sort == 19) && ( ($ord == "") || ($ord == 0) ) )
		$ord19 = "&ord=1";
	# define these values to be ord 1 as default value, unless set otherwise by being in use
	if ($sort != 5)
		$ord5 = "&ord=1";
	if ($sort != 8)
		$ord8 = "&ord=1";
}
# find last available page
$last_page_no = round((count($from_array) / $results) + 0.5);
# define page links, if from is set then resend from to ensure correct data is displayed when chainging to next/prev page
if ($last_page_no > 1)
{
	if ( ( $page - 1 )  > 0 )
		$next_url = " href='" . $view_php . "?app=" . $app . "&page=" . ($page-1) . "$from_command$admin_page_enum$search_command$ord_command$thread_page_enum'";
	if ( ( $page * $results ) <= ( count($from_array) - 1)  )
		$prev_url = " href='" . $view_php . "?app=" . $app . "&page=" . ($page+1) . "$from_command$admin_page_enum$search_command$ord_command$thread_page_enum'";
	$nextprev_all = "<a" . $next_url . ">Next Page</a>";
	for ($i = 1; $i <= $last_page_no; $i++)
	{
		$ib = $i;
		if ($i == $page)
			$ib = "<b>" . $i . "</b>";
		$nextprev_all .= " - <a href='" . $view_php . "?app=" . $app . "&page=" . $i.$from_command.$admin_page_enum.$search_command.$ord_command . $thread_page_enum . "'>" . $ib . "</a>";
	}
	$nextprev_all .= " - <a" . $prev_url . ">Previous Page</a>";
}
# define what to show from view, search, sort
$from_page = $results * $page;
$to_page = $from_page - $results;
$j = 0;
$i = $to_page;
while ( ($i < $from_page) && ($i <= count($from_array)) )
{
	$from_array2[$j] = $from_array[$i];
	$j++;
	$i++;
}
# clear arrays
$from_array = false;
$threads_sub = false;
# set from arrays correctly
for ($i = 0; $i <= count($from_array2); $i++)
	$from_array[$i] = $from_array2[$i];
# define sort links
# define the upper part of tables required for logs, and files with search
if ($app == "pole")
	$body_data .= <<<EOT

				Sort Data by :
				<a href='$view_php?app=$app&sort=1$ord1$admin_page_enum$search_command'>Name</a>
				<a href='$view_php?app=$app&sort=5$ord5$admin_page_enum$search_command'>Date</a>
				<a href='$view_php?app=$app&sort=13$ord13$admin_page_enum$search_command'>Replies</a>
				<TABLE cellspacing=0 cellpadding=0 border=0 class='main' width='100%'>

EOT;
else
	$body_data .= <<<EOT

				<TABLE cellspacing=0 cellpadding=0 border=0 class='main' width='100%'>

EOT;
# no posts are being displayed
$showing_post = false;
# display all required posts
for ($i = 0; $i < count($from_array); $i++)
{
	$explode = explode($delimeter,$from_array[$i]);
	if ($explode[1] != "")
		$from_once = line_no($explode[1],$file_contents);
	else
		$from_once = line_no($explode[0],$file_contents);
	if ($from_once != false)
	{
		$explode_dat_view = explode($delimeter,$file_contents[$from_once]);
		if ( ($app == "guest") && ($search != "") )
		{
			# find where the start of the thread is for the link
			$from_thread_start = thread_starting($from_array[$i], $file_contents);
			# if its a search then set the link
			if ($from_thread_start != false)
				$explode_dat_view[25] = $view_php . "?app=" . $app . "&from=" . $from_thread_start . $admin_page_enum . $thread_page_enum;
			$body_data .= view($app,$explode_dat_view);
			$showing_post = true;
		}
		else
		{
			$body_data .= view($app,$explode_dat_view);
			$showing_post = true;
		}
	}
}
# if no posts have been displayed set default blank posts
if (!$showing_post)
{
	if ($search != "")
		$body_data .= "nttttt<tr><td>No results found. Please modify your search and try again.</td></tr>n";
	else
	{
		if ($app == "guest")
			$explode_dat_view = array ("-1","Your Name","","http://" . $HTTP_HOST,"","","","Your message here","Your subject here","0","","","","","","","","","","");
		else if ($app == "pole")
			$explode_dat_view = array ("-1","Your Name","","http://" . $HTTP_HOST,"","","","Your question here","","","Answer 1","Answer 2","Answer 3","","","","","","","");
		$body_data .= view($app,$explode_dat_view);
	}
}
# end of table
$body_data .= "ntttt</TABLE>";
# change to smilles, and strip html
function smiler($smilers_change)
{
	# replace valid smileys with an image file
	$smilers_change = str_replace (":)", "<IMG SRC=www.huw.ukso.com/smilies/smile.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":0)", "<IMG SRC=www.huw.ukso.com/smilies/smile.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":o)", "<IMG SRC=www.huw.ukso.com/smilies/smile.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":O)", "<IMG SRC=www.huw.ukso.com/smilies/smile.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":(", "<IMG SRC=www.huw.ukso.com/smilies/frown.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":0(", "<IMG SRC=www.huw.ukso.com/smilies/frown.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":o(", "<IMG SRC=www.huw.ukso.com/smilies/frown.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":O(", "<IMG SRC=www.huw.ukso.com/smilies/frown.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":P", "<IMG SRC=www.huw.ukso.com/smilies/puh2.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":p", "<IMG SRC=www.huw.ukso.com/smilies/puh2.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (";P", "<IMG SRC=www.huw.ukso.com/smilies/puh2.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (";p", "<IMG SRC=www.huw.ukso.com/smilies/puh2.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace ("*D", "<IMG SRC=www.huw.ukso.com/smilies/shiny.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (";)", "<IMG SRC=www.huw.ukso.com/smilies/wink.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":D", "<IMG SRC=www.huw.ukso.com/smilies/biggrin.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":V", "<IMG SRC=www.huw.ukso.com/smilies/confused.gif HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace ("B)", "<IMG SRC=www.huw.ukso.com/smilies/coool.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":-(", "<IMG SRC=www.huw.ukso.com/smilies/cry.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace ("}>", "<IMG SRC=www.huw.ukso.com/smilies/devil.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace ("O+", "<IMG SRC=www.huw.ukso.com/smilies/heart.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":7", "<IMG SRC=www.huw.ukso.com/smilies/loveit.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":*", "<IMG SRC=www.huw.ukso.com/smilies/puh.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":r", "<IMG SRC=www.huw.ukso.com/smilies/pukey.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (";(", "<IMG SRC=www.huw.ukso.com/smilies/sadley.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":Y", "<IMG SRC=www.huw.ukso.com/smilies/vork.gif HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":9", "<IMG SRC=www.huw.ukso.com/smilies/yummie.gif BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":&", "<IMG SRC=www.huw.ukso.com/smilies/michel.gif BORDER=0>", $smilers_change);

	$smilers_change = str_replace (":)", "<IMG SRC=www.huw.ukso.com/smilies/smile.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":0)", "<IMG SRC=www.huw.ukso.com/smilies/smile.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":o)", "<IMG SRC=www.huw.ukso.com/smilies/smile.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":O)", "<IMG SRC=www.huw.ukso.com/smilies/smile.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":0(", "<IMG SRC=www.huw.ukso.com/smilies/frown.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":o(", "<IMG SRC=www.huw.ukso.com/smilies/frown.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":O(", "<IMG SRC=www.huw.ukso.com/smilies/frown.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":(", "<IMG SRC=www.huw.ukso.com/smilies/frown.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (";P", "<IMG SRC=www.huw.ukso.com/smilies/puh2.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (";p", "<IMG SRC=www.huw.ukso.com/smilies/puh2.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace ("*D", "<IMG SRC=www.huw.ukso.com/smilies/shiny.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (";)", "<IMG SRC=www.huw.ukso.com/smilies/wink.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":-(", "<IMG SRC=www.huw.ukso.com/smilies/cry.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace ("O+", "<IMG SRC=www.huw.ukso.com/smilies/heart.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":*", "<IMG SRC=www.huw.ukso.com/smilies/puh.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (";(", "<IMG SRC=www.huw.ukso.com/smilies/sadley.gif WIDTH=15 HEIGHT=15 BORDER=0>", $smilers_change);
	$smilers_change = str_replace (":&", "<IMG SRC=www.huw.ukso.com/smilies/michel.gif BORDER=0>", $smilers_change);

	return ($smilers_change);
}
# return the current info, in correct format for required app
function view($app,$explode_dat_view)
{
	global $admin,$reply_php,$remove_php,$modify_php,$pages_available,$delimeter,$admin_page_enum,$outline_colour,$foot_colour,$link_colour,$thread_page_enum,$view_php;
	# if theres an email address add a link
	if ($explode_dat_view[2] != "")
		$explode_dat_view[2] = "href='mailto:" . $explode_dat_view[2] . "'";
	# if admin add remove and modify commands, show email addy to admin users
	if ($app == "guest")
		$explode_dat_view[28] = " | <a href='" . $modify_php . "?app=$app&lock=lock&uidn=" . $explode_dat_view[0] . "$admin_page_enum$thread_page_enum'>Lock</a> | <a href='" . $modify_php . "?app=$app&lock=unlock&uidn=" . $explode_dat_view[0] . "$admin_page_enum$thread_page_enum'>Unlock</a>";
	if ($admin == true)
		$admin_commands = "<a href='" . $remove_php . "?app=$app&remove=true&uidn=" . $explode_dat_view[0] . "$admin_page_enum$thread_page_enum'>Remove</a> | <a href='" . $modify_php . "?app=$app&modify=true&uidn=" . $explode_dat_view[0] . "$admin_page_enum$thread_page_enum'>Modify</a>" . $explode_dat_view[28];
	else if ($admin != true)
		$explode_dat_view[4] = "";
	# if theres a web url make a link
	if ($explode_dat_view[3] != "")
		$explode_dat_view[3] = "href='" . $explode_dat_view[3] . "'";
	# if icq supplied make a link to user info
	if ($explode_dat_view[6] != "")
		$explode_dat_view[6] = "href='http://wwp.icq.com/scripts/search.dll?to=" . $explode_dat_view[6] . "'";
	if ($app == "guest")
	{
		# width of table based upon layer
		$explode_dat_view[9] = (100 - ($explode_dat_view[9] * 5));
		if (($admin_commands != "") && ($admin == true) )
			$admin_commands = " | " . $admin_commands;
		$explode_dat_view[7] = smiler($explode_dat_view[7]);
		$explode_dat_view[8] = smiler($explode_dat_view[8]);
		if ($explode_dat_view[25] != "")
		{
			$explode_dat_view[30] = "<a href='" . $explode_dat_view[25] . "''>";
			$explode_dat_view[31] = "</a>";
			$explode_dat_view[32] = "onmouseover=this.style.cursor='hand'";
			$explode_dat_view[9] = 100;
			if ($admin_commands != "")
				$admin_commands = " | <font color=" . $link_colour . ">Remove</font> | <font color=" . $link_colour . ">Modify</font> | <font color=" . $link_colour . ">Lock</font> | <font color=" . $link_colour . ">Unlock</font>" . $explode_dat_view[27];
			$Reply = "<font color=" . $link_colour . ">Reply to Message</font>";
			$explode_dat_view[3] = "<font color=" . $link_colour . ">Home Page</font>";
			$explode_dat_view[2] = "<font color=" . $link_colour . ">Mail the Author</font>";
			$explode_dat_view[6] = "<font color=" . $link_colour . ">ICQ</font>";
		}
		else
		{
			$Reply = '<A href="' . $reply_php . '?uidn=' . $explode_dat_view[0] . '&app=' . $app . $admin_page_enum . $thread_page_enum . '">Reply to Message</A>';
			$explode_dat_view[3] = "<A " . $explode_dat_view[3] . " target='_blank'>Home Page</A>";
			$explode_dat_view[2] = "<A " . $explode_dat_view[2] . ">Mail the Author</A>";
			$explode_dat_view[6] = "<A " . $explode_dat_view[6] . ">ICQ</A>";
		}
		if ($explode_dat_view[11] == "1")
		{
			$explode_dat_view[29] = " - Post locked.";
			$Reply = "<font color='#2F468F'>Reply to Message</font>";
		}
		if ($explode_dat_view[8] == "")
			$explode_dat_view[8] = "No subject";
		$body_data = <<<EOT

					<tr>
						<td>
							$explode_dat_view[30]
							<TABLE cellspacing=0 cellpadding=0 border=0 width=$explode_dat_view[9]% align=right class="main" $explode_dat_view[32]>
								<TR>
									<TD valign="bottom" bgcolor="$outline_colour">
										<b>$explode_dat_view[8]</b>$explode_dat_view[29]<br>
										Posted by <b>$explode_dat_view[1]</b> on <b>$explode_dat_view[5]</b> $explode_dat_view[4]
									</TD>
								</TR>
								<TR>
									<TD valign="top">
										$explode_dat_view[7]
									</TD>
								</TR>
								<TR>
									<TD valign="top" bgcolor="$foot_colour">
										$Reply | $explode_dat_view[3] | $explode_dat_view[2] | $explode_dat_view[6]$admin_commands
									</TD>
								</TR>
							</TABLE>
							$explode_dat_view[31]
						</td>
					</tr>

EOT;
	}
	else if ($app == "pole")
	{
		if (($admin_commands != "") && ($admin == true) )
			$admin_commands = " | " . $admin_commands;
		# percentages to 0 dp
		$explode_dat_view_13 = number_format((($explode_dat_view[13] / ( $explode_dat_view[13] + $explode_dat_view[14] + $explode_dat_view[15] )) * 100),0);
		$explode_dat_view_14 = number_format((($explode_dat_view[14] / ( $explode_dat_view[13] + $explode_dat_view[14] + $explode_dat_view[15] )) * 100),0);
		$explode_dat_view_15 = number_format((($explode_dat_view[15] / ( $explode_dat_view[13] + $explode_dat_view[14] + $explode_dat_view[15] )) * 100),0);
		$body_data = <<<EOT

					<tr>
						<td>
							<TABLE cellspacing=0 cellpadding=0 border=0 width=100% align=center class="main">
								<TR>
									<TD valign="bottom" bgcolor="$outline_colour">
										<b>$explode_dat_view[7]</b><br>
										Posted by <b>$explode_dat_view[1]</b> on <b>$explode_dat_view[5]</b> $explode_dat_view[4]
									</TD>
								</TR>
								<TR>
									<TD valign="top">
										$explode_dat_view[10] : $explode_dat_view[13] votes ($explode_dat_view_13%) <a href="$reply_php?uidn=$explode_dat_view[0]&app=$app&ans=1$admin_page_enum">Vote</a><br>
										$explode_dat_view[11] : $explode_dat_view[14] votes ($explode_dat_view_14%) <a href="$reply_php?uidn=$explode_dat_view[0]&app=$app&ans=2$admin_page_enum">Vote</a><br>
										$explode_dat_view[12] : $explode_dat_view[15] votes ($explode_dat_view_15%) <a href="$reply_php?uidn=$explode_dat_view[0]&app=$app&ans=3$admin_page_enum">Vote</a><br>
									</TD>
								</TR>
								<TR>
									<TD valign="top" bgcolor="$foot_colour">
										<A $explode_dat_view[3] target="_blank">Home Page</A> | <A $explode_dat_view[2]>Mail the Author</A> | <a $explode_dat_view[6]>ICQ</a>$admin_commands
									</TD>
								</TR>
							</TABLE>
						</td>
					</tr>

EOT;
	}
	return ($body_data);
}
# echoing all required matterials for view
echo <<<EOT

$html1

<title>$title</title>

$html2

				$title

$html3

			$outline_data
$search_form

$html4

			<center>
				$command_links<br>
				$nextprev_all
			</center>

$body_data

			<center>
				$nextprev_all<br>
				$command_links
			</center>

$html5
$html6

EOT;

?>

//modify.php
<?PHP

/*

This script / application is copyright to Huw (C) 2002
Huw from Huenik.com

READ  THE TERMS  OF THIS  AGREEMENT AND  ANY PROVIDED  SUPPLEMENTAL LICENSE
TERMS (COLLECTIVELY  "AGREEMENT") CAREFULLY  BEFORE  MODIFYING OR USING THE
SOFTWARE PACKAGE. BY OPENING THE SOFTWARE MEDIA  PACKAGE, YOU AGREE  TO THE
TERMS OF THIS AGREEMENT.  IF YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY,
INDICATE YOUR ACCEPTANCE OF THESE TERMS BY DOWNLOADING. IF YOU DO NOT AGREE
TO ALL OF THESE TERMS, PROMPTLY REMOVE THE UNUSED SOFTWARE FROM YOUR SYSTEM

1. After any modification to the code should it must be uploaded to the web
   site  from  which  it  originated if  possible.  Otherwise it should  be
   uploaded to phpbuilder.com => code library => BBS/Discussion => 427 With
   the version number ending with Alpha.

2. All modified versions must include the following  line to be  printed or
   echoed on every viewable page 'Copyright to Huw.Ukso.com v1.0'

*/

global $app,$uidn,$in1,$in2,$in3,$in4,$in5,$in6,$in7,$in8,$in9,$in10,$in11,$in12,$in13,$in14,$in15,$in16,$in17,$in18,$in19,$ans,$HTTP_POST_FILES,$HTTP_COOKIE_VARS,$modify,$remove,$userfile,$lock;
if (($app=="")&&(isset($FORM_APP))) $app = $FORM_APP;
if (($uidn=="")&&(isset($FORM_UIDN))) $uidn = $FORM_UIDN;
if (($in1=="")&&(isset($FORM_IN1))) $in1 = $FORM_IN1;
if (($in2=="")&&(isset($FORM_IN2))) $in2 = $FORM_IN2;
if (($in3=="")&&(isset($FORM_IN3))) $in3 = $FORM_IN3;
if (($in4=="")&&(isset($FORM_IN4))) $in4 = $FORM_IN4;
if (($in5=="")&&(isset($FORM_IN5))) $in5 = $FORM_IN5;
if (($in6=="")&&(isset($FORM_IN6))) $in6 = $FORM_IN6;
if (($in7=="")&&(isset($FORM_IN7))) $in7 = $FORM_IN7;
if (($in8=="")&&(isset($FORM_IN8))) $in8 = $FORM_IN8;
if (($in9=="")&&(isset($FORM_IN9))) $in9 = $FORM_IN9;
if (($in10=="")&&(isset($FORM_IN10))) $in10 = $FORM_IN10;
if (($in11=="")&&(isset($FORM_IN11))) $in11 = $FORM_IN11;
if (($in12=="")&&(isset($FORM_IN12))) $in12 = $FORM_IN12;
if (($in13=="")&&(isset($FORM_IN13))) $in13 = $FORM_IN13;
if (($in14=="")&&(isset($FORM_IN14))) $in14 = $FORM_IN14;
if (($in15=="")&&(isset($FORM_IN15))) $in15 = $FORM_IN15;
if (($in16=="")&&(isset($FORM_IN16))) $in16 = $FORM_IN16;
if (($in17=="")&&(isset($FORM_IN17))) $in17 = $FORM_IN17;
if (($in18=="")&&(isset($FORM_IN18))) $in18 = $FORM_IN18;
if (($in19=="")&&(isset($FORM_IN19))) $in19 = $FORM_IN19;
if (($modify=="")&&(isset($FORM_MODIFY))) $modify = $FORM_MODIFY;
if (($remove=="")&&(isset($FORM_REMOVE))) $remove = $FORM_REMOVE;
if (($lock=="")&&(isset($FORM_LOCK))) $lock = $FORM_LOCK;
if ($app != "")
	$query_string = "&app=" . $app;
if ($uidn != "")
	$query_string .= "&uidn=" . $uidn;
if ($modify != "")
	$query_string = "&modify=" . $modify;
if ($remove != "")
	$query_string .= "&remove=" . $remove;
# include default functions and layouts
include("html.inc");
# to correct html coding which user may have sent, only allowing some html code not allowing the delimeter or n or r
if ($in1 != "")
	$in1 = stripstrings($in1);
if ($in2 != "")
	$in2 = stripstrings($in2);
if ($in3 != "")
{
	$tmp_explode_http = explode("http://"," " . $in3);
	$tmp_explode_ftp = explode("ftp://"," " . $in3);
	$tmp_explode_https = explode("https://"," " . $in3);
	if ( !isset($tmp_explode_http[1]) && !isset($tmp_explode_ftp[1]) && !isset($tmp_explode_https[1]) )
		$in3 = "http://" . $in3;
	$in3 = stripstrings($in3);
}
if ($in4 != "")
	$in4 = stripstrings($in4);
if ($in5 != "")
	$in5 = stripstrings($in5);
if ($in6 != "")
	$in6 = stripstrings($in6);
if ($in7 != "")
	$in7 = stripstrings($in7);
if ($in8 != "")
	$in8 = stripstrings($in8);
if ($in9 != "")
	$in9 = stripstrings($in9);
if ($in10 != "")
	$in10 = stripstrings($in10);
if ($in11 != "")
	$in11 = stripstrings($in11);
if ($in12 != "")
	$in12 = stripstrings($in12);
if ($in13 != "")
	$in13 = stripstrings($in13);
if ($in14 != "")
	$in14 = stripstrings($in14);
if ($in15 != "")
	$in15 = stripstrings($in15);
if ($in16 != "")
	$in16 = stripstrings($in16);
if ($in17 != "")
	$in17 = stripstrings($in17);
if ($in18 != "")
	$in18 = stripstrings($in18);
if ($in19 != "")
	$in19 = stripstrings($in19);
# define smiles
$smiles = <<<EOT

					<table align="center" class="main" border="0" cellpadding="0" cellspacing="0">
						<tr>
							<td align="center">
								Place your cursor above the image to see its key combination.<br>
									<IMG SRC=www.huw.ukso.com/smilies/smile.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":)">
									<IMG SRC=www.huw.ukso.com/smilies/frown.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":(">
									<IMG SRC=www.huw.ukso.com/smilies/puh2.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":P">
									<IMG SRC=www.huw.ukso.com/smilies/shiny.gif WIDTH=15 HEIGHT=15 BORDER=0 alt="*D">
									<IMG SRC=www.huw.ukso.com/smilies/wink.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=";)">
									<IMG SRC=www.huw.ukso.com/smilies/biggrin.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":D">
									<IMG SRC=www.huw.ukso.com/smilies/confused.gif HEIGHT=15 BORDER=0 alt=":V">
									<IMG SRC=www.huw.ukso.com/smilies/coool.gif WIDTH=15 HEIGHT=15 BORDER=0 alt="B)">
									<IMG SRC=www.huw.ukso.com/smilies/cry.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":-(">
									<IMG SRC=www.huw.ukso.com/smilies/devil.gif WIDTH=15 HEIGHT=15 BORDER=0 alt="}>">
									<IMG SRC=www.huw.ukso.com/smilies/heart.gif WIDTH=15 HEIGHT=15 BORDER=0 alt="0+">
									<IMG SRC=www.huw.ukso.com/smilies/loveit.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":7">
									<IMG SRC=www.huw.ukso.com/smilies/puh.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":*">
									<IMG SRC=www.huw.ukso.com/smilies/pukey.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":r">
									<IMG SRC=www.huw.ukso.com/smilies/sadley.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=";(">
									<IMG SRC=www.huw.ukso.com/smilies/vork.gif HEIGHT=15 BORDER=0 alt=":YB)">
									<IMG SRC=www.huw.ukso.com/smilies/yummie.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":9">
									<IMG SRC=www.huw.ukso.com/smilies/michel.gif WIDTH=15 HEIGHT=15 BORDER=0 alt=":&"><br>
									Images from <a href="http://www.martijnbolt.com">BoltM</a>
							</td>
						</tr>
					</table>

EOT;
# decide upon action, weather to show a form or write the data and how
if ($app == "guest")
{
	$storage_file_dat = $guest_dat;
	if ( ($modify == true) && ($admin == true) )
	{
		if ($uidn != "")
		{
			if (($in1 == "") || ($in7 == ""))
				$body_data = add_post_file(true);
			else
			{
				$body_data = modify(true);
				$refresh = "<meta http-equiv='Refresh' content='1;URL=$view_php?app=$app$admin_page_enum$thread_page_enum'>";
			}
		}
		else
			$body_data = "ttttNo uidn defined.";
		$outline_data = "Modify a post in the guest book. To clear a field replace its contents with a space. Compleat all parts of the form with a * next to them.";
		$title = "Modify a post in the guest book";
	}
	else if ( ($remove == true) && ($admin == true) )
	{
		if ($uidn != "")
		{
			$body_data = remove();
			$refresh = "<meta http-equiv='Refresh' content='1;URL=$view_php?app=$app$admin_page_enum$thread_page_enum'>";
		}
		else
			$body_data = "ttttNo uidn defined.";
		$outline_data = "Remove a post from the guest book.";
		$title = "Remove a post from the guest book";
	}
	else if ( ( ($lock == "lock") || ($lock == "unlock") ) && ($admin == true) )
	{
		if ($uidn != "")
		{
			$file_contents = file($storage_file_dat);
			# find where the start of the thread is for the link
			$from_thread_end = thread_ending($uidn,$file_contents);
			$last_line = line_no($from_thread_end,$file_contents);
			$first_line = line_no($uidn,$file_contents);
			$body_data = modify($uidn);
			for ($i = $last_line; $i < $first_line; $i++)
			{
				$uidn = uidn_no($i,$file_contents);
				$body_data = modify($uidn);
			}
			$refresh = "<meta http-equiv='Refresh' content='1;URL=$view_php?app=$app$admin_page_enum$thread_page_enum'>";
		}
		else
			$body_data = "ttttNo uidn defined.";
		$outline_data = "Lock a thread in the guest book.";
		$title = "Lock a thread in the guest book";
	}
	else
	{
		if ($uidn != "")
		{
			$file_contents = file($storage_file_dat);
			$last_line = line_no($uidn,$file_contents);
			$explode = explode($delimeter,$file_contents[$last_line]);
			if ($explode[11] == 1)
				$body_data = "ttttThis post has been locked, therefore no replys can be made.";
			else if (($in1 == "") || ($in7 == ""))
				$body_data = add_post_file(false);
			else
			{
				$body_data = write_post_file(false);
				$refresh = "<meta http-equiv='Refresh' content='1;URL=$view_php?app=$app$admin_page_enum$thread_page_enum'>";
			}
			$outline_data = "Reply to a post in the guest book. Compleat all parts of the form with a * next to them.";
			$title = "Reply to a post in the guest book";
		}
		else
		{
			if (($in1 == "") || ($in7 == ""))
				$body_data = add_post_file(false);
			else
			{
				$body_data = write_post_file(true);
				$refresh = "<meta http-equiv='Refresh' content='1;URL=$view_php?app=$app$admin_page_enum$thread_page_enum'>";
			}
			$outline_data = "Write a new post in the guest book. Compleat all parts of the form with a * next to them.";
			$title = "Write a new post in the guest book";
		}
	}
}
else if ($app == "pole")
{
	$storage_file_dat = $pole_dat;
	if ( ($modify == true) && ($admin == true) )
	{
		if ($uidn != "")
		{
			if (($in1 == "") || ($in7 == "") || ($in10 == "") || ($in11 == "") || ($in12 == ""))
				$body_data = add_post_file(true);
			else
			{
				$body_data = modify(true);
				$refresh = "<meta http-equiv='Refresh' content='1;URL=$view_php?app=$app$admin_page_enum'>";
			}
		}
		else
			$body_data = "ttttNo uidn defined.";
		$outline_data = "Modify a post in the visitor pole. To clear a field replace its contents with a space. Compleat all parts of the form with a * next to them.";
		$title = "Modify a post in the visitor pole";
	}
	else if ( ($remove == true) && ($admin == true) )
	{
		if ($uidn != "")
		{
			$body_data = remove();
			$refresh = "<meta http-equiv='Refresh' content='1;URL=$view_php?app=$app$admin_page_enum'>";
		}
		else
			$body_data = "ttttNo uidn defined.";
		$outline_data = "Remove a post from the visitor pole.";
		$title = "Remove a post in the visitor pole";
	}
	else
	{
		if ($uidn != "")
		{
			if ($ans != "")
			{
				$body_data = write_post_file(false);
				$refresh = "<meta http-equiv='Refresh' content='1;URL=$view_php?app=$app$admin_page_enum'>";
			}
			else
				$body_data = "ttttNo answer defined.";
			$outline_data = "Reply to a post in the visitor pole.";
			$title = "Reply to a post in the visitor pole";
		}
		else
		{
			if (($in1 == "") || ($in7 == "") || ($in10 == "") || ($in11 == "") || ($in12 == ""))
				$body_data = add_post_file(false);
			else
			{
				$body_data = write_post_file(true);
				$refresh = "<meta http-equiv='Refresh' content='1;URL=$view_php?app=$app$admin_page_enum'>";
			}
			$outline_data = "Write a new post in the visitor pole. Compleat all parts of the form with a * next to them.";
			$title = "Write a new post in the visitor pole";
		}
	}
}
else
{
	$outline_data = "Invalid function.";
	$body_data = "ttttInvalid function, the attempted function does not exist or an error has occured";
	$title = "Invalid function";
}
# show an add form
function add_post_file($is_modify)
{
	global $app,$uidn,$storage_file_dat,$delimeter,$admin_string,$add_php,$web_address,$admin,$thread_string,$smiles,$webmaster_email;
	# if is admin then predefine some strings
	if ($admin == true)
	{
		$data[2] = $webmaster_email;
		$data[1] = "Webmaster";
		$data[3] = $web_address;
	}
	# if its a modify command set values in the inputs, where required & add add modify input
	if ($is_modify)
	{
		$is_modify = '<input name="modify" id="input" type="hidden" value="true">';
		$file_contents = file($storage_file_dat);
		$line_no = line_no($uidn, $file_contents);
		if ($line_no != false)
			$data = explode ($delimeter, $file_contents[$line_no]);
		else
			$is_modify = "";
		$form_4 = "<tr><td>Date : </td><td><input type=text name=in5 size=30 id=input value='$data[5]' class='input'></td></tr>";
	}
	else
		$is_modify = "";
	# if a uidn has been sent add the form
	if ($uidn != "")
		$uidn_string = '<input name="uidn" id="input" type="hidden" value="' . $uidn . '">';
	# definr app specific inputs, in required order
	if ($app == "guest")
	{
		$form_7 = "<tr><td>* Your Message : </td><td><textarea cols=30 rows=5 name=in7>$data[7]</textarea></td></tr>";
		$form_8 = "<tr><td>Your Subject : </td><td><input type=text name=in8 size=30 id=input value='$data[8]' class='input' maxlength=64></td></tr>";
		$form_2 = "<tr><td>Your Email Address : </td><td><input type=text name=in2 size=30 id=input value='$data[2]' class='input' maxlength=128></td></tr>";
		$form_3 = "<tr><td>Your ICQ ID : </td><td><input type=text name=in6 size=30 id=input value='$data[6]' class='input' maxlength=16></td></tr>";
		$form_0 = "<tr><td>* Your Name : </td><td><input type=text name=in1 size=30 id=input value='$data[1]' class='input' maxlength=32></td></tr>";
		$form_1 = "<tr><td>Your Website Address : </td><td><input type=text name=in3 size=30 id=input value='$data[3]' class='input' maxlength=128></td></tr>";
	}
	else if ($app == "pole")
	{
		$form_7 = "<tr><td>* Your Question : </td><td><input type=text name=in7 size=30 id=input value='$data[7]' class='input' maxlength=64></td></tr>";
		$form_10 = "<tr><td>* Your 1st Answer : </td><td><input type=text name=in10 size=30 id=input value='$data[10]' class='input' maxlength=64></td></tr>";
		$form_11 = "<tr><td>* Your 2nd Answer : </td><td><input type=text name=in11 size=30 id=input value='$data[11]' class='input' maxlength=64></td></tr>";
		$form_12 = "<tr><td>* Your 3rd Answer : </td><td><input type=text name=in12 size=30 id=input value='$data[12]' class='input' maxlength=64></td></tr>";
		$form_2 = "<tr><td>Your Email Address : </td><td><input type=text name=in2 size=30 id=input value='$data[2]' class='input' maxlength=128></td></tr>";
		$form_3 = "<tr><td>Your ICQ ID : </td><td><input type=text name=in6 size=30 id=input value='$data[6]' class='input' maxlength=16></td></tr>";
		$form_0 = "<tr><td>* Your Name : </td><td><input type=text name=in1 size=30 id=input value='$data[1]' class='input' maxlength=32></td></tr>";
		$form_1 = "<tr><td>Your Website Address : </td><td><input type=text name=in3 size=30 id=input value='$data[3]' class='input' maxlength=128></td></tr>";
	}
	$body_data = <<<EOT

				<form action="$add_php" name="add" method="post" onsubmit="return '$add_php' enctype="multipart/form-data">
					<table cellspacing="0" cellpadding="0" border="0" align="center" class="main">
						$form_0
						$form_1
						$form_2
						$form_3
						$form_8
						$form_7
						$form_10
						$form_11
						$form_12
						$form_9
						$form_16
						$form_17
						$form_18
						$form_19
						$form_4
						<tr>
							<td>
								<input type="Submit" name="submit" value="Submit" class=button>
								<input type="Reset" name="reset" value="Clear" class=button>
							</td>
							<td>
								<input name="app" id="input" type="hidden" value="$app">
								$is_modify
								$admin_string
								$uidn_string
								$thread_string
							</td>
						</tr>
					</table>
$smiles
				</form>

EOT;
	return ($body_data);
}
# modify data
function modify($modify)
{
	global $app,$uidn,$in1,$in2,$in3,$in4,$in5,$in6,$in7,$in8,$in9,$in10,$in11,$in12,$in13,$in14,$in15,$in16,$in17,$in18,$in19,$delimeter,$storage_file_dat,$lock;
	$file_contents = file($storage_file_dat);
	# get time and size of file then line no
	$data1_file_size = filesize($storage_file_dat);
	$data1_file_date = filemtime($storage_file_dat);
	if ($modify != "true")
		$line_no = line_no($modify, $file_contents);
	else
		$line_no = line_no($uidn, $file_contents);
	if ($line_no != false)
	{
		$data = explode($delimeter,$file_contents[$line_no]);
		if ($modify != "true")
		{
			if ($lock == "lock")
				$data[11] = 1;
			else // if ($lock == "unlock")
				$data[11] = 0;
		}
		else
		{
			# if the data exists in the form then change it in the database to eq form data
			// if ($in0 != "") $data[0] = $in0; // uidn
			if ($in1 != "") $data[1] = $in1;
			if ($in2 != "") $data[2] = $in2;
			if ($in3 != "") $data[3] = $in3;
			// if ($in4 != "") $data[4] = $in4; // ip
			if ($in5 != "") $data[5] = $in5;
			if ($in6 != "") $data[6] = $in6;
			if ($in7 != "") $data[7] = $in7;
			if ($in8 != "") $data[8] = $in8;
			if ($in9 != "") $data[9] = $in9;
			if ($in10 != "") $data[10] = $in10;
			if ($in11 != "") $data[11] = $in11;
			if ($in12 != "") $data[12] = $in12;
			if ($in13 != "") $data[13] = $in13;
			if ($in14 != "") $data[14] = $in14;
			if ($in15 != "") $data[15] = $in15;
			if ($in16 != "") $data[16] = $in16;
			if ($in17 != "") $data[17] = $in17;
			if ($in18 != "") $data[18] = $in18;
			if ($in19 != "") $data[19] = $in19;
			# if the data exists in the form eq " " then change it in the database to eq blank
			// if ($in0 == " ") $data[0] = ""; // uidn
			if ($in1 == " ") $data[1] = "";
			if ($in2 == " ") $data[2] = "";
			if ($in3 == " ") $data[3] = "";
			// if ($in4 == " ") $data[4] = ""; // ip
			if ($in5 == " ") $data[5] = "";
			if ($in6 == " ") $data[6] = "";
			if ($in7 == " ") $data[7] = "";
			if ($in8 == " ") $data[8] = "";
			if ($in9 == " ") $data[9] = "";
			if ($in10 == " ") $data[10] = "";
			if ($in11 == " ") $data[11] = "";
			if ($in12 == " ") $data[12] = "";
			if ($in13 == " ") $data[13] = "";
			if ($in14 == " ") $data[14] = "";
			if ($in15 == " ") $data[15] = "";
			if ($in16 == " ") $data[16] = "";
			if ($in17 == " ") $data[17] = "";
			if ($in18 == " ") $data[18] = "";
			if ($in19 == " ") $data[19] = "";
		}
		$write_data_new = $data[0].$delimeter.$data[1].$delimeter.$data[2].$delimeter.$data[3].$delimeter.$data[4].$delimeter.$data[5].$delimeter.$data[6].$delimeter.$data[7].$delimeter.$data[8].$delimeter.$data[9].$delimeter.$data[10].$delimeter.$data[11].$delimeter.$data[12].$delimeter.$data[13].$delimeter.$data[14].$delimeter.$data[15].$delimeter.$data[16].$delimeter.$data[17].$delimeter.$data[18].$delimeter.$data[19].$delimeter."Reserved";
		for ($i = 0; $i < $line_no; $i++)
			$tmp_above .= $file_contents[$i];
		for ($i = $line_no+1; $i < count($file_contents); $i++)
			$tmp_below .= $file_contents[$i]