version 1.596.2.12.2.16, 2013/06/28 22:54:50
|
version 1.596.2.12.2.27, 2014/01/18 01:57:41
|
Line 811 sub verifyreceipt {
|
Line 811 sub verifyreceipt {
|
'<h3><span class="LC_info">'. |
'<h3><span class="LC_info">'. |
&mt('Verifying Receipt No. [_1]',$receipt). |
&mt('Verifying Receipt No. [_1]',$receipt). |
'</span></h3>'."\n". |
'</span></h3>'."\n". |
'<h4>'.&mt('<b>Resource: </b>[_1]',$env{'form.probTitle'}). |
'<h4>'.&mt('[_1]Resource: [_2]','<b>','</b>'.$env{'form.probTitle'}). |
'</h4>'."\n"; |
'</h4>'."\n"; |
|
|
my ($string,$contents,$matches) = ('','',0); |
my ($string,$contents,$matches) = ('','',0); |
Line 1162 LISTJAVASCRIPT
|
Line 1162 LISTJAVASCRIPT
|
if ($submitonly eq 'graded' ) { $submissions = 'ungraded submissions'; } |
if ($submitonly eq 'graded' ) { $submissions = 'ungraded submissions'; } |
if ($submitonly eq 'queued' ) { $submissions = 'queued submissions'; } |
if ($submitonly eq 'queued' ) { $submissions = 'queued submissions'; } |
$gradeTable='<br /> <span class="LC_warning">'. |
$gradeTable='<br /> <span class="LC_warning">'. |
&mt('No '.$submissions.' found for this resource for any students. ([_1] students checked for '.$submissions.')', |
&mt('No '.$submissions.' found for this resource for any students. ([quant,_1,student] checked for '.$submissions.')', |
$num_students). |
$num_students). |
'</span><br />'; |
'</span><br />'; |
} |
} |
Line 1793 sub gradeBox {
|
Line 1793 sub gradeBox {
|
$wgt = ($wgt > 0 ? $wgt : '1'); |
$wgt = ($wgt > 0 ? $wgt : '1'); |
my $score = ($$record{'resource.'.$partid.'.awarded'} eq '' ? |
my $score = ($$record{'resource.'.$partid.'.awarded'} eq '' ? |
'' : &compute_points($$record{'resource.'.$partid.'.awarded'},$wgt)); |
'' : &compute_points($$record{'resource.'.$partid.'.awarded'},$wgt)); |
my $result='<input type="hidden" name="WGT'.$counter.'_'.$partid.'" value="'.$wgt.'" />'."\n"; |
my $data_WGT='<input type="hidden" name="WGT'.$counter.'_'.$partid.'" value="'.$wgt.'" />'."\n"; |
my $display_part= &get_display_part($partid,$symb); |
my $display_part= &get_display_part($partid,$symb); |
my %last_resets = &get_last_resets($symb,$env{'request.course.id'}, |
my %last_resets = &get_last_resets($symb,$env{'request.course.id'}, |
[$partid]); |
[$partid]); |
Line 1801 sub gradeBox {
|
Line 1801 sub gradeBox {
|
if ($last_resets{$partid}) { |
if ($last_resets{$partid}) { |
$aggtries = &get_num_tries($record,$last_resets{$partid},$partid); |
$aggtries = &get_num_tries($record,$last_resets{$partid},$partid); |
} |
} |
$result.=&Apache::loncommon::start_data_table_row(); |
my $result=&Apache::loncommon::start_data_table_row(); |
my $ctr = 0; |
my $ctr = 0; |
my $thisweight = 0; |
my $thisweight = 0; |
my $increment = &get_increment(); |
my $increment = &get_increment(); |
Line 1838 sub gradeBox {
|
Line 1838 sub gradeBox {
|
|
|
|
|
$result .= |
$result .= |
'<td>'.$display_part.'</td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'; |
'<td>'.$data_WGT.$display_part.'</td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'; |
$result.=&Apache::loncommon::end_data_table_row(); |
$result.=&Apache::loncommon::end_data_table_row().'<td colspan="6">'; |
$result.='<input type="hidden" name="stores'.$counter.'_'.$partid.'" value="" />'."\n". |
$result.='<input type="hidden" name="stores'.$counter.'_'.$partid.'" value="" />'."\n". |
'<input type="hidden" name="oldpts'.$counter.'_'.$partid.'" value="'.$score.'" />'."\n". |
'<input type="hidden" name="oldpts'.$counter.'_'.$partid.'" value="'.$score.'" />'."\n". |
'<input type="hidden" name="solved'.$counter.'_'.$partid.'" value="'. |
'<input type="hidden" name="solved'.$counter.'_'.$partid.'" value="'. |
Line 1850 sub gradeBox {
|
Line 1850 sub gradeBox {
|
$aggtries.'" />'."\n"; |
$aggtries.'" />'."\n"; |
my $res_error; |
my $res_error; |
$result.=&handback_box($symb,$uname,$udom,$counter,$partid,$record,\$res_error); |
$result.=&handback_box($symb,$uname,$udom,$counter,$partid,$record,\$res_error); |
|
$result.='</td>'.&Apache::loncommon::end_data_table_row(); |
if ($res_error) { |
if ($res_error) { |
return &navmap_errormsg(); |
return &navmap_errormsg(); |
} |
} |
Line 2043 sub submission {
|
Line 2044 sub submission {
|
&download_all_link($request, $symb); |
&download_all_link($request, $symb); |
} |
} |
$request->print('<h3> <span class="LC_info">'.&mt('Submission Record').'</span></h3>'."\n". |
$request->print('<h3> <span class="LC_info">'.&mt('Submission Record').'</span></h3>'."\n". |
'<h4> '.&mt('<b>Resource: </b> [_1]',$env{'form.probTitle'}).'</h4>'."\n"); |
'<h4> '.&mt('[_1]Resource: [_2]','<b>','</b>'.$env{'form.probTitle'}).'</h4>'."\n"); |
|
|
# option to display problem, only once else it cause problems |
# option to display problem, only once else it cause problems |
# with the form later since the problem has a form. |
# with the form later since the problem has a form. |
Line 2060 sub submission {
|
Line 2061 sub submission {
|
$request->print(&show_problem($request,$symb,$uname,$udom,0,1,$mode)); |
$request->print(&show_problem($request,$symb,$uname,$udom,0,1,$mode)); |
} |
} |
|
|
# kwclr is the only variable that is guaranteed to be non blank |
# kwclr is the only variable that is guaranteed not to be blank |
# if this subroutine has been called once. |
# if this subroutine has been called once. |
my %keyhash = (); |
my %keyhash = (); |
if ($env{'form.kwclr'} eq '' && $env{'form.handgrade'} eq 'yes') { |
if ($env{'form.kwclr'} eq '' && $env{'form.handgrade'} eq 'yes') { |
Line 2138 sub submission {
|
Line 2139 sub submission {
|
<b>$lt{'keyw'}:</b> |
<b>$lt{'keyw'}:</b> |
<a href="javascript:keywords(document.SCORE);" target="_self">$lt{'list'}</a> |
<a href="javascript:keywords(document.SCORE);" target="_self">$lt{'list'}</a> |
<a href="#" onmousedown="javascript:getSel(); return false" |
<a href="#" onmousedown="javascript:getSel(); return false" |
CLASS="page">$lt{'past'}</a> |
class="page">$lt{'past'}</a> |
<a href="javascript:kwhighlight();" target="_self">$lt{'high'}</a><br /><br /> |
<a href="javascript:kwhighlight();" target="_self">$lt{'high'}</a><br /><br /> |
KEYWORDS |
KEYWORDS |
# |
# |
Line 2165 KEYWORDS
|
Line 2166 KEYWORDS
|
if ($perm{'vgr'}) { |
if ($perm{'vgr'}) { |
$request->print( |
$request->print( |
&Apache::loncommon::track_student_link( |
&Apache::loncommon::track_student_link( |
&mt('View recent activity'), |
'View recent activity', |
$uname,$udom,'check') |
$uname,$udom,'check') |
.' ' |
.' ' |
); |
); |
Line 2229 KEYWORDS
|
Line 2230 KEYWORDS
|
# (for multi-response type part) |
# (for multi-response type part) |
# (3) Last submission plus the parts info |
# (3) Last submission plus the parts info |
# (4) The whole record for this student |
# (4) The whole record for this student |
if ($env{'form.lastSub'} =~ /^(lastonly|hdgrade)$/) { |
|
my ($string,$timestamp)= &get_last_submission(\%record); |
my ($string,$timestamp)= &get_last_submission(\%record); |
|
|
my $lastsubonly; |
my $lastsubonly; |
Line 2252 KEYWORDS
|
Line 2253 KEYWORDS
|
if ($env{"form.$uname:$udom:$partid:submitted_by"}) { |
if ($env{"form.$uname:$udom:$partid:submitted_by"}) { |
if (exists($seenparts{$partid})) { next; } |
if (exists($seenparts{$partid})) { next; } |
$seenparts{$partid}=1; |
$seenparts{$partid}=1; |
my $submitby='<b>Part:</b> '.$display_part. |
$request->print( |
' <b>Collaborative submission by:</b> '. |
'<b>'.&mt('Part: [_1]',$display_part).'</b>'. |
'<a href="javascript:viewSubmitter(\''. |
' <b>'.&mt('Collaborative submission by: [_1]', |
$env{"form.$uname:$udom:$partid:submitted_by"}. |
'<a href="javascript:viewSubmitter(\''. |
'\');" target="_self">'. |
$env{"form.$uname:$udom:$partid:submitted_by"}. |
$$fullname{$env{"form.$uname:$udom:$partid:submitted_by"}}.'</a><br />'; |
'\');" target="_self">'. |
$request->print($submitby); |
$$fullname{$env{"form.$uname:$udom:$partid:submitted_by"}}.'</a>'). |
|
'<br />'); |
next; |
next; |
} |
} |
my $responsetype = $responseType->{$partid}->{$respid}; |
my $responsetype = $responseType->{$partid}->{$respid}; |
Line 2283 KEYWORDS
|
Line 2285 KEYWORDS
|
$trial = $record{"resource.$partid.tries"}; |
$trial = $record{"resource.$partid.tries"}; |
$rndseed = $record{"resource.$partid.rndseed"}; |
$rndseed = $record{"resource.$partid.rndseed"}; |
} |
} |
if($env{'form.checkPlag'}){ |
if ($env{'form.checkPlag'}) { |
my ($oname,$odom,$ocrsid,$oessay,$osim)= |
my ($oname,$odom,$ocrsid,$oessay,$osim)= |
&most_similar($uname,$udom,$symb,$subval); |
&most_similar($uname,$udom,$symb,$subval); |
if ($osim) { |
if ($osim) { |
Line 2311 KEYWORDS
|
Line 2313 KEYWORDS
|
} |
} |
my $order=&get_order($partid,$respid,$symb,$uname,$udom, |
my $order=&get_order($partid,$respid,$symb,$uname,$udom, |
undef,$type,$trial,$rndseed); |
undef,$type,$trial,$rndseed); |
if ($env{'form.lastSub'} eq 'lastonly' || |
if ($env{'form.lastSub'} eq 'lastonly' || $env{'form.lastSub'} eq 'datesub' || $env{'form.lastSub'} =~ /^(last|all)$/ || ($env{'form.lastSub'} eq 'hdgrade' && |
($env{'form.lastSub'} eq 'hdgrade' && |
$$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) { |
$$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) { |
|
my $display_part=&get_display_part($partid,$symb); |
my $display_part=&get_display_part($partid,$symb); |
$lastsubonly.='<div class="LC_grade_submission_part">'. |
$lastsubonly.='<div class="LC_grade_submission_part">'. |
'<b>'.&mt('Part: [_1]',$display_part).'</b>'. |
'<b>'.&mt('Part: [_1]',$display_part).'</b>'. |
Line 2325 KEYWORDS
|
Line 2326 KEYWORDS
|
if ($hide eq 'anon') { |
if ($hide eq 'anon') { |
$lastsubonly.='<br />'.&mt('[quant,_1,file] uploaded to this anonymous survey',scalar(@{$files})); |
$lastsubonly.='<br />'.&mt('[quant,_1,file] uploaded to this anonymous survey',scalar(@{$files})); |
} else { |
} else { |
$lastsubonly.='<br /><span class="LC_warning">'.&mt('Like all files provided by users, this file may contain viruses').'</span><br />'; |
$lastsubonly.='<br /><br />'.'<b>'.&mt('Submitted Files:').'</b>' |
|
.'<br /><span class="LC_warning">'; |
|
if(@$files == 1) { |
|
$lastsubonly .= &mt('Like all files provided by users, this file may contain viruses!'); |
|
} else { |
|
$lastsubonly .= &mt('Like all files provided by users, these files may contain viruses!'); |
|
} |
|
$lastsubonly .= '</span>'; |
|
|
foreach my $file (@$files) { |
foreach my $file (@$files) { |
&Apache::lonnet::allowuploaded('/adm/grades',$file); |
&Apache::lonnet::allowuploaded('/adm/grades',$file); |
$lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" /> '.$file.'</a>'; |
$lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" alt="" /> '.$file.'</a>'; |
} |
} |
} |
} |
$lastsubonly.='<br />'; |
$lastsubonly.='<br />'; |
} |
} |
if ($hide eq 'anon') { |
if ($hide eq 'anon') { |
$lastsubonly.='<b>'.&mt('Anonymous Survey').'</b>'; |
$lastsubonly.='<br /><b>'.&mt('Anonymous Survey').'</b>'; |
} else { |
} else { |
$lastsubonly.='<b>'.&mt('Submitted Answer:').' </b>'. |
$lastsubonly.='<br /><b>'.&mt('Submitted Answer:').' </b>'. |
&cleanRecord($subval,$responsetype,$symb,$partid, |
&cleanRecord($subval,$responsetype,$symb,$partid, |
$respid,\%record,$order,undef,$uname,$udom,$type,$trial,$rndseed); |
$respid,\%record,$order,undef,$uname,$udom,$type,$trial,$rndseed); |
} |
} |
Line 2348 KEYWORDS
|
Line 2357 KEYWORDS
|
$lastsubonly.='</div>'."\n"; # End: LC_grade_submissions_body |
$lastsubonly.='</div>'."\n"; # End: LC_grade_submissions_body |
} |
} |
$request->print($lastsubonly); |
$request->print($lastsubonly); |
} elsif ($env{'form.lastSub'} eq 'datesub') { |
if ($env{'form.lastSub'} eq 'datesub') { |
my (undef,$responseType,undef,$parts) = &showResourceInfo($symb); |
my (undef,$responseType,undef,$parts) = &showResourceInfo($symb); |
$request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom)); |
$request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom)); |
} elsif ($env{'form.lastSub'} =~ /^(last|all)$/) { |
} |
|
if ($env{'form.lastSub'} =~ /^(last|all)$/) { |
$request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom, |
$request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom, |
$env{'request.course.id'}, |
$env{'request.course.id'}, |
$last,'.submission', |
$last,'.submission', |
Line 2393 KEYWORDS
|
Line 2403 KEYWORDS
|
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n"; |
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n"; |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
',\''.$msgfor.'\');" target="_self">'. |
',\''.$msgfor.'\');" target="_self">'. |
&mt('Compose message to student').(scalar(@$col_fullnames) >= 1 ? 's' : '').'</a><label> ('. |
&mt('Compose message to student'.(scalar(@$col_fullnames) >= 1 ? 's' : '')).'</a><label> ('. |
&mt('incl. grades').' <input type="checkbox" name="withgrades'.$counter.'" /></label>)'. |
&mt('incl. grades').' <input type="checkbox" name="withgrades'.$counter.'" /></label>)'. |
'<img src="'.$request->dir_config('lonIconsURL'). |
' <img src="'.$request->dir_config('lonIconsURL'). |
'/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n". |
'/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n". |
'<br /> ('. |
'<br /> ('. |
&mt('Message will be sent when you click on Save & Next below.').")\n"; |
&mt('Message will be sent when you click on Save & Next below.').")\n"; |
Line 3632 sub viewgrades {
|
Line 3642 sub viewgrades {
|
&Apache::lonnet::clear_EXT_cache_status(); |
&Apache::lonnet::clear_EXT_cache_status(); |
|
|
my $result='<h3><span class="LC_info">'.&mt('Manual Grading').'</span></h3>'; |
my $result='<h3><span class="LC_info">'.&mt('Manual Grading').'</span></h3>'; |
$result.='<h4>'.&mt('<b>Current Resource: </b>[_1]',$env{'form.probTitle'}).'</h4>'."\n"; |
$result.='<h4><b>'.&mt('Current Resource').':</b> '.$env{'form.probTitle'}.'</h4>'."\n"; |
|
|
#view individual student submission form - called using Javascript viewOneStudent |
#view individual student submission form - called using Javascript viewOneStudent |
$result.=&jscriptNform($symb); |
$result.=&jscriptNform($symb); |
Line 3695 sub viewgrades {
|
Line 3705 sub viewgrades {
|
$partid.'" size="4" '.'onchange="javascript:writePoint(\''. |
$partid.'" size="4" '.'onchange="javascript:writePoint(\''. |
$partid.'\','.$weight{$partid}.',\'textval\')" /> /'. |
$partid.'\','.$weight{$partid}.',\'textval\')" /> /'. |
$weight{$partid}.' '.&mt('(problem weight)').'</td>'."\n"; |
$weight{$partid}.' '.&mt('(problem weight)').'</td>'."\n"; |
$line.= '<td><b>'.&mt('Grade Status').':</b><select name="SELVAL_'.$partid.'"'. |
$line.= '<td><b>'.&mt('Grade Status').':</b>'. |
'onchange="javascript:writeRadText(\''.$partid.'\','. |
'<select name="SELVAL_'.$partid.'" '. |
|
'onchange="javascript:writeRadText(\''.$partid.'\','. |
$weight{$partid}.')"> '. |
$weight{$partid}.')"> '. |
'<option selected="selected"> </option>'. |
'<option selected="selected"> </option>'. |
'<option value="excused">'.&mt('excused').'</option>'. |
'<option value="excused">'.&mt('excused').'</option>'. |
Line 3743 sub viewgrades {
|
Line 3754 sub viewgrades {
|
my $display_part=&get_display_part($partid,$symb); |
my $display_part=&get_display_part($partid,$symb); |
if ($display =~ /^Partial Credit Factor/) { |
if ($display =~ /^Partial Credit Factor/) { |
$result.='<th>'. |
$result.='<th>'. |
&mt('Score Part: [_1]<br /> (weight = [_2])', |
&mt('Score Part: [_1][_2](weight = [_3])', |
$display_part,$weight{$partid}).'</th>'."\n"; |
$display_part,'<br />',$weight{$partid}).'</th>'."\n"; |
next; |
next; |
|
|
} else { |
} else { |
Line 3868 sub editgrades {
|
Line 3879 sub editgrades {
|
my ($symb)=&get_symb($request); |
my ($symb)=&get_symb($request); |
my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section')); |
my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section')); |
my $title='<h2>'.&mt('Current Grade Status').'</h2>'; |
my $title='<h2>'.&mt('Current Grade Status').'</h2>'; |
$title.='<h4>'.&mt('<b>Current Resource: </b>[_1]',$env{'form.probTitle'}).'</h4>'."\n"; |
$title.='<h4><b>'.&mt('Current Resource').':</b> '.$env{'form.probTitle'}.'</h4>'."\n"; |
$title.='<h4>'.&mt('<b>Section: </b>[_1]',$section_display).'</h4>'."\n"; |
$title.='<h4><b>'.&mt('Section:').'</b> '.$section_display.'</h4>'."\n"; |
|
|
my $result= &Apache::loncommon::start_data_table(). |
my $result= &Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_header_row(). |
&Apache::loncommon::start_data_table_header_row(). |
Line 4254 sub csvupload_fields {
|
Line 4265 sub csvupload_fields {
|
|
|
sub csvuploadmap_footer { |
sub csvuploadmap_footer { |
my ($request,$i,$keyfields) =@_; |
my ($request,$i,$keyfields) =@_; |
|
my $buttontext = &mt('Assign Grades'); |
$request->print(<<ENDPICK); |
$request->print(<<ENDPICK); |
</table> |
</table> |
<input type="hidden" name="nfields" value="$i" /> |
<input type="hidden" name="nfields" value="$i" /> |
<input type="hidden" name="keyfields" value="$keyfields" /> |
<input type="hidden" name="keyfields" value="$keyfields" /> |
<input type="button" onclick="javascript:verify(this.form)" value="Assign Grades" /><br /> |
<input type="button" onclick="javascript:verify(this.form)" value="$buttontext" /><br /> |
</form> |
</form> |
ENDPICK |
ENDPICK |
} |
} |
Line 4402 ENDPICK
|
Line 4414 ENDPICK
|
} |
} |
# FIXME do a check for any duplicated user ids... |
# FIXME do a check for any duplicated user ids... |
# FIXME do a check for any invalid user ids?... |
# FIXME do a check for any invalid user ids?... |
$request->print('<input type="submit" value="Assign Grades" /><br /> |
$request->print('<input type="submit" value="'.&mt('Assign Grades').'" /><br /> |
<hr /></form>'."\n"); |
<hr /></form>'."\n"); |
$request->print(&show_grading_menu_form($symb)); |
$request->print(&show_grading_menu_form($symb)); |
return ''; |
return ''; |
Line 5218 like.
|
Line 5230 like.
|
Next each scanline is checked for any errors of either 'missing |
Next each scanline is checked for any errors of either 'missing |
bubbles' (it's an error because it may have been mis-scanned |
bubbles' (it's an error because it may have been mis-scanned |
because too light bubbling), 'double bubble' (each bubble line should |
because too light bubbling), 'double bubble' (each bubble line should |
have no more that one letter picked), invalid or duplicated CODE, |
have no more than one letter picked), invalid or duplicated CODE, |
invalid student/employee ID |
invalid student/employee ID |
|
|
If the CODE option is used that determines the randomization of the |
If the CODE option is used that determines the randomization of the |
Line 5681 sub scantron_selectphase {
|
Line 5693 sub scantron_selectphase {
|
|
|
&Apache::lonpickcode::code_list($r,2); |
&Apache::lonpickcode::code_list($r,2); |
|
|
$r->print('<br /><form method="post" name="checkscantron">'. |
$r->print('<br /><form method="post" name="checkscantron" action="">'. |
$default_form_data."\n". |
$default_form_data."\n". |
&Apache::loncommon::start_data_table('LC_scantron_action')."\n". |
&Apache::loncommon::start_data_table('LC_scantron_action')."\n". |
&Apache::loncommon::start_data_table_header_row()."\n". |
&Apache::loncommon::start_data_table_header_row()."\n". |
Line 6577 sub scantron_process_corrections {
|
Line 6589 sub scantron_process_corrections {
|
} |
} |
} |
} |
if ($err) { |
if ($err) { |
$r->print("<span class=\"LC_warning\">Unable to accept last correction, an error occurred :$errmsg:</span>"); |
$r->print( |
|
'<p class="LC_error">' |
|
.&mt('Unable to accept last correction, an error occurred: [_1]', |
|
$errmsg) |
|
.'</p>'); |
} else { |
} else { |
&scantron_put_line($scanlines,$scan_data,$which,$line,$skip); |
&scantron_put_line($scanlines,$scan_data,$which,$line,$skip); |
&scantron_putfile($scanlines,$scan_data); |
&scantron_putfile($scanlines,$scan_data); |
Line 6713 sub scantron_warning_screen {
|
Line 6729 sub scantron_warning_screen {
|
return (' |
return (' |
<p> |
<p> |
<span class="LC_warning"> |
<span class="LC_warning"> |
'.&mt('Please double check the information below before clicking on \'[_1]\'',&mt($button_text)).'</span> |
'.&mt("Please double check the information below before clicking on '[_1]'",&mt($button_text)).'</span> |
</p> |
</p> |
<table> |
<table> |
<tr><td><b>'.&mt('Sequence to be Graded:').'</b></td><td>'.$title.'</td></tr> |
<tr><td><b>'.&mt('Sequence to be Graded:').'</b></td><td>'.$title.'</td></tr> |
Line 6828 sub scantron_validate_file {
|
Line 6844 sub scantron_validate_file {
|
if (!$symb) {return '';} |
if (!$symb) {return '';} |
my $default_form_data=&defaultFormData($symb); |
my $default_form_data=&defaultFormData($symb); |
|
|
# do the detection of only doing skipped records first befroe we delete |
# do the detection of only doing skipped records first before we delete |
# them when doing the corrections reset |
# them when doing the corrections reset |
if ($env{'form.scantron_options_redo'} ne 'redo_skipped_ready') { |
if ($env{'form.scantron_options_redo'} ne 'redo_skipped_ready') { |
&reset_skipping_status(); |
&reset_skipping_status(); |
Line 7629 sub questions_to_line_list {
|
Line 7645 sub questions_to_line_list {
|
} else { |
} else { |
$first = $first_bubble_line{$responsenum} + 1; |
$first = $first_bubble_line{$responsenum} + 1; |
} |
} |
my @subans = split(/,/,$subdivided_bubble_lines{$question-1}); |
my @subans = split(/,/,$subdivided_bubble_lines{$responsenum}); |
my $subcount = 1; |
my $subcount = 1; |
while ($subcount<$subquestion) { |
while ($subcount<$subquestion) { |
$first += $subans[$subcount-1]; |
$first += $subans[$subcount-1]; |
Line 7637 sub questions_to_line_list {
|
Line 7653 sub questions_to_line_list {
|
} |
} |
$count = $subans[$subquestion-1]; |
$count = $subans[$subquestion-1]; |
} else { |
} else { |
$first = $first_bubble_line{$question-1} + 1; |
my $responsenum = $question-1; |
$count = $bubble_lines_per_response{$question-1}; |
if (($randomorder || $randompick) && (ref($respnumlookup) eq 'HASH')) { |
|
$responsenum = $respnumlookup->{$question-1}; |
|
if (ref($startline) eq 'HASH') { |
|
$first = $startline->{$question-1} + 1; |
|
} |
|
} else { |
|
$first = $first_bubble_line{$responsenum} + 1; |
|
} |
|
$count = $bubble_lines_per_response{$responsenum}; |
} |
} |
$last = $first+$count-1; |
$last = $first+$count-1; |
push(@lines, ($first..$last)); |
push(@lines, ($first..$last)); |
Line 7660 for multi and missing bubble cases).
|
Line 7684 for multi and missing bubble cases).
|
$scan_config - The scantron file configuration hash. |
$scan_config - The scantron file configuration hash. |
$scan_record - Reference to the hash that has the the parsed scanlines. |
$scan_record - Reference to the hash that has the the parsed scanlines. |
$error - Type of error |
$error - Type of error |
|
$randomorder - True if randomorder in use. |
|
$randompick - True if randompick in use. |
|
$respnumlookup - Reference to HASH mapping question numbers in bubble lines |
|
for current line to question number used for same question |
|
in "Master Seqence" (as seen by Course Coordinator). |
|
$startline - Reference to hash where key is question number (0 is first) |
|
and value is number of first bubble line for current student |
|
or code-based randompick and/or randomorder. |
|
|
Implicit inputs: |
Implicit inputs: |
%bubble_lines_per_response - Starting line numbers for each question. |
%bubble_lines_per_response - Starting line numbers for each question. |
Line 7700 sub prompt_for_corrections {
|
Line 7732 sub prompt_for_corrections {
|
} |
} |
} else { |
} else { |
$responsenum = $question-1; |
$responsenum = $question-1; |
$first = $first_bubble_line{$responsenum} + 1; |
$first = $first_bubble_line{$responsenum}; |
} |
} |
$current_line = $first + 1 ; |
$current_line = $first + 1 ; |
my @subans = split(/,/,$subdivided_bubble_lines{$responsenum}); |
my @subans = split(/,/,$subdivided_bubble_lines{$responsenum}); |
Line 8092 sub scantron_get_maxbubble {
|
Line 8124 sub scantron_get_maxbubble {
|
foreach my $resource (@resources) { |
foreach my $resource (@resources) { |
my $resid = $resource->id(); |
my $resid = $resource->id(); |
my ($analysis,$parts) = &scantron_partids_tograde($resource,$cid,$uname, |
my ($analysis,$parts) = &scantron_partids_tograde($resource,$cid,$uname, |
$udom,$bubbles_per_row); |
$udom,undef,$bubbles_per_row); |
if ((ref($analysis) eq 'HASH') && (ref($parts) eq 'ARRAY')) { |
if ((ref($analysis) eq 'HASH') && (ref($parts) eq 'ARRAY')) { |
foreach my $part_id (@{$parts}) { |
foreach my $part_id (@{$parts}) { |
my $lines; |
my $lines; |
Line 8197 sub scantron_validate_missingbubbles {
|
Line 8229 sub scantron_validate_missingbubbles {
|
if (ref($map)) { |
if (ref($map)) { |
$randomorder = $map->randomorder(); |
$randomorder = $map->randomorder(); |
$randompick = $map->randompick(); |
$randompick = $map->randompick(); |
|
if ($randomorder || $randompick) { |
|
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
|
if ($nav_error) { |
|
$r->print(&navmap_errormsg()); |
|
return(1,$currentphase); |
|
} |
|
&graders_resources_pass(\@resources,\%grader_partids_by_symb, |
|
\%grader_randomlists_by_symb,$bubbles_per_row); |
|
} |
} else { |
} else { |
$r->print(&navmap_errormsg()); |
$r->print(&navmap_errormsg()); |
return ''; |
return(1,$currentphase); |
} |
|
my $nav_error; |
|
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
|
if ($randomorder || $randompick) { |
|
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
|
if ($nav_error) { |
|
$r->print(&navmap_errormsg()); |
|
return ''; |
|
} |
|
} |
} |
&graders_resources_pass(\@resources,\%grader_partids_by_symb, |
|
\%grader_randomlists_by_symb,$bubbles_per_row); |
|
|
|
my ($uname,$udom); |
|
|
|
my $max_bubble=&scantron_get_maxbubble(\$nav_error,\%scantron_config); |
my $max_bubble=&scantron_get_maxbubble(\$nav_error,\%scantron_config); |
if ($nav_error) { |
if ($nav_error) { |
Line 8249 sub scantron_validate_missingbubbles {
|
Line 8278 sub scantron_validate_missingbubbles {
|
$first = $first_bubble_line{$responsenum}; |
$first = $first_bubble_line{$responsenum}; |
} |
} |
if (!defined($first)) { next; } |
if (!defined($first)) { next; } |
my @subans = split(/,/,$subdivided_bubble_lines{$question-1}); |
my @subans = split(/,/,$subdivided_bubble_lines{$responsenum}); |
my $subcount = 1; |
my $subcount = 1; |
while ($subcount<$subquestion) { |
while ($subcount<$subquestion) { |
$first += $subans[$subcount-1]; |
$first += $subans[$subcount-1]; |
Line 8352 sub scantron_process_students {
|
Line 8381 sub scantron_process_students {
|
} |
} |
my $nav_error; |
my $nav_error; |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my (%grader_partids_by_symb,%grader_randomlists_by_symb,%ordered); |
|
if ($randomorder || $randompick) { |
if ($randomorder || $randompick) { |
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
$nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
if ($nav_error) { |
if ($nav_error) { |
Line 8571 SCANTRONFORM
|
Line 8599 SCANTRONFORM
|
&Apache::loncommon::end_data_table_header_row()."\n". |
&Apache::loncommon::end_data_table_header_row()."\n". |
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<td>'.&mt('Bubblesheet').'</td>'. |
'<td>'.&mt('Bubblesheet').'</td>'. |
'<td><span class="LC_nobreak">'.$studentdata.'</span></td>'. |
'<td><span class="LC_nobreak" style="white-space: pre;"><tt>'.$studentdata.'</tt></span></td>'. |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
&Apache::loncommon::start_data_table_row(). |
'<td>'.&mt('Stored submissions').'</td>'. |
'<td>'.&mt('Stored submissions').'</td>'. |
'<td><span class="LC_nobreak">'.$studentrecord.'</span></td>'."\n". |
'<td><span class="LC_nobreak" style="white-space: pre;"><tt>'.$studentrecord.'</tt></span></td>'."\n". |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table().'</p>'); |
&Apache::loncommon::end_data_table().'</p>'); |
} else { |
} else { |
Line 8816 sub scantron_upload_scantron_data_save {
|
Line 8844 sub scantron_upload_scantron_data_save {
|
} |
} |
my %coursedata=&Apache::lonnet::coursedescription($env{'form.domainid'}.'_'.$env{'form.courseid'}); |
my %coursedata=&Apache::lonnet::coursedescription($env{'form.domainid'}.'_'.$env{'form.courseid'}); |
my $uploadedfile; |
my $uploadedfile; |
$r->print('<h3>'.&mt("Uploading file to [_1]",$coursedata{'description'}).'</h3>'); |
$r->print('<p>'.&mt("Uploading file to [_1]",$coursedata{'description'}).'</p>'); |
if (length($env{'form.upfile'}) < 2) { |
if (length($env{'form.upfile'}) < 2) { |
$r->print(&mt('[_1]Error:[_2] The file you attempted to upload, [_3] contained no information. Please check that you entered the correct filename.','<span class="LC_error">','</span>','<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>')); |
$r->print( |
|
&Apache::lonhtmlcommon::confirm_success( |
|
&mt('The file: [_1] you attempted to upload contained no information. Please check that you entered the correct filename.', |
|
'<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>'),1)); |
} else { |
} else { |
my $result = |
my $result = |
&Apache::lonnet::userfileupload('upfile','','scantron','','','', |
&Apache::lonnet::userfileupload('upfile','','scantron','','','', |
$env{'form.courseid'},$env{'form.domainid'}); |
$env{'form.courseid'},$env{'form.domainid'}); |
if ($result =~ m{^/uploaded/}) { |
if ($result =~ m{^/uploaded/}) { |
$r->print(&mt('[_1]Success:[_2] Successfully uploaded [_3] bytes of data into location: [_4]', |
$r->print( |
'<span class="LC_success">','</span>',(length($env{'form.upfile'})-1), |
&Apache::lonhtmlcommon::confirm_success(&mt('Upload successful')).'<br />'. |
'<span class="LC_filename">'.$result.'</span>')); |
&mt('Uploaded [_1] bytes of data into location: [_2]', |
|
(length($env{'form.upfile'})-1), |
|
'<span class="LC_filename">'.$result.'</span>')); |
($uploadedfile) = ($result =~ m{/([^/]+)$}); |
($uploadedfile) = ($result =~ m{/([^/]+)$}); |
$r->print(&validate_uploaded_scantron_file($env{'form.domainid'}, |
$r->print(&validate_uploaded_scantron_file($env{'form.domainid'}, |
$env{'form.courseid'},$uploadedfile)); |
$env{'form.courseid'},$uploadedfile)); |
} else { |
} else { |
$r->print(&mt('[_1]Error:[_2] An error ([_3]) occurred when attempting to upload the file, [_4]', |
$r->print( |
'<span class="LC_error">','</span>',$result, |
&Apache::lonhtmlcommon::confirm_success(&mt('Upload failed'),1).'<br />'. |
|
&mt('An error ([_1]) occurred when attempting to upload the file: [_2]', |
|
$result, |
'<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>')); |
'<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>')); |
} |
} |
} |
} |
Line 8854 sub validate_uploaded_scantron_file {
|
Line 8889 sub validate_uploaded_scantron_file {
|
my $output; |
my $output; |
if (@lines) { |
if (@lines) { |
my (%counts,$max_match_format); |
my (%counts,$max_match_format); |
my ($max_match_count,$max_match_pct) = (0,0); |
my ($found_match_count,$max_match_count,$max_match_pct) = (0,0,0); |
my $classlist = &Apache::loncoursedata::get_classlist($cdom,$cname); |
my $classlist = &Apache::loncoursedata::get_classlist($cdom,$cname); |
my %idmap = &username_to_idmap($classlist); |
my %idmap = &username_to_idmap($classlist); |
foreach my $key (keys(%idmap)) { |
foreach my $key (keys(%idmap)) { |
Line 8897 sub validate_uploaded_scantron_file {
|
Line 8932 sub validate_uploaded_scantron_file {
|
if (($max_match_format eq '') || ($percent_match > $max_match_pct)) { |
if (($max_match_format eq '') || ($percent_match > $max_match_pct)) { |
$max_match_pct = $percent_match; |
$max_match_pct = $percent_match; |
$max_match_format = $key; |
$max_match_format = $key; |
|
$found_match_count = $counts{$key}{'found'}; |
$max_match_count = $counts{$key}{'total'}; |
$max_match_count = $counts{$key}{'total'}; |
} |
} |
} |
} |
Line 8915 sub validate_uploaded_scantron_file {
|
Line 8951 sub validate_uploaded_scantron_file {
|
} |
} |
} |
} |
my $showpct = sprintf("%.0f",$max_match_pct).'%'; |
my $showpct = sprintf("%.0f",$max_match_pct).'%'; |
$output .= '<br />'.&mt('Comparison of student IDs in the uploaded file with the course roster found matches for [_1] of the [_2] entries in the file (for the format defined for [_3]).','<b>'.$showpct.'</b>','<b>'.$max_match_count.'</b>',$format_descs). |
$output .= '<br />'; |
'<br />'.&mt('A low percentage of matches results from one of the following:').'<ul>'. |
if ($found_match_count == $max_match_count) { |
'<li>'.&mt('The file was uploaded to the wrong course').'</li>'. |
# 100% matching entries |
'<li>'.&mt('The data are not in the format expected for the domain: [_1]', |
$output .= &Apache::lonhtmlcommon::confirm_success( |
'<i>'.$cdom.'</i>').'</li>'. |
&mt('Comparison of student IDs: [_1] matching ([quant,_2,entry,entries])', |
'<li>'.&mt('Students did not bubble their IDs, or mis-bubbled them').'</li>'. |
'<b>'.$showpct.'</b>',$found_match_count)).'<br />'. |
'<li>'.&mt('The course roster is not up to date').'</li>'. |
&mt('Comparison of student IDs in the uploaded file with'. |
'</ul>'; |
' the course roster found matches for [_1] of the [_2] entries'. |
|
' in the file (for the format defined for [_3]).', |
|
'<b>'.$showpct.'</b>','<b>'.$max_match_count.'</b>',$format_descs); |
|
} else { |
|
# Not all entries matching? -> Show warning and additional info |
|
$output .= |
|
&Apache::lonhtmlcommon::confirm_success( |
|
&mt('Comparison of student IDs: [_1] matching ([_2]/[quant,_3,entry,entries])', |
|
'<b>'.$showpct.'</b>',$found_match_count,$max_match_count).'<br />'. |
|
&mt('Not all entries could be matched!'),1).'<br />'. |
|
&mt('Comparison of student IDs in the uploaded file with'. |
|
' the course roster found matches for [_1] of the [_2] entries'. |
|
' in the file (for the format defined for [_3]).', |
|
'<b>'.$showpct.'</b>','<b>'.$max_match_count.'</b>',$format_descs). |
|
'<p class="LC_info">'. |
|
&mt('A low percentage of matches results from one of the following:'). |
|
'</p><ul>'. |
|
'<li>'.&mt('The file was uploaded to the wrong course.').'</li>'. |
|
'<li>'.&mt('The data is not in the format expected for the domain: [_1]', |
|
'<i>'.$cdom.'</i>').'</li>'. |
|
'<li>'.&mt('Students did not bubble their IDs, or mis-bubbled them').'</li>'. |
|
'<li>'.&mt('The course roster is not up to date.').'</li>'. |
|
'</ul>'; |
|
} |
} |
} |
} else { |
} else { |
$output = '<span class="LC_warning">'.&mt('Uploaded file contained no data').'</span>'; |
$output = '<p class="LC_warning">'.&mt('Uploaded file contained no data').'</p>'; |
} |
} |
return $output; |
return $output; |
} |
} |
Line 9006 sub checkscantron_results {
|
Line 9065 sub checkscantron_results {
|
%grader_randomlists_by_symb,%orderedforcode); |
%grader_randomlists_by_symb,%orderedforcode); |
if (ref($map)) { |
if (ref($map)) { |
$randomorder=$map->randomorder(); |
$randomorder=$map->randomorder(); |
|
$randompick=$map->randompick(); |
} |
} |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my $nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
my $nav_error = &get_master_seq(\@resources,\@master_seq,\%symb_to_resource); |
Line 9025 sub checkscantron_results {
|
Line 9085 sub checkscantron_results {
|
|
|
my $count=&get_todo_count($scanlines,$scan_data); |
my $count=&get_todo_count($scanlines,$scan_data); |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$count); |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$count); |
my ($username,$domain,$started,%ordered); |
my ($username,$domain,$started); |
&scantron_get_maxbubble(\$nav_error,\%scantron_config); # Need the bubble lines array to parse. |
&scantron_get_maxbubble(\$nav_error,\%scantron_config); # Need the bubble lines array to parse. |
if ($nav_error) { |
if ($nav_error) { |
$r->print(&navmap_errormsg()); |
$r->print(&navmap_errormsg()); |
Line 9917 sub process_clicker_file {
|
Line 9977 sub process_clicker_file {
|
$number++; |
$number++; |
} |
} |
$result.="</p>\n"; |
$result.="</p>\n"; |
if ($number==0) { |
if ($number==0) { |
$result.='<span class="LC_error">'.&mt('No IDs found to determine correct answer').'</span>'; |
$result .= |
return $result.&show_grading_menu_form($symb); |
&Apache::lonhtmlcommon::confirm_success( |
} |
&mt('No IDs found to determine correct answer'),1); |
|
return $result,.&show_grading_menu_form($symb); |
|
} |
} |
} |
if (length($env{'form.upfile'}) < 2) { |
if (length($env{'form.upfile'}) < 2) { |
$result.=&mt('[_1] Error: [_2] The file you attempted to upload, [_3] contained no information. Please check that you entered the correct filename.', |
$result .= |
'<span class="LC_error">', |
&Apache::lonhtmlcommon::confirm_success( |
'</span>', |
&mt('The file: [_1] you attempted to upload contained no information. Please check that you entered the correct filename.', |
'<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>'); |
'<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>'),1); |
return $result.&show_grading_menu_form($symb); |
return $result.&show_grading_menu_form($symb); |
} |
} |
|
|
Line 10018 ENDHEADER
|
Line 10080 ENDHEADER
|
&mt('Found [_1] registered and [_2] unregistered clickers.',$student_count,$unknown_count); |
&mt('Found [_1] registered and [_2] unregistered clickers.',$student_count,$unknown_count); |
if (($env{'form.gradingmechanism'} ne 'attendance') && ($env{'form.gradingmechanism'} ne 'given')) { |
if (($env{'form.gradingmechanism'} ne 'attendance') && ($env{'form.gradingmechanism'} ne 'given')) { |
if ($correct_count==0) { |
if ($correct_count==0) { |
$errormsg.="Found no correct answers answers for grading!"; |
$errormsg.="Found no correct answers for grading!"; |
} elsif ($correct_count>1) { |
} elsif ($correct_count>1) { |
$result.='<br /><span class="LC_warning">'.&mt("Found [_1] entries for grading!",$correct_count).'</span>'; |
$result.='<br /><span class="LC_warning">'.&mt("Found [_1] entries for grading!",$correct_count).'</span>'; |
} |
} |
Line 10193 sub assign_clicker_grades {
|
Line 10255 sub assign_clicker_grades {
|
if ($user) { |
if ($user) { |
if ($users{$user}) { |
if ($users{$user}) { |
$result.='<br /><span class="LC_warning">'. |
$result.='<br /><span class="LC_warning">'. |
&mt("More than one entry found for <tt>[_1]</tt>!",$user). |
&mt('More than one entry found for [_1]!','<tt>'.$user.'</tt>'). |
'</span><br />'; |
'</span><br />'; |
} |
} |
$users{$user}=1; |
$users{$user}=1; |