#!/opt/perl/bin/perl
#
#	This script will take a student's discussion question answer
#	and append it to the web page from which it was called. 
#
#		James Judd juddjam@eng.auburn.edu 960319
#	for Auburn University's Political Science Department
#		under the MCI grant for U102 Online
#
#	copyright and all rights reserved James Judd & AU (email me)
#
#       Version 2.03
#

print "Content-type: text/html\n\n";
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@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;

    # Stop people from using subshells to execute commands
    $value =~ s/~!/ ~!/g; 

    $FORM{$name} = $value;
}

$hdir = "$FORM{'profdir'}";
$profname = "$FORM{'prof'}";
$rpage = "$FORM{'retpage'}";
$maxans = "$FORM{'limit'}";
$sanswer = "$FORM{'answer'}";
$stuname = "$FORM{'name'}";
$date = `date`; 
$line = "nada";
$anscount = 0;
$auto = "2";
$notv = 0;

$hexval = $rpage;
$hexval =~ s/\.html//;

# Require filling out the form
#
&oopsie_page if $FORM{'name'} && !$FORM{'answer'} || $FORM{'answer'} && !$FORM{'name'};
&default_page unless $FORM{'name'} && $FORM{'answer'};

# Filter out tricky students' html code heh heh
#
$sanswer =~ s/\&/\&AMP/g;
$sanswer =~ s/</\&LT/g;
$sanswer =~ s/>/\&GT/g;
$sanswer =~ s/"/\&QUOT/g;

# Now we search the page and add the student's answer to the page
#
open(PAGE, "$hdir/public_html/forum/$hexval$auto.html") || print "Web server ERROR(opening PAGE $hdir/public_html/forum/$hexval$auto.html): $!<P>";
 open(TEMPFILE, "> /tmp/tempforum$$")|| print "Web server ERROR(opening /tmp/tempforum$$): $!<P>";
while ($line = <PAGE>)
  {
    if ($line eq "<!-- Start Answer -->\n")
      {
        $anscount++;
      }
    elsif ($line eq "<!-- End of Answers -->\n")
      {
        $anscount++;
        print TEMPFILE "<!-- Start Answer -->\n";
        print TEMPFILE "$sanswer\n";
        print TEMPFILE "<P>\n";
        print TEMPFILE "<I>submitted by</I> <STRONG>$stuname</STRONG>, $date\n";
        print TEMPFILE "<BR>\n";
        print TEMPFILE "<HR>\n";
      }
    if ($anscount == $maxans)
      {
        print TEMPFILE  "(<STRONG>Question limit reached, no more answers to this question allowed</STRONG>)<BR><HR>\n" unless $notv;
        $notv = 1;
        $line =~ s/\<input/\<!-- input/;
        $line =~ s/\<Form/\<!-- Form/;
      }
    print TEMPFILE $line;
  }
close(PAGE)|| print "Web server ERROR(closing PAGE $hdir/public_html/forum/$hexval$auto.html): $!<P>";
close(TEMPFILE)|| print "Web server ERROR(closing TEMPFILE): $!<P>";
system("/bin/mv /tmp/tempforum$$ $hdir/public_html/forum/$hexval$auto.html") && print "Web server ERROR(moving /tmp/tempforum$$ to $hdir/public_html/forum/$hexval$auto.html): $!<P>";

# If they answered they see this:
#
    print "<HTML>\n<HEAD>\n<TITLE>Forum Answer - Posting Results</TITLE>\n</HEAD>\n";
    print "<BODY BGCOLOR=\"#000000\" TEXT=\"#EEEEEE\" LINK=\"#00CCFF\" VLINK=\"#3399FF\">\n";
    print "<CENTER><H2><FONT SIZE=6>F</FONT>orum <FONT SIZE=6>A</FONT>nswer</H2></CENTER>\n";
    print "<HR>\n Your answer was successfully posted to the forum page if no error messages were printed above.  Click on a link below:<P>";
print "Go back to the <A HREF=\"http://www.auburn.edu/~$profname/forum/Intro.html\">Intro Page</A> or<BR>";
print "Go back to the <A HREF=\"http://www.auburn.edu/~$profname/forum/$rpage\"> Question page including your Answer</A></BODY></HTML>";

sub default_page
{
    print "<HTML>\n<HEAD>\n<TITLE>Forum Answer</TITLE>\n</HEAD>\n";
    print "<BODY BGCOLOR=\"#000000\" TEXT=\"#EEEEEE\" LINK=\"#00CCFF\" VLINK=\"#3399FF\">\n";
    print "<CENTER><H2><FONT SIZE=6>A</FONT>nswer <FONT SIZE=6>F</FONT>orm </H2></CENTER>\n";
    print "<P>Instructions:\n<OL>\n<LI> Click on the Answer box, and type your answer.\n<LI> Click on the Name box, and type your name.\n<LI> Click \"Submit Answer\" or press Enter to post your answer.</OL><BR>\n";
    print "<p><FORM ACTION=\"/cgi-bin/forum.pl\" METHOD=\"POST\">\n";
    print "<input type=\"hidden\" name=\"profdir\" value=\"$hdir\">\n";
    print "<input type=\"hidden\" name=\"prof\" value=\"$profname\">\n";
    print "<input type=\"hidden\" name=\"retpage\" value=\"$rpage\">\n";
    print "<input type=\"hidden\" name=\"limit\" value=\"$maxans\">\n";
    print "\n<P><Strong>Answer: </Strong>\n<br>";
    print "<TEXTAREA NAME=\"answer\" ROWS=6 COLS=50 WRAP=ON></TEXTAREA><br>\n";
    print "\n<Strong>Name: </Strong>\n<br>";
    print "<input type=\"text\" NAME=\"name\" SIZE=\"30\" MAXLENGTH=\"40\"><br>\n";
    print "<CENTER>\n<INPUT TYPE=\"submit\" VALUE=\" Submit Answer \">\n";
    print "<INPUT TYPE=\"reset\" VALUE=\" Clear Form \">\n<br>";
    print "</CENTER>\n";
    print "</FORM>\n";
    print "</BODY>\n</HTML>\n";
    exit;
}

sub oopsie_page
{
    print "<HTML>\n<HEAD>\n<TITLE>Forum Answer</TITLE>\n</HEAD>\n";
    print "<BODY BGCOLOR=\"#000000\" TEXT=\"#EEEEEE\" LINK=\"#00CCFF\" VLINK=\"#3399FF\">\n";
    print "<CENTER><H2><FONT SIZE=6>A</FONT>dditional <FONT SIZE=6>I</FONT>nstructions </H2></CENTER>\n";
    print "<HR>\nYou must fill in both the name and answer boxes to post an answer to the question.  To type in a box, click on it.\n";
    print "<p><FORM ACTION=\"/cgi-bin/forum.pl\" METHOD=\"POST\">\n";
    print "<input type=\"hidden\" name=\"profdir\" value=\"$hdir\">\n";
    print "<input type=\"hidden\" name=\"prof\" value=\"$profname\">\n";
    print "<input type=\"hidden\" name=\"retpage\" value=\"$rpage\">\n";
    print "<input type=\"hidden\" name=\"limit\" value=\"$maxans\">\n";
    print "</FORM>\n";
    print "<A HREF=\"http://www.auburn.edu/~$profname/forum/$rpage\">Return</A> to the question page.\n";
    print "</BODY>\n</HTML>\n";
    exit;
}
