version 1.15, 2005/05/03 05:31:51
|
version 1.16, 2005/05/03 06:44:56
|
Line 95 sub add_grading_button {
|
Line 95 sub add_grading_button {
|
sub start_Task { |
sub start_Task { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
|
|
&Apache::structuretags::initialize_storage(); |
|
&Apache::lonhomework::showhash(%Apache::lonhomework::history); |
|
my ($status,$accessmsg,$slot); |
my ($status,$accessmsg,$slot); |
|
if ($target ne 'webgrade') { |
|
&Apache::structuretags::initialize_storage(); |
|
&Apache::lonhomework::showhash(%Apache::lonhomework::history); |
|
} |
|
|
$Apache::lonhomework::parsing_a_task=1; |
$Apache::lonhomework::parsing_a_task=1; |
#should get back a <html> or the neccesary stuff to start XML/MathML |
#should get back a <html> or the neccesary stuff to start XML/MathML |
my ($result,$head_tag_start,$body_tag_start,$form_tag_start)= |
my ($result,$head_tag_start,$body_tag_start,$form_tag_start)= |
&Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); |
&Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); |
|
|
if ($target eq 'web') { |
if ($target eq 'web') { |
$body_tag_start.=&add_previous_version_button(); |
$body_tag_start.=&add_previous_version_button(); |
if ($Apache::lonhomework::modifygrades) { |
if ($Apache::lonhomework::modifygrades) { |
Line 177 sub start_Task {
|
Line 180 sub start_Task {
|
} |
} |
} elsif ($target eq 'webgrade') { |
} elsif ($target eq 'webgrade') { |
$result.=$head_tag_start.$body_tag_start.$form_tag_start; |
$result.=$head_tag_start.$body_tag_start.$form_tag_start; |
|
$result.= |
|
'<input type="hidden" name="grade_target" value="webgrade" />'; |
$result.=&show_queue(); |
$result.=&show_queue(); |
my $todo=&get_from_queue(); |
my $todo=&get_from_queue(); |
if ($todo) { |
if ($todo) { |
|
&setup_env_for_other_user($todo,$safeeval); |
my ($symb,$uname,$udom)=&decode_queue_key($todo); |
my ($symb,$uname,$udom)=&decode_queue_key($todo); |
$result.="\n".'<table><tr><td>Found'. |
$result.="\n".'<table><tr><td>Found '. |
$symb.':'.$uname.':'.$udom.'</td></tr></table>'; |
&Apache::lonnet::gettitle($symb).' for '.$uname.' at '.$udom.'</td></tr></table>'; |
$result.='<input type="hidden" name="gradingkey" value="'. |
$result.='<input type="hidden" name="gradingkey" value="'. |
&HTML::Entites::encode($todo).'" />'; |
&Apache::lonnet::escape($todo).'" />'; |
$Apache::bridgetask::queue_key=$todo; |
$Apache::bridgetask::queue_key=$todo; |
|
&Apache::structuretags::initialize_storage(); |
|
&Apache::lonhomework::showhash(%Apache::lonhomework::history); |
} else { |
} else { |
$result.="\n". |
$result.="\n". |
'<table><tr><td>No user to be graded.</td></tr></table>'; |
'<table><tr><td>No user to be graded.</td></tr></table>'; |
Line 255 sub end_Task {
|
Line 263 sub end_Task {
|
return $result; |
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 { |
sub add_to_queue { |
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my %data; |
my %data; |
#$data{"$symb\0timestamp"}=time; |
|
$data{"$symb\0queue\0$uname\@$udom"}=[$Apache::inputtags::slot_name]; |
$data{"$symb\0queue\0$uname\@$udom"}=[$Apache::inputtags::slot_name]; |
&Apache::lonnet::put('gradingqueue',\%data,$cdom,$cnum); |
&Apache::lonnet::put('gradingqueue',\%data,$cdom,$cnum); |
} |
} |
Line 270 sub show_queue {
|
Line 287 sub show_queue {
|
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my ($symb,$cid,$udom,$uname)=&Apache::lonxml::whichuser(); |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $regexp="^$symb\0queue"; |
my $regexp="^$symb\0"; |
my %queue=&Apache::lonnet::dump('gradingqueue',$cdom,$cnum,$regexp); |
my %queue=&Apache::lonnet::dump('gradingqueue',$cdom,$cnum,$regexp); |
$result.="\n<h3>Current Queue</h3><table><tr><th>resource</th><th>user</th><th>Time available for grading</th></tr>"; |
$result.="\n<h3>Current Queue</h3><table><tr><th>resource</th><th>user</th><th>type</th><th>data</th></tr>"; |
foreach my $key (sort(keys(%queue))) { |
foreach my $key (sort(keys(%queue))) { |
my ($symb,undef,$user) = split("\0",$key); |
if ($key=~/locked$/) { |
my ($uname,$udom) = split('@',$user); |
my ($symb,$uname,$udom) = &decode_queue_key($key); |
my $title=&Apache::lonnet::gettitle($symb); |
my $title=&Apache::lonnet::gettitle($symb); |
$result.="<tr><td>$title</td><td>$uname</td><td>"; |
$result.="<tr><td>$title</td><td>$uname</td><td>"; |
my $slot=$queue{$key}->[0]; |
$result.='<td>lock</td><td>'.$queue{$key}.'</td></tr>'; |
my %slot_data=&Apache::lonnet::get_slot($slot); |
} elsif ($key=~/timestamp$/) { |
$result.="End time: ".&Apache::lonlocal::locallocaltime($slot_data{'endtime'})."</td></tr>"; |
my ($symb,undef) = split("\0",$key); |
|
my $title=&Apache::lonnet::gettitle($symb); |
|
$result.="<tr><td>$title</td><td></td><td>"; |
|
$result.='<td>last queue modification time</td><td>'. |
|
&Apache::lonlocal::locallocaltime($queue{$key})."</td></tr>"; |
|
} else { |
|
my ($symb,$uname,$udom) = &decode_queue_key($key); |
|
my $title=&Apache::lonnet::gettitle($symb); |
|
$result.="<tr><td>$title</td><td>$uname</td><td>"; |
|
my $slot=$queue{$key}->[0]; |
|
my %slot_data=&Apache::lonnet::get_slot($slot); |
|
$result.='<td>queue entry</td><td>End time: '.&Apache::lonlocal::locallocaltime($slot_data{'endtime'})."</td></tr>"; |
|
} |
} |
} |
$result.="</table><hr />\n"; |
$result.="</table><hr />\n"; |
return $result; |
return $result; |
Line 305 sub queue_key_locked {
|
Line 334 sub queue_key_locked {
|
|
|
sub pick_from_queue_data { |
sub pick_from_queue_data { |
my ($check_section,$queue,$cdom,$cnum)=@_; |
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); |
my ($symb,$uname,$udom)=&decode_queue_key($key); |
if ($check_section) { |
if ($check_section) { |
my $section=&Apache::lonnet::getsection($uname,$udom); |
my $section=&Apache::lonnet::getsection($uname,$udom); |
Line 331 sub pick_from_queue_data {
|
Line 360 sub pick_from_queue_data {
|
|
|
sub find_mid_grade { |
sub find_mid_grade { |
my ($symb,$cdom,$cnum)=@_; |
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'}; |
my $me=$env{'user.name'}.'@'.$env{'user.domain'}; |
if ($todo) { |
if ($todo) { |
my $who=&queue_key_locked($todo,$cdom,$cnum); |
my $who=&queue_key_locked($todo,$cdom,$cnum); |
Line 359 sub get_from_queue {
|
Line 388 sub get_from_queue {
|
# FIXME need to find if I am 'mid grading' |
# FIXME need to find if I am 'mid grading' |
$todo=&find_mid_grade($symb,$cdom,$cnum); |
$todo=&find_mid_grade($symb,$cdom,$cnum); |
&Apache::lonnet::logthis("found ".join(':',&decode_queue_key($todo))); |
&Apache::lonnet::logthis("found ".join(':',&decode_queue_key($todo))); |
|
if ($todo) { return $todo; } |
while (1) { |
while (1) { |
my $starttime=time; |
my $starttime=time; |
&Apache::lonnet::put('gradingqueue',{"$symb\0timestamp"=>$starttime}, |
&Apache::lonnet::put('gradingqueue',{"$symb\0timestamp"=>$starttime}, |