--- loncom/homework/bridgetask.pm 2005/05/24 19:33:28 1.30 +++ loncom/homework/bridgetask.pm 2005/05/24 22:06:39 1.31 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.30 2005/05/24 19:33:28 albertel Exp $ +# $Id: bridgetask.pm,v 1.31 2005/05/24 22:06:39 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -269,6 +269,7 @@ sub start_Task { if ($target eq 'webgrade') { $result.=$head_tag_start.$body_tag_start.$form_tag_start; $result.=''; + $result.='
Review'.&show_queue('reviewqueue'); $result.='
Before'.&show_queue('gradingqueue'); } my $todo; @@ -351,7 +352,7 @@ sub end_Task { &Apache::lonhomework::showhash(%Apache::lonhomework::results); &Apache::structuretags::finalize_storage(); if ($award eq 'SUBMITTED') { - &add_to_queue('gradingqueue'); + &add_to_queue('gradingqueue',$Apache::inputtags::slot_name); } } if ($target eq 'grade' && $env{'form.webgrade'}) { @@ -386,7 +387,7 @@ sub end_Task { $env{'user.name'}.'@'.$env{'user.domain'}; if ($review) { $Apache::lonhomework::results{"resource.$version.status"}='review'; - &move_to_review_queue(); + &move_between_queues('gradingqueue','reviewqueue'); } elsif ($ungraded) { $Apache::lonhomework::results{"resource.$version.status"}='ungraded'; &check_queue_unlock('gradingqueue'); @@ -401,7 +402,7 @@ sub end_Task { $Apache::lonhomework::results{"resource.$version.0.solved"}='correct_by_override'; $Apache::lonhomework::results{"resource.$version.0.award"}='EXACT_ANS'; $Apache::lonhomework::results{"resource.$version.0.awarded"}='1'; - &remove_from_queue(); + &remove_from_queue('grading_queue'); } $Apache::lonhomework::results{"resource.status"}= $Apache::lonhomework::results{"resource.$version.status"}; @@ -435,9 +436,16 @@ sub end_Task { return $result; } -sub move_to_review_queue { - - &Apache::lonxml::debug("Want to move"); +sub move_between_queues { + my ($src_queue,$dest_queue)=@_; + my $cur_data=&get_queue_data($src_queue); + if (!$cur_data) { return 'not_exist'; } + my $result=&add_to_queue($dest_queue,$cur_data->[0]); + if ($result ne 'ok') { + return $result; + } + &check_queue_unlock($src_queue); + return &remove_from_queue($src_queue); } sub check_queue_unlock { @@ -460,7 +468,7 @@ sub remove_from_queue { my $cdom=$env{'course.'.$cid.'.domain'}; my $key="$symb\0queue\0$uname\@$udom"; my @keys=($key,"$key\0locked"); - &Apache::lonnet::del($queue,\@keys,$cdom,$cnum); + return &Apache::lonnet::del($queue,\@keys,$cdom,$cnum); } sub setup_env_for_other_user { @@ -474,14 +482,27 @@ sub setup_env_for_other_user { &Apache::lonxml::initialize_rndseed($safeeval); } -sub add_to_queue { +sub get_queue_data { my ($queue)=@_; my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); my $cnum=$env{'course.'.$cid.'.num'}; my $cdom=$env{'course.'.$cid.'.domain'}; + my $todo="$symb\0queue\0$uname\@$udom"; + my ($key,$value)=&Apache::lonnet::get($queue,[$todo],$cdom,$cnum); + if ($key eq $todo && ref($value)) { + return $value; + } + return undef; +} + +sub add_to_queue { + my ($queue,$slot_name)=@_; + my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); + my $cnum=$env{'course.'.$cid.'.num'}; + my $cdom=$env{'course.'.$cid.'.domain'}; my %data; - $data{"$symb\0queue\0$uname\@$udom"}=[$Apache::inputtags::slot_name]; - &Apache::lonnet::put($queue,\%data,$cdom,$cnum); + $data{"$symb\0queue\0$uname\@$udom"}=[$slot_name]; + return &Apache::lonnet::put($queue,\%data,$cdom,$cnum); } sub show_queue { @@ -492,6 +513,10 @@ sub show_queue { my $cdom=$env{'course.'.$cid.'.domain'}; my $regexp="^$symb\0"; my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); + my ($tmp)=%queue; + if ($tmp=~/^error: 2 /) { + return "\n

Current Queue

Empty
"; + } $result.="\n

Current Queue

". ""; foreach my $key (sort(keys(%queue))) { @@ -613,8 +638,8 @@ sub get_from_queue { # no one in our section so look for any user that is ready for grading if (!$todo) { &Apache::lonnet::logthis("no sce"); - $todo=&pick_from_queue_data($env{'request.course.sec'},\%queue, - $cdom,$cnum); + $todo=&pick_from_queue_data($queue,$env{'request.course.sec'}, + \%queue,$cdom,$cnum); &Apache::lonnet::logthis("no sce $todo"); } # no user to grade
resourceusertypedata