--- loncom/homework/lonhomework.pm 2004/01/29 18:51:28 1.162 +++ loncom/homework/lonhomework.pm 2004/04/16 19:10:27 1.173 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.162 2004/01/29 18:51:28 albertel Exp $ +# $Id: lonhomework.pm,v 1.173 2004/04/16 19:10:27 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -47,6 +47,7 @@ use Apache::externalresponse(); use Apache::rankresponse(); use Apache::matchresponse(); use Apache::chemresponse(); +use Apache::drawimage(); use Apache::Constants qw(:common); use HTML::Entities(); use Apache::loncommon(); @@ -201,72 +202,87 @@ sub check_access { my $passed; if ($ENV{'request.state'} eq "construct") { + if ($ENV{'form.problemstate'}) { + if ($ENV{'form.problemstate'} =~ /^CANNOT_ANSWER/) { + if ( ! ($ENV{'form.problemstate'} eq 'CANNOT_ANSWER_correct' && + lc($Apache::lonhomework::problemstatus) eq 'no')) { + return ('CANNOT_ANSWER', + &mt('is in this state by royal decree.')); + } + } else { + return ($ENV{'form.problemstate'}, + &mt('is in this state by royal decree.')); + } + } &Apache::lonxml::debug("in construction ignoring dates"); $status='CAN_ANSWER'; $datemsg=&mt('is in under construction'); - return ($status,$datemsg); +# return ($status,$datemsg); } &Apache::lonxml::debug("checking for part :$id:"); &Apache::lonxml::debug("time:".time); - - my $allowed=&check_ip_acc(&Apache::lonnet::EXT("resource.$id.acc")); - if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { - $status='INVALID_ACCESS'; - $date=&mt("can not be accessed from your location."); - return($status,$date); - } - foreach $temp ("opendate","duedate","answerdate") { - $lastdate = $date; - $date = &Apache::lonnet::EXT("resource.$id.$temp"); - my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type"); - if ($thistype =~ /^(con_lost|no_such_host)/ || - $date =~ /^(con_lost|no_such_host)/) { - $status='UNAVAILABLE'; - $date=&mt("may open later."); + if ($ENV{'request.state'} ne "construct") { + my $allowed=&check_ip_acc(&Apache::lonnet::EXT("resource.$id.acc")); + if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { + $status='INVALID_ACCESS'; + $date=&mt("can not be accessed from your location."); return($status,$date); } - if ($thistype eq 'date_interval') { - if ($temp eq 'opendate') { - $date=&Apache::lonnet::EXT("resource.$id.duedate")-$date; - } - if ($temp eq 'answerdate') { - $date=&Apache::lonnet::EXT("resource.$id.duedate")+$date; + + foreach $temp ("opendate","duedate","answerdate") { + $lastdate = $date; + $date = &Apache::lonnet::EXT("resource.$id.$temp"); + my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type"); + if ($thistype =~ /^(con_lost|no_such_host)/ || + $date =~ /^(con_lost|no_such_host)/) { + $status='UNAVAILABLE'; + $date=&mt("may open later."); + return($status,$date); + } + if ($thistype eq 'date_interval') { + if ($temp eq 'opendate') { + $date=&Apache::lonnet::EXT("resource.$id.duedate")-$date; + } + if ($temp eq 'answerdate') { + $date=&Apache::lonnet::EXT("resource.$id.duedate")+$date; + } + } + &Apache::lonxml::debug("found :$date: for :$temp:"); + if ($date eq '') { + $date = &mt("an unknown date"); $passed = 0; + } elsif ($date eq 'con_lost') { + $date = &mt("an indeterminate date"); $passed = 0; + } else { + if (time < $date) { $passed = 0; } else { $passed = 1; } + $date = localtime $date; } + if (!$passed) { $type=$temp; last; } } - &Apache::lonxml::debug("found :$date: for :$temp:"); - if ($date eq '') { - $date = &mt("an unknown date"); $passed = 0; - } elsif ($date eq 'con_lost') { - $date = &mt("an indeterminate date"); $passed = 0; - } else { - if (time < $date) { $passed = 0; } else { $passed = 1; } - $date = localtime $date; + &Apache::lonxml::debug("have :$type:$passed:"); + if ($passed) { + $status='SHOW_ANSWER'; + $datemsg=$date; + } elsif ($type eq 'opendate') { + $status='CLOSED'; + $datemsg = &mt("will open on")." $date"; + } elsif ($type eq 'duedate') { + $status='CAN_ANSWER'; + $datemsg = &mt("is due at")." $date"; + } elsif ($type eq 'answerdate') { + $status='CLOSED'; + $datemsg = &mt("was due on")." $lastdate".&mt(", and answers will be available on")." $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 = &mt("will open on")." $date"; - } elsif ($type eq 'duedate') { - $status='CAN_ANSWER'; - $datemsg = &mt("is due at")." $date"; - } elsif ($type eq 'answerdate') { - $status='CLOSED'; - $datemsg = &mt("was due on")." $lastdate".&mt(", and answers will be available on")." $date"; } if ($status eq 'CAN_ANSWER') { #check #tries, and if correct. 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'; } + if ( $maxtries eq '' && + $ENV{'request.state'} ne 'construct') { $maxtries = '2'; } + if ($maxtries && $tries >= $maxtries) { $status = 'CANNOT_ANSWER'; } # if (correct and show prob status) or excused then CANNOT_ANSWER if(($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/ && @@ -383,29 +399,29 @@ sub handle_save_or_undo { if ((!$error) && (!copy($filebak,$file))) { $error=1; } if ((!$error) && (!move($filetmp,$filebak))) { $error=1; } if (!$error) { - $request->print("
".&mt("Undid changes, Switched")." $filebak ".&mt("and")." $file
"); + &Apache::lonxml::info("".&mt("Undid changes, Switched")." $filebak ".&mt("and")." $file
"); } else { - $request->print("".&mt("Unable to undo, unable to switch")." $filebak ".&mt("and")." $file
"); + &Apache::lonxml::info("".&mt("Unable to undo, unable to switch")." $filebak ".&mt("and")." $file
"); $error=1; } } else { my $fs=Apache::File->new(">$filebak"); if (defined($fs)) { print $fs $$problem; - $request->print("".&mt("Making Backup to"). - " $filebak