#!/usr/bin/perl ############################################################################## # Megabook - Guestbook Script V1.1 # # Copyright 2000 Terry Billinger # # Created 7/3/00 # # Available at http://www.militerry.com/megabook/ # ############################################################################## # COPYRIGHT NOTICE # # Copyright 2000 Terry Billinger # # # # This script was made by combining Matt Riffle's Flexbook and # # Cliff Gdansk's Guestbook scripts. # # It allows for easy modification and easy administration. # # # # This script can be used\modified free of charge as long as you don't # # change this header or any of the parts that give me credit for writing # # this. By using this script you agree to indemnify me from any liability # # that might arise from its use. In simple English, if this script somehow # # makes your computer run amuck and kill the pope, it's not my fault. # # # # # # Redistributing\selling the code for this program without prior written # # consent is expressly forbidden. # ############################################################################## print ("Content-type: text/html\n\n"); # Adds in style and setup. &getdata; &process; &signhtml; &footer; sub getdata { if ($ENV{'QUERY_STRING'}) { foreach (split('&', $ENV{'QUERY_STRING'})) { s/\+/ /g ; ($name, $value)= split('=', $_, 2) ; $name=~ s/%(..)/chr(hex($1))/ge ; $value=~ s/%(..)/chr(hex($1))/ge ; $FORM{$name}.= "\0" if defined($FORM{$name}) ; # concatenate multiple vars $FORM{$name}.= $value ; } } # Read in style and setup open (SETUP, "setup.db"); @setup = ; close(SETUP); $setupline = ($setup[0]); chomp($setupline); ($title,$background,$bgcolor,$textcolor,$linkcolor,$vlinkcolor,$alinkcolor,$homepage,$mailprogram,$datafile,$success,$adminemail,$reverseentries,$allow_html,$entriesperpage,$maxentries,$mail_you,$guesspass,$bwfilter,$nextview,$backview,$privview,$adminpassword,$uplook,$downlook,$requiredfields,$fontface) = split(/\|/, $setupline); open (DATA, "$datafile"); if ($reverseentries eq "1") { @data = reverse(); } else { @data = ; } close(DATA); open (BADWORDS, "badwords.txt"); @badwords = split /\s+/, ; close(BADWORDS); } # PROCESS GUESTBOOK sub process { # Check if HTML is on or off. if ($allow_html eq "1") { $htmlstatus = "HTML has been enabled."; } else { $htmlstatus = "HTML has been disabled."; } $totalentries = 0; foreach (@data) { $totalentries++; } unless ($FORM{'start'}) { $FORM{'start'} = 0; } if ($entriesperpage == -1) { $entriesperpage = $#data; } $last = $FORM{'start'} + $entriesperpage; if ($last > $#data) { $last = $#data; } if ($reverseentries eq "1") { $i = $FORM{'start'} + 1; $j = $last + 1; } else { $j = $totalentries - $FORM{'start'}; $i = $j - $entriesperpage; if ($i <= 1) { $i = 1; } } # Read in header and print out open (HEAD, "header.txt"); while () { $_ =~ s/\[title\]/$title/ig; $_ =~ s/\[background\]/$background/ig; $_ =~ s/\[bgcolor\]/$bgcolor/ig; $_ =~ s/\[font\]/$fontface/ig; $_ =~ s/\[textcolor\]/$textcolor/ig; $_ =~ s/\[linkcolor\]/$linkcolor/ig; $_ =~ s/\[vlinkcolor\]/$vlinkcolor/ig; $_ =~ s/\[alinkcolor\]/$alinkcolor/ig; $_ =~ s/\[homepage\]/$homepage/ig; $_ =~ s/\[htmlstatus\]/$htmlstatus/ig; $_ =~ s/\[totalnum\]/$totalentries/ig; $_ =~ s/\[startnum\]/$i/ig; $_ =~ s/\[endnum\]/$j/ig; push (@header,$_); } close(HEAD); print "@header"; $i = 0; for ($i = $FORM{'start'}; $i <= $last; $i++) { @entrylayout = &viewhtml($data[$i]); print "@entrylayout"; } if ($FORM{'start'} > 0) { $i = $FORM{'start'} - $entriesperpage - 1; if ($i < 0) { $i = 0; $j = $FORM{'start'} + 1; } else { $j = $entriesperpage + 1; } $backview =~ s/\[num\]/$j/ig; if ($entriesperpage >= 1) { print "$backview    "; } } if ($last < $#data) { $last++; $FORM{'start'} = ($#data + 1) - $last; if ($FORM{'start'} > $entriesperpage) { $FORM{'start'} = $entriesperpage + 1; } $nextview =~ s/\[num\]/$FORM{'start'}/ig; if ($entriesperpage >= 1) { print "    $nextview"; } } } #END PROCESS GUESTBOOK # HTML OF OUTPUTTED ENTRIES sub viewhtml { # Get the data and change it into what we want to show $line = shift(@_); ($name,$private,$email,$url,$comment,$date,$time,$var1,$var2,$var3,$var4,$var5,$var6,$ip,$browser) = split(/\|/, $line); if ($reverseentries eq "1") { $entryid = ($i + 1); $downentry = ($entryid + 1); $upentry = ($entryid - 1); } else { $entryid = ($totalentries - $i); $upentry = ($entryid + 1); $downentry = ($entryid - 1); } $up = "$uplook"; $down = "$downlook"; # HTML Filter $comment =~ s/<//g; if ($allow_html == 0) { $comment =~ s/

/&60;p>/ig; $comment =~ s/
/&60;br>/ig; $comment =~ s/<([^>]|\n)*>//g; $comment =~ s/&60;p>/

/ig; $comment =~ s/&60;br>/
/ig; } # Kill Bad Words if ($bwfilter eq "1") { foreach $badword (@badwords) { $name =~ s/$badword/****/ig; $comment =~ s/$badword/****/ig; } } # Check if its a private message to the admin. if ($private eq "priv") { $comment = "$privview"; } @entrylayout = ""; # Read in entry layout open (LAYOUT, "entry.txt"); while () { $_ =~ s/\[font\]/$fontface/ig; $_ =~ s/\[name\]/$name/ig; $_ =~ s/\[url\]/$url/ig; $_ =~ s/\[email\]/$email/ig; $_ =~ s/\[up\]/$up/ig; $_ =~ s/\[down\]/$down/ig; $_ =~ s/\[entrynum\]/$entryid/ig; $_ =~ s/\[comment\]/$comment/ig; $_ =~ s/\[date\]/$date/ig; $_ =~ s/\[time\]/$time/ig; $_ =~ s/\[ip\]/$ip/ig; $_ =~ s/\[browser\]/$browser/ig; $_ =~ s/\[var1\]/$var1/ig; $_ =~ s/\[var2\]/$var2/ig; $_ =~ s/\[var3\]/$var3/ig; $_ =~ s/\[var4\]/$var4/ig; $_ =~ s/\[var5\]/$var5/ig; $_ =~ s/\[var6\]/$var6/ig; push (@entrylayout,$_); } close(LAYOUT); return(@entrylayout); } # END HTML OF OUTPUTTED ENTRIES # SIGNING HTML - Modify if you wish sub signhtml { # Read in footer open (FOOTER, "footer.txt"); while (