#!/usr/bin/perl ############################################################################## # Megabook - Guestbook Script V2.1 # # Copyright 2005 Terry Billinger # # Created 7/2/00 # # Modified 02/15/05 # # Available at http://www.go-mega.net/megabook/ # ############################################################################## # COPYRIGHT NOTICE # # # # This script can be used/modified so long as this header and any parts # # of the program which give credit remain intact. By using this program, # # you indemnify the creators from any liability that may arise from its use. # # # # Redistributing/selling the code for this program is strictly forbidden # # without prior written consent. # ############################################################################## print ("Content-type: text/html\n\n"); # Reads 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 chmod(0666, "setup.db"); open (SETUP, "setup.db"); @setup = ; close(SETUP); chmod(0000, "setup.db"); $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,$nextview,$backview, $privview,$adminpassword,$uplook,$downlook,$requiredfields,$fontface,$pagebreak, $yearformat,$dateformat,$timeformat,$timezone,$dateseperator,$altcolor1,$altcolor2,$mail_them,$icqflower) = split(/\|/, $setupline); $entriesperpage = $entriesperpage - 1; 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 = ($#data + 1); # PAGE CODE $numofpages = ($totalentries / ($entriesperpage + 1)); $roundnumofpages = int($numofpages); if ($numofpages - $roundnumofpages > 0) { $roundnumofpages++; } if ($pagebreak < 3) { $pagebreak = 3; } $pagebreak = int($pagebreak); $space = ($pagebreak / 2); $roundpagebreak = int($space); if ($space - $roundpagebreak > 0) { $spacing = $space - .5; } else { $spacing = $space; } # Calculate current page, starting page and ending page $currentpage = ($FORM{'start'} + $entriesperpage + 1) / ($entriesperpage + 1); $startpage = $currentpage - $spacing; $endpage = $currentpage + $spacing; # If at the end of the guestbook fix list if (($endpage * ($entriesperpage + 1)) > $totalentries) { $endpage = $roundnumofpages; $startpage = $endpage - $pagebreak + 1; } # If at the start of the guestbook fix list if ($startpage <= 0) { $startpage = 1; if ($roundnumofpages > $pagebreak) { $endpage = $pagebreak; } else { $endpage = $roundnumofpages; } } # Setup ouput for ($pagenum = $startpage;$pagenum <= $endpage;$pagenum++) { $entriesonpage = ($pagenum * ($entriesperpage + 1)); $entriesonpage -= $entriesperpage + 1; $pagesoutput .= "$pagenum"; if ($pagenum != $endpage) { $pagesoutput .= "\ \ " } } # END PAGE CODE unless ($FORM{'start'}) { $FORM{'start'} = 0; } if ($entriesperpage == -1) { $entriesperpage = $#data; } $last = $FORM{'start'} + $entriesperpage; if ($last > $#data) { $last = $#data; } if ($reverseentries eq "1") { $startnum = $FORM{'start'} + 1; $end = $last + 1; } else { $end = $totalentries - $FORM{'start'}; $startnum = $end - $entriesperpage; if ($startnum <= 1) { $startnum = 1; } } $lastnum = "$last"; $startcount = "$FORM{'start'}"; $k = 0; for ($k = $startcount; $k <= $lastnum; $k++) { } if ($startcount > 0) { $k = $startcount - $entriesperpage - 1; if ($k < 0) { $k = 0; $l = $startcount + 1; } else { $l = $entriesperpage + 1; } $backview =~ s/\[num\]/$l/ig; if ($entriesperpage >= 1) { $back = "$backview"; } } if ($lastnum < $#data) { $lastnum++; $startcount = ($#data + 1) - $lastnum; if ($startcount > $entriesperpage) { $startcount = $entriesperpage + 1; } $nextview =~ s/\[num\]/$startcount/ig; if ($entriesperpage >= 1) { $next = "$nextview"; } } # 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\]/$startnum/ig; $_ =~ s/\[endnum\]/$end/ig; $_ =~ s/\[next\]/$next/ig; $_ =~ s/\[pagelist\]/$pagesoutput/ig; $_ =~ s/\[pagenum\]/$currentpage/ig; $_ =~ s/\[totalpages\]/$roundnumofpages/ig; $_ =~ s/\[back\]/$back/ig; push (@header,$_); } close(HEAD); print "\n"; print "@header"; $colorswitch = "$altcolor1"; $i = 0; for ($i = $FORM{'start'}; $i <= $last; $i++) { @entrylayout = &viewhtml($data[$i]); print "@entrylayout"; if ($colorswitch eq "$altcolor1") { $colorswitch = $altcolor2; } else { $colorswitch = $altcolor1; } } } #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,$adminreply,$month,$day,$year,$min,$hour,$var1,$var2,$var3,$var4,$var5,$var6,$ip,$browser,$icq) = 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 foreach $badword (@badwords) { $length = length($badword); $replace = "*" x $length; $name =~ s/$badword/$replace/ig; $comment =~ s/$badword/$replace/ig; } $icq =~ s/\s+//g; if ($icq =~ /[^0-9]+/ || $icq eq "") { $icq = ""; } else { if ($icqflower == 1) { $icq = ""; } else { $icq = $icq; } } # Check if its a private message to the admin. if ($private eq "priv") { $comment = "$privview"; } ####### TIME SETUP #### Time Setups for Time Formats if ($timeformat <= 2) { if ($hour >= 12) { if ($hour != 12) { $hour -= 12; } if ($timeformat == 1) { $ampm = " PM"; } else { $ampm = "p"; } } else { if ($hour <= 0) { $hour = 12; } if ($timeformat == 1) { $ampm = " AM"; } else { $ampm = "a"; } } } else { if ($hour < 10) { $hour = "0$hour"; } $ampm = ""; } sub timefix { if ($day < 10) { $day = "0$day"; } if ($yearformat == 2) { $year -= "2000"; if ($year < 10) { $yearzero = "0"; } else { $yearzero = ""; } } else { $yearzero = ""; } @months = ("1","2","3","4","5","6","7", "8","9","10","11","12"); $month = @months[$month]; if ($month < 10) { $month = "0$month"; } } if ($dateformat == 1) { &timefix; $date = "$month$dateseperator$day$dateseperator$yearzero$year"; } if ($dateformat == 2) { &timefix; $date = "$day$dateseperator$month$dateseperator$yearzero$year"; } if ($dateformat == 3) { &timefix; $date = "$yearzero$year$dateseperator$month$dateseperator$day"; } if ($dateformat == 4) { &timefix; $date = "$yearzero$year$dateseperator$day$dateseperator$month"; } if ($dateformat == 5) { @months = ("January","February","March","April","May","June","July", "August","September","October","November","December"); $month = @months[$month]; $date = "$month $day, $year"; } if ($dateformat == 6) { @months = ("Jan","Feb","Mar","Apr","May","Jun","Jul", "Aug","Sep","Oct","Nov","Dec"); $month = @months[$month]; $date = "$month $day, $year"; } $time = "$hour:$min$ampm"; @entrylayout = ""; $keeplinks = 0; # 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/\[icq\]/$icq/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; $_ =~ s/\[adminreply\]/$adminreply/ig; $_ =~ s/\[alternate\]/$colorswitch/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 (