--- loncom/homework/grades.pm 2004/05/14 19:15:49 1.200 +++ loncom/homework/grades.pm 2004/05/25 05:27:09 1.203 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.200 2004/05/14 19:15:49 albertel Exp $ +# $Id: grades.pm,v 1.203 2004/05/25 05:27:09 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3420,18 +3420,25 @@ sub getSequenceDropDown { return $result; } -sub scantron_uploads { - if (!-e $Apache::lonnet::perlvar{'lonScansDir'}) { return ''}; - my $result= '<select name="scantron_selectfile">'; +sub scantron_filenames { my $cdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; my $cname=$ENV{'course.'.$ENV{'request.course.id'}.'.num'}; my @files=&Apache::lonnet::dirlist('userfiles',$cdom,$cname, &Apache::loncommon::propath($cdom,$cname)); - $result.="<option></option>"; - foreach my $filename (@files) { + my @possiblenames; + foreach my $filename (sort(@files)) { ($filename)=split(/&/,$filename); if ($filename!~/^scantron_orig_/) { next ; } $filename=~s/^scantron_orig_//; + push(@possiblenames,$filename); + } + return @possiblenames; +} + +sub scantron_uploads { + my $result= '<select name="scantron_selectfile">'; + $result.="<option></option>"; + foreach my $filename (sort(&scantron_filenames())) { $result.="<option>$filename</option>\n"; } $result.="</select>"; @@ -3457,7 +3464,7 @@ sub scantron_CODElist { my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; my @names=&Apache::lonnet::getkeys('CODEs',$cdom,$cnum); my $namechoice='<option></option>'; - foreach my $name (@names) { + foreach my $name (sort(@names)) { if ($name =~ /^error: 2 /) { next; } $namechoice.='<option value="'.$name.'">'.$name.'</option>'; } @@ -3496,7 +3503,7 @@ sub scantron_selectphase { <tr> <td bgcolor="#777777"> <form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantron_process"> - <input type="hidden" name="command" value="scantron_validate" /> + <input type="hidden" name="command" value="scantron_warning" /> $default_form_data <table width="100%" border="0"> <tr bgcolor="#e6ffff"> @@ -3602,18 +3609,8 @@ SCANTRONFORM <td> Filename of scoring office file: </td><td> $file_selector </td> </tr> <tr bgcolor="#ffffe6"> - <td> - Records to download - </td> - <td> - <input type="radio" name="scantron_options" value="download_skipped"/> Skipped Records <br /> - <input type="radio" name="scantron_options" value="download_corrected"/> Corrected Records <br /> - <input checked="on" type="radio" name="scantron_options" value="dowload_orig"/> Original Records - </td> - </tr> - <tr bgcolor="#ffffe6"> <td colspan="2"> - <input type="submit" value="Validate Scantron Records" /> + <input type="submit" value="Show List of Files" /> </td> </tr> </table> @@ -3928,6 +3925,60 @@ sub check_for_error { } } +sub scantron_warning_screen { + my ($button_text)=@_; + my $title=&Apache::lonnet::gettitle($ENV{'form.selectpage'}); + return (<<STUFF); +<p> +<font color="red">Please double check the information + below before clicking on '$button_text'</font> +</p> +<table> +<tr><td><b>Sequence To be Graded:</b></td><td>$title</td></tr> +<tr><td><b>Data File that will be used:</b></td><td><tt>$ENV{'form.scantron_selectfile'}</tt></td></tr> +</table> +</font> +<br /> +<p> If this information is correct, please click on '$button_text'.</p> +<p> If something is incorrect, please click the 'Grading Menu' button to start over.</p> + +<br /> +STUFF +} + +sub scantron_do_warning { + my ($r)=@_; + my ($symb,$url)=&get_symb_and_url($r); + if (!$symb) {return '';} + my $default_form_data=&defaultFormData($symb,$url); + $r->print(&scantron_form_start().$default_form_data); + my $warning=&scantron_warning_screen('Validate Records'); + $r->print(<<STUFF); +$warning +<input type="submit" name="submit" value="Validate Records" /> +<input type="hidden" name="command" value="scantron_validate" /> +</form> +STUFF + $r->print("<br />".&show_grading_menu_form($symb,$url)."</body></html>"); + return ''; +} + +sub scantron_form_start { + my ($max_bubble)=@_; + my $result= <<SCANTRONFORM; +<form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantronupload"> + <input type="hidden" name="selectpage" value="$ENV{'form.selectpage'}" /> + <input type="hidden" name="scantron_format" value="$ENV{'form.scantron_format'}" /> + <input type="hidden" name="scantron_selectfile" value="$ENV{'form.scantron_selectfile'}" /> + <input type="hidden" name="scantron_maxbubble" value="$max_bubble'" /> + <input type="hidden" name="scantron_CODElist" value="$ENV{'form.scantron_CODElist'}" /> + <input type="hidden" name="scantron_CODEunique" value="$ENV{'form.scantron_CODEunique'}" /> + <input type="hidden" name="scantron_options_redo" value="$ENV{'form.scantron_options_redo'}" /> + <input type="hidden" name="scantron_options_ignore" value="$ENV{'form.scantron_options_ignore'}" /> +SCANTRONFORM + return $result; +} + sub scantron_validate_file { my ($r) = @_; my ($symb,$url)=&get_symb_and_url($r); @@ -3956,21 +4007,10 @@ sub scantron_validate_file { &scantron_process_corrections($r); } $r->print("<p>Gathering neccessary info.</p>");$r->rflush(); - my $max_bubble=&scantron_get_maxbubble($r); #get the student pick code ready $r->print(&Apache::loncommon::studentbrowser_javascript()); - my $result= <<SCANTRONFORM; -<form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantronupload"> - <input type="hidden" name="selectpage" value="$ENV{'form.selectpage'}" /> - <input type="hidden" name="scantron_format" value="$ENV{'form.scantron_format'}" /> - <input type="hidden" name="scantron_selectfile" value="$ENV{'form.scantron_selectfile'}" /> - <input type="hidden" name="scantron_maxbubble" value="$max_bubble'" /> - <input type="hidden" name="scantron_CODElist" value="$ENV{'form.scantron_CODElist'}" /> - <input type="hidden" name="scantron_CODEunique" value="$ENV{'form.scantron_CODEunique'}" /> - <input type="hidden" name="scantron_options_redo" value="$ENV{'form.scantron_options_redo'}" /> - <input type="hidden" name="scantron_options_ignore" value="$ENV{'form.scantron_options_ignore'}" /> - $default_form_data -SCANTRONFORM + my $max_bubble=&scantron_get_maxbubble($r); + my $result=&scantron_form_start($max_bubble).$default_form_data; $r->print($result); my @validate_phases=( 'ID', @@ -3993,9 +4033,14 @@ SCANTRONFORM } } if (!$stop) { - $r->print("Validation process complete.<br />"); - $r->print('<input type="submit" name="submit" value="Start Grading" />'); - $r->print('<input type="hidden" name="command" value="scantron_process" />'); + my $warning=&scantron_warning_screen('Start Grading'); + $r->print(<<STUFF); +Validation process complete.<br /> +$warning +<input type="submit" name="submit" value="Start Grading" /> +<input type="hidden" name="command" value="scantron_process" /> +STUFF + } else { $r->print('<input type="hidden" name="command" value="scantron_validate" />'); $r->print("<input type='hidden' name='validatepass' value='".$currentphase."' />"); @@ -4673,6 +4718,50 @@ sub scantron_upload_scantron_data_save { return ''; } +sub valid_file { + my ($requested_file)=@_; + foreach my $filename (sort(&scantron_filenames())) { + &Apache::lonnet::logthis("$requested_file $filename"); + if ($requested_file eq $filename) { return 1; } + } + return 0; +} + +sub scantron_download_scantron_data { + my ($r)=@_; + my $default_form_data=&defaultFormData(&get_symb_and_url($r,1)); + my $cname=$ENV{'course.'.$ENV{'request.course.id'}.'.num'}; + my $cdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; + my $file=$ENV{'form.scantron_selectfile'}; + if (! &valid_file($file)) { + $r->print(<<ERROR); + <p> + The requested file name was invalid. + </p> +ERROR + $r->print(&show_grading_menu_form(&get_symb_and_url($r,1))); + return; + } + my $orig='/uploaded/'.$cdom.'/'.$cname.'/scantron_orig_'.$file; + my $corrected='/uploaded/'.$cdom.'/'.$cname.'/scantron_corrected_'.$file; + my $skipped='/uploaded/'.$cdom.'/'.$cname.'/scantron_skipped_'.$file; + &Apache::lonnet::allowuploaded('/adm/grades',$orig); + &Apache::lonnet::allowuploaded('/adm/grades',$corrected); + &Apache::lonnet::allowuploaded('/adm/grades',$skipped); + $r->print(<<DOWNLOAD); + <p> + <a href="$orig">Original</a> file as uploaded by the scantron office. + </p> + <p> + <a href="$corrected">Corrections</a>, a file of corrected records that were used in grading. + </p> + <p> + <a href="$skipped">Skipped</a>, a file of records that were skipped. + </p> +DOWNLOAD + $r->print(&show_grading_menu_form(&get_symb_and_url($r,1))); + return ''; +} #-------- end of section for handling grading scantron forms ------- # @@ -4950,8 +5039,8 @@ sub handler { } } elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { $request->print(&scantron_selectphase($request)); - } elsif ($command eq 'scantron_validate' && $perm{'mgr'}) { - $request->print(&scantron_validate_file($request)); + } elsif ($command eq 'scantron_warning' && $perm{'mgr'}) { + $request->print(&scantron_do_warning($request)); } elsif ($command eq 'scantron_validate' && $perm{'mgr'}) { $request->print(&scantron_validate_file($request)); } elsif ($command eq 'scantron_process' && $perm{'mgr'}) { @@ -4964,7 +5053,7 @@ sub handler { (&Apache::lonnet::allowed('usc',$ENV{'request.role.domain'})|| &Apache::lonnet::allowed('usc',$ENV{'request.course.id'}))) { $request->print(&scantron_upload_scantron_data_save($request)); - } elsif ($command eq 'scantrondownload' && + } elsif ($command eq 'scantron_download' && &Apache::lonnet::allowed('usc',$ENV{'request.course.id'})) { $request->print(&scantron_download_scantron_data($request)); } elsif ($command) {