--- loncom/homework/bridgetask.pm 2005/11/21 22:28:13 1.82 +++ loncom/homework/bridgetask.pm 2005/11/22 20:01:12 1.85 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.82 2005/11/21 22:28:13 albertel Exp $ +# $Id: bridgetask.pm,v 1.85 2005/11/22 20:01:12 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -476,7 +476,8 @@ DONESCREEN } } elsif ($target eq 'grade' && !$env{'form.webgrade'}) { if ($status eq 'NEEDS_CHECKIN') { - if(&proctor_check_auth($slot_name,$slot,'Task')) { + if(&proctor_check_auth($slot_name,$slot,'Task') + && defined($Apache::inputtags::slot_name)) { my $result=&add_to_queue('gradingqueue', [$Apache::inputtags::slot_name]); &Apache::lonxml::debug("add_to_queue said $result"); @@ -787,7 +788,8 @@ DONEBUTTON } &Apache::lonhomework::showhash(%Apache::lonhomework::results); &Apache::structuretags::finalize_storage(); - if ($award eq 'SUBMITTED') { + if ($award eq 'SUBMITTED' + && defined($Apache::inputtags::slot_name)) { &add_to_queue('gradingqueue',[$Apache::inputtags::slot_name]); } } elsif ($Apache::lonhomework::results{'INTERNAL_store'}) { @@ -988,10 +990,10 @@ sub get_queue_data { return undef; } + sub check_queue_for_key { - my ($cid,$queue,$todo)=@_; - my $cnum=$env{'course.'.$cid.'.num'}; - my $cdom=$env{'course.'.$cid.'.domain'}; + my ($cdom,$cnum,$queue,$todo)=@_; + my %results= &Apache::lonnet::get($queue,[$todo,"$todo\0locked"],$cdom,$cnum); @@ -1020,7 +1022,7 @@ sub add_to_queue { my $cdom=$env{'course.'.$cid.'.domain'}; my %data; $data{"$symb\0queue\0$uname\@$udom"}=$user_data; - return &Apache::lonnet::newput($queue,\%data,$cdom,$cnum); + return &Apache::lonnet::cput($queue,\%data,$cdom,$cnum); } sub show_queue { @@ -1234,6 +1236,27 @@ sub lock_key { return 0; } +sub get_users_in_queue { + my ($queue,$symb,$cdom,$cnum) = @_; + if (!defined($cdom) || !defined($cnum)) { + my (undef,$cid)=&Apache::lonxml::whichuser(); + $cnum=$env{'course.'.$cid.'.num'}; + $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; } + my @users; + foreach my $key (sort(keys(%queue))) { + next if ($key=~/locked$/); + next if ($key=~/timestamp$/); + my ($symb,$uname,$udom) = &decode_queue_key($key); + push(@users,"$uname:$udom"); + } + return @users; +} + sub get_from_queue { my ($queue)=@_; my $result; @@ -1245,8 +1268,8 @@ sub get_from_queue { if ($todo) { return $todo; } while (1) { my $starttime=time; - &Apache::lonnet::put($queue,{"$symb\0timestamp"=>$starttime}, - $cdom,$cnum); + &Apache::lonnet::cput($queue,{"$symb\0timestamp"=>$starttime}, + $cdom,$cnum); &Apache::lonxml::debug("$starttime"); my $regexp="^$symb\0queue\0"; my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); @@ -1317,7 +1340,9 @@ sub select_user { foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { my ($uname,$udom) = split(/:/,$student); - my %status = &get_student_status($symb,$cid,$udom,$uname); + my $cnum=$env{'course.'.$cid.'.num'}; + my $cdom=$env{'course.'.$cid.'.domain'}; + my %status = &get_student_status($symb,$cdom,$cnum,$udom,$uname); my $queue = 'none'; my $cannot_grade; if ($status{'reviewqueue'} =~ /^(in_progress|enqueue)$/) { @@ -1396,16 +1421,16 @@ RESULT } sub get_student_status { - my ($symb,$cid,$udom,$uname)=@_; + my ($symb,$cdom,$cnum,$udom,$uname)=@_; my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'}, $udom,$uname); my %status; $status{'status'}=$record{'resource.status'}; $status{'version'}=$record{'resource.version'}; $status{'grader'}=$record{'resource.grader'}; - $status{'reviewqueue'}=&check_queue_for_key($cid,'reviewqueue', + $status{'reviewqueue'}=&check_queue_for_key($cdom,$cnum,'reviewqueue', &encode_queue_key($symb,$udom,$uname)); - $status{'gradingqueue'}=&check_queue_for_key($cid,'gradingqueue', + $status{'gradingqueue'}=&check_queue_for_key($cdom,$cnum,'gradingqueue', &encode_queue_key($symb,$udom,$uname)); return %status; }