--- loncom/homework/lonhomework.pm 2005/01/28 21:08:45 1.195 +++ loncom/homework/lonhomework.pm 2005/03/31 15:56:13 1.202 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.195 2005/01/28 21:08:45 albertel Exp $ +# $Id: lonhomework.pm,v 1.202 2005/03/31 15:56:13 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -162,8 +162,18 @@ sub send_footer { $request->print(&Apache::lontexconvert::footer()); } -$Apache::lonxml::browse=''; +sub proctor_checked_in { + my ($slot)=@_; + my @allowed=split(",",$slot->{'proctor'}); + foreach my $possible (@allowed) { + if ($Apache::lonhomework::history{'resource.checkedin'} eq $possible) { + return 1; + } + } + return 0; +} +$Apache::lonxml::browse=''; sub check_ip_acc { my ($acc)=@_; if (!defined($acc) || $acc =~ /^\s*$/) { return 1; } @@ -209,6 +219,47 @@ sub check_ip_acc { } return $allowed; } + +sub check_task_access { + #does it pass normal muster + my ($status,$datemsg)=&check_access; + if ($status eq 'SHOW_ANSWER' || + $status eq 'CLOSED' || + $status eq 'CANNOT_ANSWER' || + $status eq 'INVALID_ACCESS' || + $status eq 'UNAVAILABLE') { + return ($status,$datemsg); + } + + + my ($id)=@_; + my @slots=split(':',&Apache::lonnet::EXT("resource.$id.available")); +# if (!@slots) { +# return ($status,$datemsg); +# } + my $slotstatus='NOT_IN_A_SLOT'; + my $returned_slot; + foreach my $slot (@slots) { + &Apache::lonxml::debug("getting $slot"); + my %slot=&Apache::lonnet::get_slot($slot); + &Apache::lonhomework::showhash(%slot); + if ($slot{'starttime'} < time && + $slot{'endtime'} > time && + &check_ip_acc($slot{'ip'})) { + &Apache::lonxml::debug("$slot is good"); + $slotstatus='NEEDS_CHECKIN'; + $returned_slot=\%slot; + last; + } + } + if ($slotstatus eq 'NEEDS_CHECKIN' && + &proctor_checked_in($returned_slot)) { + &Apache::lonxml::debug("protoctor checked in"); + $slotstatus='CAN_ANSWER'; + } + return ($slotstatus,$datemsg,$returned_slot); +} + # JB, 9/24/2002: Any changes in this function may require a change # in lonnavmaps::resource::getDateStatus. sub check_access { @@ -431,16 +482,12 @@ sub setuppermissions { sub setupheader { my $request=$_[0]; - if ($ENV{'browser.mathml'}) { - &Apache::loncommon::content_type($request,'text/xml'); - } else { - &Apache::loncommon::content_type($request,'text/html'); - } + &Apache::loncommon::content_type($request,'text/html'); if (!$Apache::lonxml::debug && ($ENV{'REQUEST_METHOD'} eq 'GET')) { &Apache::loncommon::no_cache($request); } - $request->set_last_modified(&Apache::lonnet::metadata($request->uri, - 'lastrevisiondate')); +# $request->set_last_modified(&Apache::lonnet::metadata($request->uri, +# 'lastrevisiondate')); $request->send_http_header; return OK if $request->header_only; return '' @@ -496,7 +543,8 @@ sub analyze_header { if ($ENV{'environment.remote'} eq 'off') { $bodytag=&Apache::loncommon::bodytag(); } - my $result.=' + my $html=&Apache::lonxml::xmlbegin(); + my $result.=$html.'