--- loncom/homework/grades.pm 2010/04/12 22:19:53 1.613
+++ loncom/homework/grades.pm 2010/04/20 19:04:54 1.625
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.613 2010/04/12 22:19:53 www Exp $
+# $Id: grades.pm,v 1.625 2010/04/20 19:04:54 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -43,6 +43,7 @@ use Apache::lonmsg();
use Apache::Constants qw(:common);
use Apache::lonlocal;
use Apache::lonenc;
+use Apache::lonstathelpers;
use String::Similarity;
use LONCAPA;
@@ -137,6 +138,7 @@ sub nameUserString {
#--- Get the partlist and the response type for a given problem. ---
#--- Indicate if a response type is coded handgraded or not. ---
+#--- Sets response_error pointer to "1" if navmaps object broken ---
sub response_type {
my ($symb,$response_error) = @_;
@@ -800,7 +802,7 @@ sub verifyreceipt {
$contents.
&Apache::loncommon::end_data_table()."\n";
}
- return $string.&show_grading_menu_form($symb);
+ return $string;
}
#--- This is called by a number of programs.
@@ -808,22 +810,21 @@ sub verifyreceipt {
#--- Also called directly when one clicks on the subm button
# on the problem page.
sub listStudents {
- my ($request,$symb) = @_;
+ my ($request,$symb,$submitonly) = @_;
my $cdom = $env{"course.$env{'request.course.id'}.domain"};
my $cnum = $env{"course.$env{'request.course.id'}.num"};
my $getsec = $env{'form.section'} eq '' ? 'all' : $env{'form.section'};
my $getgroup = $env{'form.group'} eq '' ? 'all' : $env{'form.group'};
- my $submitonly= $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'};
- my $viewgrade = $env{'form.showgrading'} eq 'yes' ? 'View/Grade/Regrade' : 'View';
+ unless ($submitonly) {
+ $submitonly= $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'};
+ }
my $result='
'
- .&mt("$viewgrade Submissions for a Student or a Group of Students")
+ .&mt("View/Grade/Regrade Submissions for a Student or a Group of Students")
.'
';
-
- my ($partlist,$handgrade,$responseType) = &response_type($symb
-#,$res_error
- );
+ my $res_error;
+ my ($partlist,$handgrade,$responseType) = &response_type($symb,\$res_error);
my %lt = &Apache::lonlocal::texthash (
'multiple' => 'Please select a student or group of students before clicking on the Next button.',
@@ -863,8 +864,6 @@ LISTJAVASCRIPT
&commonJSfunctions($request);
$request->print($result);
- my $checkhdgrade = ($env{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked="checked"' : '';
- my $checklastsub = $checkhdgrade eq '' ? 'checked="checked"' : '';
my $gradeTable=''.&show_grading_menu_form($symb);
- }
$request->print($toGrade);
return;
} else {
@@ -2236,7 +2226,8 @@ KEYWORDS
}
# essay grading message center
- if ($env{'form.handgrade'} eq 'yes') {
+# if ($env{'form.handgrade'} eq 'yes') {
+ if (1) {
my $result='
';
$result.='
'.
@@ -2328,7 +2319,6 @@ KEYWORDS
$endform.="";
$endform.='';
- $endform.=&show_grading_menu_form($symb);
$request->print($endform);
}
return '';
@@ -2542,7 +2532,8 @@ sub processHandGrade {
}
}
- if ($env{'form.handgrade'} eq 'yes') {
+# if ($env{'form.handgrade'} eq 'yes') {
+ if (1) {
# Keywords sorted in alphabatical order
my $loginuser = $env{'user.name'}.':'.$env{'user.domain'};
my %keyhash = ();
@@ -2595,19 +2586,19 @@ sub processHandGrade {
my $processUser = $env{'form.unamedom'.$ctr};
($env{'form.student'},$env{'form.userdom'}) = split(/:/,$processUser);
$env{'form.fullname'} = $$fullname{$processUser};
- &submission($request,$ctr,$total-1);
+ &submission($request,$ctr,$total-1,$symb);
$ctr++;
}
return '';
}
# Go directly to grade student - from submission or link from chart page
+# FIXME: looks like reading off the button label!
if ($button eq 'Grade Student') {
-# (undef,undef,$env{'form.handgrade'},undef,undef) = &showResourceInfo($symb);
my $processUser = $env{'form.unamedom'.$env{'form.studentNo'}};
($env{'form.student'},$env{'form.userdom'}) = split(/:/,$processUser);
$env{'form.fullname'} = $$fullname{$processUser};
- &submission($request,0,0);
+ &submission($request,0,0,$symb);
return '';
}
@@ -2694,14 +2685,13 @@ sub processHandGrade {
$env{'form.student'} = $uname;
$env{'form.userdom'} = $udom;
$env{'form.fullname'} = $$fullname{$_};
- &submission($request,$ctr,$total);
+ &submission($request,$ctr,$total,$symb);
$ctr++;
}
if ($total < 0) {
my $the_end = '
'.&mt('LON-CAPA User Message').'
'."\n";
$the_end.=&mt('Message: No more students for this section or class.').'
'."\n";
$the_end.=&mt('Click on the button below to return to the grading menu.').'
'.
&mt('Number of records updated = [_1] for [quant,_2,student].',
$rec_update,$count).' '.
@@ -3938,7 +3926,6 @@ ENDUPFORM
&mt("How do I create a CSV file from a spreadsheet"))
.''."\n";
$result.='
'."\n";
- $result.=&show_grading_menu_form($symb);
return $result;
}
@@ -3985,7 +3972,6 @@ sub csvuploadmap {
}
}
&csvuploadmap_footer($request,$i,$keyfields);
- $request->print(&show_grading_menu_form($symb));
return '';
}
@@ -4029,7 +4015,6 @@ ENDPICK
# FIXME do a check for any invalid user ids?...
$request->print('
'."\n");
- $request->print(&show_grading_menu_form($symb));
return '';
}
@@ -4158,7 +4143,6 @@ sub csvuploadassign {
$request->print(join(', ',@notallowed));
}
$request->print(" \n");
- $request->print(&show_grading_menu_form($symb));
return $error_msg;
}
#------------- end of section for handling csv file upload ---------
@@ -4288,7 +4272,6 @@ LISTJAVASCRIPT
$studentTable.=''."\n";
- $studentTable.=&show_grading_menu_form($symb);
$request->print($studentTable);
return '';
@@ -4343,7 +4326,6 @@ sub displayPage {
if (!&canview($usec)) {
$request->print(''.&mt('Unable to view requested student. ([_1])',$env{'form.student'}).'');
- $request->print(&show_grading_menu_form($symb));
return;
}
my $result='
'.$env{'form.title'}.'
';
@@ -4361,14 +4343,12 @@ sub displayPage {
my $navmap = Apache::lonnavmaps::navmap->new();
unless (ref($navmap)) {
$request->print(&navmap_errormsg());
- $request->print(&show_grading_menu_form($symb));
return;
}
my ($mapUrl, $id, $resUrl)=&Apache::lonnet::decode_symb($env{'form.page'});
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps
if (!$map) {
$request->print(''.&mt('Unable to view requested sequence. ([_1])',$resUrl).'');
- $request->print(&show_grading_menu_form($symb));
return;
}
my $iterator = $navmap->getIterator($map->map_start(),
@@ -4483,7 +4463,6 @@ sub displayPage {
''.
''."\n";
- $studentTable.=&show_grading_menu_form($symb);
$request->print($studentTable);
return '';
@@ -4547,7 +4526,7 @@ sub displaySubByDates {
$displaySub[0].=''.&mt('Part: [_1]',$display_part).''
.' '
- .'('.&mt('Part ID: [_1]',$responseId).')'
+ .'('.&mt('Response ID: [_1]',$responseId).')'
.''
.' ';
if ($hidden) {
@@ -4621,7 +4600,6 @@ sub updateGradeByPage {
my $usec=$classlist->{$env{'form.student'}}[5];
if (!&canmodify($usec)) {
$request->print(''.&mt('Unable to modify requested student ([_1])',$env{'form.student'}).'');
- $request->print(&show_grading_menu_form($env{'form.symb'}));
return;
}
my $result='
'.$env{'form.title'}.'
';
@@ -4640,7 +4618,6 @@ sub updateGradeByPage {
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps
if (!$map) {
$request->print(''.&mt('Unable to grade requested sequence ([_1]).',$resUrl).'');
- $request->print(&show_grading_menu_form($symb));
return;
}
my $iterator = $navmap->getIterator($map->map_start(),
@@ -4766,7 +4743,6 @@ sub updateGradeByPage {
}
$studentTable.=&Apache::loncommon::end_data_table();
- $studentTable.=&show_grading_menu_form($env{'form.symb'});
my $grademsg=($changeflag == 0 ? &mt('No score was changed or updated.') :
&mt('The scores were changed for [quant,_1,problem].',
$changeflag));
@@ -5139,7 +5115,6 @@ sub scantron_selectphase {
return;
}
my $default_form_data=&defaultFormData($symb);
- my $grading_menu_button=&show_grading_menu_form($symb);
my $file_selector=&scantron_uploads($file2grade);
my $format_selector=&scantron_scantab();
my $CODE_selector=&scantron_CODElist();
@@ -5301,7 +5276,6 @@ sub scantron_selectphase {
&Apache::loncommon::end_data_table_row()."\n".
&Apache::loncommon::end_data_table()."\n".
' ');
- $r->print($grading_menu_button);
return;
}
@@ -6226,7 +6200,7 @@ sub scantron_do_warning {
');
}
- $r->print(" ".&show_grading_menu_form($symb));
+ $r->print(" ");
return '';
}
@@ -6374,7 +6348,7 @@ sub scantron_validate_file {
$r->print(" ".&mt("this scanline saving it for later."));
}
}
- $r->print(" ".&show_grading_menu_form($symb));
+ $r->print(" ");
return '';
}
@@ -7637,7 +7611,6 @@ SCANTRONFORM
if ($ssi_error) {
$r->print("");
&ssi_print_error($r);
- $r->print(&show_grading_menu_form($symb));
&Apache::lonnet::remove_lock($lock);
return ''; # Dunno why the other returns return '' rather than just returning.
}
@@ -7715,7 +7688,6 @@ SCANTRONFORM
$ssi_error = 0; # So end of handler error message does not trigger.
$r->print("");
&ssi_print_error($r);
- $r->print(&show_grading_menu_form($symb));
&Apache::lonnet::remove_lock($lock);
return ''; # Why return ''? Beats me.
}
@@ -7743,7 +7715,6 @@ SCANTRONFORM
$ssi_error = 0; # So end of handler error message does not trigger.
$r->print("");
&ssi_print_error($r);
- $r->print(&show_grading_menu_form($symb));
&Apache::lonnet::remove_lock($lock);
delete($completedstudents{$uname});
return '';
@@ -7799,7 +7770,6 @@ SCANTRONFORM
# $r->print("
took $lasttime
");
$r->print("");
- $r->print(&show_grading_menu_form($symb));
return '';
}
@@ -7935,9 +7905,7 @@ sub scantron_upload_scantron_data_save {
!&Apache::lonnet::allowed('usc',
$env{'form.domainid'}.'_'.$env{'form.courseid'})) {
$r->print(&mt("You are not allowed to upload bubblesheet data to the requested course.")." ");
- if ($symb) {
- $r->print(&show_grading_menu_form($symb));
- } else {
+ unless ($symb) {
$r->print($doanotherupload);
}
return '';
@@ -8078,7 +8046,6 @@ sub scantron_download_scantron_data {
'.&mt('The requested file name was invalid.').'
');
- $r->print(&show_grading_menu_form($symb));
return;
}
my $orig='/uploaded/'.$cdom.'/'.$cname.'/scantron_orig_'.$file;
@@ -8101,14 +8068,12 @@ sub scantron_download_scantron_data {
'','').'
');
- $r->print(&show_grading_menu_form($symb));
return '';
}
sub checkscantron_results {
my ($r,$symb) = @_;
if (!$symb) {return '';}
- my $grading_menu_button=&show_grading_menu_form($symb);
my $cid = $env{'request.course.id'};
my %lettdig = &letter_to_digits();
my $numletts = scalar(keys(%lettdig));
@@ -8261,7 +8226,7 @@ sub checkscantron_results {
&Apache::loncommon::end_data_table()).' '.
&mt('Differences can occur if submissions were modified using manual grading after a bubblesheet grading pass.').' '.&mt('If unexpected discrepancies were detected, it is recommended that you inspect the original bubblesheets.');
}
- $r->print(' '.$grading_menu_button);
+ $r->print(' ');
return;
}
@@ -8403,15 +8368,11 @@ sub letter_to_digits {
#-------------------------- Menu interface -------------------------
#
-#--- Show a Grading Menu button - Calls the next routine ---
-sub show_grading_menu_form {
- my ($symb)=@_;
- my $result.=' '."\n";
- return $result;
+#--- Href with symb and command ---
+
+sub href_symb_cmd {
+ my ($symb,$cmd)=@_;
+ return '/adm/grades?symb='.&HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb),'<>&"').'&command='.$cmd;
}
sub grading_menu {
@@ -8419,9 +8380,7 @@ sub grading_menu {
if (!$symb) {return '';}
my %fields = ('symb'=>&Apache::lonenc::check_encrypt($symb),
- 'command'=>'individual',
- 'gradingMenu'=>1,
- 'showgrading'=>"yes");
+ 'command'=>'individual');
my $url1a = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
@@ -8434,6 +8393,9 @@ sub grading_menu {
$fields{'command'}='all_for_one';
my $url1d=&Apache::lonhtmlcommon::build_url('grades/',\%fields);
+ $fields{'command'}='downloadfilesselect';
+ my $url1e=&Apache::lonhtmlcommon::build_url('grades/',\%fields);
+
$fields{'command'} = 'csvform';
my $url2 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
@@ -8467,11 +8429,17 @@ sub grading_menu {
icon => 'edit-find-replace.png',
linktitle => 'Grade current resource for all students.'
},
- { linktext => 'Grade complete page/sequence/folder for one student',
+ { linktext => 'Grade page/folder for one student',
url => $url1d,
permission => 'F',
icon => 'edit-find-replace.png',
linktitle => 'Grade all resources in current page/sequence/folder for one student.'
+ },
+ { linktext => 'Download submissions',
+ url => $url1e,
+ permission => 'F',
+ icon => 'edit-find-replace.png',
+ linktitle => 'Download all students submissions.'
}]},
{ categorytitle=>'Automated Grading',
items =>[
@@ -8494,7 +8462,7 @@ sub grading_menu {
icon => 'stat.png',
linktitle => 'Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.'
},
- { linktext => 'Verify Receipt No.',
+ { linktext => 'Verify Receipt Number',
url => $url5,
permission => 'F',
icon => 'edit-find-replace.png',
@@ -8508,9 +8476,7 @@ sub grading_menu {
my $Str;
$Str .= '
';
- $result .= &show_grading_menu_form($symb);
return $result;
}
@@ -8555,9 +8517,7 @@ sub submit_options_table {
my $result;
$result.='';
- $result .= &show_grading_menu_form($symb);
return $result;
}
+sub submit_options_download {
+ my ($request,$symb) = @_;
+ if (!$symb) {return '';}
+ &commonJSfunctions($request);
+
+ my $result='';
+ return $result;
+}
#--- Displays the submissions first page -------
sub submit_options {
@@ -8585,10 +8564,7 @@ sub submit_options {
my $result;
$result.='';
- $result .= &show_grading_menu_form($symb);
return $result;
}
@@ -8829,7 +8804,6 @@ ENDUPFORM
ENDUPFORM
$result.=''."\n".
'
'."\n";
- $result.=&show_grading_menu_form($symb);
return $result;
}
@@ -8843,11 +8817,11 @@ sub process_clicker_file {
my $result='';
if (($env{'form.gradingmechanism'} eq 'specific') && ($env{'form.specificid'}!~/\w/)) {
$result.=''.&mt('You need to specify a clicker ID for the correct answer').'';
- return $result.&show_grading_menu_form($symb);
+ return $result;
}
if (($env{'form.gradingmechanism'} eq 'given') && ($env{'form.givenanswer'}!~/\S/)) {
$result.=''.&mt('You need to specify the correct answer').'';
- return $result.&show_grading_menu_form($symb);
+ return $result;
}
my $foundgiven=0;
if ($env{'form.gradingmechanism'} eq 'given') {
@@ -8894,7 +8868,7 @@ sub process_clicker_file {
$result.="\n";
if ($number==0) {
$result.=''.&mt('No IDs found to determine correct answer').'';
- return $result.&show_grading_menu_form($symb);
+ return $result;
}
}
if (length($env{'form.upfile'}) < 2) {
@@ -8902,7 +8876,7 @@ sub process_clicker_file {
'',
'',
''.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'');
- return $result.&show_grading_menu_form($symb);
+ return $result;
}
# Were able to get all the info needed, now analyze the file
@@ -8941,7 +8915,7 @@ ENDHEADER
' ';
if (($env{'form.gradingmechanism'} eq 'given') && ($number!=$foundgiven)) {
$result.=''.&mt('Number of given answers does not agree with number of questions in file.').'';
- return $result.&show_grading_menu_form($symb);
+ return $result;
}
# Remember Question Titles
# FIXME: Possibly need delimiter other than ":"
@@ -9003,7 +8977,7 @@ ENDHEADER
}
$result.=''."\n".
'