--- loncom/homework/bridgetask.pm 2005/05/03 05:31:51 1.15
+++ loncom/homework/bridgetask.pm 2005/05/03 06:44:56 1.16
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.15 2005/05/03 05:31:51 albertel Exp $
+# $Id: bridgetask.pm,v 1.16 2005/05/03 06:44:56 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -95,14 +95,17 @@ sub add_grading_button {
sub start_Task {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- &Apache::structuretags::initialize_storage();
- &Apache::lonhomework::showhash(%Apache::lonhomework::history);
my ($status,$accessmsg,$slot);
+ if ($target ne 'webgrade') {
+ &Apache::structuretags::initialize_storage();
+ &Apache::lonhomework::showhash(%Apache::lonhomework::history);
+ }
+
$Apache::lonhomework::parsing_a_task=1;
#should get back a or the neccesary stuff to start XML/MathML
my ($result,$head_tag_start,$body_tag_start,$form_tag_start)=
&Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
-
+
if ($target eq 'web') {
$body_tag_start.=&add_previous_version_button();
if ($Apache::lonhomework::modifygrades) {
@@ -177,15 +180,20 @@ sub start_Task {
}
} elsif ($target eq 'webgrade') {
$result.=$head_tag_start.$body_tag_start.$form_tag_start;
+ $result.=
+ '';
$result.=&show_queue();
my $todo=&get_from_queue();
if ($todo) {
+ &setup_env_for_other_user($todo,$safeeval);
my ($symb,$uname,$udom)=&decode_queue_key($todo);
- $result.="\n".'
Found'.
- $symb.':'.$uname.':'.$udom.'
';
+ $result.="\n".'
Found '.
+ &Apache::lonnet::gettitle($symb).' for '.$uname.' at '.$udom.'
';
@@ -255,12 +263,21 @@ sub end_Task {
return $result;
}
+sub setup_env_for_other_user {
+ my ($queue_key,$safeeval)=@_;
+ my ($symb,$uname,$udom)=&decode_queue_key($queue_key);
+ $env{'form.grade_symb'}=$symb;
+ $env{'form.grade_domain'}=$udom;
+ $env{'form.grade_username'}=$uname;
+ $env{'form.grade_courseid'}=$env{'request.course.id'};
+ &Apache::lonxml::initialize_rndseed($safeeval);
+}
+
sub add_to_queue {
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser();
my $cnum=$env{'course.'.$cid.'.num'};
my $cdom=$env{'course.'.$cid.'.domain'};
my %data;
- #$data{"$symb\0timestamp"}=time;
$data{"$symb\0queue\0$uname\@$udom"}=[$Apache::inputtags::slot_name];
&Apache::lonnet::put('gradingqueue',\%data,$cdom,$cnum);
}
@@ -270,17 +287,29 @@ sub show_queue {
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser();
my $cnum=$env{'course.'.$cid.'.num'};
my $cdom=$env{'course.'.$cid.'.domain'};
- my $regexp="^$symb\0queue";
+ my $regexp="^$symb\0";
my %queue=&Apache::lonnet::dump('gradingqueue',$cdom,$cnum,$regexp);
- $result.="\n
Current Queue
resource
user
Time available for grading
";
+ $result.="\n
Current Queue
resource
user
type
data
";
foreach my $key (sort(keys(%queue))) {
- my ($symb,undef,$user) = split("\0",$key);
- my ($uname,$udom) = split('@',$user);
- my $title=&Apache::lonnet::gettitle($symb);
- $result.="
$title
$uname
";
- my $slot=$queue{$key}->[0];
- my %slot_data=&Apache::lonnet::get_slot($slot);
- $result.="End time: ".&Apache::lonlocal::locallocaltime($slot_data{'endtime'})."
";
+ if ($key=~/locked$/) {
+ my ($symb,$uname,$udom) = &decode_queue_key($key);
+ my $title=&Apache::lonnet::gettitle($symb);
+ $result.="
$title
$uname
";
+ $result.='
lock
'.$queue{$key}.'
';
+ } elsif ($key=~/timestamp$/) {
+ my ($symb,undef) = split("\0",$key);
+ my $title=&Apache::lonnet::gettitle($symb);
+ $result.="
";
+ } else {
+ my ($symb,$uname,$udom) = &decode_queue_key($key);
+ my $title=&Apache::lonnet::gettitle($symb);
+ $result.="
$title
$uname
";
+ my $slot=$queue{$key}->[0];
+ my %slot_data=&Apache::lonnet::get_slot($slot);
+ $result.='
queue entry
End time: '.&Apache::lonlocal::locallocaltime($slot_data{'endtime'})."
";
+ }
}
$result.="
\n";
return $result;
@@ -305,7 +334,7 @@ sub queue_key_locked {
sub pick_from_queue_data {
my ($check_section,$queue,$cdom,$cnum)=@_;
- foreach my $key (sort(keys(%$queue))) {
+ foreach my $key (keys(%$queue)) {
my ($symb,$uname,$udom)=&decode_queue_key($key);
if ($check_section) {
my $section=&Apache::lonnet::getsection($uname,$udom);
@@ -331,7 +360,7 @@ sub pick_from_queue_data {
sub find_mid_grade {
my ($symb,$cdom,$cnum)=@_;
- my $todo=$env{'form.gradingkey'};
+ my $todo=&Apache::lonnet::unescape($env{'form.gradingkey'});
my $me=$env{'user.name'}.'@'.$env{'user.domain'};
if ($todo) {
my $who=&queue_key_locked($todo,$cdom,$cnum);
@@ -359,6 +388,7 @@ sub get_from_queue {
# FIXME need to find if I am 'mid grading'
$todo=&find_mid_grade($symb,$cdom,$cnum);
&Apache::lonnet::logthis("found ".join(':',&decode_queue_key($todo)));
+ if ($todo) { return $todo; }
while (1) {
my $starttime=time;
&Apache::lonnet::put('gradingqueue',{"$symb\0timestamp"=>$starttime},