--- loncom/homework/lonhomework.pm 2000/08/11 14:35:13 1.7 +++ loncom/homework/lonhomework.pm 2001/01/08 13:51:10 1.28 @@ -1,5 +1,7 @@ # The LON-CAPA Homework handler # Guy Albertelli +# 11/30 Gerd Kortemeyer +# 6/1 Gerd Kortemeyer package Apache::lonhomework; use strict; @@ -8,59 +10,179 @@ use Apache::lonxml; use Apache::lonnet; use Apache::inputtags; use Apache::structuretags; - -sub handler { - my $request=shift; - - my $target=&get_target(); - $request->content_type('text/html'); - $request->send_http_header; - &Apache::lonhomework::send_header($request); - my $file = $request->uri; - my %mystyle; - my $result = ''; - &Apache::inputtags::initialize_inputtags; - $result = Apache::lonxml::xmlparse($target, &getfile($file), - &getfile('/res/103/albertel/default_homework').&setup_vars($target),%mystyle); - #$request->print("Result follows:"); - $request->print($result); - #$request->print(":Result ends"); - &Apache::lonhomework::send_footer($request); -} +use Apache::response; +use Apache::hint; +use Apache::Constants qw(:common); sub get_target { - return "web"; + if ( $ENV{'request.state'} eq "published") { + if ( defined $ENV{'form.submit'}) { + return ('grade', 'web'); + } else { + return ('web'); + } + } elsif ($ENV{'request.state'} eq "construct") { + if ( defined $ENV{'form.preview'}) { + if ( defined $ENV{'form.submit'}) { + return ('grade', 'web'); + } else { + return ('web'); + } + } else { + return ('edit'); + } + } + return (); } sub setup_vars { my ($target) = @_; - return ';$external::target='.$target.';'; + return ';' +# return ';$external::target='.$target.';'; } sub send_header { my ($request)= @_; - $request->print(''); - $request->print('
'); - $request->print(''); +# $request->print(''); + $request->print(&Apache::lontexconvert::footer()); } -sub getfile { - my ($filename) = @_; - my $a=""; - &Apache::lonnet::repcopy($filename); - { - my $fh=Apache::File->new("/home/httpd/html".$filename); +#@Apache::lonhomework::date_status=(); +#@Apache::lonhomework::date_msg=(); +sub check_date { + my ($id) = @_; + my $date =''; + my $status = ''; + my $datemsg = ''; + my $lastdate = ''; + my $temp; + my $type; + my $passed; + &Apache::lonxml::debug("checking for part :$id:"); + foreach $temp ("opendate","duedate","answerdate") { + $lastdate = $date; + $date = &Apache::lonnet::EXT("resource.$id.$temp"); + &Apache::lonxml::debug("found :$date: for :$temp:"); + if ($date eq '') { + $date = "an unknown date"; $passed = 0; + } else { + if (time < $date) { $passed = 0; } else { $passed = 1; } + $date = localtime $date; + } + if (!$passed) { $type=$temp; last; } + } + &Apache::lonxml::debug("have :$type:$passed:"); + if ($passed) { + $status='SHOW_ANSWER'; + $datemsg=$date; + } elsif ($type eq 'opendate') { + $status='CLOSED'; + $datemsg = "will open on $date"; + } elsif ($type eq 'duedate') { + $status='CAN_ANSWER'; + $datemsg = "is due at $date"; + } elsif ($type eq 'answerdate') { + $status='CLOSED'; + $datemsg = "was due as $lastdate, and answers will be available at $date"; + } + if ($status eq 'CAN_ANSWER') { + #check #tries + my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; + my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); + if ( $tries eq '' ) { $tries = '0'; } + if ( $maxtries eq '' ) { $maxtries = '2'; } + if ($tries >= $maxtries) { $status = 'CANNOT_ANSWER'; } + } + &Apache::lonxml::debug("sending back :$status:$datemsg:"); + if ($ENV{'request.state'} eq "construct") { + &Apache::lonxml::debug("in construction ignoring dates"); + $status='CAN_ANSWER'; + $datemsg='is in under construction'; + } + return ($status,$datemsg); +} + +sub handler { + my $request=$_[0]; + + if ( $ENV{'user.name'} eq 'albertel' ) { $Apache::lonxml::debug=1; } + + my (@targets) = &get_target(); + + if ($ENV{'browser.mathml'}) { + $request->content_type('text/xml'); + } else { + $request->content_type('text/html'); + } + $request->send_http_header; + return OK if $request->header_only; + + &Apache::lonhomework::send_header($request); + + #check if allowed to see + + foreach my $target (@targets) { + my $file=&Apache::lonnet::filelocation("",$request->uri); + my $problem=&Apache::lonnet::getfile($file); + if ($problem == -1) { + &Apache::lonxml::error(" Unable to find $file"); + $problem=''; + } + + my %mystyle; + my $result = ''; + &Apache::inputtags::initialize_inputtags; + %Apache::lonhomework::results=(); + %Apache::lonhomework::history=&Apache::lonnet::restore; + #ignore error conditions + my ($temp)=keys %Apache::lonhomework::history ; + if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } + if ($target eq 'web' && &Apache::lonnet::symbread() eq '') { + $request->print("Vieiwing this problem as not a student, submissions will be ignored."); + } + if ($target eq 'grade') { + my $resultkey; + foreach $resultkey (sort keys %Apache::lonhomework::history) { + &Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::history{$resultkey}"); + } + &Apache::lonxml::debug("\nThe server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.