version 1.217, 2004/09/28 20:35:08
|
version 1.247, 2005/02/17 08:58:16
|
Line 91 sub get_symb_and_url {
|
Line 91 sub get_symb_and_url {
|
return ($symb,$url); |
return ($symb,$url); |
} |
} |
|
|
# --- Retrieve the fullname for a user. Return lastname, first middle --- |
|
# --- Generation is attached next to the lastname if it exists. --- |
|
sub get_fullname { |
|
my ($uname,$udom) = @_; |
|
my %name=&Apache::lonnet::get('environment', ['lastname','generation', |
|
'firstname','middlename'], |
|
$udom,$uname); |
|
my $fullname; |
|
my ($tmp) = keys(%name); |
|
if ($tmp !~ /^(con_lost|error|no_such_host)/i) { |
|
$fullname = &Apache::loncoursedata::ProcessFullName |
|
(@name{qw/lastname generation firstname middlename/}); |
|
} else { |
|
&Apache::lonnet::logthis('grades.pm: no name data for '.$uname. |
|
'@'.$udom.':'.$tmp); |
|
} |
|
return $fullname; |
|
} |
|
|
|
#--- Format fullname, username:domain if different for display |
#--- Format fullname, username:domain if different for display |
#--- Use anywhere where the student names are listed |
#--- Use anywhere where the student names are listed |
sub nameUserString { |
sub nameUserString { |
Line 991 sub sub_page_kw_js {
|
Line 972 sub sub_page_kw_js {
|
my $request = shift; |
my $request = shift; |
my $iconpath = $request->dir_config('lonIconsURL'); |
my $iconpath = $request->dir_config('lonIconsURL'); |
&commonJSfunctions($request); |
&commonJSfunctions($request); |
|
my $docopen=&Apache::lonhtmlcommon::javascript_docopen(); |
|
$docopen=~s/^document\.//; |
$request->print(<<SUBJAVASCRIPT); |
$request->print(<<SUBJAVASCRIPT); |
<script type="text/javascript" language="javascript"> |
<script type="text/javascript" language="javascript"> |
|
|
Line 1103 sub sub_page_kw_js {
|
Line 1086 sub sub_page_kw_js {
|
pWin = window.open('', 'MessageCenter', 'resizable=yes,toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height); |
pWin = window.open('', 'MessageCenter', 'resizable=yes,toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height); |
pWin.focus(); |
pWin.focus(); |
pDoc = pWin.document; |
pDoc = pWin.document; |
pDoc.open('text/html','replace'); |
pDoc.$docopen; |
pDoc.write("<html><head>"); |
pDoc.write("<html><head>"); |
pDoc.write("<title>Message Central</title>"); |
pDoc.write("<title>Message Central</title>"); |
|
|
Line 1234 sub sub_page_kw_js {
|
Line 1217 sub sub_page_kw_js {
|
hwdWin = window.open('', 'KeywordHighlightCentral', 'resizeable=yes,toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos); |
hwdWin = window.open('', 'KeywordHighlightCentral', 'resizeable=yes,toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos); |
hwdWin.focus(); |
hwdWin.focus(); |
var hDoc = hwdWin.document; |
var hDoc = hwdWin.document; |
hDoc.open('text/html','replace'); |
hDoc.$docopen; |
hDoc.write("<html><head>"); |
hDoc.write("<html><head>"); |
hDoc.write("<title>Highlight Central</title>"); |
hDoc.write("<title>Highlight Central</title>"); |
|
|
Line 1403 sub submission {
|
Line 1386 sub submission {
|
my ($uname,$udom) = ($ENV{'form.student'},$ENV{'form.userdom'}); |
my ($uname,$udom) = ($ENV{'form.student'},$ENV{'form.userdom'}); |
$udom = ($udom eq '' ? $ENV{'user.domain'} : $udom); #has form.userdom changed for a student? |
$udom = ($udom eq '' ? $ENV{'user.domain'} : $udom); #has form.userdom changed for a student? |
my $usec = &Apache::lonnet::getsection($udom,$uname,$ENV{'request.course.id'}); |
my $usec = &Apache::lonnet::getsection($udom,$uname,$ENV{'request.course.id'}); |
$ENV{'form.fullname'} = &get_fullname ($uname,$udom) if $ENV{'form.fullname'} eq ''; |
$ENV{'form.fullname'} = &Apache::loncommon::plainname($uname,$udom,'lastname') if $ENV{'form.fullname'} eq ''; |
|
|
my $symb=($ENV{'form.symb'} ne '' ? $ENV{'form.symb'} : (&Apache::lonnet::symbread($url))); |
my $symb=($ENV{'form.symb'} ne '' ? $ENV{'form.symb'} : (&Apache::lonnet::symbread($url))); |
if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; } |
if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; } |
|
|
if (!&canview($usec)) { |
if (!&canview($usec)) { |
$request->print('<font color="red">Unable to view requested student.('. |
$request->print('<font color="red">Unable to view requested student.('. |
$uname.$udom.$usec.$ENV{'request.course.id'}.')</font>'); |
$uname.'@'.$udom.' in section '.$usec.' in course id '. |
|
$ENV{'request.course.id'}.')</font>'); |
$request->print(&show_grading_menu_form($symb,$url)); |
$request->print(&show_grading_menu_form($symb,$url)); |
return; |
return; |
} |
} |
Line 1687 KEYWORDS
|
Line 1671 KEYWORDS
|
$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part:</b> '. |
$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part:</b> '. |
$display_part.' <font color="#999999">( ID '.$respid. |
$display_part.' <font color="#999999">( ID '.$respid. |
' )</font> '; |
' )</font> '; |
|
my @files; |
|
if ($record{"resource.$partid.$respid.portfiles"}) { |
|
my $file_url = '/uploaded/'.$udom.'/'.$uname.'/portfolio'; |
|
foreach my $file (split(',',$record{"resource.$partid.$respid.portfiles"})) { |
|
push(@files,$file_url.$file); |
|
|
|
&Apache::lonnet::logthis("found a portfolio file".$record{"resource.$partid.$respid.portfiles"}); |
|
&Apache::lonnet::logthis("uploaded URL file".$record{"resource.$partid.$respid.uploadedurl"}); |
|
} |
|
} |
if ($record{"resource.$partid.$respid.uploadedurl"}) { |
if ($record{"resource.$partid.$respid.uploadedurl"}) { |
&Apache::lonnet::allowuploaded('/adm/grades', |
push(@files,$record{"resource.$partid.$respid.uploadedurl"}); |
$record{"resource.$partid.$respid.uploadedurl"}); |
} |
$lastsubonly.='<a href="'.$record{"resource.$partid.$respid.uploadedurl"}.'" target="lonGRDs"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> <font color="red" size="1">Like all files provided by users, this file may contain virusses</font><br />'; |
if (@files) { |
|
$lastsubonly.='<br /><font color="red" size="1">Like all files provided by users, this file may contain virusses</font><br />'; |
|
foreach my $file (@files) { |
|
&Apache::lonnet::allowuploaded('/adm/grades',$file); |
|
$lastsubonly.='<br /><a href="'.$file.'" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border=0"> '.$file.'</a>'; |
|
} |
|
$lastsubonly.='<br />'; |
} |
} |
$lastsubonly.='<b>Submitted Answer: </b>'. |
$lastsubonly.='<b>Submitted Answer: </b>'. |
&cleanRecord($subval,$responsetype,$symb,$partid, |
&cleanRecord($subval,$responsetype,$symb,$partid, |
Line 2404 sub viewgrades {
|
Line 2404 sub viewgrades {
|
my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'1'); |
my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'1'); |
my $ctr = 0; |
my $ctr = 0; |
foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
my $uname = $_; |
|
$uname=~s/:/_/; |
|
$result.='<input type="hidden" name="ctr'.$ctr.'" value="'.$uname.'" />'."\n"; |
|
$ctr++; |
$ctr++; |
$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'}, |
$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'}, |
$_,$$fullname{$_},\@parts,\%weight,$ctr); |
$_,$$fullname{$_},\@parts,\%weight,$ctr); |
Line 2430 sub viewstudentgrade {
|
Line 2427 sub viewstudentgrade {
|
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
$student=~s/:/_/; |
$student=~s/:/_/; |
my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname); |
my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname); |
my $result='<tr bgcolor="#ffffdd"><td align="right">'.$ctr.' </td><td> '. |
my $result='<tr bgcolor="#ffffdd"><td align="right">'. |
|
'<input type="hidden" name="ctr'.($ctr-1).'" value="'.$student.'" />'. |
|
"\n".$ctr.' </td><td> '. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'\')"; TARGET=_self>'.$fullname.'</a> '. |
'\')"; TARGET=_self>'.$fullname.'</a> '. |
'<font color="#999999">('.$uname.($ENV{'user.domain'} eq $udom ? '' : ':'.$udom).')</font></td>'."\n"; |
'<font color="#999999">('.$uname.($ENV{'user.domain'} eq $udom ? '' : ':'.$udom).')</font></td>'."\n"; |
foreach my $apart (@$parts) { |
foreach my $apart (@$parts) { |
my ($part,$type) = &split_part_type($apart); |
my ($part,$type) = &split_part_type($apart); |
my $score=$record{"resource.$part.$type"}; |
my $score=$record{"resource.$part.$type"}; |
|
$result.='<td align="middle">'; |
if ($type eq 'awarded') { |
if ($type eq 'awarded') { |
my $pts = $score eq '' ? '' : $score*$$weight{$part}; |
my $pts = $score eq '' ? '' : $score*$$weight{$part}; |
$result.='<input type="hidden" name="'. |
$result.='<input type="hidden" name="'. |
'GD_'.$student.'_'.$part.'_awarded_s" value="'.$pts.'" />'."\n"; |
'GD_'.$student.'_'.$part.'_awarded_s" value="'.$pts.'" />'."\n"; |
$result.='<td align="middle"><input type="text" name="'. |
$result.='<input type="text" name="'. |
'GD_'.$student.'_'.$part.'_awarded" '. |
'GD_'.$student.'_'.$part.'_awarded" '. |
'onChange="javascript:changeSelect(\''.$part.'\',\''.$student. |
'onChange="javascript:changeSelect(\''.$part.'\',\''.$student. |
'\')" value="'.$pts.'" size="4" /></td>'."\n"; |
'\')" value="'.$pts.'" size="4" /></td>'."\n"; |
Line 2450 sub viewstudentgrade {
|
Line 2450 sub viewstudentgrade {
|
$status = 'nothing' if ($status eq ''); |
$status = 'nothing' if ($status eq ''); |
$result.='<input type="hidden" name="'.'GD_'.$student.'_'. |
$result.='<input type="hidden" name="'.'GD_'.$student.'_'. |
$part.'_solved_s" value="'.$status.'" />'."\n"; |
$part.'_solved_s" value="'.$status.'" />'."\n"; |
$result.='<td align="middle"> <select name="'. |
$result.=' <select name="'. |
'GD_'.$student.'_'.$part.'_solved" '. |
'GD_'.$student.'_'.$part.'_solved" '. |
'onChange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n"; |
'onChange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n"; |
$result.= (($status eq 'excused') ? '<option> </option><option selected="on">excused</option>' |
$result.= (($status eq 'excused') ? '<option> </option><option selected="on">excused</option>' |
Line 2461 sub viewstudentgrade {
|
Line 2461 sub viewstudentgrade {
|
$result.='<input type="hidden" name="'. |
$result.='<input type="hidden" name="'. |
'GD_'.$student.'_'.$part.'_'.$type.'_s" value="'.$score.'" />'. |
'GD_'.$student.'_'.$part.'_'.$type.'_s" value="'.$score.'" />'. |
"\n"; |
"\n"; |
$result.='<td align="middle"><input type="text" name="'. |
$result.='<input type="text" name="'. |
'GD_'.$student.'_'.$part.'_'.$type.'" '. |
'GD_'.$student.'_'.$part.'_'.$type.'" '. |
'value="'.$score.'" size="4" /></td>'."\n"; |
'value="'.$score.'" size="4" /></td>'."\n"; |
} |
} |
Line 2651 sub split_part_type {
|
Line 2651 sub split_part_type {
|
# |
# |
#--- Javascript to handle csv upload |
#--- Javascript to handle csv upload |
sub csvupload_javascript_reverse_associate { |
sub csvupload_javascript_reverse_associate { |
|
my $error1=&mt('You need to specify the username or ID'); |
|
my $error2=&mt('You need to specify at least one grading field'); |
return(<<ENDPICK); |
return(<<ENDPICK); |
function verify(vf) { |
function verify(vf) { |
var foundsomething=0; |
var foundsomething=0; |
var founduname=0; |
var founduname=0; |
var founddomain=0; |
var foundID=0; |
for (i=0;i<=vf.nfields.value;i++) { |
for (i=0;i<=vf.nfields.value;i++) { |
tw=eval('vf.f'+i+'.selectedIndex'); |
tw=eval('vf.f'+i+'.selectedIndex'); |
if (i==0 && tw!=0) { founduname=1; } |
if (i==0 && tw!=0) { foundID=1; } |
if (i==1 && tw!=0) { founddomain=1; } |
if (i==1 && tw!=0) { founduname=1; } |
if (i!=0 && i!=1 && tw!=0) { foundsomething=1; } |
if (i!=0 && i!=1 && i!=2 && tw!=0) { foundsomething=1; } |
} |
} |
if (founduname==0 || founddomain==0) { |
if (founduname==0 && foundID==0) { |
alert('You need to specify at both the username and domain'); |
alert('$error1'); |
return; |
return; |
} |
} |
if (foundsomething==0) { |
if (foundsomething==0) { |
alert('You need to specify at least one grading field'); |
alert('$error2'); |
return; |
return; |
} |
} |
vf.submit(); |
vf.submit(); |
} |
} |
Line 2689 ENDPICK
|
Line 2691 ENDPICK
|
} |
} |
|
|
sub csvupload_javascript_forward_associate { |
sub csvupload_javascript_forward_associate { |
|
my $error1=&mt('You need to specify the username or ID'); |
|
my $error2=&mt('You need to specify at least one grading field'); |
return(<<ENDPICK); |
return(<<ENDPICK); |
function verify(vf) { |
function verify(vf) { |
var foundsomething=0; |
var foundsomething=0; |
var founduname=0; |
var founduname=0; |
var founddomain=0; |
var foundID=0; |
for (i=0;i<=vf.nfields.value;i++) { |
for (i=0;i<=vf.nfields.value;i++) { |
tw=eval('vf.f'+i+'.selectedIndex'); |
tw=eval('vf.f'+i+'.selectedIndex'); |
if (tw==1) { founduname=1; } |
if (tw==1) { foundID=1; } |
if (tw==2) { founddomain=1; } |
if (tw==2) { founduname=1; } |
if (tw>2) { foundsomething=1; } |
if (tw>3) { foundsomething=1; } |
} |
} |
if (founduname==0 || founddomain==0) { |
if (founduname==0 && foundID==0) { |
alert('You need to specify at both the username and domain'); |
alert('$error1'); |
return; |
return; |
} |
} |
if (foundsomething==0) { |
if (foundsomething==0) { |
alert('You need to specify at least one grading field'); |
alert('$error2'); |
return; |
return; |
} |
} |
vf.submit(); |
vf.submit(); |
} |
} |
Line 2733 sub csvuploadmap_header {
|
Line 2737 sub csvuploadmap_header {
|
} |
} |
|
|
my ($result) = &showResourceInfo($url,$ENV{'form.probTitle'}); |
my ($result) = &showResourceInfo($url,$ENV{'form.probTitle'}); |
|
my $checked=(($ENV{'form.noFirstLine'})?' checked="checked"':''); |
|
my $ignore=&mt('Ignore First Line'); |
$request->print(<<ENDPICK); |
$request->print(<<ENDPICK); |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload"> |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload"> |
<h3><font color="#339933">Uploading Class Grades</font></h3> |
<h3><font color="#339933">Uploading Class Grades</font></h3> |
Line 2744 Total number of records found in file: $
|
Line 2749 Total number of records found in file: $
|
Enter as many fields as you can. The system will inform you and bring you back |
Enter as many fields as you can. The system will inform you and bring you back |
to this page if the data selected is insufficient to run your class.<hr /> |
to this page if the data selected is insufficient to run your class.<hr /> |
<input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" /> |
<input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" /> |
|
<label><input type="checkbox" name="noFirstLine" $checked />$ignore</label> |
<input type="hidden" name="associate" value="" /> |
<input type="hidden" name="associate" value="" /> |
<input type="hidden" name="phase" value="three" /> |
<input type="hidden" name="phase" value="three" /> |
<input type="hidden" name="datatoken" value="$datatoken" /> |
<input type="hidden" name="datatoken" value="$datatoken" /> |
Line 2755 to this page if the data selected is ins
|
Line 2761 to this page if the data selected is ins
|
<input type="hidden" name="url" value="$url" /> |
<input type="hidden" name="url" value="$url" /> |
<input type="hidden" name="saveState" value="$ENV{'form.saveState'}" /> |
<input type="hidden" name="saveState" value="$ENV{'form.saveState'}" /> |
<input type="hidden" name="probTitle" value="$ENV{'form.probTitle'}" /> |
<input type="hidden" name="probTitle" value="$ENV{'form.probTitle'}" /> |
<input type="hidden" name="command" value="csvuploadassign" /> |
<input type="hidden" name="command" value="csvuploadoptions" /> |
<hr /> |
<hr /> |
<script type="text/javascript" language="Javascript"> |
<script type="text/javascript" language="Javascript"> |
$javascript |
$javascript |
Line 2768 ENDPICK
|
Line 2774 ENDPICK
|
sub csvupload_fields { |
sub csvupload_fields { |
my ($url,$symb) = @_; |
my ($url,$symb) = @_; |
my (@parts) = &getpartlist($url,$symb); |
my (@parts) = &getpartlist($url,$symb); |
my @fields=(['username','Student Username'],['domain','Student Domain']); |
my @fields=(['ID','Student ID'], |
|
['username','Student Username'], |
|
['domain','Student Domain']); |
foreach my $part (sort(@parts)) { |
foreach my $part (sort(@parts)) { |
my @datum; |
my @datum; |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
my $name=$part; |
my $name=$part; |
if (!$display) { $display = $name; } |
if (!$display) { $display = $name; } |
@datum=($name,$display); |
@datum=($name,$display); |
|
if ($name=~/^stores_(.*)_awarded/) { |
|
push(@fields,['stores_'.$1.'_points',"Points [Part: $1]"]); |
|
} |
push(@fields,\@datum); |
push(@fields,\@datum); |
} |
} |
return (@fields); |
return (@fields); |
Line 2815 CSVFORMJS
|
Line 2826 CSVFORMJS
|
'.</b></td></tr>'."\n"; |
'.</b></td></tr>'."\n"; |
$result.='<tr bgcolor=#ffffe6><td>'."\n"; |
$result.='<tr bgcolor=#ffffe6><td>'."\n"; |
my $upfile_select=&Apache::loncommon::upfile_select_html(); |
my $upfile_select=&Apache::loncommon::upfile_select_html(); |
|
my $ignore=&mt('Ignore First Line'); |
$result.=<<ENDUPFORM; |
$result.=<<ENDUPFORM; |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload"> |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload"> |
<input type="hidden" name="symb" value="$symb" /> |
<input type="hidden" name="symb" value="$symb" /> |
Line 2824 CSVFORMJS
|
Line 2836 CSVFORMJS
|
<input type="hidden" name="saveState" value="$ENV{'form.saveState'}" /> |
<input type="hidden" name="saveState" value="$ENV{'form.saveState'}" /> |
$upfile_select |
$upfile_select |
<br /><input type="button" onClick="javascript:checkUpload(this.form);" value="Upload Scores" /> |
<br /><input type="button" onClick="javascript:checkUpload(this.form);" value="Upload Scores" /> |
|
<label><input type="checkbox" name="noFirstLine" />$ignore</lable> |
</form> |
</form> |
ENDUPFORM |
ENDUPFORM |
$result.='</td></tr></table>'."\n"; |
$result.='</td></tr></table>'."\n"; |
Line 2847 sub csvuploadmap {
|
Line 2859 sub csvuploadmap {
|
&Apache::loncommon::load_tmp_file($request); |
&Apache::loncommon::load_tmp_file($request); |
} |
} |
my @records=&Apache::loncommon::upfile_record_sep(); |
my @records=&Apache::loncommon::upfile_record_sep(); |
|
if ($ENV{'form.noFirstLine'}) { shift(@records); } |
&csvuploadmap_header($request,$symb,$url,$datatoken,$#records+1); |
&csvuploadmap_header($request,$symb,$url,$datatoken,$#records+1); |
my ($i,$keyfields); |
my ($i,$keyfields); |
if (@records) { |
if (@records) { |
Line 2872 sub csvuploadmap {
|
Line 2885 sub csvuploadmap {
|
return ''; |
return ''; |
} |
} |
|
|
sub csvuploadassign { |
sub csvuploadoptions { |
my ($request)= @_; |
my ($request)= @_; |
my ($symb,$url)=&get_symb_and_url($request); |
my ($symb,$url)=&get_symb_and_url($request); |
if (!$symb) {return '';} |
my $checked=(($ENV{'form.noFirstLine'})?'1':'0'); |
&Apache::loncommon::load_tmp_file($request); |
my $ignore=&mt('Ignore First Line'); |
my @gradedata = &Apache::loncommon::upfile_record_sep(); |
$request->print(<<ENDPICK); |
|
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload"> |
|
<h3><font color="#339933">Uploading Class Grade Options</font></h3> |
|
<input type="hidden" name="command" value="csvuploadassign" /> |
|
<input type="submit" value="Assign Grades" /><br /> |
|
<p> |
|
<label> |
|
<input type="checkbox" name="show_full_results" /> |
|
Show a table of all changes |
|
</label> |
|
</p> |
|
<p> |
|
<label> |
|
<input type="checkbox" name="overwite_scores" checked="checked" /> |
|
Overwrite any existing score |
|
</label> |
|
</p> |
|
ENDPICK |
|
my %fields=&get_fields(); |
|
if (!defined($fields{'domain'})) { |
|
my $domform = &Apache::loncommon::select_dom_form($ENV{'request.role.domain'},'default_domain'); |
|
$request->print("\n<p> Users are in domain: ".$domform."</p>\n"); |
|
} |
|
foreach my $key (sort(keys(%ENV))) { |
|
if ($key !~ /^form\.(.*)$/) { next; } |
|
my $cleankey=$1; |
|
if ($cleankey eq 'command') { next; } |
|
$request->print('<input type="hidden" name="'.$cleankey. |
|
'" value="'.$ENV{$key}.'" />'."\n"); |
|
} |
|
# FIXME do a check for any duplicated user ids... |
|
# FIXME do a check for any invalid user ids?... |
|
$request->print("<hr /></form>\n"); |
|
$request->print(&show_grading_menu_form($symb,$url)); |
|
return ''; |
|
} |
|
|
|
sub get_fields { |
|
my %fields; |
my @keyfields = split(/\,/,$ENV{'form.keyfields'}); |
my @keyfields = split(/\,/,$ENV{'form.keyfields'}); |
my %fields=(); |
|
for (my $i=0; $i<=$ENV{'form.nfields'}; $i++) { |
for (my $i=0; $i<=$ENV{'form.nfields'}; $i++) { |
if ($ENV{'form.upfile_associate'} eq 'reverse') { |
if ($ENV{'form.upfile_associate'} eq 'reverse') { |
if ($ENV{'form.f'.$i} ne 'none') { |
if ($ENV{'form.f'.$i} ne 'none') { |
Line 2891 sub csvuploadassign {
|
Line 2941 sub csvuploadassign {
|
} |
} |
} |
} |
} |
} |
|
return %fields; |
|
} |
|
|
|
sub csvuploadassign { |
|
my ($request)= @_; |
|
my ($symb,$url)=&get_symb_and_url($request); |
|
if (!$symb) {return '';} |
|
&Apache::loncommon::load_tmp_file($request); |
|
my @gradedata = &Apache::loncommon::upfile_record_sep(); |
|
if ($ENV{'form.noFirstLine'}) { shift(@gradedata); } |
|
my %fields=&get_fields(); |
$request->print('<h3>Assigning Grades</h3>'); |
$request->print('<h3>Assigning Grades</h3>'); |
my $courseid=$ENV{'request.course.id'}; |
my $courseid=$ENV{'request.course.id'}; |
my ($classlist) = &getclasslist('all',0); |
my ($classlist) = &getclasslist('all',0); |
Line 2899 sub csvuploadassign {
|
Line 2960 sub csvuploadassign {
|
my $countdone=0; |
my $countdone=0; |
foreach my $grade (@gradedata) { |
foreach my $grade (@gradedata) { |
my %entries=&Apache::loncommon::record_sep($grade); |
my %entries=&Apache::loncommon::record_sep($grade); |
|
my $domain; |
|
if ($entries{$fields{'domain'}}) { |
|
$domain=$entries{$fields{'domain'}}; |
|
} else { |
|
$domain=$ENV{'form.default_domain'}; |
|
} |
|
$domain=~s/\s//g; |
my $username=$entries{$fields{'username'}}; |
my $username=$entries{$fields{'username'}}; |
$username=~s/\s//g; |
$username=~s/\s//g; |
my $domain=$entries{$fields{'domain'}}; |
if (!$username) { |
$domain=~s/\s//g; |
my $id=$entries{$fields{'ID'}}; |
|
$id=~s/\s//g; |
|
my %ids=&Apache::lonnet::idget($domain,$id); |
|
$username=$ids{$id}; |
|
} |
if (!exists($$classlist{"$username:$domain"})) { |
if (!exists($$classlist{"$username:$domain"})) { |
push(@skipped,"$username:$domain"); |
my $id=$entries{$fields{'ID'}}; |
|
$id=~s/\s//g; |
|
if ($id) { |
|
push(@skipped,"$id:$domain"); |
|
} else { |
|
push(@skipped,"$username:$domain"); |
|
} |
next; |
next; |
} |
} |
my $usec=$classlist->{"$username:$domain"}[5]; |
my $usec=$classlist->{"$username:$domain"}[5]; |
Line 2912 sub csvuploadassign {
|
Line 2990 sub csvuploadassign {
|
push(@notallowed,"$username:$domain"); |
push(@notallowed,"$username:$domain"); |
next; |
next; |
} |
} |
|
my %points; |
my %grades; |
my %grades; |
foreach my $dest (keys(%fields)) { |
foreach my $dest (keys(%fields)) { |
if ($dest eq 'username' || $dest eq 'domain') { next; } |
if ($dest eq 'ID' || $dest eq 'username' || |
if ($entries{$fields{$dest}} eq '') { next; } |
$dest eq 'domain') { next; } |
my $store_key=$dest; |
if ($entries{$fields{$dest}} =~ /^\s*$/) { next; } |
$store_key=~s/^stores/resource/; |
if ($dest=~/stores_(.*)_points/) { |
$store_key=~s/_/\./g; |
my $part=$1; |
$grades{$store_key}=$entries{$fields{$dest}}; |
my $wgt =&Apache::lonnet::EXT('resource.'.$part.'.weight', |
|
$symb,$domain,$username); |
|
$entries{$fields{$dest}}=~s/\s//g; |
|
my $pcr=$entries{$fields{$dest}} / $wgt; |
|
my $award='correct_by_override'; |
|
$grades{"resource.$part.awarded"}=$pcr; |
|
$grades{"resource.$part.solved"}=$award; |
|
$points{$part}=1; |
|
} else { |
|
if ($dest=~/stores_(.*)_awarded/) { if ($points{$1}) {next;} } |
|
if ($dest=~/stores_(.*)_solved/) { if ($points{$1}) {next;} } |
|
my $store_key=$dest; |
|
$store_key=~s/^stores/resource/; |
|
$store_key=~s/_/\./g; |
|
$grades{$store_key}=$entries{$fields{$dest}}; |
|
} |
} |
} |
|
if (! %grades) { push(@skipped,"$username:$domain no data to store"); } |
$grades{"resource.regrader"}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$grades{"resource.regrader"}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
|
# &Apache::lonnet::logthis(" storing ".(join('-',%grades))); |
&Apache::lonnet::cstore(\%grades,$symb,$ENV{'request.course.id'}, |
&Apache::lonnet::cstore(\%grades,$symb,$ENV{'request.course.id'}, |
$domain,$username); |
$domain,$username); |
$request->print('.'); |
$request->print('.'); |
Line 3060 sub getSymbMap {
|
Line 3156 sub getSymbMap {
|
my $minder = 0; |
my $minder = 0; |
|
|
# Gather every sequence that has problems. |
# Gather every sequence that has problems. |
my @sequences = $navmap->retrieveResources(undef, sub { shift->is_map(); }, 1); |
my @sequences = $navmap->retrieveResources(undef, sub { shift->is_map(); }, |
|
1,0,1); |
for my $sequence ($navmap->getById('0.0'), @sequences) { |
for my $sequence ($navmap->getById('0.0'), @sequences) { |
if ($navmap->hasResource($sequence, sub { shift->is_problem(); }, 0) ) { |
if ($navmap->hasResource($sequence, sub { shift->is_problem(); }, 0) ) { |
my $title = $minder.'.'.$sequence->compTitle(); |
my $title = $minder.'.'.$sequence->compTitle(); |
Line 3069 sub getSymbMap {
|
Line 3166 sub getSymbMap {
|
$minder++; |
$minder++; |
} |
} |
} |
} |
|
|
$navmap->untieHashes(); |
|
return \@titles,\%symbx; |
return \@titles,\%symbx; |
} |
} |
|
|
Line 3141 sub displayPage {
|
Line 3236 sub displayPage {
|
if($curRes == $iterator->BEGIN_MAP) { $depth++; } |
if($curRes == $iterator->BEGIN_MAP) { $depth++; } |
if($curRes == $iterator->END_MAP) { $depth--; } |
if($curRes == $iterator->END_MAP) { $depth--; } |
|
|
if (ref($curRes) && $curRes->is_problem()) { |
if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { |
my $parts = $curRes->parts(); |
my $parts = $curRes->parts(); |
my $title = $curRes->compTitle(); |
my $title = $curRes->compTitle(); |
my $symbx = $curRes->symb(); |
my $symbx = $curRes->symb(); |
Line 3203 sub displayPage {
|
Line 3298 sub displayPage {
|
$curRes = $iterator->next(); |
$curRes = $iterator->next(); |
} |
} |
|
|
$navmap->untieHashes(); |
|
|
|
$studentTable.='</td></tr></table></td></tr></table>'."\n". |
$studentTable.='</td></tr></table></td></tr></table>'."\n". |
'<input type="button" value="Save" '. |
'<input type="button" value="Save" '. |
'onClick="javascript:checkSubmitPage(this.form,'.$question.');" TARGET=_self />'. |
'onClick="javascript:checkSubmitPage(this.form,'.$question.');" TARGET=_self />'. |
Line 3217 sub displayPage {
|
Line 3310 sub displayPage {
|
|
|
sub displaySubByDates { |
sub displaySubByDates { |
my ($symb,$record,$parts,$responseType,$checkIcon,$uname,$udom) = @_; |
my ($symb,$record,$parts,$responseType,$checkIcon,$uname,$udom) = @_; |
|
my $isCODE=0; |
|
if (exists($record->{'resource.CODE'})) { $isCODE=1; } |
my $studentTable='<table border="0" width="100%"><tr><td bgcolor="#777777">'. |
my $studentTable='<table border="0" width="100%"><tr><td bgcolor="#777777">'. |
'<table border="0" width="100%"><tr bgcolor="#e6ffff">'. |
'<table border="0" width="100%"><tr bgcolor="#e6ffff">'. |
'<td><b>Date/Time</b></td>'. |
'<td><b>Date/Time</b></td>'. |
|
($isCODE?'<td><b>CODE</b></td>':''). |
'<td><b>Submission</b></td>'. |
'<td><b>Submission</b></td>'. |
'<td><b>Status </b></td></tr>'; |
'<td><b>Status </b></td></tr>'; |
my ($version); |
my ($version); |
Line 3232 sub displaySubByDates {
|
Line 3328 sub displaySubByDates {
|
for ($version=1;$version<=$$record{'version'};$version++) { |
for ($version=1;$version<=$$record{'version'};$version++) { |
my $timestamp = scalar(localtime($$record{$version.':timestamp'})); |
my $timestamp = scalar(localtime($$record{$version.':timestamp'})); |
$studentTable.='<tr bgcolor="#ffffff" valign="top"><td>'.$timestamp.'</td>'; |
$studentTable.='<tr bgcolor="#ffffff" valign="top"><td>'.$timestamp.'</td>'; |
|
if ($isCODE) { |
|
$studentTable.='<td>'.$record->{$version.':resource.CODE'}.'</td>'; |
|
} |
my @versionKeys = split(/\:/,$$record{$version.':keys'}); |
my @versionKeys = split(/\:/,$$record{$version.':keys'}); |
my @displaySub = (); |
my @displaySub = (); |
foreach my $partid (@{$parts}) { |
foreach my $partid (@{$parts}) { |
Line 3400 sub updateGradeByPage {
|
Line 3499 sub updateGradeByPage {
|
$curRes = $iterator->next(); |
$curRes = $iterator->next(); |
} |
} |
|
|
$navmap->untieHashes(); |
|
|
|
$studentTable.='</td></tr></table></td></tr></table>'; |
$studentTable.='</td></tr></table></td></tr></table>'; |
$studentTable.=&show_grading_menu_form($ENV{'form.symb'},$ENV{'form.url'}); |
$studentTable.=&show_grading_menu_form($ENV{'form.symb'},$ENV{'form.url'}); |
my $grademsg=($changeflag == 0 ? 'No score was changed or updated.' : |
my $grademsg=($changeflag == 0 ? 'No score was changed or updated.' : |
Line 3491 sub scantron_CODElist {
|
Line 3588 sub scantron_CODElist {
|
my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
my @names=&Apache::lonnet::getkeys('CODEs',$cdom,$cnum); |
my @names=&Apache::lonnet::getkeys('CODEs',$cdom,$cnum); |
my $namechoice='<option></option>'; |
my $namechoice='<option></option>'; |
foreach my $name (sort(@names)) { |
foreach my $name (sort {uc($a) cmp uc($b)} @names) { |
if ($name =~ /^error: 2 /) { next; } |
if ($name =~ /^error: 2 /) { next; } |
$namechoice.='<option value="'.$name.'">'.$name.'</option>'; |
$namechoice.='<option value="'.$name.'">'.$name.'</option>'; |
} |
} |
Line 3528 sub scantron_selectphase {
|
Line 3625 sub scantron_selectphase {
|
$result.= <<SCANTRONFORM; |
$result.= <<SCANTRONFORM; |
<table width="100%" border="0"> |
<table width="100%" border="0"> |
<tr> |
<tr> |
|
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantron_process"> |
<td bgcolor="#777777"> |
<td bgcolor="#777777"> |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantron_process"> |
|
<input type="hidden" name="command" value="scantron_warning" /> |
<input type="hidden" name="command" value="scantron_warning" /> |
$default_form_data |
$default_form_data |
<table width="100%" border="0"> |
<table width="100%" border="0"> |
Line 3566 sub scantron_selectphase {
|
Line 3663 sub scantron_selectphase {
|
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
</form> |
</td> |
</td> |
</form> |
</tr> |
</tr> |
SCANTRONFORM |
SCANTRONFORM |
|
|
Line 3623 SCANTRONFORM
|
Line 3720 SCANTRONFORM
|
} |
} |
$r->print(<<SCANTRONFORM); |
$r->print(<<SCANTRONFORM); |
<tr> |
<tr> |
<td bgcolor="#777777"> |
<form action='/adm/grades' name='scantron_download'> |
<form action='/adm/grades' name='scantron_download'> |
<td bgcolor="#777777"> |
<input type="hidden" name="command" value="scantron_download" /> |
<input type="hidden" name="command" value="scantron_download" /> |
<table width="100%" border="0"> |
<table width="100%" border="0"> |
<tr bgcolor="#e6ffff"> |
<tr bgcolor="#e6ffff"> |
Line 3641 SCANTRONFORM
|
Line 3738 SCANTRONFORM
|
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
</form> |
</td> |
</td> |
</form> |
</tr> |
</tr> |
SCANTRONFORM |
SCANTRONFORM |
|
|
$r->print(<<SCANTRONFORM); |
$r->print(<<SCANTRONFORM); |
</table> |
</table> |
</form> |
|
$grading_menu_button |
$grading_menu_button |
SCANTRONFORM |
SCANTRONFORM |
|
|
Line 3797 sub scantron_parse_scanline {
|
Line 3893 sub scantron_parse_scanline {
|
my $currentquest=substr($questions,0,$$scantron_config{'Qlength'}); |
my $currentquest=substr($questions,0,$$scantron_config{'Qlength'}); |
substr($questions,0,$$scantron_config{'Qlength'})=''; |
substr($questions,0,$$scantron_config{'Qlength'})=''; |
if (length($currentquest) < $$scantron_config{'Qlength'}) { next; } |
if (length($currentquest) < $$scantron_config{'Qlength'}) { next; } |
my @array=split($$scantron_config{'Qon'},$currentquest,-1); |
if ($$scantron_config{'Qon'} eq 'letter') { |
if (length($array[0]) eq $$scantron_config{'Qlength'}) { |
if (!$currentquest || $currentquest eq $$scantron_config{'Qoff'} || |
$record{"scantron.$questnum.answer"}=''; |
$currentquest !~ /^[A-Z]$/) { |
if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { |
$record{"scantron.$questnum.answer"}=''; |
push(@{$record{"scantron.missingerror"}},$questnum); |
if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { |
} |
push(@{$record{"scantron.missingerror"}},$questnum); |
|
} |
|
} else { |
|
$record{"scantron.$questnum.answer"}=$currentquest; |
|
} |
|
} elsif ($$scantron_config{'Qon'} eq 'number') { |
|
if (!$currentquest || $currentquest eq $$scantron_config{'Qoff'} || |
|
$currentquest !~ /^\d$/) { |
|
$record{"scantron.$questnum.answer"}=''; |
|
if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { |
|
push(@{$record{"scantron.missingerror"}},$questnum); |
|
} |
|
} else { |
|
$record{"scantron.$questnum.answer"}= |
|
$alphabet[$currentquest-1]; |
|
} |
} else { |
} else { |
$record{"scantron.$questnum.answer"}=$alphabet[length($array[0])]; |
my @array=split($$scantron_config{'Qon'},$currentquest,-1); |
|
if (length($array[0]) eq $$scantron_config{'Qlength'}) { |
|
$record{"scantron.$questnum.answer"}=''; |
|
if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { |
|
push(@{$record{"scantron.missingerror"}},$questnum); |
|
} |
|
} else { |
|
$record{"scantron.$questnum.answer"}= |
|
$alphabet[length($array[0])]; |
|
} |
|
if (scalar(@array) gt 2) { |
|
push(@{$record{'scantron.doubleerror'}},$questnum); |
|
my @ans=@array; |
|
my $i=length($ans[0]);shift(@ans); |
|
while ($#ans) { |
|
$i+=length($ans[0])+1; |
|
$record{"scantron.$questnum.answer"}.=$alphabet[$i]; |
|
shift(@ans); |
|
} |
|
} |
} |
} |
if (scalar(@array) gt 2) { |
|
push(@{$record{'scantron.doubleerror'}},$questnum); |
|
my @ans=@array; |
|
my $i=length($ans[0]);shift(@ans); |
|
while ($#ans) { |
|
$i+=length($ans[0])+1; |
|
$record{"scantron.$questnum.answer"}.=$alphabet[$i]; |
|
shift(@ans); |
|
} |
|
} |
|
} |
} |
$record{'scantron.maxquest'}=$questnum; |
$record{'scantron.maxquest'}=$questnum; |
return \%record; |
return \%record; |
Line 3980 sub scantron_do_warning {
|
Line 4100 sub scantron_do_warning {
|
if (!$symb) {return '';} |
if (!$symb) {return '';} |
my $default_form_data=&defaultFormData($symb,$url); |
my $default_form_data=&defaultFormData($symb,$url); |
$r->print(&scantron_form_start().$default_form_data); |
$r->print(&scantron_form_start().$default_form_data); |
my $warning=&scantron_warning_screen('Validate Records'); |
if ( $ENV{'form.selectpage'} eq '' || |
$r->print(<<STUFF); |
$ENV{'form.scantron_selectfile'} eq '' || |
|
$ENV{'form.scantron_format'} eq '' ) { |
|
$r->print("<p>You have forgetten to specify some information. Please go Back and try again.</p>"); |
|
if ( $ENV{'form.selectpage'} eq '') { |
|
$r->print('<p><font color="red">You have not selected a Sequence to grade</font></p>'); |
|
} |
|
if ( $ENV{'form.scantron_selectfile'} eq '') { |
|
$r->print('<p><font color="red">You have not selected a file that contains the student\'s response data.</font></p>'); |
|
} |
|
if ( $ENV{'form.scantron_format'} eq '') { |
|
$r->print('<p><font color="red">You have not selected a the format of the student\'s response data.</font></p>'); |
|
} |
|
} else { |
|
my $warning=&scantron_warning_screen('Validate Records'); |
|
$r->print(<<STUFF); |
$warning |
$warning |
<input type="submit" name="submit" value="Validate Records" /> |
<input type="submit" name="submit" value="Validate Records" /> |
<input type="hidden" name="command" value="scantron_validate" /> |
<input type="hidden" name="command" value="scantron_validate" /> |
</form> |
|
STUFF |
STUFF |
$r->print("<br />".&show_grading_menu_form($symb,$url)."</body></html>"); |
} |
|
$r->print("</form><br />".&show_grading_menu_form($symb,$url)."</body></html>"); |
return ''; |
return ''; |
} |
} |
|
|
Line 3998 sub scantron_form_start {
|
Line 4132 sub scantron_form_start {
|
<input type="hidden" name="selectpage" value="$ENV{'form.selectpage'}" /> |
<input type="hidden" name="selectpage" value="$ENV{'form.selectpage'}" /> |
<input type="hidden" name="scantron_format" value="$ENV{'form.scantron_format'}" /> |
<input type="hidden" name="scantron_format" value="$ENV{'form.scantron_format'}" /> |
<input type="hidden" name="scantron_selectfile" value="$ENV{'form.scantron_selectfile'}" /> |
<input type="hidden" name="scantron_selectfile" value="$ENV{'form.scantron_selectfile'}" /> |
<input type="hidden" name="scantron_maxbubble" value="$max_bubble'" /> |
<input type="hidden" name="scantron_maxbubble" value="$max_bubble" /> |
<input type="hidden" name="scantron_CODElist" value="$ENV{'form.scantron_CODElist'}" /> |
<input type="hidden" name="scantron_CODElist" value="$ENV{'form.scantron_CODElist'}" /> |
<input type="hidden" name="scantron_CODEunique" value="$ENV{'form.scantron_CODEunique'}" /> |
<input type="hidden" name="scantron_CODEunique" value="$ENV{'form.scantron_CODEunique'}" /> |
<input type="hidden" name="scantron_options_redo" value="$ENV{'form.scantron_options_redo'}" /> |
<input type="hidden" name="scantron_options_redo" value="$ENV{'form.scantron_options_redo'}" /> |
Line 4288 sub scantron_get_correction {
|
Line 4422 sub scantron_get_correction {
|
$r->print(" in scanline $i <pre>". |
$r->print(" in scanline $i <pre>". |
$line."</pre> \n"); |
$line."</pre> \n"); |
} |
} |
|
my $message="<p>The ID on the form is <tt>". |
|
$$scan_record{'scantron.ID'}."</tt><br />\n". |
|
"The name on the paper is ". |
|
$$scan_record{'scantron.LastName'}.",". |
|
$$scan_record{'scantron.FirstName'}."</p>"; |
|
|
$r->print('<input type="hidden" name="scantron_corrections" value="'.$error.'" />'."\n"); |
$r->print('<input type="hidden" name="scantron_corrections" value="'.$error.'" />'."\n"); |
$r->print('<input type="hidden" name="scantron_line" value="'.$i.'" />'."\n"); |
$r->print('<input type="hidden" name="scantron_line" value="'.$i.'" />'."\n"); |
if ($error =~ /ID$/) { |
if ($error =~ /ID$/) { |
Line 4296 sub scantron_get_correction {
|
Line 4436 sub scantron_get_correction {
|
} elsif ($error eq 'duplicateID') { |
} elsif ($error eq 'duplicateID') { |
$r->print("The encoded ID has also been used by a previous paper $arg</p>\n"); |
$r->print("The encoded ID has also been used by a previous paper $arg</p>\n"); |
} |
} |
$r->print("<p>The ID on the form is <tt>". |
$r->print($message); |
$$scan_record{'scantron.ID'}."</tt><br />\n"); |
|
$r->print("The name on the paper is ". |
|
$$scan_record{'scantron.LastName'}.",". |
|
$$scan_record{'scantron.FirstName'}."</p>"); |
|
$r->print("<p>How should I handle this? <br /> \n"); |
$r->print("<p>How should I handle this? <br /> \n"); |
$r->print("\n<ul><li> "); |
$r->print("\n<ul><li> "); |
#FIXME it would be nice if this sent back the user ID and |
#FIXME it would be nice if this sent back the user ID and |
Line 4318 sub scantron_get_correction {
|
Line 4454 sub scantron_get_correction {
|
} elsif ($error eq 'duplicateCODE') { |
} elsif ($error eq 'duplicateCODE') { |
$r->print("</p><p>The encoded CODE has also been used by a previous paper ".join(', ',@{$arg}).", and CODEs are supposed to be unique</p>\n"); |
$r->print("</p><p>The encoded CODE has also been used by a previous paper ".join(', ',@{$arg}).", and CODEs are supposed to be unique</p>\n"); |
} |
} |
$r->print("<p>The CODE on the form is <tt>". |
$r->print("<p>The CODE on the form is <tt>'". |
$$scan_record{'scantron.CODE'}."</tt><br />\n"); |
$$scan_record{'scantron.CODE'}."'</tt><br />\n"); |
$r->print("<p>The ID on the form is <tt>". |
$r->print($message); |
$$scan_record{'scantron.ID'}."</tt><br />\n"); |
|
$r->print("The name on the paper is ". |
|
$$scan_record{'scantron.LastName'}.",". |
|
$$scan_record{'scantron.FirstName'}."</p>"); |
|
$r->print("<p>How should I handle this? <br /> \n"); |
$r->print("<p>How should I handle this? <br /> \n"); |
$r->print("\n<br /> "); |
$r->print("\n<br /> "); |
my $i=0; |
my $i=0; |
Line 4367 ENDSCRIPT
|
Line 4499 ENDSCRIPT
|
$r->print("<p>There have been multiple bubbles scanned for a some question(s)</p>\n"); |
$r->print("<p>There have been multiple bubbles scanned for a some question(s)</p>\n"); |
$r->print('<input type="hidden" name="scantron_questions" value="'. |
$r->print('<input type="hidden" name="scantron_questions" value="'. |
join(',',@{$arg}).'" />'); |
join(',',@{$arg}).'" />'); |
|
$r->print($message); |
$r->print("<p>Please indicate which bubble should be used for grading</p>"); |
$r->print("<p>Please indicate which bubble should be used for grading</p>"); |
foreach my $question (@{$arg}) { |
foreach my $question (@{$arg}) { |
my $selected=$$scan_record{"scantron.$question.answer"}; |
my $selected=$$scan_record{"scantron.$question.answer"}; |
Line 4374 ENDSCRIPT
|
Line 4507 ENDSCRIPT
|
} |
} |
} elsif ($error eq 'missingbubble') { |
} elsif ($error eq 'missingbubble') { |
$r->print("<p>There have been <b>no</b> bubbles scanned for some question(s)</p>\n"); |
$r->print("<p>There have been <b>no</b> bubbles scanned for some question(s)</p>\n"); |
|
$r->print($message); |
$r->print("<p>Please indicate which bubble should be used for grading</p>"); |
$r->print("<p>Please indicate which bubble should be used for grading</p>"); |
$r->print("Some questions have no scanned bubbles\n"); |
$r->print("Some questions have no scanned bubbles\n"); |
$r->print('<input type="hidden" name="scantron_questions" value="'. |
$r->print('<input type="hidden" name="scantron_questions" value="'. |
Line 4465 sub scantron_validate_CODE {
|
Line 4599 sub scantron_validate_CODE {
|
$scan_data); |
$scan_data); |
my $CODE=$$scan_record{'scantron.CODE'}; |
my $CODE=$$scan_record{'scantron.CODE'}; |
my $error=0; |
my $error=0; |
if (!exists($allcodes{$CODE}) && !$$scan_record{'scantron.useCODE'}) { |
if (!&Apache::lonnet::validCODE($CODE)) { |
|
&scantron_get_correction($r,$i,$scan_record, |
|
\%scantron_config, |
|
$line,'incorrectCODE',\%allcodes); |
|
return(1,$currentphase); |
|
} |
|
if (%allcodes && !exists($allcodes{$CODE}) |
|
&& !$$scan_record{'scantron.useCODE'}) { |
&scantron_get_correction($r,$i,$scan_record, |
&scantron_get_correction($r,$i,$scan_record, |
\%scantron_config, |
\%scantron_config, |
$line,'incorrectCODE',\%allcodes); |
$line,'incorrectCODE',\%allcodes); |
Line 4520 sub scantron_get_maxbubble {
|
Line 4661 sub scantron_get_maxbubble {
|
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('form.counter'); |
foreach my $resource (@resources) { |
foreach my $resource (@resources) { |
my $result=&Apache::lonnet::ssi($resource->src()); |
my $result=&Apache::lonnet::ssi($resource->src().'?symb='.&Apache::lonnet::escape($resource->symb())); |
} |
} |
&Apache::lonnet::delenv('scantron\.'); |
&Apache::lonnet::delenv('scantron\.'); |
my $envfile=$ENV{'user.environment'}; |
my $envfile=$ENV{'user.environment'}; |
Line 4637 SCANTRONFORM
|
Line 4778 SCANTRONFORM
|
if (exists($scan_record->{'scantron.CODE'}) && |
if (exists($scan_record->{'scantron.CODE'}) && |
$scan_record->{'scantron.CODE'}) { |
$scan_record->{'scantron.CODE'}) { |
$form{'CODE'}=$scan_record->{'scantron.CODE'}; |
$form{'CODE'}=$scan_record->{'scantron.CODE'}; |
|
} else { |
|
$form{'CODE'}=''; |
} |
} |
my $result=&Apache::lonnet::ssi($resource->src(),%form); |
my $result=&Apache::lonnet::ssi($resource->src(),%form); |
|
if ($result ne '') { |
|
&Apache::lonnet::logthis("scantron grading error -> $result"); |
|
&Apache::lonnet::logthis("scantron grading error info name $uname domain $udom course $ENV{'request.course.id'} url ".$resource->src()); |
|
} |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
if (&Apache::loncommon::connection_aborted($r)) { last; } |
} |
} |
$completedstudents{$uname}={'line'=>$line}; |
$completedstudents{$uname}={'line'=>$line}; |
Line 4651 SCANTRONFORM
|
Line 4798 SCANTRONFORM
|
# my $lasttime = &Time::HiRes::time()-$start; |
# my $lasttime = &Time::HiRes::time()-$start; |
# $r->print("<p>took $lasttime</p>"); |
# $r->print("<p>took $lasttime</p>"); |
|
|
$navmap->untieHashes(); |
|
$r->print("</form>"); |
$r->print("</form>"); |
$r->print(&show_grading_menu_form($symb,$url)); |
$r->print(&show_grading_menu_form($symb,$url)); |
return ''; |
return ''; |
Line 4799 DOWNLOAD
|
Line 4945 DOWNLOAD
|
# |
# |
#------------------------------------------------------------------- |
#------------------------------------------------------------------- |
|
|
|
|
#-------------------------- Menu interface ------------------------- |
#-------------------------- Menu interface ------------------------- |
# |
# |
#--- Show a Grading Menu button - Calls the next routine --- |
#--- Show a Grading Menu button - Calls the next routine --- |
Line 4852 sub gradingmenu {
|
Line 4997 sub gradingmenu {
|
if (!checkReceiptNo(formname,'notOK')) { return false;} |
if (!checkReceiptNo(formname,'notOK')) { return false;} |
formname.submit(); |
formname.submit(); |
} |
} |
|
if (val < 7) formname.submit(); |
} |
} |
|
|
function checkReceiptNo(formname,nospace) { |
function checkReceiptNo(formname,nospace) { |
Line 4904 GRADINGMENUJS
|
Line 5050 GRADINGMENUJS
|
($saveSec eq $_ ? 'selected="on"':'').'>'.$_.'</option>'."\n"; |
($saveSec eq $_ ? 'selected="on"':'').'>'.$_.'</option>'."\n"; |
} |
} |
} |
} |
$result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="on"' : ''). '>all</select> '; |
$result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="on"' : ''). '>all</option></select> '; |
|
|
$result.=&mt('Student Status').':</b>'.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,undef); |
$result.=&mt('Student Status').':</b>'.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,undef); |
|
|
Line 4956 GRADINGMENUJS
|
Line 5102 GRADINGMENUJS
|
'-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')">'. |
'-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')">'. |
'</td></tr>'."\n"; |
'</td></tr>'."\n"; |
} |
} |
|
$result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'. |
|
'<input type="button" onClick="javascript:this.form.action=\'/adm/helper/resettimes.helper\';this.form.submit();'. |
|
'" value="'.&mt('Manage').'" /> access times.</td></tr>'."\n"; |
|
|
$result.='</form></td></tr></table>'."\n". |
$result.='</form></td></tr></table>'."\n". |
'</td></tr></table>'."\n". |
'</td></tr></table>'."\n". |
Line 5055 sub handler {
|
Line 5204 sub handler {
|
$request->print(&csvupload($request)); |
$request->print(&csvupload($request)); |
} elsif ($command eq 'csvuploadmap' && $perm{'mgr'} ) { |
} elsif ($command eq 'csvuploadmap' && $perm{'mgr'} ) { |
$request->print(&csvuploadmap($request)); |
$request->print(&csvuploadmap($request)); |
} elsif ($command eq 'csvuploadassign' && $perm{'mgr'}) { |
} elsif ($command eq 'csvuploadoptions' && $perm{'mgr'}) { |
if ($ENV{'form.associate'} ne 'Reverse Association') { |
if ($ENV{'form.associate'} ne 'Reverse Association') { |
$request->print(&csvuploadassign($request)); |
$request->print(&csvuploadoptions($request)); |
} else { |
} else { |
if ( $ENV{'form.upfile_associate'} ne 'reverse' ) { |
if ( $ENV{'form.upfile_associate'} ne 'reverse' ) { |
$ENV{'form.upfile_associate'} = 'reverse'; |
$ENV{'form.upfile_associate'} = 'reverse'; |
Line 5066 sub handler {
|
Line 5215 sub handler {
|
} |
} |
$request->print(&csvuploadmap($request)); |
$request->print(&csvuploadmap($request)); |
} |
} |
|
} elsif ($command eq 'csvuploadassign' && $perm{'mgr'} ) { |
|
$request->print(&csvuploadassign($request)); |
} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { |
} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { |
$request->print(&scantron_selectphase($request)); |
$request->print(&scantron_selectphase($request)); |
} elsif ($command eq 'scantron_warning' && $perm{'mgr'}) { |
} elsif ($command eq 'scantron_warning' && $perm{'mgr'}) { |