--- loncom/homework/lonhomework.pm 2005/05/10 20:29:26 1.207 +++ loncom/homework/lonhomework.pm 2005/08/16 16:31:14 1.216 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.207 2005/05/10 20:29:26 albertel Exp $ +# $Id: lonhomework.pm,v 1.216 2005/08/16 16:31:14 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -94,9 +94,9 @@ sub get_target { if ( defined($env{'form.submitted'}) && ( !defined($env{'form.resetdata'})) && ( !defined($env{'form.newrandomization'}))) { - return ('grade', 'web'); + return ('grade', 'web','answer'); } else { - return ('web'); + return ('web','answer'); } } elsif ($env{'request.state'} eq "construct") { if ( defined($env{'form.grade_target'}) ) { @@ -124,10 +124,10 @@ sub get_target { if ( $env{'form.submit'} eq &mt('Submit Changes and View') ) { return ('modified','web','answer'); } else { - return ('modified','edit'); + return ('modified','no_output_web','edit'); } } else { - return ('edit'); + return ('no_output_web','edit'); } } else { return ('web'); @@ -168,10 +168,12 @@ sub send_footer { sub proctor_checked_in { my ($slot_name,$slot)=@_; my @allowed=split(",",$slot->{'proctor'}); + my $version=$Apache::lonhomework::history{'resource.version'}; foreach my $possible (@allowed) { - if ($Apache::lonhomework::history{'resource.checkedin'} eq $possible && - $Apache::lonhomework::history{'resource.checkedin.slot'} eq - $slot_name ) { + if ($Apache::lonhomework::history{"resource.$version.checkedin"} eq + $possible && + $Apache::lonhomework::history{"resource.$version.checkedin.slot"} + eq $slot_name) { return 1; } } @@ -239,21 +241,22 @@ sub check_task_access { if ($env{'request.state'} eq "construct") { return ($status,$datemsg); } - - if ($Apache::lonhomework::history{'resource.checkedin'}) { - if ($Apache::lonhomework::history{'resource.status'} eq 'pass' || - $Apache::lonhomework::history{'resource.status'} eq 'fail') { - return ('SHOW_ANSWER'); - } + my $version=$Apache::lonhomework::history{'resource.version'}; + if ($Apache::lonhomework::history{"resource.$version.checkedin"} && + $Apache::lonhomework::history{"resource.$version.status"} eq 'pass') { + return ('SHOW_ANSWER'); } my ($id)=@_; - my @slots=split(':',&Apache::lonnet::EXT("resource.$id.available")); + my @slots= + (split(':',&Apache::lonnet::EXT("resource.$id.availablestudent")), + split(':',&Apache::lonnet::EXT("resource.$id.available"))); + # if (!@slots) { # return ($status,$datemsg); # } my $slotstatus='NOT_IN_A_SLOT'; my ($returned_slot,$slot_name); - foreach my $slot (sort(@slots)) { + foreach my $slot (@slots) { &Apache::lonxml::debug("getting $slot"); my %slot=&Apache::lonnet::get_slot($slot); &Apache::lonhomework::showhash(%slot); @@ -272,9 +275,13 @@ sub check_task_access { &Apache::lonxml::debug("protoctor checked in"); $slotstatus='CAN_ANSWER'; } - if ( ($slotstatus eq 'NOT_IN_A_SLOT' || $slotstatus eq 'NEEDS_CHECKIN') && - $Apache::lonhomework::history{'resource.checkedin'}) { - return ('WAITING_FOR_GRADE'); + if ( $slotstatus eq 'NOT_IN_A_SLOT' && + $Apache::lonhomework::history{"resource.$version.checkedin"}) { + if ($Apache::lonhomework::history{"resource.$version.status"} eq 'fail') { + return ('SHOW_ANSWER'); + } else { + return ('WAITING_FOR_GRADE'); + } } return ($slotstatus,$datemsg,$slot_name,$returned_slot); } @@ -313,6 +320,9 @@ sub check_access { &Apache::lonxml::debug("checking for part :$id:"); &Apache::lonxml::debug("time:".time); + my ($symb)=&Apache::lonxml::whichuser(); + &Apache::lonxml::debug("symb:".$symb); + #if ($env{'request.state'} ne "construct" && $symb ne '') { if ($env{'request.state'} ne "construct") { my $allowed=&check_ip_acc(&Apache::lonnet::EXT("resource.$id.acc")); if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { @@ -365,7 +375,8 @@ sub check_access { $datemsg = &mt("was due on")." $lastdate".&mt(", and answers will be available on")." $date"; } } - if ($status eq 'CAN_ANSWER') { + if ($status eq 'CAN_ANSWER' || + (($Apache::lonhomework::browse eq 'F') && ($status eq 'CLOSED'))) { #check #tries, and if correct. my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); @@ -657,7 +668,7 @@ sub analyze { } } if (scalar(keys(%allparts)) == 0 ) { - $request->print('

'.&mt('Found no analyzable respones in this problem, currently only Numerical, Formula and String response styles are supported.').'

'); + $request->print('

'.&mt('Found no analyzable responses in this problem, currently only Numerical, Formula and String response styles are supported.').'

'); } &Apache::lonhtmlcommon::Close_PrgWin($request,\%prog_state); &analyze_footer($request); @@ -700,7 +711,9 @@ sub editxmlmode { $bodytag=&Apache::loncommon::bodytag(); } my $html=&Apache::lonxml::xmlbegin(); - $result.=$html.$bodytag.&Apache::lonxml::message_location().' + $result.=$html.$bodytag. + &renderpage($request,$file,['no_output_web'],1). + &Apache::lonxml::message_location().'
'. &Apache::structuretags::remember_problem_state().' @@ -726,9 +739,9 @@ sub editxmlmode { # Render the page in whatever target desired. # sub renderpage { - my ($request,$file) = @_; + my ($request,$file,$targets,$return_string) = @_; - my (@targets) = &get_target(); + my @targets = @{$targets || [&get_target()]}; &Apache::lonhomework::showhashsubset(\%env,'form.'); &Apache::lonxml::debug("Running targets ".join(':',@targets)); my $overall_result; @@ -741,6 +754,10 @@ sub renderpage { # $request->print(" You most likely shouldn't see me."); #} #my $t0 = [&gettimeofday()]; + my $output=1; + if ($target eq 'no_output_web') { + $target = 'web'; $output=0; + } my $problem=&Apache::lonnet::getfile($file); if ($problem eq -1) { &Apache::lonxml::error(" ".&mt('Unable to find')." $file"); @@ -748,15 +765,15 @@ sub renderpage { } my %mystyle; - my $result = ''; if ($target eq 'analyze') { %Apache::lonhomework::analyze=(); } if ($target eq 'answer') { &showhash(%Apache::lonhomework::history); } if ($target eq 'web') {&Apache::lonhomework::showhashsubset(\%env,'^form');} &Apache::lonxml::debug("Should be parsing now"); - $result = &Apache::lonxml::xmlparse($request, $target, $problem, - &setup_vars($target),%mystyle); + my $result = &Apache::lonxml::xmlparse($request, $target, $problem, + &setup_vars($target),%mystyle); undef($Apache::lonhomework::parsing_a_problem); + if (!$output) { $result = ''; } #$request->print("Result follows:"); if ($target eq 'modified') { &handle_save_or_undo($request,\$problem,\$result); @@ -777,9 +794,13 @@ sub renderpage { #$request->print(":Result ends"); #my $td=&tv_interval($t0); } - &Apache::lonxml::add_messages(\$overall_result); - $request->print($overall_result); - $request->rflush(); + if (!$return_string) { + &Apache::lonxml::add_messages(\$overall_result); + $request->print($overall_result); + $request->rflush(); + } else { + return $overall_result; + } } # with no arg it returns a HTML