#!/usr/bin/perl --

select(STDOUT); $|=1;

   @wwwspecs=("/home/sites/site162/web/motorhomes/denmark/messages;/motorhomes/denmark;denmark;denmark customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/england/messages;/motorhomes/england;england;england customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/france/messages;/motorhomes/france;france;france customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/germany/messages;/motorhomes/germany;germany;germany customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/italy/messages;/motorhomes/italy;italy;italy customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/netherlands/messages;/motorhomes/netherlands;netherlands;netherlands customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/scandinavia/messages;/motorhomes/scandinavia;scandinavia;scandinavia customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/spain/messages;/motorhomes/spain;spain;spain customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/australia_new_zealand/messages;/motorhomes/australia_new_zealand;australia;australia customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messagesoz;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/australia_new_zealand/messages;/motorhomes/australia_new_zealand;new zealand;new zealand customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messagesnz;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/usa/messages;/motorhomes/usa;usa;usa customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0",
   "/home/sites/site162/web/motorhomes/canada/messages;/motorhomes/canada;canada;canada customer reviews;;;#ffffff;#000000;#0000FF;#0000ff;#FF0000;messages;html;data.txt;index.html;access.txt;digest.txt;email.txt;1;1;0;1;1;0;1;ON;65;0"
   );

$monsterdir="/home/sites/site162/web/motorhomes/all";

   @badwords=("cunt", "fuck", "bitch", "slut", "whore", "prick",
   "asshole", "fucking", "faggot", "nigger", "dyke", "fucker"
   );


$allow_html=1; # 1=YES 0=NO

###########################################################################
print "content-type: text/html\n\n";

# Get form info
&parse_form;

if ($FORM{'board'} eq "") { $board=0; } else { $board=$FORM{'board'}; }

($basedir,$baseurl,$country,$title,$background,$logo,$bgcolor,$text,$link,$vlink,$alink,$mesgdir,$ext,$datafile,$mesgfile,$access_file,$logfile,$email_file,$show_faq,$quote_text,$sendmail,$kill_badwords,$digest,$subject_line,$use_time,$wordwrap,$line_width,$private_board)=split(/;/,@wwwspecs[$board]);

# Compose a review
if ($FORM{'action'} eq "post a review") { &compose_a_review; }

# Put user-entered data into variables
&get_variables;

# Check for offensive words
&CDA_filter;

# Write the review to the particular country's review page
&main_page;

# Write the review to the monster review page
&monster_page;

# E-mail the business using this software, letting them know someone has
# added a review.
&send_email_notice;

# Return the user HTML
&return_html;


#######################
# Parse Form Subroutine
sub parse_form {
   # Get the input
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
   # Split the name-value pairs
   @pairs = split(/&/, $buffer);
   foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);
      # Un-Webify plus signs and %-encoding
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $value =~ s/<!--(.|\n)*-->//g;
      if ($allow_html != 1) {
         $value =~ s/<p>/\n\n/g;
         $value =~ s/<br>/\n/g;
         $value =~ s/<([^>]|\n)*>//g;
      } else { unless ($name eq 'body') { $value =~ s/<([^>]|\n)*>//g; } }
      $FORM{$name} = $value;
   }
}
###############
# Get Variables
sub get_variables {
   if ($FORM{'name'}) {
      $name = "$FORM{'name'}";
      $name =~ s/"//g;
      $name =~ s/<//g;
      $name =~ s/>//g;
      $name =~ s/\&//g;
   } else {
      &error(no_name);
   }

   if ($FORM{'email'} =~ /.*\@.*\..*/) {
      $email = "$FORM{'email'}";
   }

   if ($FORM{'body'}) {
      $body = "$FORM{'body'}";
      $body =~ s/\cM//g;
      $body =~ s/\n\n/<p>/g;
      $body =~ s/\n/<br>/g;
      $body =~ s/&lt;/</g; 
      $body =~ s/&gt;/>/g; 
      $body =~ s/&quot;/"/g;
   } else  {
      &error(no_body);
   } 

   $hidden_body = "$body";
   $hidden_body =~ s/</&lt;/g;
   $hidden_body =~ s/>/&gt;/g;
   $hidden_body =~ s/"/&quot;/g;
   # To send mail to WWW board host
   $email_body = "$body";
   $email_body =~ s/<p>/\n\n/g;
   $email_body =~ s/<br>/\n/g;
   # Digest Body
   $digest_body = "$FORM{'body'}";
   $digest_body =~ s/<p>/\n\n/g;
   $digest_body =~ s/<br>/\n/g;
   $digest_body =~ s/<([^>]|\n)*>//g;
   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
   if ($sec < 10) { $sec = "0$sec"; }
   if ($min < 10) { $min = "0$min"; }
   if ($hour < 10) { $hour = "0$hour"; }
   if ($mon < 10) { $mon = "0$mon"; }
   if ($mday < 10) { $mday = "0$mday"; }
   $month = ($mon + 1);
   @months = ("january","february","march","april","may","june","july","august","september","october","november","december");
   if ($use_time == 1) { $date = "$hour\:$min\:$sec  $mday/$month/$year";
   } else { $date = "$mday/$month/$year"; }
   chop($date) if ($date =~ /\n$/);
   $yearhold = $year - 100;
   if ($yearhold == 0) {$year = "00";}
   elsif ($yearhold == 1) {$year = "01";}
   elsif ($yearhold == 2) {$year = "02";}
   elsif ($yearhold == 3) {$year = "03";}
   elsif ($yearhold == 4) {$year = "04";}
   elsif ($yearhold == 5) {$year = "05";}
   elsif ($yearhold == 6) {$year = "06";}
   elsif ($yearhold == 7) {$year = "07";}
   elsif ($yearhold == 8) {$year = "08";}
   elsif ($yearhold == 9) {$year = "09";}
   else {$year = $yearhold;}
   $century = "20";
   $long_date = "$mday $months[$mon] $century$year";

}

###############################
# Main WWWBoard Page Subroutine

sub main_page {
   open(MAIN,"$basedir/$mesgfile") || die $!;
   @main = <MAIN>;
   close(MAIN);
   open(MAIN,">$basedir/$mesgfile") || die $!;
   foreach $main_line (@main) {
         if ($main_line =~ /<!--begin-->/) {
            print MAIN "<!--begin-->\n";
            if ($FORM{'email'}) {
               print MAIN "<B>$name, <a href=\"mailto:$email\">$email</a>, $long_date</B><BR>$body<p>\n";
            } else {
               print MAIN "<B>$name, $long_date</B><BR>$body<p>\n";
            }
         }
         else {
            print MAIN "$main_line";
         }
   }
   close(MAIN);

}

###############################
# Monster Page Subroutine

sub monster_page {
   open(MONSTER,"$monsterdir/$mesgfile") || die $!;
   @monster = <MONSTER>;
   close(MONSTER);
   open(MONSTER,">$monsterdir/$mesgfile") || die $!;
   foreach $monster_line (@monster) {
         if ($monster_line =~ /<!--begin-->/) {
            print MONSTER "<!--begin-->\n";
            if ($FORM{'email'}) {
               print MONSTER "<B>$name, <a href=\"mailto:$email\">$email</a>, $long_date</B><BR>$body<p>\n";

            } else {
               print MONSTER "<B>$name, $long_date</B><BR>$body<p>\n";
            }
         }
         else {
            print MONSTER "$monster_line";
         }
   }
   close(MONSTER);

}


############################################
# Send e-mail notice
####################
sub send_email_notice {

   $pathtofiles = "/home/sites/site162/web/motorhomes";
   $logfile = "logfile.txt";

   $clientemail = "campers\@ideamerge.com";
   $ccemail = "dbredesen\@verizon.net";
   $subject = "$name has added a review to the $title.";

   open(LOGFILE,">$pathtofiles/logfile.txt") || die $!;
   print LOGFILE "$body\n";
   close(LOGFILE);

   open(LOGFILE,"/home/sites/site162/web/motorhomes/logfile.txt") || die $!;
   @logfile = <LOGFILE>;
   close(LOGFILE);

   open(SENDMAIL, "|/usr/lib/sendmail -t");
   print SENDMAIL "To: $clientemail\n";
   print SENDMAIL "Cc: $ccemail\n";
   print SENDMAIL "From: $clientemail\n";
   print SENDMAIL "Subject: $subject\n";

   foreach $logfile_line (@logfile) {
      print SENDMAIL "$logfile_line";
   }

   close(SENDMAIL);

   # Purge the logfile
   open(LOGFILE,">$pathtofiles/$logfile") || die $!;
   print LOGFILE "\n";
   close(LOGFILE);

}


sub return_html {
   print "<html>\n";
   print "<BODY BACKGROUND=\"$background\" BGCOLOR=\"$bgcolor\" TEXT=\"$text\" LINK=\"$link\" VLINK=\"$vlink\" ALINK=\"$alink\">\n";
   print "<font face=\"Arial, Helvetica,sans-serif\">\n";
   print "<h1>thank you</h1>\n";
   print "<b>t</b>he following was added to the <I>$title</I> &#133;<p>\n";
   print "<b>name:</b> $name<br>\n";
   if ($FORM{'email'}) {
      print "<b>e-mail:</b> $email<br>\n";
   }
   print "<b>date:</b> $long_date<br>\n";
   print "<b>review: </b>\n";
   print "$body\n";
   print "<center>\n";
   print "</center>\n";
   print "<p>&nbsp;</p>\n";
   print "</font></BODY>\n";
   print "</HTML>\n";
}

###########################

sub error {
   $error = $_[0];
   if ($error eq 'no_name') {
      print "<html><head><title><I>$title</I><font face=\"Arial, Helvetica,sans-serif\">error: no name</title></head>\n";
      print "<font face=\"Arial, Helvetica,sans-serif\">\n";
      print "<BODY BACKGROUND=\"$background\" BGCOLOR=\"$bgcolor\" TEXT=\"$text\" LINK=\"$link\" VLINK=\"$vlink\" ALINK=\"$alink\">\n";
      print "<h1>error</h1>\n";
      print "<b>y</b>ou forgot to fill in the 'name' field.\n";
      print "</font></BODY>\n";
      print "</HTML>\n";
   } elsif ($error eq 'no_email') {
      print "<html><head><title><I>$title</I> error: no e-mail</title></head>\n";
      print "<BODY BACKGROUND=\"$background\" BGCOLOR=\"$bgcolor\" TEXT=\"$text\" LINK=\"$link\"  VLINK=\"$vlink\" ALINK=\"$alink\">\n";
      print "<font face=\"Arial, Helvetica,sans-serif\">\n";
      print "<h1>error</h1>\n";
      print "<b>y</b>ou either forgot to fill in the 'e-mail' field or entered an invalid address.\n";
      &rest_of_form;
   } elsif ($error eq 'no_body') {
      print "<html><head><title><I>$title</I> error: no review</title></head>\n";
      print "<BODY BACKGROUND=\"$background\" BGCOLOR=\"$bgcolor\" TEXT=\"$text\" LINK=\"$link\" VLINK=\"$vlink\" ALINK=\"$alink\">\n";
      print "<font face=\"Arial, Helvetica,sans-serif\">\n";
      print "<h1>error</h1>\n";
      print "<b>y</b>ou forgot to fill in the 'review' field.\n";
      print "</font></BODY>\n";
      print "</HTML>\n";
   } elsif ($error eq 'bad_words') {
     print "<html><head><title><I>$title</I> error: censor activated</title></head>\n";
     print "<font face=\"Arial, Helvetica,sans-serif\">\n";
     print "<BODY BACKGROUND=\"$background\" BGCOLOR=\"$bgcolor\" TEXT=\"$text\" LINK=\"$link\" VLINK=\"$vlink\" ALINK=\"$alink\">\n";
     print "<h1>error</h1>\n";
     print "<p><b>y</b>our text contains one or more words that the webmaster finds offensive.\n";
     print "<P><B>from: </B>$name<BR>\n";
     if ($FORM{'email'}) {
         print "<B>e-mail: </B>$email<BR>\n";
     }
     print "<B>review: </B>$body\n";
     print "<center><font face=\"Arial, Helvetica,sans-serif\"><p><b>p</b>lease go back, edit your entry, and resubmit.</font></center>\n";
     print "<p>&nbsp;</p>\n";
     print "<p>&nbsp;</p>\n";
     print "<p>&nbsp;</p>\n";
     print "<p>&nbsp;</p>\n";
     print "</font></BODY>\n";
     print "</HTML>\n";
     exit;
   } else { print "<b>e</b>rror</BODY></HTML>\n"; }
   exit;
}
############################

sub rest_of_form {
   print "<form method=\"POST\" action=\"/motorhomes/reviewmotorhomes.pl\">\n";
   print "<input type=\"hidden\" name=\"board\" value=\"$FORM{'board'}\">\n";
      print "<p><TABLE>\n";
      print "<TR>\n";
      print "<TD WIDTH=100>\n";
      print "<font face=\"Arial, Helvetica,sans-serif\"><B>name:</B></font>\n";
      print "</TD>\n";
      print "<TD>\n";
      print "<INPUT TYPE=\"text\" NAME=\"name\" value=\"$FORM{'name'}\" size=60>\n";
      print "</TD>\n";
      print "<TR>\n";
      print "<TD WIDTH=100>\n";
      print "<font face=\"Arial, Helvetica,sans-serif\"><B>e-mail:\n"; 
      print "<BR>(optional)</B></font>\n";
      print "</TD>\n";
      print "<TD>\n";
      print "<INPUT TYPE=\"text\" NAME=\"email\" value=\"$FORM{'email'}\" size=60>\n";
      print "</TD>\n";
      print "<TR>\n";
      print "<TD WIDTH=100 VALIGN=TOP>\n";
      print "<font face=\"Arial, Helvetica,sans-serif\"><B>review:</B></font>\n";
      print "</TD>\n";
      print "<TD>\n";
      print "<textarea WRAP=$wordwrap ROWS=10 COLS=52 name=\"body\">\n";
      $FORM{'body'} =~ s/</&lt;/g;
      $FORM{'body'} =~ s/>/&gt;/g;
      $FORM{'body'} =~ s/"/&quot;/g;
      print "$FORM{'body'}\n";
      print "</textarea>\n";
      print "<p>\n";
      print "<INPUT TYPE=\"HIDDEN\" NAME=\"action\" VALUE=\"post it\">\n";
      print "<INPUT TYPE=\"IMAGE\" NAME=\"action\" SRC=\"https://www.ideamerge.com/buttons/button_postit_roll.gif\" ALT=\"Post It\">\n";
      print "</TD>\n";
      print "</TABLE>\n";
      print "</form>\n";
      print "<p>&nbsp;</p>\n";
      print "</font></BODY>\n";
      print "</HTML>\n";
}

#####################
# Compose a review subroutine

sub compose_a_review {
    print "<HTML><HEAD><H1><TITLE>IdeaMerge</TITLE></H1></HEAD>\n";
    print "<BODY TEXT=#000000 BGCOLOR=#FFFFFF LINK=#0000FF vlink=#0000ff LINK=#FF0000>\n";
    print "<font face=\"Arial, Helvetica,sans-serif\">\n";
    print "<H1>$country motorhome/campervan rental review</H1>\n";
    print "<FORM METHOD=\"POST\" ACTION=\"/motorhomes/reviewmotorhomes.pl\"><input type=\"hidden\" name=\"board\" value=\"$board\">\n";
    print "<input type=\"hidden\" name=\"board\" value=\"$FORM{'board'}\">\n";
    print "<TABLE>\n";
    print "<TR>\n";
    print "<TD WIDTH=100>\n";
    print "<font face=\"Arial, Helvetica,sans-serif\"><B>name:</B></font>\n";
    print "</TD>\n";
    print "<TD>\n";
    print "<INPUT TYPE=\"text\" NAME=\"name\" SIZE=60 MAXLENGTH=60>\n";
    print "</TD>\n";
    print "<TR>\n";
    print "<TD WIDTH=100>\n";
    print "<font face=\"Arial, Helvetica,sans-serif\"><B>e-mail:\n"; 
    print "<BR>(optional)</B></font>\n";
    print "</TD>\n";
    print "<TD>\n";
    print "<INPUT TYPE=\"text\" NAME=\"email\" SIZE=60 MAXLENGTH=60>\n";
    print "</TD>\n";
    print "<TR>\n";
    print "<TD WIDTH=100 VALIGN=TOP>\n";
    print "<font face=\"Arial, Helvetica,sans-serif\"><B>review:</B></font>\n";
    print "</TD>\n";
    print "<TD>\n";
    print "<TEXTAREA WRAP=\"ON\" ROWS=10 COLS=52 NAME=\"body\"></TEXTAREA>\n";
    print "<p><INPUT TYPE=\"HIDDEN\" NAME=\"action\" VALUE=\"post it\">\n";
    print "<INPUT TYPE=\"IMAGE\" NAME=\"action\" SRC=\"https://www.ideamerge.com/buttons/button_postit_roll.gif\" ALT=\"Post It\">\n";
    print "</TD>\n";
    print "<TR>\n";
    print "</TABLE>\n";
    print "</FORM>\n";
    print "<p>&nbsp;</p>\n";
    print "</BODY>\n";
    print "</HTML>\n";
    exit;
}


############################################

############################################
# CDA Censor: Check for any "bad" words
############################################
sub CDA_filter {
 $badword_found = 0;
 foreach $badword (@badwords) {
   if (($body =~ /$badword/i) || ($name =~ /$badword/i) || ($email =~ /$badword/i)) {
     $badword_found = 1;
   }
 }
 # Give the user a chance to remove the bad words and repost
 if ($badword_found == 1) { &error(bad_words); }
}


