\n");
}
//******************************************************************************
// function displayMessage displays the $errorMessage error message.
function displayMessage($errorMessage,$msgType)
{
global $adminHeadColor;
global $adminHeadText;
global $adminBodyColor1;
global $adminBodyText1;
global $adminBodyColor2;
global $adminBodyText2;
global $langAdminError;
global $langSystemError;
global $langSystemMessage;
global $langBsGuestbook;
global $langSPAMalert;
displayHeader();
echo ("
");
echo ("
");
echo (" $langBsGuestbook ");
echo ("
");
if ($msgType=="1") // Admin Message
echo (" $langAdminError");
if ($msgType=="2") // System Error
echo (" $langSystemError");
if ($msgType=="3") // System Message
echo (" $langSystemMessage");
if ($msgType=="4") // SPAM alert
echo (" $langSPAMalert");
echo ("");
echo ("
");
echo ("");
echo (" $errorMessage
");
echo ("
\n");
echo ("
");
displayFooter();
exit;
}
//******************************************************************************
// function standardizeText filters ambiguous chains in $str
function standardizeStoredText($str)
{
$str = str_replace("\\'", "'", $str);
$str = str_replace("\\\"", "\"", $str);
$str = htmlspecialchars($str);
$str = str_replace("\n", " ", $str);
$str = str_replace("$", "$", $str);
return $str;
}
function standardizeDisplayedText($str)
{
return $str;
}
function standardizeAdminText($str)
{
return $str;
}
function seekHttp($rawText)
{
$pattern = array(
"/http:\/\/((\w|\.|\?|\%|=|\/|-|~|#)*)/",
"/mailto:((\w|\.|@|-)*)/");
$replacement = array(
"http://\\1",
"\\1");
$hyperLinkedText=preg_replace($pattern, $replacement, $rawText);
return $hyperLinkedText;
}
//******************************************************************************
// function Xfopen : opens a file $fileName and locks it
function Xfopen($fileName, $openMode, $sharing)
{
global $langOpenError;
$fp=@fopen($fileName, $openMode);
if (!$fp)
{
displayMessage($langOpenError,2);
}
if ($sharing==true)
{
$op=1;
}
else
{
$op=2;
}
if (!@flock($fp,$op))
{
@flock($fp,3);
displayMessage("flock timeout",2);
}
return $fp;
}
//******************************************************************************
// function Xfclose : unlocks the file $fp and closes it
function Xfclose($fp)
{
@flock($fp,3);
@fclose($fp);
}
//******************************************************************************
// function fullDisplay
function fullDisplay()
{
global $displayStep,$displayBegin, $maxDisplay ;
global $entryHeadColor,$entryHeadText, $entryBodyColor1,$entryBodyText1, $entryBodyColor2,$entryBodyText2 ;
global $relativeScriptPath;
global $index;
global $archive_mail, $archive_name, $archive_text, $archive_date;
global $allowAutoLink;
global $SPAMtext, $SPAMtext2, $SPAMtext3, $SPAMtext4;
// Checks if $displayBegin is not too large (Thanks to Ahmet Sabri ALPER )
if ($displayBegin>$maxDisplay)
{
$displayBegin=$maxDisplay-$displayStep+1;
}
displayHeader();
// Displays the entry form to enable the client to type a message.
displayForm();
if ($index==0)
{
displayFooter();
return;
}
echo ("
\n");
// Message arrays are displayed here :
echo "
\n";
// Displaying all the entries.
if ($displayStep==0)
{
$displayBegin=1;
$displayStep=$index;
}
if ($displayBegin==1)
{
$startAt=$index % $displayStep;
if ($startAt==0) $startAt=$displayStep;
}
else
{
$startAt=$displayBegin+$displayStep-1;
}
for ($msgNumber=$startAt ; $msgNumber>=$displayBegin ; $msgNumber--)
{
echo ("
\n");
echo ("");
for($i=1;$i<=$index;$i=$nextEnd+1)
{
$nextBegin = $i;
if ($i==1)
{
$nextEnd=$index % $displayStep;
if ($nextEnd==0) $nextEnd=$displayStep;
}
else $nextEnd = $i+$displayStep-1;
if ($displayBegin==$nextBegin && $nextEnd!=$nextBegin) echo ("[$nextBegin-$nextEnd]\n");
else if ($displayBegin==$nextBegin && $nextEnd==$nextBegin) echo ("[$nextBegin]\n");
else if ($nextEnd==$nextBegin) echo ("[$nextBegin]\n");
else echo ("[$nextBegin-$nextEnd]\n");
}
echo "
\n";
displayFooter();
}
//******************************************************************************
function readData($resetBegin)
{
global $adminpassword;
global $index;
global $dataFile;
global $archive_mail, $archive_name, $archive_text, $archive_date;
global $displayBegin, $displayStep, $maxDisplay;
// Includes automatically filled data arrays :
$index = 0;
$fout=Xfopen($dataFile, "r", true);
include($dataFile);
Xfclose($fout);
// From now, $index will indicate the number of data entries.
// Beginning of the data to be displayed, default = 1
if (!isset($displayBegin)) $displayBegin="";
if ($displayBegin=="" || $resetBegin==1)
{
$displayBegin = $index-$displayStep+1;
if ($displayBegin<=0) $displayBegin=1;
}
// Sets the maximum that $displayBegin can reach
$maxDisplay = $index;
}
//******************************************************************************
// If the Datafile does not exist, creates it.
if (!file_exists(${dataFile}))
{
$fout = Xfopen($dataFile, "w+", false);
fputs($fout, "\n");
fputs($fout, "\$adminpassword = \"aurora\";\n");
fputs($fout, "\$archive_name[++\$index] = \"Glenn and Melody\";\n");
fputs($fout, "\$archive_mail[ \$index] = \"wedding@xephalon.net\";\n");
fputs($fout, "\$archive_date[ \$index] = \"Nov 5, 2006 - 12:00:00 PM\";\n");
fputs($fout, "\$archive_text[ \$index] = \"Welcome to Our Guestbook. Please drop us a note!\";\n");
fputs($fout, "?>");
Xfclose ($fout);
}
// $admin could be set via Admin-Form by POST or via URL by GET
$admin=$HTTP_POST_VARS["admin"];
if (!isset($admin))
$admin=$HTTP_GET_VARS["admin"];
else // assign POST-variables from Admin-Form
{
$newPassword1=$HTTP_POST_VARS["newPassword1"];
$newPassword2=$HTTP_POST_VARS["newPassword2"];
$command=$HTTP_POST_VARS["command"];
$index=$HTTP_POST_VARS["index"];
}
if (!isset($admin))
{
// assing variables from Guestbook-From
$name=$HTTP_POST_VARS["name"];
$email=$HTTP_POST_VARS["email"];
$message=$HTTP_POST_VARS["message"];
if (!isset($name)) { $name=""; $message=""; }
if ($name=="" || $message=="")
{
/****************************************************************************************
* Use Case no 1-A *
* *
* This case is encountered when a client simply wants to add a message to the *
* guestbook. (Every variable is empty); *
************************************************************************************/
readData(0);
fullDisplay();
exit;
}
if (substr_count($message, $SPAMtext)>=1 || substr_count($message, $SPAMtext2)>=1 || substr_count($message, $SPAMtext3)>=1 || substr_count($message, $SPAMtext4)>=1 || strlen($message)>0)
{
/****************************************************************************************
* SPAM FILTER / CLOSE GUESTBOOK *
* *
* This case is encountered when message contains SPAMtext or if message length exceeds *
* 0 characters, closing the guestbook permanently *
************************************************************************************/
displayMessage("$langSPAMalert",1);
readData(0);
fullDisplay();
exit;
}
else
{
/********************************************************************************
* Use Case no 1-B *
* *
* Case is encountered when a client has just filled in the appropriate fields *
* (name, mail, message). *
* $name = "Some Name" *
* $email = "Some@Email" *
* $message = "Some Message" *
* Simply add message in the top of all previous messages. *
********************************************************************************/
$position = filesize($dataFile);
$fout = Xfopen($dataFile, "r+", false);
fseek($fout,$position-2);
$insert_msgdate = date( "M d, Y - h:i:s A" );
$name=standardizeStoredText($name);
$email=standardizeStoredText($email);
$message=standardizeStoredText($message);
fputs ($fout,"\$archive_name[++\$index] = \"$name\";\n");
fputs ($fout,"\$archive_mail[ \$index] = \"$email\";\n");
fputs ($fout,"\$archive_date[ \$index] = \"$insert_msgdate\";\n");
fputs ($fout,"\$archive_text[ \$index] = \"$message\";\n");
fputs ($fout,"\n?>");
Xfclose($fout);
// Sending a mail to $mailRecipient if $carbonCopy=1, with the subject $mailSubject.
if ($carbonCopy==1)
{
$message = str_replace(" ", "\n", $message);
$mailBody = "From: $name <$email>\n$insert_msgdate\n\n$message";
mail($mailRecipient,$mailSubject,$mailBody,"From: $email\nReply-to: $name <$email>");
}
if (strpos($refererpage, "?")==false) $page=$refererpage;
else $page=substr($refererpage, 0, strpos($refererpage, "?"));
header("Location: $page?");
exit;
}
}
else
{
readData(0);
if ($admin==$adminpassword)
{
if ($command=="")
{
displayHeader();
/************************************************************************
* Use Case no 2-A *
* *
* Admin mode (The administrator can modify password, fields, or remove *
* messages). *
* $admin = $adminpassword *
* Shows a password modification form. *
* Shows all messages and enables to modify/delete them. *
************************************************************************/
// Display the form which enables the admin to change his password
echo ("
\n");
echo(" \n");
// Message arrays are displayed here in forms in order to modify them :
echo ("
\n");
echo ("");
displayFooter();
exit;
}
else if ($command=="passwd")
{
// Use Case no 2-B
// Admin mode (The administrator is modifying his password.).
// $admin = $adminpassword
// $newPassword1 = "New Password 1"
// $newPassword2 = "New Password 2"
// Check if $newPassword1 matches $newPassword2
// Set the $adminpassword line to :
// $adminpassword = "$newPassword1" in the dataFile
if($newPassword1!=$newPassword2)
{
// The passwords doesn't match
displayMessage("$langPassError",1);
}
else
{
// Rewrites the whole Datafile with the new password, and all the entries.
$fout = Xfopen($dataFile, "w", false);
fputs ($fout,"\n");
fputs ($fout,"\$adminpassword = \"$newPassword1\";\n");
for ($i=1 ; $i<=$index ; ++$i)
{
fputs ($fout,"\$archive_name[++\$index] = \"${archive_name[$i]}\";\n");
fputs ($fout,"\$archive_mail[ \$index] = \"${archive_mail[$i]}\";\n");
fputs ($fout,"\$archive_date[ \$index] = \"${archive_date[$i]}\";\n");
fputs ($fout,"\$archive_text[ \$index] = \"${archive_text[$i]}\";\n");
}
fputs ($fout,"?>");
Xfclose($fout);
displayMessage("$langPassChanged",3);
exit;
}
}
else if ($command=="modify")
{
/********************************************************************************
* Use Case no 2-C *
* *
* Admin mode (The administrator is updating entries). *
* $admin = $adminpassword *
* $nameXXX = "Modified name (no XXX)" *
* $emailXXX = "Modified email (no XXX)" *
* $messageXXX = "Modified message (no XXX)" *
* $keep = "on" or "" *
* Check if $admin matches $adminpassword. *
* Rewrites ALL the fields except when $keepXXX = "" *
* Rewrites the whole Datafile with the new password, and all the entries. *
********************************************************************************/
$fout = Xfopen($dataFile, "w", false);
fputs ($fout,"\n");
fputs ($fout,"\$adminpassword = \"$adminpassword\";\n");
for ($i=1 ; $i<=$index ; $i++)
{
// Get values from the form, and standardize them
$variable=$HTTP_POST_VARS["name$i"];
$name=standardizeStoredText("$variable");
$variable=$HTTP_POST_VARS["email$i"];
$email=standardizeStoredText("$variable");
$variable=$HTTP_POST_VARS["date$i"];
$insert_msgdate=standardizeStoredText("$variable");
$variable=$HTTP_POST_VARS["message$i"];
$message=standardizeStoredText("$variable");
$variable=$HTTP_POST_VARS["keep$i"];
if (${variable}!="")
{
fputs ($fout,"\$archive_name[++\$index] = \"$name\";\n");
fputs ($fout,"\$archive_mail[ \$index] = \"$email\";\n");
fputs ($fout,"\$archive_date[ \$index] = \"$insert_msgdate\";\n");
fputs ($fout,"\$archive_text[ \$index] = \"$message\";\n");
}
}
fputs ($fout,"?>");
Xfclose($fout);
if (strpos($refererpage, "?")==false) $page=$refererpage;
else $page=substr($refererpage, 0, strpos($refererpage, "?"));
header("Location: $page?");
exit;
}
}
else
{
/************************************************
* Use Case no 2-Z *
* *
* If $admin does NOT match $adminpassword. *
* $admin != $adminpassword *
* Error message : "Wrong Admin Password" *
************************************************/
displayMessage("$langWrongPassword",1);
}
}
?>