--- loncom/homework/bridgetask.pm 2008/09/11 14:47:17 1.240 +++ loncom/homework/bridgetask.pm 2010/01/12 17:05:12 1.250 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.240 2008/09/11 14:47:17 bisitz Exp $ +# $Id: bridgetask.pm,v 1.250 2010/01/12 17:05:12 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -82,7 +82,10 @@ sub proctor_check_auth { } } if ($authenticated) { - &check_in($type,$user,$domain,$slot_name); + my $check = &check_in($type,$user,$domain,$slot_name); + if ($check =~ /^error:/) { + return 0; + } return 1; } } @@ -94,7 +97,10 @@ sub check_in { my ($type,$user,$domain,$slot_name) = @_; my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); if ( $useslots eq 'map_map') { - &check_in_sequence($user,$domain,$slot_name); + my $result = &check_in_sequence($user,$domain,$slot_name); + if ($result =~ /^error: /) { + return $result; + } } else { &create_new_version($type,$user,$domain,$slot_name); &Apache::structuretags::finalize_storage(); @@ -105,6 +111,9 @@ sub check_in { sub check_in_sequence { my ($user,$domain,$slot_name) = @_; my $navmap = Apache::lonnavmaps::navmap->new(); + if (!defined($navmap)) { + return 'error: '; + } my ($symb) = &Apache::lonnet::whichuser(); my ($map) = &Apache::lonnet::decode_symb($symb); my @resources = @@ -306,7 +315,7 @@ sub add_request_another_attempt_button { my ($slot_name,$slot)=&Apache::slotrequest::check_for_reservation($symb); my $action='get_reservation'; if ($slot_name) { - $text=&mt('Change reservation.'); + $text=&mt('Change reservation'); $action='change_reservation'; my $description=&Apache::slotrequest::get_description($slot_name, $slot); @@ -473,7 +482,7 @@ sub file_list { my $file=$file_url.$partial_file; $file=~s|/+|/|g; &Apache::lonnet::allowuploaded('/adm/bridgetask',$file); - $file_list.='<li><span style="white-space: nowrap;"><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'. + $file_list.='<li><span class="LC_nobreak"><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'. &Apache::loncommon::icon($file).'" alt="file icon" border="0" /> '.$file. '</a></span></li>'."\n"; } @@ -493,13 +502,13 @@ sub webgrade_standard_info { my $file_list = &file_list($Apache::lonhomework::history{"resource.$version.0.bridgetask.portfiles"}); - my %lt=('done' => 'Next Item', - 'stop' => 'Quit Grading', - 'fail' => 'Fail Rest', - 'cancel' => 'Cancel', - 'submit' => 'Submit Grades', - ); - %lt=&Apache::lonlocal::texthash(%lt); + my %lt = &Apache::lonlocal::texthash( + 'done' => 'Next Item', + 'stop' => 'Quit Grading', + 'fail' => 'Fail Rest', + 'cancel' => 'Cancel', + 'submit' => 'Submit Grades', + ); my $result=<<INFO; <div class="LC_GRADING_maincontrols"> @@ -545,7 +554,7 @@ sub done_screen { .&mt('[_1]Nonexistent file:[_2]' ,'<span class="LC_error"> ' ,'</span> <span class="LC_filename">'.$file.'</span>'); - $msg .= "<p>".&mt('Submitted non-existant file [_1]',$file)."</p>\n"; + $msg .= "<p>".&mt('Submitted non-existent file [_1]',$file)."</p>\n"; } else { $file = '<span class="LC_filename">'.$file.'</span>'; $msg .= "<p>".&mt('Submitted file [_1]',$file)."</p>\n"; @@ -579,7 +588,7 @@ sub done_screen { .'<p><a href="/adm/logout">'.&mt('Logout').'</a></p>' .'<p><a href="/adm/roles">'.&mt('Change to a different course').'</a></p>' .$message_status -.$comment_status +.$comment_status; } @@ -655,7 +664,11 @@ sub start_Task { if ($status eq 'CAN_ANSWER' && $version eq '') { # CAN_ANSWER mode, and no current version, unproctored access # thus self-checkedin - &check_in('Task',undef,undef,$slot_name); + my $check = &check_in('Task',undef,undef,$slot_name); + if ($check =~ /^error: /) { + my $symb=&Apache::lonnet::symbread(); + &Apache::lonnet::logthis("Error during self-checkin of version $version of Task (symb: $symb) using slot: $slot_name"); + } &add_to_queue('gradingqueue',{'type' => 'Task', 'time' => time, 'slot' => $slot_name}); @@ -685,7 +698,7 @@ sub start_Task { $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>'; } elsif ($status eq 'NOT_IN_A_SLOT') { $msg.='<h1>'.&mt('You are not currently signed up to work at this time and/or place.').'</h1>'; - $msg.=&add_request_another_attempt_button("Sign up for time to work."); + $msg.=&add_request_another_attempt_button("Sign up for time to work"); } elsif ($status eq 'NEEDS_CHECKIN') { $msg.='<h1>'.&mt('You need the Proctor to validate you.'). '</h1>'.&proctor_validation_screen($slot); @@ -701,7 +714,7 @@ sub start_Task { } $result.=$msg.'<br />'; } elsif ($target eq 'tex') { - $result.='\begin{document}\noindent \vskip 1 mm \begin{minipage}{\textwidth}\vskip 0 mm'; + $result.='\noindent \vskip 1 mm \begin{minipage}{\textwidth}\vskip 0 mm'; if ($status eq 'UNAVAILABLE') { $result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm '; } else { @@ -1091,10 +1104,11 @@ sub end_Task { if (!$previous && $status ne 'SHOW_ANSWER' && &show_task($status,$previous)) { my $action = &Apache::lonenc::check_encrypt($env{'request.uri'}); + my $donetext = &mt('Done'); $result.=<<DONEBUTTON; <form name="done" method="post" action="$action"> <input type="hidden" name="donescreen" value="1" /> - <input type="submit" value="Done" /> + <input type="submit" value="$donetext" /> </form> DONEBUTTON } @@ -1294,8 +1308,25 @@ DONEBUTTON $Apache::lonhomework::results{"resource.$version.0.solved"}; } &minimize_storage(); - &Apache::structuretags::finalize_storage(); - + my $canstore; + if ($env{'form.gradingkey'}) { + my ($symb,$courseid,$domain,$name) = + &Apache::lonnet::whichuser(); + my $todo=&unescape($env{'form.gradingkey'}); + my ($keysymb,$uname,$udom)=&decode_queue_key($todo); + if ($symb eq $keysymb) { + if (($domain eq $udom) && ($name eq $uname)) { + $canstore = 1; + } + } + } + if ($canstore) { + &Apache::structuretags::finalize_storage(); + } else { + $result .= '<br /><div class="LC_error">'. + &mt('Information extracted from the current gradingkey was for a different BT or user from those for which grading data are to be stored.').' '.&mt('No grading changes stored.').'</div><br />'; + } + # data stored, now handle queue if ($review) { if ($env{'form.queue'} eq 'reviewqueue') { @@ -1381,6 +1412,13 @@ DONEBUTTON } &Apache::structuretags::reset_problem_globals('Task'); undef($Apache::lonhomework::parsing_a_task); + if ( ($target eq 'grade' && $env{'form.webgrade'}) || + $target eq 'webgrade') { + delete($env{'form.grade_symb'}); + delete($env{'form.grade_domain'}); + delete($env{'form.grade_username'}); + delete($env{'form.grade_courseid'}); + } return $result; } @@ -2080,6 +2118,7 @@ sub select_user { $seclist.='<input type="hidden" name="chosensections" value="'.$sec.'" />'; } + my $buttontext=&mt('Regrade'); $result.=&Apache::loncommon::start_data_table_row(); $result.=<<RESULT; <td> @@ -2088,7 +2127,7 @@ sub select_user { <input type="hidden" name="queue" value="$queue" /> <input type="hidden" name="webgrade" value="no" /> <input type="hidden" name="regrade" value="yes" /> - <input type="submit" name="submit" value="Regrade" /> + <input type="submit" name="submit" value="$buttontext" /> $seclist </form> <td>$classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()] <tt>($student)</tt> Sec: $classlist->{$student}[&Apache::loncoursedata::CL_SECTION()]</td> @@ -2647,17 +2686,11 @@ sub question_status_message { } $status .= '.'; if ($counts->{'opt'}) { - # FIXME &mt() missing! - $status .= ' You were required to pass '.$counts->{'opt_req'}. - ' optional '; - if ($counts->{'opt_dim'} + $counts->{'man_dim'} < 1) { - $status .= - ($counts->{'opt_req'} == 1?'criterion':'criteria'); - } else { - $status .= - 'component'.($counts->{'opt_req'} == 1?'':'s'); - } - $status .= '.'; + if ($counts->{'opt_dim'} + $counts->{'man_dim'} < 1) { + $status .= ' '.&mt('You were required to pass [quant,_1,optional criterion,optional criteria].',$counts->{'opt_req'}); + } else { + $status .= ' '.&mt('You were required to pass [quant,_1,optional component].',$counts->{'opt_req'}); + } } return $status; } @@ -2987,25 +3020,25 @@ sub layout_webgrade_Criteria { my $link=&link($id); my $version = &get_version(); my $status = &get_criteria('status',$version,$dim,$id); - my %lt = ( 'ungraded' => 'Ungraded', - 'fail' => 'Fail', - 'pass' => 'Pass', - 'review' => 'Review', - 'comment' => 'Additional Comment for Student', - ); - %lt = &Apache::lonlocal::texthash(%lt); + my %lt = &Apache::lonlocal::texthash( + 'ungraded' => 'Ungraded', + 'fail' => 'Fail', + 'pass' => 'Pass', + 'review' => 'Review', + 'comment' => 'Additional Comment for Student', + ); my $comment = &get_criteria('comment',$version,$dim,$id); $comment = &HTML::Entities::encode($comment,'<>"&'); my %checked; foreach my $which ('ungraded','fail','pass','review') { - if ($status eq $which) { $checked{$which} = 'checked="checked"'; } + if ($status eq $which) { $checked{$which} = ' checked="checked"'; } } - if (!%checked) { $checked{'ungraded'} = 'checked="checked"'; } + if (!%checked) { $checked{'ungraded'} = ' checked="checked"'; } my $buttons; foreach my $which ('ungraded','fail','pass','review') { $buttons .= <<END_BUTTON; <label class="LC_GRADING_$which"> - <input type="radio" name="HWVAL_$link" value="$which" $checked{$which} /> + <input type="radio" name="HWVAL_$link" value="$which"$checked{$which} /> $lt{$which} </label> END_BUTTON @@ -3139,33 +3172,45 @@ sub proctor_validation_screen { if (!$env{'form.proctordomain'}) { $env{'form.proctordomain'}=$domain; } my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); $uri = &HTML::Entities::encode($uri,'<>&"'); - # FIXME &mt() missing! + my %lt = &Apache::lonlocal::texthash( + 'prva' => "Proctor Validation", + 'yoro' => "Your room's proctor needs to validate your access to this resource.", + 'prus' => "Proctor's Username:", + 'pasw' => "Password:", + 'prdo' => "Proctor's Domain:", + 'vali' => 'Validate', + 'stui' => "Student who should be logged in is:", + 'name' => "Name:", + 'sid' => "Student/Employee ID:", + 'unam' => "Username:", + ); my $result= (<<ENDCHECKOUT); -<h2>Proctor Validation</h2> - <p>Your room's proctor needs to validate your access to this resource.</p> +<h2>$lt{'prva'}</h2> + <p>$lt{'yoro'}</p> $msg <form name="checkout" method="post" action="$uri"> <input type="hidden" name="validate" value="yes" /> <input type="hidden" name="submitted" value="yes" /> <table> - <tr><td>Proctor's Username:</td><td><input type="string" name="proctorname" value="$env{'form.proctorname'}" /></td></tr> - <tr><td>Password:</td><td><input type="password" name="proctorpassword" value="" /></td></tr> - <tr><td>Proctor's Domain:</td><td><input type="string" name="proctordomain" value="$env{'form.proctordomain'}" /></td></tr> + <tr><td>$lt{'prus'}</td><td><input type="string" name="proctorname" value="$env{'form.proctorname'}" /></td></tr> + <tr><td>$lt{'pasw'}</td><td><input type="password" name="proctorpassword" value="" /></td></tr> + <tr><td>$lt{'prdo'}</td><td><input type="string" name="proctordomain" value="$env{'form.proctordomain'}" /></td></tr> </table> -<input type="submit" name="checkoutbutton" value="Validate" /><br /> +<input type="submit" name="checkoutbutton" value="$lt{'vali'}" /><br /> <table border="1"> <tr><td> <table> - <tr><td colspan="2">Student who should be logged in is:</td></tr> - <tr><td>Name:</td><td>$name</td></tr> - <tr><td>Student ID:</td><td>$env{'environment.id'}</td></tr> - <tr><td>Usename</td><td>$user:$domain</td></tr> + <tr><td colspan="2">$lt{'stui'}</td></tr> + <tr><td>$lt{'name'}</td><td>$name</td></tr> + <tr><td>$lt{'sid'}</td><td>$env{'environment.id'}</td></tr> + <tr><td>$lt{'unam'}</td><td>$user:$domain</td></tr> $url </table> </tr></td> </table> </form> ENDCHECKOUT + return $result; }