version 1.23, 2000/12/21 15:34:44
|
version 1.40, 2001/04/16 23:16:31
|
Line 1
|
Line 1
|
# The LON-CAPA Homework handler |
# The LON-CAPA Homework handler |
# Guy Albertelli |
# Guy Albertelli |
# 11/30 Gerd Kortemeyer |
# 11/30 Gerd Kortemeyer |
|
# 6/1 Gerd Kortemeyer |
|
|
package Apache::lonhomework; |
package Apache::lonhomework; |
use strict; |
use strict; |
Line 11 use Apache::inputtags;
|
Line 12 use Apache::inputtags;
|
use Apache::structuretags; |
use Apache::structuretags; |
use Apache::response; |
use Apache::response; |
use Apache::hint; |
use Apache::hint; |
|
use Apache::outputtags; |
|
use Apache::Constants qw(:common); |
|
|
sub get_target { |
sub get_target { |
if ( $ENV{'request.state'} eq "published") { |
if ( $ENV{'request.state'} eq "published") { |
if ( defined $ENV{'form.submit'}) { |
if ( defined $ENV{'form.submitted'}) { |
return ('grade', 'web'); |
return ('grade', 'web'); |
} else { |
} else { |
return ('web'); |
return ('web'); |
} |
} |
} elsif ($ENV{'request.state'} eq "construct") { |
} elsif ($ENV{'request.state'} eq "construct") { |
if ( defined $ENV{'form.preview'}) { |
if ( defined $ENV{'form.preview'}) { |
if ( defined $ENV{'form.submit'}) { |
if ( defined $ENV{'form.submitted'}) { |
return ('grade', 'web'); |
return ('grade', 'web'); |
} else { |
} else { |
return ('web'); |
return ('web'); |
} |
} |
} else { |
} else { |
return ('edit'); |
return ('grade','web'); |
|
if ( $ENV{'form.submitted'} eq 'edit' ) { |
|
return ('modified','edit'); |
|
} else { |
|
return ('edit'); |
|
} |
} |
} |
} |
} |
return (); |
return (); |
Line 46 sub send_header {
|
Line 54 sub send_header {
|
# $request->print('<form name='.$ENV{'form.request.prefix'}.'lonhomework method="POST" action="'.$request->uri.'">'); |
# $request->print('<form name='.$ENV{'form.request.prefix'}.'lonhomework method="POST" action="'.$request->uri.'">'); |
} |
} |
|
|
|
sub createmenu { |
|
my ($which,$request)=@_; |
|
if ($which eq 'grade') { |
|
$request->print('<script language="JavaScript"> |
|
hwkmenu=window.open("/res/adm/pages/homeworkmenu.html","homeworkremote", |
|
"height=350,width=150,menubar=no"); |
|
</script>'); |
|
} |
|
} |
|
|
sub send_footer { |
sub send_footer { |
my ($request)= @_; |
my ($request)= @_; |
# $request->print('</form>'); |
# $request->print('</form>'); |
$request->print(&Apache::lontexconvert::footer()); |
$request->print(&Apache::lontexconvert::footer()); |
} |
} |
|
|
#@Apache::lonhomework::date_status=(); |
$Apache::lonxml::browse=''; |
#@Apache::lonhomework::date_msg=(); |
|
sub check_date { |
sub check_date { |
my ($id) = @_; |
my ($id) = @_; |
my $date =''; |
my $date =''; |
Line 70 sub check_date {
|
Line 87 sub check_date {
|
&Apache::lonxml::debug("found :$date: for :$temp:"); |
&Apache::lonxml::debug("found :$date: for :$temp:"); |
if ($date eq '') { |
if ($date eq '') { |
$date = "an unknown date"; $passed = 0; |
$date = "an unknown date"; $passed = 0; |
|
} elsif ($date eq 'con_lost') { |
|
$date = "an indeterminate date"; $passed = 0; |
} else { |
} else { |
if (time < $date) { $passed = 0; } else { $passed = 1; } |
if (time < $date) { $passed = 0; } else { $passed = 1; } |
$date = localtime $date; |
$date = localtime $date; |
Line 88 sub check_date {
|
Line 107 sub check_date {
|
$datemsg = "is due at $date"; |
$datemsg = "is due at $date"; |
} elsif ($type eq 'answerdate') { |
} elsif ($type eq 'answerdate') { |
$status='CLOSED'; |
$status='CLOSED'; |
$datemsg = "was due as $lastdate, and answers will be available at $date"; |
$datemsg = "was due on $lastdate, and answers will be available on $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:"); |
&Apache::lonxml::debug("sending back :$status:$datemsg:"); |
|
if (($Apache::lonhomework::browse eq 'F') && ($status eq 'CLOSED')) { |
|
&Apache::lonxml::debug("should be allowed to browse a resource when closed"); |
|
$status='CAN_ANSWER'; |
|
$datemsg='is closed but you are allowed to view it'; |
|
} |
|
if ($ENV{'request.state'} eq "construct") { |
|
&Apache::lonxml::debug("in construction ignoring dates"); |
|
$status='CAN_ANSWER'; |
|
$datemsg='is in under construction'; |
|
} |
return ($status,$datemsg); |
return ($status,$datemsg); |
} |
} |
|
|
sub handler { |
sub handler { |
my $request=$_[0]; |
my $request=$_[0]; |
|
|
if ( $ENV{'user.name'} eq 'albertel' ) { $Apache::lonxml::debug=1; } |
if ( $ENV{'user.name'} eq 'albertel' ) {$Apache::lonxml::debug=1;} |
|
|
my (@targets) = &get_target(); |
my (@targets) = &get_target(); |
|
|
Line 107 sub handler {
|
Line 144 sub handler {
|
$request->content_type('text/html'); |
$request->content_type('text/html'); |
} |
} |
$request->send_http_header; |
$request->send_http_header; |
return 'OK' if $request->header_only; |
return OK if $request->header_only; |
|
|
|
#setup permissions |
|
$Apache::lonhomework::browse= &Apache::lonnet::allowed('bre',$ENV{'request.filename'}); |
|
$Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}); |
|
|
|
#check if we know where we are |
|
if ($ENV{'request.course.fn'} && !&Apache::lonnet::symbread()) { |
|
# if we are browsing we might not be able to know where we are |
|
if ($Apache::lonhomework::browse ne 'F') { |
|
#should know where we are, so ask |
|
$request->internal_redirect('/adm/ambiguous'); return; |
|
} |
|
} |
|
|
&Apache::lonhomework::send_header($request); |
&Apache::lonhomework::send_header($request); |
|
&Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:"); |
#check if allowed to see |
|
|
|
foreach my $target (@targets) { |
foreach my $target (@targets) { |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
Line 125 sub handler {
|
Line 174 sub handler {
|
my $result = ''; |
my $result = ''; |
&Apache::inputtags::initialize_inputtags; |
&Apache::inputtags::initialize_inputtags; |
%Apache::lonhomework::results=(); |
%Apache::lonhomework::results=(); |
%Apache::lonhomework::history=&Apache::lonnet::restore; |
%Apache::lonhomework::history=&Apache::lonnet::restore(); |
#ignore error conditions |
#ignore error conditions |
my ($temp)=keys %Apache::lonhomework::history ; |
my ($temp)=keys %Apache::lonhomework::history ; |
if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } |
if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } |
if ($target eq 'web' && &Apache::lonnet::symbread() eq '') { |
if ($target eq 'web') { |
$request->print("Vieiwing this problem as not a student, submissions will be ignored."); |
if (&Apache::lonnet::symbread() eq '') { |
|
if ($ENV{'request.state'} eq "construct") { |
|
$request->print("In construction space, submissions ignored<br />"); |
|
} else { |
|
$request->print("Browsing or <a href=\"/adm/ambiguous\">ambiguous</a> reference, submissions ignored<br />"); |
|
} |
|
} |
|
if ($Apache::lonhomework::viewgrades eq 'F') {&createmenu('grade',$request); } |
} |
} |
if ($target eq 'grade') { |
if ($target eq 'grade') { |
my $resultkey; |
my $resultkey; |
foreach $resultkey (sort keys %Apache::lonhomework::history) { |
foreach $resultkey (sort keys %Apache::lonhomework::history) { |
&Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::history{$resultkey}"); |
&Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::history{$resultkey}"); |
} |
} |
&Apache::lonxml::debug("\n<br>restored values^</br>\n"); |
&Apache::lonxml::debug("\n<br />restored values^</br>\n"); |
} |
} |
my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm'); |
my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm'); |
if ($default == -1) { |
if ($default == -1) { |
&Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>"); |
&Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>"); |
$default=''; |
$default=''; |
} |
} |
if ( $target eq 'grade') { |
|
$Apache::lonxml::textredirection = 0; |
|
} else { |
|
$Apache::lonxml::textredirection = 1; |
|
} |
|
$result = &Apache::lonxml::xmlparse($target, $problem, |
$result = &Apache::lonxml::xmlparse($target, $problem, |
$default.&setup_vars($target),%mystyle); |
$default.&setup_vars($target),%mystyle); |
|
|
#$request->print("Result follows:"); |
#$request->print("Result follows:"); |
$request->print($result); |
if ($target eq 'modified') { |
|
my $fileout = &Apache::lonnet::filelocation("",$request->uri); |
|
my $filesave=$fileout.".bak"; |
|
|
|
my $fs=Apache::File->new(">$filesave"); |
|
print $fs $problem; |
|
$request->print("<b>Making Backup to $filesave</b><br />"); |
|
|
|
my $fh=Apache::File->new(">$fileout"); |
|
print $fh $result; |
|
$request->print("<b>Saving Modifications to $fileout</b><br />"); |
|
} else { |
|
$request->print($result); |
|
} |
#$request->print(":Result ends"); |
#$request->print(":Result ends"); |
if ($target eq 'grade') { |
if ($target eq 'grade') { |
|
|
my $resultkey; |
my $resultkey; |
foreach $resultkey (sort keys %Apache::lonhomework::results) { |
foreach $resultkey (sort keys %Apache::lonhomework::results) { |
&Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::results{$resultkey}"); |
&Apache::lonxml::debug("$resultkey ---- $Apache::lonhomework::results{$resultkey}"); |
} |
} |
&Apache::lonxml::debug("\n<br>storing values^</br>\n"); |
&Apache::lonxml::debug("\n<br />storing values^</br>\n"); |
} |
} |
|
|
my ($temp) = keys %Apache::lonhomework::results; |
my ($temp) = keys %Apache::lonhomework::results; |
if ( $temp ne '' ) { |
if ( $temp ne '' ) { |
&Apache::lonxml::debug("Store return message:".&Apache::lonnet::cstore(%Apache::lonhomework::results)); |
&Apache::lonxml::debug("Store return message:".&Apache::lonnet::cstore(\%Apache::lonhomework::results)); |
} |
} |
} |
} |
&Apache::lonhomework::send_footer($request); |
&Apache::lonhomework::send_footer($request); |
|
# always turn of debug messages |
return 'OK'; |
$Apache::lonxml::debug=0; |
|
return OK; |
|
|
} |
} |
|
|