<?

// ***************************************************************
// *                                                             *
// *    BIG SAM   :   Built-In Guestbook / Stand-Alone Module    *
// *              Version 1.0.08 - March, 25th 2000              *
// *                                                             *
// * Copyleft 2000 Georges Zadrozynski & Rémi Lecoupé-Grainville *
// *        Gezzed@atilla.eisti.fr & RLG@atilla.eisti.fr         *
// *                                                             *
// *         Homepage : http://atilla.eisti.fr/bigsam            *
// *                                                             *
// *     This source is under GNU/GPL General Public License     *
// *                                                             *
// ***************************************************************

// $adminpassword is the password which will be asked for any administration
// actions. This password could be changed only if in admin mode (old 
// $adminpassword matches $admin).
// Take care : The beginning of the line should look like "$adminpassword ="
// or "$adminpassword=" (No spaces, no tabs, etc...)
$adminpassword "bigsam";

// $myself is the name of the current script (this file) and which is going to
// be modified by itself. This means that (theoretically) this file can be 
// placed anywhere on the system, with any filename.
$myself  $SCRIPT_FILENAME;
$myself2 $SCRIPT_NAME;
// Compatibility for Win32 -> not tested
if (strpos($SERVER_SOFTWARE"Win32")) 
    {
    
$myself$PATH_TRANSLATED;
    
$myself2 $PATH_INFO;
    }


// Aspect of the script : Colors
// Choosing colors 
/*
    // Standard (Greys, bright background)
    $color_white    = "#FFFFFF";
    $color_black    = "#000000";
    $color_heads    = "#666666";
    $color_body1    = "#eeeeee";
    $color_body2    = "#dddddd";
*/
// The Following is the ATILLA-type based model
$color_white    "#FFFFFF";
$color_black    "#000000";
$color_heads    "#42426F";
$color_body1    "#FFF8DC";
$color_body2    "#EFE8CC";

// Data submission form colors
$formheadcolor    $color_heads;
$formbodycolor    $color_body1;
$formtailcolor    $color_body2;
$formheadtext     $color_white;
$formbodytext     $color_black;
// Guestbook entries colors
$entryheadcolor   $color_heads;
$entrybodycolor1  $color_body2;
$entrybodycolor2  $color_body1;
$entryheadtext    $color_white;
$entrybodytext1   $color_black;
$entrybodytext2   $color_heads;
// Messages colors
$adminheadcolor   $color_heads;
$adminheadtext    $color_white;
$adminbodycolor1  $color_body2;
$adminbodytext1   $color_black;
$adminbodycolor2  $color_body1;
$adminbodytext2   $color_heads;


// Self regeneration of the script (The Rémi's ultime bricolage !)

if (strpos($myself"_temporary")!=false
    {
    
$mainscript=sprintf("%s.php3"substr($myself0strpos($myself"_temporary")));
    
$mainscript2=sprintf("%s.php3"substr($myself20strpos($myself2"_temporary")));
    
$tempscript=$myself;
    
$tempscript2=$myself2;
    
unlink($mainscript);
    
copy($tempscript,$mainscript);
    
chmod"$mainscript"0666 ); // Diabolic !
    
header("Location: http://$SERVER_NAME$mainscript2");
    }
$mainscript=$myself;
$mainscript2=$myself2;
$tempscript=sprintf("%s_temporary.php3"substr($myself0strpos($myself".php3")));
$tempscript2=sprintf("%s_temporary.php3"substr($myself20strpos($myself2".php3")));
if (
file_exists($tempscript)) 
    {
    if (
filemtime($tempscript)>filemtime($mainscript)) header("Location: http://$SERVER_NAME$tempscript2");
    else 
unlink($tempscript);
    }


//******************************************************************************

// This place ss where all the data are archived, before being used by the 
// miscellaneous cases.

$index 0;

// Here are automatically filled data arrays :

//#DATABEGIN 
//#DATAEND

// From now, $index will indicate the number of data entries.

//******************************************************************************
// function displayform : Display the form which enables the client to type a
// message.

function displayform()
{
global 
$mainscript2;
$borderthickness 3;

global 
$formheadcolor;
global 
$formbodycolor;
global 
$formtailcolor;
global 
$formheadtext;
global 
$formbodytext;

// Writing HTML Code
echo ("<CENTER>\n");
echo (
"<FORM METHOD=POST ACTION=\"$mainscript2\"><TABLE border=0 cellspacing=0 cellpadding=3>\n");
echo (
"<TR bgcolor=$formheadcolor>\n");
echo (
"<TD><Font color=$formheadtext><B>Name :</B></font><input name=name size=20></TD>\n");
echo (
"<TD>&nbsp;</TD>\n");
echo (
"<TD align=right><Font color=$formheadtext><B>E-mail :</B></font><input name=email size=20></TD>\n");
echo (
"</TR>\n");
echo (
"<TR bgcolor=$formbodycolor><TD Colspan=3>\n");
echo (
"<Font color=$formbodytext><B>Message :</B></font><BR>\n");
echo (
"<TEXTAREA NAME=message COLS=60 ROWS=7></textarea>\n");
echo (
"</TD></TR>\n");
echo (
"<TR bgcolor=$formtailcolor><TD Colspan=3 align=right>\n");
echo (
"<input type=submit value=\"Send the message\">");
echo (
"</TD></TR>\n");
echo (
"</TABLE>\n");
echo (
"</FORM>\n");
echo (
"</CENTER>\n");
}

//******************************************************************************
// function displayerror displays the $errormessage error message.

function displayerror($errormessage,$msgtype)
{
global 
$adminheadcolor;
global 
$adminheadtext;
global 
$adminbodycolor1;
global 
$adminbodytext1;
global 
$adminbodycolor2;
global 
$adminbodytext2;

echo (
"<table width=100% height=100%><tr><td width=100% height=100% valign=middle align=center>");
echo (
"<table cellspacing=0 border=0 width=250><tr><td bgcolor=$adminheadcolor>");
echo (
"<font Color=$adminheadtext size=-3>&nbsp; BIG SAM Guestbook</font><br>");
echo (
"</td></tr><tr><td bgcolor=$adminbodycolor1><Font Color=$adminbodytext>");
if (
$msgtype=="1"// Admin Message
    
echo ("<i>&nbsp; Administrator Error</i>");
if (
$msgtype=="2"// System Message
    
echo ("<i>&nbsp; System Error</i>");
echo (
"</Font>");
echo (
"</td></tr><tr><td bgcolor=$adminbodycolor2>");
echo (
"<Font Color=$adminbodytext2>");
echo (
"<br><center><B>$errormessage</B></center><BR>");
echo (
"</Font></td></tr></table><P>&nbsp;</P>\n");
echo (
"</td></tr></table>");
exit;
}

//******************************************************************************
// function displayheader displays the heder for your page

function displayheader()
{
// You migh use and include instead of all this :
// include ("head.inc");
echo ("<HTML>\n");
echo (
"<BODY bgcolor=#ffffff>\n");
}

//******************************************************************************
// function standardize_text filters ambiguous chains in $str

function standardize_text($str)
{
$str strip_tags($str);
$str str_replace("\'""'"$str);
$str str_replace("\r\n""<br>"$str);
return 
$str;
}

//******************************************************************************

if ($admin=="") {
if (
$name=="" || $message=="") {

displayheader();

// 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);

// Displays the entry form to enable the client to type a message.
displayform();
echo (
"<P>&nbsp;</P>\n");

// Message arrays are displayed here :

echo "<center>\n";

// Displaying all the entries.
for ($i=$i<=$index $i++)
    {
    
$msgnumber $index $i 1;
    echo (
"<table cellspacing=0 border=0 width=600><tr><td bgcolor=$entryheadcolor>");
    echo (
"<font Color=$entryheadtext size=-3>&nbsp; &nbsp; $archive_date[$i] &nbsp; &nbsp;</font><br>");
    echo (
"</td></tr><tr><td bgcolor=$entrybodycolor1>");
    echo (
"<Font Color=$entrybodytext><B>");
    if (
$archive_mail[$i]!="")
        {
        echo (
"$msgnumber : <A HREF=\"mailto:$archive_mail[$i]\">$archive_name[$i]</A>");
        }
    else 
        {
        echo (
"$msgnumber : $archive_name[$i]");
        }
    echo (
"</Font>");
    echo (
"</td></tr><tr><td bgcolor=$entrybodycolor2>");
    echo (
"<Font Color=$entrybodytext2>");
    echo (
"<B>$archive_text[$i]</B><BR>");
    echo (
"</Font></td></tr></table><br><br>\n");
    }
echo 
"</center>\n";

//******************************************************************************

} 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.

// to do : adding message to this file, then redirecting to myself

$fin  fopen($mainscript"r");
$fout fopen($tempscript"w");
if (
$fout<|| $fin<0
    {
    
displayheader();
    
displayerror("Error opening files !<br>Be sure writing is allowed in this directory.",2);
    }

$line "";
for(
$i=$i<1000 && strpos($line"#DATABEGIN")==false $i++)
    {
    
$line=fgets($fin10000);
    
fputs($fout$line);
    }

$insert_msgdate date"dS F Y - h:i:s A" );

$name=standardize_text($name);
$email=standardize_text($email);
$message=standardize_text($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");

for(
$i=$i<10000 && !feof($fin) ; $i++) 
    {
    
$line=fgets($fin10000);
    
fputs($fout$line);
    }
fclose($fin);
fclose($fout);

header("Location: http://$SERVER_NAME$tempscript2");

//******************************************************************************

}} else {

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.

echo("<center><h2>BIG SAM</h2><h4>Guestbook Administration</h4></center>\n");
echo(
"<br>\n");


// Display the form which enables the admin to change his password
echo ("<center><table cellspacing=0 border=0>\n");
echo (
"<FORM METHOD=POST ACTION=\"$mainscript2\">\n");
echo (
"<tr><td bgcolor=$adminheadcolor colspan=2><font color=$adminheadtext>\n");
echo (
"&nbsp;<b>Change <i>Big Sam</i> Password</b>.</font></td></tr>\n");
echo (
"<tr><td align=right bgcolor=$adminbodycolor2>");
echo (
"<font color=$adminbodytext2>&nbsp; New Password :</font></td>\n");
echo (
"<td align=left bgcolor=$adminbodycolor2>");
echo (
"<input type=password name=newpassword1>&nbsp;</td></tr>\n");
echo (
"<tr><td align=right bgcolor=$adminbodycolor2>");
echo (
"<font color=$adminbodytext2>&nbsp; Retype new Password :</font></td>\n");
echo (
"<td align=left bgcolor=$adminbodycolor2>");
echo (
"<input type=password name=newpassword2>&nbsp;</td></tr>\n");
echo (
"<tr><td bgcolor=$adminbodycolor1 colspan=2 align=center>\n");
echo (
"<input type=hidden name=admin value=$admin>\n");
echo (
"<input type=hidden name=command value=passwd>\n");
echo (
"<input type=submit value=\"Change Password\"></td></tr>\n");
echo (
"</FORM>\n");
echo (
"</tr></table></center>\n");

echo(
"<br><hr><br>\n");

// Message arrays are displayed here in forms in order to modify them :

echo ("<FORM METHOD=POST ACTION=\"$mainscript2\"><center>\n");

for (
$i=$i<=$index $i++)
    {
    
$str str_replace("<br>""\r\n"$archive_text[$i]);
    
$msgnumber $index $i 1;
    echo (
"<table cellspacing=0 cellpadding=3><tr><td colspan=4 bgcolor=$adminheadcolor>\n");
    echo (
"<font color=$adminheadtext><b>&nbsp;");
    echo (
"Entry #$msgnumber</b>.</font>&nbsp;</td></tr>\n");
    echo (
"<tr bgcolor=$adminbodycolor2>\n");
        echo (
"<td>&nbsp;<input type=checkbox name=keep$i checked>&nbsp;</td>\n"); 
    echo (
"<td><input name=name$i value=\"$archive_name[$i]\"></td>\n");
    echo (
"<td><input name=email$i value=\"$archive_mail[$i]\"></td>\n");
    echo (
"<td><input name=date$i value=\"$archive_date[$i]\"></td>\n");
    echo (
"<tr bgcolor=$adminbodycolor1>\n");
    echo (
"<td colspan=4><textarea cols=60 rows=2 name=message$i>$str");
    echo (
"</textarea></td>\n</tr></table>\n<br>\n");
    }
echo (
"<input type=hidden name=admin value=$admin>\n");
echo (
"<input type=hidden name=index value=$index>\n");
echo (
"<input type=hidden name=command value=modify>\n");
echo (
"<input type=submit value=\"Submit Modifications\">\n");
echo (
"</FORM></center>\n");


//******************************************************************************


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" 

if($newpassword1!=$newpassword2)
    {
    
// The passwords doesn't match
    
displayheader();
    
displayerror("The new passwords don't match !",1);
    }
else
    {
    
$fin  fopen($mainscript"r");
    
$fout fopen($tempscript"w");
    if (
$fout<|| $fin<0
        {
        
displayheader();
        
displayerror("Error opening files !<br>Be sure writing is allowed in this directory.",2);
        }
    
$line "";
    for(
$i=$i<10000 && !feof($fin); $i++)
            {
        
$line=fgets($fin10000);
        
// Seek the "$adminpassword =" line
        
if ((substr($line016)=="\$adminpassword =")||(substr($line015)=="\$adminpassword="))
            {
            
// Replace by the new password
            
$newpassword1 standardize_text($newpassword1);
            
fputs ($fout,"\$adminpassword = \"$newpassword1\";\n");
            }
        else
            {
            
fputs($fout$line);
            }
        }
    
fclose($fin);
    
fclose($fout);
    
header("Location: http://$SERVER_NAME$tempscript2");
    }
    
//******************************************************************************

} 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 = ""


$fin  fopen($mainscript"r");
$fout fopen($tempscript"w");
if (
$fout<|| $fin<0)
    {
    
displayheader();
    
displayerror("Error opening files !<br>Be sure writing is allowed in this directory.",2);
    }
    
// Writes all the script lines until "#DATABEGIN"
$line "";
for(
$i=$i<1000 && strpos($line"#DATABEGIN")==false $i++)
    {
    
$line=fgets($fin10000);
    
fputs($fout$line);
    }

for (
$i=$i<=$index $i++)
    {
    
// Get values from the form, and standardize them
    
$variable="name$i";
    
$name=standardize_text("${$variable}");
    
$variable="email$i";
    
$email=standardize_text("${$variable}");
    
$variable="date$i";
    
$insert_msgdate=standardize_text("${$variable}");
    
$variable="message$i";
    
$message=standardize_text("${$variable}");
    
    
$variable="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");
        }
    }

// Seeks for the "#DATAEND" line, and skips all the data
$line "";
for(
$i=$i<1000 && strpos($line"#DATAEND")==false $i++)
    {
    
$line=fgets($fin10000);    
    }
    
fputs($fout$line);
    
// Writes the rest of the script  
for($i=$i<10000 && !feof($fin) ; $i++) 
    {
    
$line=fgets($fin10000);
    
fputs($fout$line);
    }
fclose($fin);
fclose($fout);

header("Location: http://$SERVER_NAME$tempscript2");
}

//******************************************************************************

} else {

// Use Case no 2-Z
// If $admin does NOT match $adminpassword.
//    $admin   != $adminpassword
//        Error message : "Wrong Admin Password"

displayheader();
displayerror("Wrong Admin Password",1);

}}

//******************************************************************************

?>
</body>
</html>