--- loncom/homework/grades.pm 2007/10/09 23:42:49 1.451 +++ loncom/homework/grades.pm 2007/10/29 09:46:28 1.470 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.451 2007/10/09 23:42:49 albertel Exp $ +# $Id: grades.pm,v 1.470 2007/10/29 09:46:28 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -35,6 +35,7 @@ use Apache::loncommon; use Apache::lonhtmlcommon; use Apache::lonnavmaps; use Apache::lonhomework; +use Apache::lonpickcode; use Apache::loncoursedata; use Apache::lonmsg(); use Apache::Constants qw(:common); @@ -56,9 +57,7 @@ my %first_bubble_line = (); # First bubb sub save_bubble_lines { - &Apache::lonnet::logthis("Saving bubble_lines..."); foreach my $line (keys(%bubble_lines_per_response)) { - &Apache::lonnet::logthis("Saving form.scantron.bubblelines.$line value: $bubble_lines_per_response{$line}"); $env{"form.scantron.bubblelines.$line"} = $bubble_lines_per_response{$line}; $env{"form.scantron.first_bubble_line.$line"} = $first_bubble_line{$line}; @@ -71,7 +70,6 @@ sub restore_bubble_lines { %bubble_lines_per_response = (); while ($env{"form.scantron.bubblelines.$line"}) { my $value = $env{"form.scantron.bubblelines.$line"}; - &Apache::lonnet::logthis("Restoring form.scantron.bubblelines.$line value: $value"); $bubble_lines_per_response{$line} = $value; $first_bubble_line{$line} = $env{"form.scantron.first_bubble_line.$line"}; @@ -86,12 +84,14 @@ sub restore_bubble_lines { sub get_response_bubbles { my ($parsed_line, $response) = @_; - my $bubble_line = $first_bubble_line{$response}; - my $bubble_lines= $bubble_lines_per_response{$response}; + + my $bubble_line = $first_bubble_line{$response-1} +1; + my $bubble_lines= $bubble_lines_per_response{$response-1}; + my $selected = ""; for (my $bline = 0; $bline < $bubble_lines; $bline++) { - $selected .= $$parsed_line{"scantron.$bubble_line.answer"}; + $selected .= $$parsed_line{"scantron.$bubble_line.answer"}.":"; $bubble_line++; } return $selected; @@ -332,8 +332,8 @@ sub cleanRecord { $bottomrow.='
'; } elsif ($response eq 'match') { my %answer=&Apache::lonnet::str2hash($answer); @@ -352,10 +352,10 @@ sub cleanRecord { $bottomrow.=''. - '
'. - ' Answer '.$toprow.''.$grayFont.'Option ID '. + ''. + ' '.&mt('Answer').' '.$toprow.''.' '.$grayFont.&mt('Option ID').' '. $grayFont.$bottomrow.'
'; } elsif ($response eq 'radiobutton') { my %answer=&Apache::lonnet::str2hash($answer); @@ -365,18 +365,18 @@ sub cleanRecord { foreach my $foil (@$order) { if (exists($answer{$foil})) { if ($foil eq $correct) { - $toprow.=''. - '
'. - ' Answer '.$toprow.''.$grayFont.'Item ID '. + ''. + ' '.&mt('Answer').' '.$toprow.''. - ' '.$grayFont.&mt('Item ID').' '. $middlerow.''.$grayFont.'Option ID '. + ''.' '.$grayFont.&mt('Option ID').' '. $bottomrow.'
'; } elsif ($response eq 'essay') { if (! exists ($env{'form.'.$symb})) { @@ -526,12 +526,18 @@ sub getclasslist { } } # filter students according to groups selected + my @stu_groups = split(/,/,$group); if (@getgroup) { my $exclude = 1; - foreach my $grp(@getgroup) { - if ($group eq $grp) { - $exclude = 0; + foreach my $grp (@getgroup) { + foreach my $stu_group (@stu_groups) { + if ($stu_group eq $grp) { + $exclude = 0; + } } + if (($grp eq 'none') && !$group) { + $exclude = 0; + } } if ($exclude) { delete($classlist->{$student}); @@ -970,7 +976,7 @@ LISTJAVASCRIPT $ctr++; my $section = $classlist->{$student}->[&Apache::loncoursedata::CL_SECTION()]; - + my $group = $classlist->{$student}->[&Apache::loncoursedata::CL_GROUP()]; if ( $perm{'vgr'} eq 'F' ) { $gradeTable.=''. - '
'. - ' Answer '.$toprow.''.$grayFont.'Option ID '. + ''. + ' '.&mt('Answer').' '.$toprow.''.' '.$grayFont.&mt('Option ID').' '. $grayFont.$bottomrow.'
';
- $result.='
|
'.$env{'form.fullname'}.' | ||||||||
---|---|---|---|---|---|---|---|---|
');
+ ' '.
+ ' '.&nameUserString(undef,$env{'form.fullname'},$uname,$udom).' '.
+ ''."\n");
if ($env{'form.vProb'} eq 'all' or $env{'form.vAns'} eq 'all') {
my $mode;
@@ -1976,71 +1977,31 @@ KEYWORDS
# Display student info
$request->print(($counter == 0 ? '' : ' '."\n";
if (($env{'form.command'} eq 'submission') ||
($env{'form.command'} eq 'processGroup' && $counter == $total)) {
$toGrade.=''.&show_grading_menu_form($symb);
@@ -2166,45 +2129,45 @@ KEYWORDS
$request->print($toGrade);
return;
} else {
- $request->print('')); - my $result='
|
'.
- '
|
Please indicate which bubble should be used for grading
"); foreach my $question (@{$arg}) { - my $selected = &get_response_bubbles($scan_record, $question); + my @select_array = split(/:/,$selected); &scantron_bubble_selector($r,$scan_config,$question, - split('',$selected)); + @select_array); } } elsif ($error eq 'missingbubble') { $r->print("There have been no bubbles scanned for some question(s)
\n"); @@ -6432,7 +6486,9 @@ ENDSCRIPT join(',',@{$arg}).'" />'); foreach my $question (@{$arg}) { my $selected = &get_response_bubbles($scan_record, $question); - &scantron_bubble_selector($r,$scan_config,$question); + my @select_array = split(/:/,$selected); # ought to be an array of empties. + &Apache::lonnet::logthis("Calling bubble selector (missing)"); + &scantron_bubble_selector($r,$scan_config,$question, @select_array); } } else { $r->print("\n$quest | "); for (my $l = 0; $l < $lines; $l++) { if ($l != 0) { $r->print('
');
if ($selected[0] eq $alphabet[$i]) {
@@ -6731,14 +6786,11 @@ sub scantron_validate_doublebubble {
=cut
sub scantron_get_maxbubble {
- &Apache::lonnet::logthis("get_max_bubble");
if (defined($env{'form.scantron_maxbubble'}) &&
$env{'form.scantron_maxbubble'}) {
- &Apache::lonnet::logthis("cached");
&restore_bubble_lines();
return $env{'form.scantron_maxbubble'};
}
- &Apache::lonnet::logthis("computing");
my (undef, undef, $sequence) =
&Apache::lonnet::decode_symb($env{'form.selectpage'});
@@ -6776,9 +6828,9 @@ sub scantron_get_maxbubble {
foreach my $part_id (@{$analysis{'parts'}}) {
- my ($trash, $part) = split(/\./, $part_id);
- my $lines = $analysis{"$part_id.bubble_lines"}[0];
+
+ my $lines = $analysis{"$part_id.bubble_lines"};;
# TODO - make this a persistent hash not an array.
@@ -6828,8 +6880,12 @@ sub scantron_validate_missingbubbles {
$scan_data);
if (!defined($$scan_record{'scantron.missingerror'})) { next; }
my @to_correct;
+
+ # Probably here's where the error is...
+
foreach my $missing (@{$$scan_record{'scantron.missingerror'}}) {
if ($missing > $max_bubble) { next; }
+ &Apache::lonnet::logthis("Marking $missing for missing bubble check");
push(@to_correct,$missing);
}
if (@to_correct) {
@@ -7184,10 +7240,6 @@ sub grading_menu {
my $probTitle = &Apache::lonnet::gettitle($symb);
my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle);
- #
- # Define menu data
- $env{'form.probTitle'} = &Apache::lonnet::gettitle($symb);
- my ($table) = &showResourceInfo($symb,$env{'form.probTitle'});
$request->print($table);
my %fields = ('symb'=>&Apache::lonenc::check_encrypt($symb),
'handgrade'=>$hdgrade,
@@ -7217,29 +7269,15 @@ sub grading_menu {
$fields{'command'} = 'scantron_selectphase';
$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
push (@menu, { url => $url,
- name => &mt('Grade Scantron Forms'),
+ name => &mt('Grade/Manage Scantron Forms'),
short_description =>
&mt('')});
$fields{'command'} = 'verify';
$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
push (@menu, { url => "",
- jscript => ' onClick="javascript:checkChoice2(document.forms.gradingMenu,\'5\',\'verify\')" ',
name => &mt('Verify Receipt'),
short_description =>
&mt('')});
- $fields{'command'} = 'manage';
- $url = &Apache::lonhtmlcommon::build_url('/adm/helper/resettimes.helper',\%fields);
- push (@menu, { url => $url,
- name => &mt('Manage Access Times'),
- short_description =>
- &mt('')});
- $fields{'command'} = 'view';
- $url = &Apache::lonhtmlcommon::build_url('/adm/pickcode',\%fields);
- push (@menu, { url => $url,
- name => &mt('View Saved CODEs'),
- short_description =>
- &mt('')});
-
#
# Create the menu
my $Str;
@@ -7261,10 +7299,10 @@ sub grading_menu {
$menudata->{'url'}.'" >'.
$menudata->{'name'}."\n";
} else {
- $Str .=' {'jscript'}. - ' href="javascript:checkChoice2(document.forms.gradingMenu,\'5\',\'verify\')" >'. - $menudata->{'name'}."\n"; + ' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '. + ' />'; $Str .= (' 'x8). ' receipt: '.&Apache::lonnet::recprefix($env{'request.course.id'}). '-'; @@ -7285,30 +7323,14 @@ sub grading_menu { cmdsave = 'submission'; } formname.command.value = cmd; - formname.saveState.value = "saveCmd="+cmdsave+":saveSec="+pullDownSelection(formname.section)+ - ":saveSub="+pullDownSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.Status); if (val < 5) formname.submit(); if (val == 5) { - if (!checkReceiptNo(formname,'notOK')) { return false;} - formname.submit(); - } - if (val < 7) formname.submit(); - } - function checkChoice2(formname,val,cmdx) { - if (val <= 2) { - var cmd = radioSelection(formname.radioChoice); - var cmdsave = cmd; - } else { - cmd = cmdx; - cmdsave = 'submission'; - } - formname.command.value = cmd; - if (val < 5) formname.submit(); - if (val == 5) { - if (!checkReceiptNo(formname,'notOK')) { return false;} - formname.submit(); + if (!checkReceiptNo(formname,'notOK')) { + return false; + } else { + formname.submit(); + } } - if (val < 7) formname.submit(); } function checkReceiptNo(formname,nospace) { @@ -7327,43 +7349,6 @@ sub grading_menu { GRADINGMENUJS &commonJSfunctions($request); - my $result='Manual Grading/View Submission'; - $result.=$table; - my (undef,$sections) = &getclasslist('all','0'); - my $savedState = &savedState(); - my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'}); - my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'}); - my $saveSub = ($$savedState{'saveSub'} eq '' ? 'all' : $$savedState{'saveSub'}); - my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'}); - - $result.=' |