--- loncom/homework/grades.pm 2007/11/03 00:18:37 1.478 +++ loncom/homework/grades.pm 2007/11/16 08:50:39 1.493 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.478 2007/11/03 00:18:37 albertel Exp $ +# $Id: grades.pm,v 1.493 2007/11/16 08:50:39 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -171,7 +171,7 @@ sub get_symb { sub nameUserString { my ($type,$fullname,$uname,$udom) = @_; if ($type eq 'header') { - return ' Fullname (Username)'; + return ' '.&mt('Fullname').' ('.&mt('Username').')'; } else { return ' '.$fullname.' ('.$uname. ($env{'user.domain'} eq $udom ? '' : ' ('.$udom.')').')'; @@ -254,10 +254,10 @@ sub showResourceInfo { $partsseen{$partID}=1; } my $display_part=&get_display_part($partID,$symb); - $result.='Part: '.$display_part.' '. + $result.=''.&mt('Part: [_1]',$display_part).' '. $resID.''. - 'Type: '.$responsetype.''; -# 'Handgrade: '.$handgrade.''; + ''.&mt('Type: [_1]',$responsetype).''; +# ''.&mt('Handgrade: [_1]',$handgrade).''; } } $result.=''."\n"; @@ -733,9 +733,12 @@ sub verifyreceipt { $receipt =~ s/[^\-\d]//g; my ($symb) = &get_symb($request); - my $title.='

Verifying Submission Receipt '. - $receipt.'

'."\n". - '

Resource: '.$env{'form.probTitle'}.'



'."\n"; + my $title.= + '

'. + &mt('Verifying Submission Receipt [_1]',$receipt). + '

'."\n". + '

'.&mt('Resource: [_1]',$env{'form.probTitle'}). + '

'."\n"; my ($string,$contents,$matches) = ('','',0); my (undef,undef,$fullname) = &getclasslist('all','0'); @@ -745,6 +748,19 @@ sub verifyreceipt { $env{"course.$courseid.receiptalg"} eq 'receipt3') { $receiptparts=1; } my $parts=['0']; if ($receiptparts) { ($parts)=&response_type($symb); } + + my $header = + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ' '.&mt('Fullname').' '."\n". + ' '.&mt('Username').' '."\n". + ' '.&mt('Domain').' '; + if ($receiptparts) { + $header.=' '.&mt('Problem Part').' '; + } + $header.= + &Apache::loncommon::end_data_table_header_row(); + foreach (sort { if (lc($$fullname{$a}) ne lc($$fullname{$b})) { @@ -755,7 +771,9 @@ sub verifyreceipt { my ($uname,$udom)=split(/\:/); foreach my $part (@$parts) { if ($receipt eq &Apache::lonnet::ireceipt($uname,$udom,$courseid,$symb,$part)) { - $contents.=' '."\n". + $contents.= + &Apache::loncommon::start_data_table_row(). + ' '."\n". ''.$$fullname{$_}.' '."\n". ' '.$uname.' '. @@ -763,28 +781,23 @@ sub verifyreceipt { if ($receiptparts) { $contents.=' '.$part.' '; } - $contents.=''."\n"; + $contents.= + &Apache::loncommon::end_data_table_row()."\n"; $matches++; } } } if ($matches == 0) { - $string = $title.'No match found for the above receipt.'; + $string = $title.&mt('No match found for the above receipt.'); } else { $string = &jscriptNform($symb).$title. - 'The above receipt matches the following student'. - ($matches <= 1 ? '.' : 's.')."\n". - '
'."\n". - ''."\n". - ''."\n". - ''."\n". - ''; - if ($receiptparts) { - $string.=''; - } - $string.=''."\n".$contents. - '
 Fullname  Username  Domain  Problem Part 
'."\n"; + '

'. + &mt('The above receipt matches the following [numerate,_1,student].',$matches). + '

'. + $header. + $contents. + &Apache::loncommon::end_data_table()."\n"; } return $string.&show_grading_menu_form($symb); } @@ -806,11 +819,18 @@ sub listStudents { $env{'form.probTitle'} = $env{'form.probTitle'} eq '' ? &Apache::lonnet::gettitle($symb) : $env{'form.probTitle'}; - my $result='

 '.$viewgrade. - ' Submissions for a Student or a Group of Students

'; + my $result='

 '. + &mt($viewgrade.' Submissions for a Student or a Group of Students') + .'

'; my ($table,undef,$hdgrade,$partlist,$handgrade) = &showResourceInfo($symb,$env{'form.probTitle'},($env{'form.showgrading'} eq 'yes')); + my %lt = ( 'multiple' => + "Please select a student or group of students before clicking on the Next button.", + 'single' => + "Please select the student before clicking on the Next button.", + ); + %lt = &Apache::lonlocal::texthash(%lt); $request->print(< function checkSelect(checkBox) { @@ -822,15 +842,15 @@ sub listStudents { ctr++; } } - sense = "a student or group of students"; + sense = '$lt{'multiple'}'; } else { if (checkBox.checked) { ctr = 1; } - sense = "the student"; + sense = '$lt{'single'}'; } if (ctr == 0) { - alert("Please select "+sense+" before clicking on the Next button."); + alert(sense); return false; } document.gradesub.submit(); @@ -850,30 +870,49 @@ LISTJAVASCRIPT my $checkhdgrade = ($env{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked="checked"' : ''; my $checklastsub = $checkhdgrade eq '' ? 'checked="checked"' : ''; my $gradeTable='
'. - "\n".$table. - ' View Problem Text: '."\n". - ''."\n". - '
'."\n". - ' View Answer: '."\n". - ''."\n". - '
'."\n". - ' Submissions: '."\n"; + "\n".$table; + + $gradeTable .= + ' '. + &mt('View Problem Text: [_1]', + ''."\n". + ''."\n". + '').'
'."\n"; + $gradeTable .= + ' '. + &mt('View Answer: [_1]', + ''."\n". + ''."\n". + '').'
'."\n"; + + my $submission_options; if ($env{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1) { - $gradeTable.=''."\n"; + $submission_options.= + ''."\n"; } my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); my $saveStatus = $stu_status eq '' ? 'Active' : $stu_status; $env{'form.Status'} = $saveStatus; - $gradeTable.=''."\n". - ''."\n". - ''."\n". - '
'."\n". - ' Grading Increments: '. + $submission_options.= + ''."\n". + ''."\n". + ''."\n". + ''; + $gradeTable .= + ' '. + &mt('Submissions: [_1]',$submission_options).'
'."\n"; + + $gradeTable .= + ' '. + &mt('Grading Increments: [_1]', + ''); + + $gradeTable .= &build_section_inputs(). ''."\n". '
'."\n". @@ -886,35 +925,36 @@ LISTJAVASCRIPT if (exists($env{'form.gradingMenu'}) && exists($env{'form.Status'})) { $gradeTable.=''."\n"; } else { - $gradeTable.='Student Status: '. - &Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);').'
'; + $gradeTable.=&mt('Student Status: [_1]', + &Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);')).'
'; } - $gradeTable.='To '.lc($viewgrade).' a submission or a group of submissions, click on the check box(es) '. - 'next to the student\'s name(s). Then click on the Next button.
'."\n". + $gradeTable.=&mt('To '.lc($viewgrade).' a submission or a group of submissions, click on the check box(es) '. + 'next to the student\'s name(s). Then click on the Next button.').'
'."\n". ''."\n"; # checkall buttons $gradeTable.=&check_script('gradesub', 'stuinfo'); $gradeTable.='
'."\n"; + 'value="'.&mt('Next->').'" />
'."\n"; $gradeTable.=&check_buttons(); - $gradeTable.=''; + $gradeTable.=''; my ($classlist, undef, $fullname) = &getclasslist($getsec,'1',$getgroup); $gradeTable.= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(); my $loop = 0; while ($loop < 2) { - $gradeTable.='No.Select'. - ''.&nameUserString('header').' '.'Section/Group'; + $gradeTable.=''.&mt('No.').''.&mt('Select').''. + ''.&nameUserString('header').' '.&mt('Section/Group').''; if ($env{'form.showgrading'} eq 'yes' && $submitonly ne 'queued' && $submitonly ne 'all') { - foreach (sort(@$partlist)) { - my $display_part=&get_display_part((split(/_/))[0],$symb); - $gradeTable.='Part: '.$display_part. - ' Status'; + foreach my $part (sort(@$partlist)) { + my $display_part= + &get_display_part((split(/_/,$part))[0],$symb); + $gradeTable.= + ''.&mt('Part: [_1] Status',$display_part).''; } } elsif ($submitonly eq 'queued') { $gradeTable.=''.&mt('Queue Status').' '; @@ -990,8 +1030,8 @@ LISTJAVASCRIPT if ($env{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { foreach (sort keys(%status)) { - next if (/^resource.*?submitted_by$/); - $gradeTable.=' '.$status{$_}.' '."\n"; + next if ($_ =~ /^resource.*?submitted_by$/); + $gradeTable.=' '.&mt($status{$_}).' '."\n"; } } # $gradeTable.='' if ($ctr%2 ==1); @@ -1017,19 +1057,20 @@ LISTJAVASCRIPT $gradeTable.=&Apache::loncommon::end_data_table()."\n". '
'."\n"; + 'value="'.&mt('Next->').'" />'."\n"; if ($ctr == 0) { my $num_students=(scalar(keys(%$fullname))); if ($num_students eq 0) { - $gradeTable='
 There are no students currently enrolled.'; + $gradeTable='
 '.&mt('There are no students currently enrolled.').''; } else { my $submissions='submissions'; if ($submitonly eq 'incorrect') { $submissions = 'incorrect submissions'; } if ($submitonly eq 'graded' ) { $submissions = 'ungraded submissions'; } if ($submitonly eq 'queued' ) { $submissions = 'queued submissions'; } $gradeTable='
 '. - 'No '.$submissions.' found for this resource for any students. ('.$num_students. - ' students checked for '.$submissions.')
'; + &mt('No '.$submissions.' found for this resource for any students. ([_1] students checked for '.$submissions.')', + $num_students). + '
'; } } elsif ($ctr == 1) { $gradeTable =~ s/type="checkbox"/type="checkbox" checked="checked"/; @@ -1079,9 +1120,9 @@ sub check_script { } sub check_buttons { - my $buttons.=''; - $buttons.=' '; - $buttons.=''; + my $buttons.=''; + $buttons.=' '; + $buttons.=''; $buttons.=' '; return $buttons; } @@ -1616,8 +1657,7 @@ sub get_increment { sub gradeBox { my ($request,$symb,$uname,$udom,$counter,$partid,$record) = @_; my $checkIcon = ''.&mt('Check Mark').
-	''; + '" src="'.&Apache::loncommon::lonhttpdurl($request->dir_config('lonIconsURL').'/check.gif').'" height="16" border="0" />'; my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb,$udom,$uname); my $wgtmsg = ($wgt > 0) ? &mt('(problem weight)') : ''.&mt('problem weight assigned by computer').''; @@ -1632,41 +1672,47 @@ sub gradeBox { if ($last_resets{$partid}) { $aggtries = &get_num_tries($record,$last_resets{$partid},$partid); } - $result.=''."\n"; - $result.=''."\n"; - $result.='',$display_part,$radio,$line); + + + $result.='
'. - 'Part: '.$display_part.' Points: '."\n"; + $result.=''; my $ctr = 0; my $thisweight = 0; my $increment = &get_increment(); - $result.='
'."\n"; # display radio buttons in a nice table 10 across + + my $radio.='
'."\n"; # display radio buttons in a nice table 10 across while ($thisweight<=$wgt) { - $result.= '\n"; - $result.=(($ctr+1)%10 == 0 ? '' : ''); + $radio.=(($ctr+1)%10 == 0 ? '' : ''); $thisweight += $increment; $ctr++; } - $result.='
'; - $result.='
 or /'.$wgt.' '.$wgtmsg. + $line.='/'.$wgt.' '.$wgtmsg. ($$record{'resource.'.$partid.'.solved'} eq 'correct_by_student' ? ' '.$checkIcon : ''). ' '."\n"; - $result.=''."\n"; - $result.="  \n"; + $line.=''."\n"; + + + $result .= + &mt('Part:[_1]Points:[_2]or[_3]
'."\n"; $result.=''."\n". ''."\n". ''."\n". ''."\n"; - $result.=''."\n"; $result.=&handback_box($symb,$uname,$udom,$counter,$partid,$record); return $result; } @@ -1707,7 +1752,7 @@ sub handback_box { ''.$file_disp.''); $result.=''."\n"; $result.='
'; - $result.='(File will be uploaded when you click on Save & Next below.)
'; + $result.='('.&mt('File will be uploaded when you click on Save & Next below.').')
'; $file_counter++; } } @@ -1853,8 +1898,8 @@ sub submission { if ($env{'form.handgrade'} eq 'yes' && &files_exist($request, $symb)) { &download_all_link($request, $symb); } - $request->print('

 Submission Record

'."\n". - '

 Resource: '.$env{'form.probTitle'}.'

'."\n"); + $request->print('

 '.&mt('Submission Record').'

'."\n". + '

 '.&mt('Resource: [_1]',$env{'form.probTitle'}).'

'."\n"); # option to display problem, only once else it cause problems # with the form later since the problem has a form. @@ -2219,7 +2264,7 @@ KEYWORDS # print end of form if ($counter == $total) { my $endform='
'."\n"; - $endform.='  '."\n"; my $ntstu =''."\n"; my $nsel = ($env{'form.NTSTU'} ne '' ? $env{'form.NTSTU'} : '1'); $ntstu =~ s/
'; + $endform.=''; $endform.=&show_grading_menu_form($symb); $request->print($endform); } @@ -2575,9 +2620,9 @@ sub processHandGrade { $ctr++; } if ($total < 0) { - my $the_end = '

LON-CAPA User Message


'."\n"; - $the_end.='Message: No more students for this section or class.

'."\n"; - $the_end.='Click on the button below to return to the grading menu.

'."\n"; + 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.').'

'."\n"; $the_end.=&show_grading_menu_form($symb); $request->print($the_end); } @@ -3148,7 +3193,7 @@ sub viewgrades { &Apache::lonnet::clear_EXT_cache_status(); my $result='

'.&mt('Manual Grading').'

'; - $result.='

Current Resource: '.$env{'form.probTitle'}.'

'."\n"; + $result.='

'.&mt('Current Resource: [_1]',$env{'form.probTitle'}).'

'."\n"; #view individual student submission form - called using Javascript viewOneStudent $result.=&jscriptNform($symb); @@ -3166,13 +3211,15 @@ sub viewgrades { my $sectionClass; my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section')); if ($env{'form.section'} eq 'all') { - $sectionClass='Class '; + $sectionClass='Class'; } elsif ($env{'form.section'} eq 'none') { - $sectionClass=&mt('Students in no Section').''; + $sectionClass='Students in no Section'; } else { - $sectionClass=&mt('Students in Section(s) [_1]',$section_display).''; + $sectionClass='Students in Section(s) [_1]'; } - $result.='

'.&mt('Assign Common Grade To [_1]',$sectionClass); + $result.= + '

'. + &mt("Assign Common Grade To $sectionClass",$section_display).'

'; $result.= &Apache::loncommon::start_data_table(); #radio buttons/text box for assigning points for a section or class. #handles different parts of a problem @@ -3190,48 +3237,52 @@ sub viewgrades { my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb); $weight{$partid} = $wgt eq '' ? '1' : $wgt; - $result.=&Apache::loncommon::start_data_table_row().''; - $result.=''."\n"; - $result.=''."\n"; my $display_part=&get_display_part($partid,$symb); - $result.= - 'Part: '.$display_part.'   Point: '; - $result.=''; + my $radio.='
'; my $ctr = 0; while ($ctr<=$weight{$partid}) { # display radio buttons in a nice table 10 across - $result.= '\n"; $result.=(($ctr+1)%10 == 0 ? '' : ''); $ctr++; } - $result.='
'; - $result.= ' or /'. $weight{$partid}.' (problem weight)'."\n"; - $result.= ''. - ''.&Apache::loncommon::end_data_table_row()."\n"; + ''. + ''. + ''. + ''; + $line.=''."\n"; + $line.=''."\n"; + + $result.= + &Apache::loncommon::start_data_table_row()."\n". + &mt('Part:[_1]Points:[_2]or[_3]',$display_part,$radio,$line). + &Apache::loncommon::end_data_table_row()."\n"; $ctsparts++; } $result.=&Apache::loncommon::end_data_table()."\n". ''; - $result.=''; #table listing all the students in a section/class #header of table - $result.= '

Assign Grade to Specific Students in '.$sectionClass; + $result.= '

'.&mt('Assign Grade to Specific Students in '.$sectionClass, + $section_display).'

'; $result.= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(). - 'No.'. + ''.&mt('No.').''. ''.&nameUserString('header')."\n"; my (@parts) = sort(&getpartlist($symb)); my (undef,undef,$url)=&Apache::lonnet::decode_symb($symb); @@ -3244,13 +3295,20 @@ sub viewgrades { push(@partids, $partid); my $display_part=&get_display_part($partid,$symb); if ($display =~ /^Partial Credit Factor/) { - $result.='Score Part: '.$display_part. - '
(weight = '.$weight{$partid}.')'."\n"; + $result.=''. + &mt('Score Part: [_1]
(weight = [_2])', + $display_part,$weight{$partid}).''."\n"; next; + } else { - $display =~s/\[Part: \Q$partid\E\]/Part:<\/b> $display_part/; + if ($display =~ /Problem Status/) { + my $grade_status_mt = &mt('Grade Status'); + $display =~ s{Problem Status}{$grade_status_mt
}; + } + my $part_mt = &mt('Part:'); + $display =~s{\[Part: \Q$partid\E\]}{$part_mt $display_part}; } - $display =~ s|Problem Status|Grade Status
|; + $result.=''.$display.''."\n"; } $result.=&Apache::loncommon::end_data_table_header_row(); @@ -3275,14 +3333,14 @@ sub viewgrades { } $result.=&Apache::loncommon::end_data_table(); $result.=''."\n"; - $result.=''."\n"; if (scalar(%$fullname) eq 0) { my $colspan=3+scalar(@parts); my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section')); my $stu_status = join(' or ',&Apache::loncommon::get_env_multiple('form.Status')); $result=''. - &mt('There are no students in section(s) [_1] with enrollment status [_2] to modify or grade', + &mt('There are no students in section(s) [_1] with enrollment status [_2] to modify or grade.', $section_display, $stu_status). ''; } @@ -3338,9 +3396,9 @@ sub viewstudentgrade { $result.='  \n"; } else { $result.=' '. - 'Manual Grading by Page or Sequence'; + &mt('Manual Grading by Page or Sequence').''; $result.='
'."\n"; - $result.=' Problems from: '."\n"; my $ctr=0; foreach (@$titles) { my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); - $result.=''."\n"; $ctr++; } - $result.= ''."
\n"; + $select.= ''; + $result.=&mt(' Problems from: [_1]',$select)."
\n"; + $ctr=0; foreach (@$titles) { my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); @@ -4075,13 +4135,16 @@ LISTJAVASCRIPT $result.=''."\n". ''."\n"; - $result.=' View Problems Text: '."\n". - ''."
\n"; - - $result.=' Submission Details: '. - ''."\n". - ''."\n". - ''."\n"; + my $options = + ''."\n". + ''."
\n"; + $result.=' '.&mt('View Problems Text: [_1]',$options); + + $options = + ''."\n". + ''."\n". + ''."\n"; + $result.=' '.&mt('Submission Details: [_1]',$options); $result.=&build_section_inputs(); my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); @@ -4090,21 +4153,23 @@ LISTJAVASCRIPT ''."\n". ''."
\n"; - $result.=' '.&mt('Use CODE:').' '. - '
'."\n"; + $result.=' '.&mt('Use CODE: [_1] ', + ''). + '
'."\n"; $result.=' 
'."\n"; + 'onClick="javascript:checkPickOne(this.form);" value="'.&mt('Next->').'" />
'."\n"; $request->print($result); - my $studentTable.=' Select a student you wish to grade and then click on the Next button.
'. - '
'. - ''. - ''. - ''. - ''. - ''; + my $studentTable.=' '.&mt('Select a student you wish to grade and then click on the Next button.').'
'. + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ''. + ''. + ''. + ''. + &Apache::loncommon::end_data_table_header_row(); my (undef,undef,$fullname) = &getclasslist($getsec,'1'); my $ptr = 1; @@ -4116,17 +4181,23 @@ LISTJAVASCRIPT return $a cmp $b; } (keys(%$fullname))) { my ($uname,$udom) = split(/:/,$student); - $studentTable.=($ptr%2 == 1 ? '' : ''); + $studentTable.=($ptr%2==1 ? &Apache::loncommon::start_data_table_row() + : ''); $studentTable.=''; $studentTable.='' : ''); + $studentTable.= + ($ptr%2 == 0 ? ''.&Apache::loncommon::end_data_table_row() + : ''); $ptr++; } - $studentTable.='' if ($ptr%2 == 0); - $studentTable.='
 No.'.&nameUserString('header').' No.'.&nameUserString('header').'
 '.&mt('No.').''.&nameUserString('header').' '.&mt('No.').''.&nameUserString('header').'
'.$ptr.'  \n"; - $studentTable.=($ptr%2 == 0 ? '
  
'."\n"; + if ($ptr%2 == 0) { + $studentTable.='  '. + &Apache::loncommon::end_data_table_row(); + } + $studentTable.=&Apache::loncommon::end_data_table()."\n"; $studentTable.='
'."\n"; + 'onClick="javascript:checkPickOne(this.form);" value="'.&mt('Next->').'" />'."\n"; $studentTable.=&show_grading_menu_form($symb); $request->print($studentTable); @@ -4178,15 +4249,15 @@ sub displayPage { &Apache::lonnet::clear_EXT_cache_status(); if (!&canview($usec)) { - $request->print('Unable to view requested student.('.$env{'form.student'}.')'); + $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'}.'

'; - $result.='

 Student: '.&nameUserString(undef,$$fullname{$env{'form.student'}},$uname,$udom). + $result.='

 '.&mt('Student: [_1]',&nameUserString(undef,$$fullname{$env{'form.student'}},$uname,$udom)). '

'."\n"; if (&Apache::lonnet::validCODE($env{'form.CODE'})) { - $result.='

 CODE: '.$env{'form.CODE'}.'

'."\n"; + $result.='

 '.&mt('CODE: [_1]',$env{'form.CODE'}).'

'."\n"; } else { delete($env{'form.CODE'}); } @@ -4197,7 +4268,7 @@ sub displayPage { my ($mapUrl, $id, $resUrl)=&Apache::lonnet::decode_symb($env{'form.page'}); my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps if (!$map) { - $request->print('Unable to view requested sequence. ('.$resUrl.')'); + $request->print(''.&mt('Unable to view requested sequence. ([_1])',$resUrl).''); $request->print(&show_grading_menu_form($symb)); return; } @@ -4219,15 +4290,14 @@ sub displayPage { ''."\n"; } my $checkIcon = ''.&mt('Check Mark').
-	''; + '" src="'.&Apache::loncommon::lonhttpdurl($request->dir_config('lonIconsURL').'/check.gif').'" height="16" border="0" />'; - $studentTable.=' Note: Problems graded correct by the computer are marked with a '.$checkIcon. - ' symbol.'."\n". - ' - - - - -SCANTRONFORM + '.&Apache::loncommon::end_data_table_row().' + '.&Apache::loncommon::end_data_table().' + +'; $r->print($result); @@ -4873,84 +4951,74 @@ SCANTRONFORM # Chunk of form to prompt for a scantron file upload. - $r->print(< - - -SCANTRONFORM + '.&Apache::loncommon::end_data_table_row().' + '.&Apache::loncommon::end_data_table().' +'); } # Chunk of the form that prompts to view a scoring office file, # corrected file, skipped records in a file. - $r->print(< -
-
- - -SCANTRONFORM + $r->print(' +
+ + '.$default_form_data.' + + '.&Apache::loncommon::start_data_table('LC_scantron_action').' + '.&Apache::loncommon::start_data_table_header_row().' + + '.&Apache::loncommon::end_data_table_header_row().' + '.&Apache::loncommon::start_data_table_row().' +
'. - ''. - ''. - ''; + $studentTable.=' '.&mt('Note: Problems graded correct by the computer are marked with a [_1] symbol.',$checkIcon)."\n". + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ''. + ''. + &Apache::loncommon::end_data_table_header_row(); &Apache::lonxml::clear_problem_counter(); my ($depth,$question,$prob) = (1,1,1); @@ -4241,8 +4311,14 @@ sub displayPage { my $parts = $curRes->parts(); my $title = $curRes->compTitle(); my $symbx = $curRes->symb(); - $studentTable.=''; + $studentTable.= + &Apache::loncommon::start_data_table_row(). + ''; $studentTable.='
 Prob.  '.($env{'form.vProb'} eq 'no' ? 'Title' : 'Problem Text').'/Grade
 Prob.  '.($env{'form.vProb'} eq 'no' ? &mt('Title') : &mt('Problem Text')).'/'.&mt('Grade').'
'.$prob. - (scalar(@{$parts}) == 1 ? '' : '
('.scalar(@{$parts}).' parts)').'
'.$prob. + (scalar(@{$parts}) == 1 ? '' + : '
('.&mt('[_1] parts)', + scalar(@{$parts})) + ). + '
'; my %form = ('CODE' => $env{'form.CODE'},); if ($env{'form.vProb'} eq 'yes' ) { @@ -4257,14 +4333,14 @@ sub displayPage { # $request->print('match='.$1."
\n"); # } # $companswer =~ s||
|g; - $studentTable.=' '.$title.' 
 Correct answer:
'.$companswer; + $studentTable.=' '.$title.' 
 '.&mt('Correct answer:
[_1]',$companswer); } my %record = &Apache::lonnet::restore($symbx,$env{'request.course.id'},$udom,$uname); if ($env{'form.lastSub'} eq 'datesub') { if ($record{'version'} eq '') { - $studentTable.='
 No recorded submission for this problem
'; + $studentTable.='
 '.&mt('No recorded submission for this problem.').'
'; } else { my %responseType = (); foreach my $partid (@{$parts}) { @@ -4300,8 +4376,8 @@ sub displayPage { $curRes = $iterator->next(); } - $studentTable.='
'."\n". - ''. ''."\n"; $studentTable.=&show_grading_menu_form($symb); @@ -4381,13 +4457,13 @@ sub displaySubByDates { } } if (exists($$record{"$where.$partid.checkedin"})) { - $displaySub[1].='Checked in by '. - $$record{"$where.$partid.checkedin"}.' into slot '. - $$record{"$where.$partid.checkedin.slot"}. - '
'; + $displaySub[1].=&mt('Checked in by [_1] into slot [_2]', + $$record{"$where.$partid.checkedin"}, + $$record{"$where.$partid.checkedin.slot"}). + '
'; } if (exists $$record{"$where.$partid.award"}) { - $displaySub[1].='Part: '.$display_part.'  '. + $displaySub[1].=''.&mt('Part:').' '.$display_part.'  '. lc($$record{"$where.$partid.award"}).' '. $mark{$$record{"$where.$partid.solved"}}. '
'; @@ -4449,12 +4525,14 @@ sub updateGradeByPage { my $iterator = $navmap->getIterator($map->map_start(), $map->map_finish()); - my $studentTable='
'. - ''. - ''. - ''. - ''. - ''; + my $studentTable= + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ''. + ''. + ''. + ''. + &Apache::loncommon::end_data_table_header_row(); $iterator->next(); # skip the first BEGIN_MAP my $curRes = $iterator->next(); # for "current resource" @@ -4467,8 +4545,12 @@ sub updateGradeByPage { my $parts = $curRes->parts(); my $title = $curRes->compTitle(); my $symbx = $curRes->symb(); - $studentTable.=''; + $studentTable.= + &Apache::loncommon::start_data_table_row(). + ''; $studentTable.=''; my %newrecord=(); @@ -4555,14 +4637,14 @@ sub updateGradeByPage { $studentTable.=''. ''. - ''; + &Apache::loncommon::end_data_table_row(); $prob++; } $curRes = $iterator->next(); } - $studentTable.='
 Prob.  Title  Previous Score  New Score 
 '.&mt('Prob.').'  '.&mt('Title').'  '.&mt('Previous Score').'  '.&mt('New Score').' 
'.$prob. - (scalar(@{$parts}) == 1 ? '' : '
('.scalar(@{$parts}).' parts)').'
'.$prob. + (scalar(@{$parts}) == 1 ? '' + : '
('.&mt('[quant,_1, parts]',scalar(@{$parts})) + ).')
 '.$title.' '.$displayPts[0].''.$displayPts[1].'
'; + $studentTable.=&Apache::loncommon::end_data_table(); $studentTable.=&show_grading_menu_form($env{'form.symb'}); my $grademsg=($changeflag == 0 ? 'No score was changed or updated.' : 'The scores were changed for '. @@ -4819,52 +4901,48 @@ sub scantron_selectphase { # Chunk of form to prompt for a file to grade and how: - $result.= < -
- - $default_form_data - - - - - - - - - - - - - - - - - - - - - + $result.= ' +
+ + + '.$default_form_data.' + '.&Apache::loncommon::start_data_table('LC_scantron_action').' + '.&Apache::loncommon::start_data_table_header_row().' + + '.&Apache::loncommon::end_data_table_header_row().' + '.&Apache::loncommon::start_data_table_row().' + + '.&Apache::loncommon::end_data_table_row().' + '.&Apache::loncommon::start_data_table_row().' + + '.&Apache::loncommon::end_data_table_row().' + '.&Apache::loncommon::start_data_table_row().' + + '.&Apache::loncommon::end_data_table_row().' + '.&Apache::loncommon::start_data_table_row().' + + '.&Apache::loncommon::end_data_table_row().' + '.&Apache::loncommon::start_data_table_row().' + + '.&Apache::loncommon::end_data_table_row().' + '.&Apache::loncommon::start_data_table_row().' + - - + '.&Apache::loncommon::end_data_table_row().' + '.&Apache::loncommon::start_data_table_row().' - -
-  Specify file and which Folder/Sequence to grade -
Sequence to grade: $sequence_selector
Filename of scoring office file: $file_selector
Format of data file: $format_selector
Saved CODEs to validate against: $CODE_selector
Each CODE is only to be used once: $CODE_unique
Options: +  '.&mt('Specify file and which Folder/Sequence to grade').' + '.&mt('Sequence to grade:').' '.$sequence_selector.' '.&mt('Filename of scoring office file:').' '.$file_selector.' '.&mt('Format of data file:').' '.$format_selector.' '.&mt('Saved CODEs to validate against:').' '.$CODE_selector.' '.&mt('Each CODE is only to be used once:').' '.$CODE_unique.' '.&mt('Options:').' -
-
- +
+
+
- +
-
- - - - - + $r->print(' +
+ '.&Apache::loncommon::start_data_table('LC_scantron_action').' + '.&Apache::loncommon::start_data_table_header_row().' + + '.&Apache::loncommon::end_data_table_header_row().' + '.&Apache::loncommon::start_data_table_row().' - -
-  Specify a Scantron data file to upload. -
+  '.&mt('Specify a Scantron data file to upload.').' + -SCANTRONFORM +'); my $default_form_data=&defaultFormData(&get_symb($r,1)); my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'}; my $cnum= $env{'course.'.$env{'request.course.id'}.'.num'}; - $r->print(<print(' -
- $default_form_data - - - - File to upload: + + '.$default_form_data.' + + + + '.&mt('File to upload: [_1]','').'
- +
-UPLOAD +'); - $r->print(<print('
-
- $default_form_data - - - - - - - - - - - -
-  Download a scoring office file -
Filename of scoring office file: $file_selector
- -
-
+  '.&mt('Download a scoring office file').' + '.&mt('Filename of scoring office file: [_1]',$file_selector).' +
+ + '.&Apache::loncommon::end_data_table_row().' + '.&Apache::loncommon::end_data_table().' + +
+'); - $r->print('
'); &Apache::lonpickcode::code_list($r,2); - $r->print('
'); $r->print($grading_menu_button); return } @@ -5116,7 +5184,8 @@ sub username_to_idmap { sub scantron_fixup_scanline { my ($scantron_config,$scan_data,$line,$whichline,$field,$args)=@_; - + + if ($field eq 'ID') { if (length($args->{'newid'}) > $$scantron_config{'IDlength'}) { return ($line,1,'New value too large'); @@ -5147,28 +5216,58 @@ sub scantron_fixup_scanline { $$scantron_config{'CODElength'})=$args->{'CODE'}; } } elsif ($field eq 'answer') { - my $length=$scantron_config->{'Qlength'}; + &scantron_get_maxbubble(); # Need the bubble counter info. + my $length =$scantron_config->{'Qlength'}; my $off=$scantron_config->{'Qoff'}; my $on=$scantron_config->{'Qon'}; - my $answer=${off}x$length; - if ($args->{'response'} eq 'none') { - &scan_data($scan_data, - "$whichline.no_bubble.".$args->{'question'},'1'); - } else { - if ($on eq 'letter') { - my @alphabet=('A'..'Z'); - $answer=$alphabet[$args->{'response'}]; - } elsif ($on eq 'number') { - $answer=$args->{'response'}+1; - if ($answer == 10) { $answer = '0'; } + my $question_number = $args->{'question'} -1; + my $first_position = $first_bubble_line{$question_number}; + my $bubble_count = $bubble_lines_per_response{$question_number}; + my $bubbles_per_line= $$scantron_config{'Qlength'}; + my $answer=${off}x($bubbles_per_line*$bubble_count); + my $final_answer; + if ($$scantron_config{'Qon'} eq 'letter' || + $$scantron_config{'Qon'} eq 'number') { + $bubbles_per_line = 10; + } + if (defined $args->{'response'}) { + + if ($args->{'response'} eq 'none') { + &scan_data($scan_data, + "$whichline.no_bubble.".$args->{'question'},'1'); } else { - substr($answer,$args->{'response'},1)=$on; + my ($bubble_line, $bubble_number) = split(/:/,$args->{'response'}); + if ($on eq 'letter') { + my @alphabet=('A'..'Z'); + $answer=$alphabet[$bubble_number]; + } elsif ($on eq 'number') { + $answer= $bubble_number+1; + if ($answer == 10) { $answer = '0'; } + } else { + substr($answer,$bubble_number+$bubble_line*$bubbles_per_line,1)=$on; + $final_answer = $answer; + } + &scan_data($scan_data, + "$whichline.no_bubble.".$args->{'question'},undef,'1'); + + # Positional notation already has the right final answer length.. + + if (($on eq 'letter') || ($on eq 'number')) { + for (my $l = 0; $l < $bubble_count; $l++) { + if ($l eq $bubble_line) { + $final_answer .= $answer; + } else { + $final_answer .= ' '; + } + } + } } - &scan_data($scan_data, - "$whichline.no_bubble.".$args->{'question'},undef,'1'); + # $where=$length*($args->{'question'}-1)+$scantron_config->{'Qstart'}; + #substr($line,$where-1,$length)=$answer; + substr($line, + $scantron_config->{'Qstart'}+$first_position-1, + $bubbles_per_line*$length) = $final_answer; } - my $where=$length*($args->{'question'}-1)+$scantron_config->{'Qstart'}; - substr($line,$where-1,$length)=$answer; } return $line; } @@ -5307,10 +5406,9 @@ sub scantron_parse_scanline { my $answer_length = $$scantron_config{'Qlength'} * $answers_needed; - $questnum++; my $currentquest = substr($questions,0,$answer_length); - $questions = substr($questions,0,$answer_length)=''; + $questions = substr($questions,$answer_length); if (length($currentquest) < $answer_length) { next; } # Qon letter implies for each slot in currentquest we have: @@ -5320,7 +5418,6 @@ sub scantron_parse_scanline { if ($$scantron_config{'Qon'} eq 'letter') { - if ($currentquest =~ /\?/ || $currentquest =~ /\*/ || (&occurence_count($currentquest, "[A-Z]") > 1)) { @@ -5349,7 +5446,8 @@ sub scantron_parse_scanline { } } else { for (my $ans = 0; $ans < $answers_needed; $ans++) { - $record{"scantron.$ansnum.answer"} = substr($currentquest, $ans, 1); + my $bubble = substr($currentquest, $ans, 1); + $record{"scantron.$ansnum.answer"} = $bubble; $ansnum++; } } @@ -5415,11 +5513,15 @@ sub scantron_parse_scanline { if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { push(@{$record{"scantron.missingerror"}},$questnum); } - } elsif (scalar(@array) lt 2) { + + + + } elsif (scalar(@array) eq 2) { my $location = length($array[0]); - my $line_num = $location / $$scantron_config{'Qlength'}; + my $line_num = int($location / $$scantron_config{'Qlength'}); my $bubble = $alphabet[$location % $$scantron_config{'Qlength'}]; + for (my $ans = 0; $ans < $answers_needed; $ans++) { if ($ans eq $line_num) { @@ -5705,7 +5807,7 @@ sub remember_current_skipped { sub check_for_error { my ($r,$result)=@_; if ($result ne 'ok' && $result ne 'not_found' ) { - $r->print("An error occurred ($result) when trying to Remove the existing corrections."); + $r->print(&mt("An error occurred ([_1]) when trying to remove the existing corrections.",$result)); } } @@ -5729,25 +5831,25 @@ sub scantron_warning_screen { $CODElist=$env{'form.scantron_CODElist'}; if ($env{'form.scantron_CODElist'} eq '') { $CODElist='None'; } $CODElist= - 'List of CODES to validate against:'. + ''.&mt('List of CODES to validate against:').''. $env{'form.scantron_CODElist'}.''; } - return (< -Please double check the information - below before clicking on '$button_text' + +'.&mt('Please double check the information below before clicking on \'[_1]\'',&mt($button_text)).'

- - -$CODElist + + +'.$CODElist.'
Sequence to be Graded:$title
Data File that will be used:$env{'form.scantron_selectfile'}
'.&mt('Sequence to be Graded:').''.$title.'
'.&mt('Data File that will be used:').''.$env{'form.scantron_selectfile'}.'

-

If this information is correct, please click on '$button_text'.

-

If something is incorrect, please click the 'Grading Menu' button to start over.

+

'.&mt('If this information is correct, please click on \'[_1]\'.',&mt($button_text)).'

+

'.&mt('If something is incorrect, please click the \'Grading Menu\' button to start over.').'


-STUFF +'); } =pod @@ -5768,23 +5870,23 @@ sub scantron_do_warning { if ( $env{'form.selectpage'} eq '' || $env{'form.scantron_selectfile'} eq '' || $env{'form.scantron_format'} eq '' ) { - $r->print("

You have forgetten to specify some information. Please go Back and try again.

"); + $r->print("

".&mt('You have forgetten to specify some information. Please go Back and try again.')."

"); if ( $env{'form.selectpage'} eq '') { - $r->print('

You have not selected a Sequence to grade

'); + $r->print('

'.&mt('You have not selected a Sequence to grade').'

'); } if ( $env{'form.scantron_selectfile'} eq '') { - $r->print('

You have not selected a file that contains the student\'s response data.

'); + $r->print('

'.&mt('You have not selected a file that contains the student\'s response data.').'

'); } if ( $env{'form.scantron_format'} eq '') { - $r->print('

You have not selected a the format of the student\'s response data.

'); + $r->print('

'.&mt('You have not selected a the format of the student\'s response data.').'

'); } } else { my $warning=&scantron_warning_screen('Grading: Validate Records'); - $r->print(< + $r->print(' +'.$warning.' + -STUFF +'); } $r->print("
".&show_grading_menu_form($symb)); return ''; @@ -5863,7 +5965,7 @@ sub scantron_validate_file { if ($env{'form.scantron_corrections'}) { &scantron_process_corrections($r); } - $r->print("

Gathering necessary info.

");$r->rflush(); + $r->print('

'.&mt('Gathering necessary info.').'

');$r->rflush(); #get the student pick code ready $r->print(&Apache::loncommon::studentbrowser_javascript()); my $max_bubble=&scantron_get_maxbubble(); @@ -5883,7 +5985,7 @@ sub scantron_validate_file { my $stop=0; while (!$stop && $currentphase < scalar(@validate_phases)) { - $r->print("

Validating ".$validate_phases[$currentphase]."

"); + $r->print('

'.&mt('Validating '.$validate_phases[$currentphase]).'

'); $r->rflush(); my $which="scantron_validate_".$validate_phases[$currentphase]; { @@ -5893,12 +5995,12 @@ sub scantron_validate_file { } if (!$stop) { my $warning=&scantron_warning_screen('Start Grading'); - $r->print(< -$warning - + $r->print(' +'.&mt('Validation process complete.').'
+'.$warning.' + -STUFF +'); } else { $r->print(''); @@ -5906,15 +6008,15 @@ STUFF } if ($stop) { if ($validate_phases[$currentphase] eq 'sequence') { - $r->print(''); - $r->print(' this error
'); + $r->print(''); + $r->print(' '.&mt('this error').'
'); - $r->print("

Or click the 'Grading Menu' button to start over.

"); + $r->print("

".&mt("Or click the 'Grading Menu' button to start over.")."

"); } else { - $r->print(''); - $r->print(' using corrected info
'); - $r->print(""); - $r->print(" this scanline saving it for later."); + $r->print(''); + $r->print(' '.&mt('using corrected info').'
'); + $r->print(""); + $r->print(" ".&mt("this scanline saving it for later.")); } } $r->print("
".&show_grading_menu_form($symb)); @@ -5975,7 +6077,10 @@ sub scantron_remove_scan_data { } my $result; if (@todelete) { - $result=&Apache::lonnet::del('nohist_scantrondata',\@todelete,$cdom,$cname); + $result = &Apache::lonnet::del('nohist_scantrondata', + \@todelete,$cdom,$cname); + } else { + $result = 'ok'; } return $result; } @@ -6395,30 +6500,32 @@ sub scantron_get_correction { #to show both the current line and the previous one and allow skipping #the previous one or the current one - $r->print("

An error was detected ($error)"); if ( $$scan_record{'scantron.PaperID'} =~ /\S/) { - $r->print(" for PaperID ". - $$scan_record{'scantron.PaperID'}." \n"); + $r->print("

".&mt("An error was detected ($error)". + " for PaperID [_1]", + $$scan_record{'scantron.PaperID'})."

\n"); } else { - $r->print(" in scanline $i
".
-		  $line."
\n"); - } - my $message="

The ID on the form is ". - $$scan_record{'scantron.ID'}."
\n". - "The name on the paper is ". - $$scan_record{'scantron.LastName'}.",". - $$scan_record{'scantron.FirstName'}."

"; + $r->print("

".&mt("An error was detected ($error)". + " in scanline [_1]

[_2]
", + $i,$line)."

\n"); + } + my $message="

".&mt("The ID on the form is [_1]
". + "The name on the paper is [_2],[_3]", + $$scan_record{'scantron.ID'}, + $$scan_record{'scantron.LastName'}, + $$scan_record{'scantron.FirstName'})."

"; $r->print(''."\n"); $r->print(''."\n"); if ($error =~ /ID$/) { if ($error eq 'incorrectID') { - $r->print("The encoded ID is not in the classlist

\n"); + $r->print("

".&mt("The encoded ID is not in the classlist"). + "

\n"); } elsif ($error eq 'duplicateID') { - $r->print("The encoded ID has also been used by a previous paper $arg

\n"); + $r->print("

".&mt("The encoded ID has also been used by a previous paper [_1]",$arg)."

\n"); } $r->print($message); - $r->print("

How should I handle this?
\n"); + $r->print("

".&mt("How should I handle this?")."
\n"); $r->print("\n

  • "); #FIXME it would be nice if this sent back the user ID and #could do partial userID matches @@ -6431,14 +6538,14 @@ sub scantron_get_correction { $r->print('
  • '); } elsif ($error =~ /CODE$/) { if ($error eq 'incorrectCODE') { - $r->print("

    The encoded CODE is not in the list of possible CODEs

    \n"); + $r->print("

    ".&mt("The encoded CODE is not in the list of possible CODEs.")."

    \n"); } elsif ($error eq 'duplicateCODE') { - $r->print("

    The encoded CODE has also been used by a previous paper ".join(', ',@{$arg}).", and CODEs are supposed to be unique

    \n"); + $r->print("

    ".&mt("The encoded CODE has also been used by a previous paper [_1], and CODEs are supposed to be unique.",join(', ',@{$arg}))."

    \n"); } - $r->print("

    The CODE on the form is '". - $$scan_record{'scantron.CODE'}."'
    \n"); + $r->print("

    ".&mt("The CODE on the form is '[_1]'", + $$scan_record{'scantron.CODE'})."
    \n"); $r->print($message); - $r->print("

    How should I handle this?
    \n"); + $r->print("

    ".&mt("How should I handle this?")."
    \n"); $r->print("\n
    "); my $i=0; if ($error eq 'incorrectCODE' @@ -6448,7 +6555,13 @@ sub scantron_get_correction { foreach my $testcode (@{$closest}) { my $checked=''; if (!$i) { $checked=' checked="checked" '; } - $r->print(""); + $r->print(" + + "); $r->print("\n
    "); $i++; } @@ -6456,7 +6569,12 @@ sub scantron_get_correction { } if ($$scan_record{'scantron.CODE'}=~/\S/ ) { my $checked; if (!$i) { $checked=' checked="checked" '; } - $r->print(""); + $r->print(" + "); $r->print("\n
    "); } @@ -6478,17 +6596,27 @@ ENDSCRIPT "&curCODE=".&escape($$scan_record{'scantron.CODE'}). "&scantron_selectfile=".&escape($env{'form.scantron_selectfile'}); if ($env{'form.scantron_CODElist'} =~ /\S/) { - $r->print(" Selected CODE is "); + $r->print(" + + ".&mt("Selected CODE is [_1]","")); $r->print("\n
    "); } - $r->print(" as the CODE."); + $r->print(" + ")); $r->print("\n

    "); } elsif ($error eq 'doublebubble') { - $r->print("

    There have been multiple bubbles scanned for a some question(s)

    \n"); + $r->print("

    ".&mt("There have been multiple bubbles scanned for a some question(s)")."

    \n"); $r->print(''); $r->print($message); - $r->print("

    Please indicate which bubble should be used for grading

    "); + $r->print("

    ".&mt("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); @@ -6496,10 +6624,10 @@ ENDSCRIPT @select_array); } } elsif ($error eq 'missingbubble') { - $r->print("

    There have been no bubbles scanned for some question(s)

    \n"); + $r->print("

    ".&mt("There have been no bubbles scanned for some question(s)")."

    \n"); $r->print($message); - $r->print("

    Please indicate which bubble should be used for grading

    "); - $r->print("Some questions have no scanned bubbles\n"); + $r->print("

    ".&mt("Please indicate which bubble should be used for grading.")."

    "); + $r->print(&mt("Some questions have no scanned bubbles")."\n"); $r->print(''); foreach my $question (@{$arg}) { @@ -6546,6 +6674,7 @@ sub scantron_bubble_selector { my $total_lines = $lines*2; my @alphabet=('A'..'Z'); + $r->print(""); for (my $l = 0; $l < $lines; $l++) { @@ -6569,7 +6698,7 @@ sub scantron_bubble_selector { my $lspan = $total_lines * 2; # 2 table rows per bubble line. $r->print(''); + $quest.'" value="none" /> '.&mt('No bubble').' '); } @@ -6579,9 +6708,10 @@ sub scantron_bubble_selector { # multiline questions (different values e.g..). for (my $i=0;$i<$max;$i++) { + my $value = "$l:$i"; # Relative bubble line #: Bubble in line. $r->print("\n". '"); + $quest.'" value="'.$value.'" />'.$alphabet[$i].""); } $r->print(''); @@ -6829,7 +6959,6 @@ sub scantron_get_maxbubble { my $bubble_line = 0; foreach my $resource (@resources) { my $symb = $resource->symb(); - &Apache::lonxml::clear_bubble_lines_for_part(); my $result=&Apache::lonnet::ssi($resource->src(), ('symb' => $resource->symb()), ('grade_target' => 'analyze'), @@ -6845,9 +6974,10 @@ sub scantron_get_maxbubble { foreach my $part_id (@{$analysis{'parts'}}) { - my $lines = $analysis{"$part_id.bubble_lines"};; + + # TODO - make this a persistent hash not an array. @@ -7059,7 +7189,7 @@ sub scantron_upload_scantron_data { my $domsel=&Apache::loncommon::select_dom_form($env{'request.role.domain'}, 'domainid'); my $default_form_data=&defaultFormData(&get_symb($r,1)); - $r->print(<print(' -
    -$default_form_data + +'.$default_form_data.'
    $quest
    - - - - - + + + + + + + + +
    $select_link
    Course ID:
    Course Name:
    Domain: $domsel
    File to upload:
    '.$select_link.'
    '.&mt('Course ID:').'
    '.&mt('Course Name:').'
    '.&mt('Domain:').' '.$domsel.'
    '.&mt('File to upload:').'
    - - + + -UPLOAD +'); return ''; } @@ -7101,12 +7235,12 @@ sub scantron_upload_scantron_data_save { my $doanotherupload= '
    '."\n". ''."\n". - ''."\n". + ''."\n". '
    '."\n"; if (!&Apache::lonnet::allowed('usc',$env{'form.domainid'}) && !&Apache::lonnet::allowed('usc', $env{'form.domainid'}.'_'.$env{'form.courseid'})) { - $r->print("You are not allowed to upload Scantron data to the requested course.
    "); + $r->print(&mt("You are not allowed to upload Scantron data to the requested course.")."
    "); if ($symb) { $r->print(&show_grading_menu_form($symb)); } else { @@ -7115,7 +7249,7 @@ sub scantron_upload_scantron_data_save { return ''; } my %coursedata=&Apache::lonnet::coursedescription($env{'form.domainid'}.'_'.$env{'form.courseid'}); - $r->print("Doing upload to ".$coursedata{'description'}."
    "); + $r->print(&mt("Doing upload to [_1]",$coursedata{'description'})."
    "); my $fname=$env{'form.upfile.filename'}; #FIXME #copied from lonnet::userfileupload() @@ -7133,13 +7267,18 @@ sub scantron_upload_scantron_data_save { my $uploadedfile=$fname; $fname='scantron_orig_'.$fname; if (length($env{'form.upfile'}) < 2) { - $r->print("Error: The file you attempted to upload, ".&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').", contained no information. Please check that you entered the correct filename."); + $r->print(&mt("Error: The file you attempted to upload, [_1] contained no information. Please check that you entered the correct filename.",''.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"')."")); } else { my $result=&Apache::lonnet::finishuserfileupload($env{'form.courseid'},$env{'form.domainid'},'upfile',$fname); if ($result =~ m|^/uploaded/|) { - $r->print("Success: Successfully uploaded ".(length($env{'form.upfile'})-1)." bytes of data into location ".$result.""); + $r->print(&mt("Success: Successfully uploaded [_1] bytes of data into location [_2]", + (length($env{'form.upfile'})-1), + ''.$result."")); } else { - $r->print("Error: An error (".$result.") occurred when attempting to upload the file, ".&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').""); + $r->print(&mt("Error: An error ([_1]) occurred when attempting to upload the file, [_2]", + $result, + ''.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"')."")); + } } if ($symb) { @@ -7183,11 +7322,11 @@ sub scantron_download_scantron_data { my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'}; my $file=$env{'form.scantron_selectfile'}; if (! &valid_file($file)) { - $r->print(<print('

    - The requested file name was invalid. + '.&mt('The requested file name was invalid.').'

    -ERROR +'); $r->print(&show_grading_menu_form(&get_symb($r,1))); return; } @@ -7197,17 +7336,20 @@ ERROR &Apache::lonnet::allowuploaded('/adm/grades',$orig); &Apache::lonnet::allowuploaded('/adm/grades',$corrected); &Apache::lonnet::allowuploaded('/adm/grades',$skipped); - $r->print(<print('

    - Original file as uploaded by the scantron office. + '.&mt('[_1]Original[_2] file as uploaded by the scantron office.', + '','').'

    - Corrections, a file of corrected records that were used in grading. + '.&mt('[_1]Corrections[_2], a file of corrected records that were used in grading.', + '','').'

    - Skipped, a file of records that were skipped. + '.&mt('[_1]Skipped[_2], a file of records that were skipped.', + '','').'

    -DOWNLOAD +'); $r->print(&show_grading_menu_form(&get_symb($r,1))); return ''; } @@ -7314,13 +7456,14 @@ sub grading_menu { $menudata->{'url'}.'" >'. $menudata->{'name'}."\n"; } else { - $Str .='

    {'jscript'}. ' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '. ' />

    '; $Str .= (' 'x8). - ' receipt: '.&Apache::lonnet::recprefix($env{'request.course.id'}). - '-'; + &mt(' receipt: [_1]', + &Apache::lonnet::recprefix($env{'request.course.id'}). + '-'); } $Str .= ' '.(' 'x8).$menudata->{'short_description'}. "\n"; 500 Internal Server Error

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

    More information about this error may be available in the server error log.