--- loncom/homework/bridgetask.pm 2006/02/08 21:55:36 1.101 +++ loncom/homework/bridgetask.pm 2006/02/09 23:02:51 1.106 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.101 2006/02/08 21:55:36 albertel Exp $ +# $Id: bridgetask.pm,v 1.106 2006/02/09 23:02:51 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -188,19 +188,32 @@ sub add_grading_button { $result.='<input type="hidden" name="grade_target" value="webgrade" />'; if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'})) { my ($entries,$ready,$locks)=&get_queue_counts('gradingqueue'); - $result.='<p>Specify a section: '.$sec_select.'</p>'; - $result.='<p>'.&mt("Grading Queue has [_1] entries. [_2] of them are ready to be graded and [_3] of them are currently being graded",$entries,$ready,$locks); + $result.='<table><tr>'; + $result.='<td rowspan="4">Specify a section: </td><td rowspan="4">'.$sec_select.'</td>'; + $result.='<td>'.' <input type="submit" name="reviewagrading" value="'. + &mt("Select an entry from the grading queue:").'" /> '; - $result.=' <input type="submit" name="reviewagrading" value="'. - &mt("Select an entry from the grading queue").'" /> </p>'."\n"; + $result.= &mt("[_1] entries, [_2] ready, [_3] being graded",$entries,$ready,$locks);' </td></tr>'."\n"; ($entries,$ready,$locks)=&get_queue_counts('reviewqueue'); - $result.='<p>'.&mt("Review Queue has [_1] entries. [_2] of them are ready to be graded and [_3] of them are currently being graded",$entries,$ready,$locks); - $result.=' <input type="submit" name="reviewasubmission" value="'. - &mt("Select an entry from the review queue").'" /> </p>'."\n"; - $result.=' <input type="submit" name="regradeasubmission" value="'. - &mt("Select a user to regrade.").'" /> </p>'."\n"; - } + $result.='<tr><td>'. + ' <input type="submit" name="reviewasubmission" value="'. + &mt("Select an entry from the review queue:").'" /> '; + $result.=&mt("[_1] entries, [_2] ready, [_3] being graded", + $entries,$ready,$locks).'</td></tr>'."\n"; + $result.='<tr><td> <input type="submit" name="regradeasubmission" value="'. + &mt("List of user's grade status").'" /> </td></tr></table>'."\n"; + $result.='<p> <input type="submit" name="regradeaspecificsubmission" value="'. + &mt("Regrade specific user:").'" />'."\n"; + $result.='<input type="text" size="12" name="gradinguser" />'; + $result.=&Apache::loncommon::select_dom_form($env{'user.domain'}, + 'gradingdomain'); + $result.=' '. + &Apache::loncommon::selectstudent_link('gradesubmission', + 'gradinguser', + 'gradingdomain'); + $result.=&Apache::loncommon::studentbrowser_javascript(); + } return $result; } @@ -515,7 +528,7 @@ DONESCREEN # Hrrm, vaildation pass should perhaps say 'not_locked' # perhaps do a search if there is a key that is mine and if # there isn't reshow the queue.... - my ($todo,$status_code)=&get_key_todo($target); + my ($todo,$status_code,$msg)=&get_key_todo($target); if ($todo) { &setup_env_for_other_user($todo,$safeeval); @@ -544,7 +557,7 @@ DONESCREEN if ($status_code eq 'stop') { $result.='<b>'.&mt("Stopped grading.").'</b>'.$back; } elsif ($status_code eq 'lock_failed') { - $result.='<b>'.&mt("Failed to lock the request record.") + $result.='<b>'.&mt("Failed to lock the requested record.") .'</b>'.$back; } elsif ($status_code eq 'unlock') { $result.='<b>'.&mt("Unlocked the requested record.") @@ -556,6 +569,8 @@ DONESCREEN $result.=&select_user(); } elsif ($status_code eq 'unable') { $result.='<b>'.&mt("Unable to aqcuire a user to grade.").'</b>'.$back; + } elsif ($status_code eq 'not_allowed') { + $result.='<b>'.&mt('Not allowed to grade the requested user.').' '.$msg.'</b>'.$back; } else { $result.='<b>'.&mt("No user to be graded.").'</b>'.$back; } @@ -622,6 +637,57 @@ sub get_key_todo { return (undef,'select_user'); } + + my $me=$env{'user.name'}.'@'.$env{'user.domain'}; + + #need to try both queues.. + if (defined($env{'form.regradeaspecificsubmission'}) && + defined($env{'form.gradinguser'}) && + defined($env{'form.gradingdomain'}) ) { + my ($symb,$cid)=&Apache::lonxml::whichuser(); + my $cnum = $env{'course.'.$cid.'.num'}; + my $cdom = $env{'course.'.$cid.'.domain'}; + my $uname = $env{'form.gradinguser'}; + my $udom = $env{'form.gradingdomain'}; + + my $gradingkey=&encode_queue_key($symb,$udom,$uname); + + my $queue; + + if (&in_queue('gradingqueue',$symb,$cdom,$cnum,$udom,$uname)) { + $env{'form.queue'} = $queue = 'gradingqueue'; + } elsif (&in_queue('reviewqueue' ,$symb,$cdom,$cnum,$udom,$uname)) { + $env{'form.queue'} = $queue = 'reviewqueue'; + } + + if (!$queue) { + $env{'form.queue'} = $queue = 'none'; + #not queued so doing either a re or pre grade + return ($gradingkey); + } + + my $who=&queue_key_locked($queue,$gradingkey); + if ($who eq $me) { + #already have the lock + $env{'form.gradingkey'}=&Apache::lonnet::escape($gradingkey); + return ($gradingkey); + } + + if (!defined($who)) { + if (&lock_key($queue,$gradingkey)) { + return ($gradingkey); + } else { + return (undef,'lock_failed'); + } + } + + #otherwise (defined($who) && $who ne $me) some else has it... + return (undef,'not_allowed', + &mt('Another user ([_1]) currently has the record for [_2] locked.', + $who,$env{'form.gradinguser'}.'@'.$env{'form.gradingdomain'})); + } + + my $queue=$env{'form.queue'}; if (!defined($queue)) { @@ -649,7 +715,6 @@ sub get_key_todo { && $env{'form.queuemode'} eq 'selected') { my $who=&queue_key_locked($queue,$gradingkey); - my $me=$env{'user.name'}.'@'.$env{'user.domain'}; if ($who eq $me) { &Apache::lonxml::debug("Found a key was given to me"); return ($gradingkey,'selected'); @@ -1101,32 +1166,30 @@ sub show_queue { if ($tmp=~/^error: 2 /) { return "\n<h3>Current Queue - $queue</h3><table border='1'><tr><td>Empty</td></tr></table>"; } - $result.="\n<h3>Current Queue - $symb $queue </h3><table border='1'><tr>"; - if ($with_selects) { $result.="<th></th>"; } - $result.="<th>resource</th><th>user</th><th>type</th><th>data</th></tr>"; + my $title=&Apache::lonnet::gettitle($symb); + $result.="\n<h3>Current Queue - $title $queue </h3><table border='1'><tr>"; + if ($with_selects) { $result.="<th>Status</th><th></th>"; } + $result.="<th>user</th><th>data</th></tr>"; foreach my $key (sort(keys(%queue))) { my ($symb,$uname,$udom) = &decode_queue_key($key); if (!defined($classlist->{$uname.':'.$udom})) { next; } if ($key=~/locked$/ && !$with_selects) { - my $title=&Apache::lonnet::gettitle($symb); - $result.="<tr><td>$title</td><td>$uname</td>"; - $result.='<td>lock</td><td>'.$queue{$key}.'</td></tr>'; + $result.="<tr><td>$uname</td>"; + $result.='<td>'.$queue{$key}.'</td></tr>'; } elsif ($key=~/timestamp$/ && !$with_selects) { - my ($symb,undef) = split("\0",$key); - my $title=&Apache::lonnet::gettitle($symb); - $result.="<tr><td>$title</td><td></td>"; - $result.='<td>last queue modification time</td><td>'. + $result.="<tr><td></td>"; + $result.='<td>'. &Apache::lonlocal::locallocaltime($queue{$key})."</td></tr>"; } elsif ($key!~/(timestamp|locked)$/) { - my $title=&Apache::lonnet::gettitle($symb); $result.="<tr>"; my $slot=$queue{$key}->[0]; my %slot_data=&Apache::lonnet::get_slot($slot); if ($with_selects) { my $ekey=&Apache::lonnet::escape($key); - my ($action,$description)=('select',&mt('Select')); + my ($action,$description,$status)=('select',&mt('Select')); if (exists($queue{"$key\0locked"})) { my $me=$env{'user.name'}.'@'.$env{'user.domain'}; + $status=&mt('Locked by <tt>[_1]</tt>',$queue{"$key\0locked"}); if ($me eq $queue{"$key\0locked"}) { ($action,$description)=('resume',&mt('Resume')); } else { @@ -1140,8 +1203,9 @@ sub show_queue { } if (time > $slot_data{'endtime'}) { $result.=(<<FORM); +<td>$status</td> <td> -<form method="POST"> +<form style="display: inline" method="POST"> <input type="hidden" name="gradingkey" value="$ekey" /> <input type="hidden" name="queue" value="$queue" /> <input type="hidden" name="gradingaction" value="$action" /> @@ -1157,8 +1221,9 @@ FORM $result.='<td>'.&mt("In Progress").'</td>' } } - $result.="<td>$title</td><td>$uname</td>"; - $result.='<td>queue entry</td><td>Slot: '.$slot.' End time: '. + $result.= "<td>".$fullname->{$uname.':'.$udom}. + " <tt>($uname\@$udom)</tt> </td>"; + $result.='<td>Slot: '.$slot.' End time: '. &Apache::lonlocal::locallocaltime($slot_data{'endtime'}). "</td></tr>"; } @@ -1443,10 +1508,12 @@ sub select_user { $seclist.='<input type="hidden" name="chosensections" value="'.$sec.'" />'; } + my $studentdis = $student; + $studentdis =~ tr/:/@/; $result.=<<RESULT; <tr> <td> - <form method="POST"> + <form style="display: inline" method="POST"> <input type="hidden" name="gradingkey" value="$todo" /> <input type="hidden" name="queue" value="$queue" /> <input type="hidden" name="webgrade" value="no" /> @@ -1454,7 +1521,7 @@ sub select_user { <input type="submit" name="submit" value="Regrade" /> $seclist </form> - <td>$fullname->{$student}</td> + <td>$fullname->{$student} <tt>($studentdis)</tt></td> <td> RESULT }