--- loncom/homework/lonhomework.pm 2004/12/22 22:08:17 1.191 +++ loncom/homework/lonhomework.pm 2005/03/21 18:53:51 1.201 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.191 2004/12/22 22:08:17 albertel Exp $ +# $Id: lonhomework.pm,v 1.201 2005/03/21 18:53:51 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -162,8 +162,11 @@ sub send_footer { $request->print(&Apache::lontexconvert::footer()); } -$Apache::lonxml::browse=''; +sub proctor_checked_in { + return 0; +} +$Apache::lonxml::browse=''; sub check_ip_acc { my ($acc)=@_; if (!defined($acc) || $acc =~ /^\s*$/) { return 1; } @@ -209,6 +212,43 @@ 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'; + 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'})) { + $slotstatus='IN_A_SLOT'; + last; + } + } + if ($slotstatus eq 'IN_A_SLOT' && + &proctor_checked_in()) { + $slotstatus='CAN_ANSWER'; + } + return ($slotstatus,$datemsg); +} + # JB, 9/24/2002: Any changes in this function may require a change # in lonnavmaps::resource::getDateStatus. sub check_access { @@ -320,7 +360,7 @@ sub check_access { &Apache::lonxml::debug("looking for accesstime $first_access"); if (!$first_access) { $status='NOT_YET_VIEWED'; - $datemsg=' '.$interval.' seconds'; + $datemsg=&seconds_to_human_length($interval); } else { my $newdate=localtime($first_access+$interval); if (time > ($first_access+$interval)) { @@ -348,6 +388,25 @@ sub check_access { return ($status,$datemsg); } +sub seconds_to_human_length { + my ($length)=@_; + + my $seconds=$length%60; $length=int($length/60); + my $minutes=$length%60; $length=int($length/60); + my $hours=$length%24; $length=int($length/24); + my $days=$length; + + my $timestr; + if ($days > 0) { $timestr.=&mt('[quant,_1,day]',$days); } + if ($hours > 0) { $timestr.=($timestr?", ":""). + &mt('[quant,_1,hour]',$hours); } + if ($minutes > 0) { $timestr.=($timestr?", ":""). + &mt('[quant,_1,minute]',$minutes); } + if ($seconds > 0) { $timestr.=($timestr?", ":""). + &mt('[quant,_1,second]',$seconds); } + return $timestr; +} + sub showhash { my (%hash) = @_; &showhashsubset(\%hash,'.'); @@ -358,10 +417,11 @@ sub showarray { my ($array)=@_; my $string="("; foreach my $elm (@{ $array }) { - if (ref($elm)) { - if ($elm =~ /ARRAY/ ) { - $string.=&showarray($elm); - } + if (ref($elm) eq 'ARRAY') { + $string.=&showarray($elm); + } elsif (ref($elm) eq 'HASH') { + $string.= "HASH --- \n
"; + $string.= &showhashsubset($elm,'.'); } else { $string.="$elm," } @@ -375,20 +435,15 @@ sub showhashsubset { my ($hash,$keyre) = @_; my $resultkey; foreach $resultkey (sort keys %$hash) { - if ($resultkey =~ /$keyre/) { - if (ref($$hash{$resultkey})) { - if ($$hash{$resultkey} =~ /ARRAY/ ) { - &Apache::lonxml::debug("$resultkey ---- ". - &showarray($$hash{$resultkey})); - } elsif ($$hash{$resultkey} =~ /HASH/ ) { - &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); - &showhashsubset($$hash{$resultkey},'.'); - } else { - &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); - } - } else { - &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); - } + if ($resultkey !~ /$keyre/) { next; } + if (ref($$hash{$resultkey}) eq 'ARRAY' ) { + &Apache::lonxml::debug("$resultkey ---- ". + &showarray($$hash{$resultkey})); + } elsif (ref($$hash{$resultkey}) eq 'HASH' ) { + &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); + &showhashsubset($$hash{$resultkey},'.'); + } else { + &Apache::lonxml::debug("$resultkey ---- $$hash{$resultkey}"); } } &Apache::lonxml::debug("\n
restored values^
\n"); @@ -416,14 +471,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->send_http_header; return OK if $request->header_only; return '' @@ -479,7 +532,8 @@ sub analyze_header { if ($ENV{'environment.remote'} eq 'off') { $bodytag=&Apache::loncommon::bodytag(); } - my $result.=' + my $html=&Apache::lonxml::xmlbegin(); + my $result.=$html.' '.&mt("Analyzing a problem").' '.$bodytag.&Apache::lonxml::message_location().'
'. &Apache::structuretags::remember_problem_state().' @@ -619,7 +674,7 @@ sub editxmlmode {
' . $xml_help . ' -
'; &Apache::lonxml::add_messages(\$result); @@ -799,18 +854,14 @@ sub handler { $Apache::lonxml::debug=$ENV{'user.debug'}; $ENV{'request.uri'}=$request->uri; &setuppermissions(); - &Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:"); # some times multiple problemmodes are submitted, need to select # the last one - &Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); - if ( defined($ENV{'form.problemmode'}) && - ref($ENV{'form.problemmode'}) ) { - &Apache::lonxml::debug("Problem Mode ".join(",",@$ENV{'form.problemmode'})); + if ( defined($ENV{'form.problemmode'}) && ref($ENV{'form.problemmode'}) ) { my $mode=$ENV{'form.problemmode'}->[-1]; undef $ENV{'form.problemmode'}; $ENV{'form.problemmode'}=$mode; } - &Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); + my $file=&Apache::lonnet::filelocation("",$request->uri); #check if we know where we are @@ -827,7 +878,8 @@ sub handler { } } if (&setupheader($request)) { return OK; } - + &Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:"); + &Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); my ($symb) = &Apache::lonxml::whichuser(); &Apache::lonxml::debug('symb is '.$symb); if ($ENV{'request.state'} eq "construct" || $symb eq '') {