version 1.210, 2004/09/14 14:13:08
|
version 1.225, 2004/11/13 09:32:49
|
Line 25
|
Line 25
|
# |
# |
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
# 2/9,2/13 Guy Albertelli |
|
# 6/8 Gerd Kortemeyer |
|
# 7/26 H.K. Ng |
|
# 8/20 Gerd Kortemeyer |
|
# Year 2002 |
|
# June-August H.K. Ng |
|
# Year 2003 |
|
# February, March H.K. Ng |
|
# July, H. K. Ng |
|
# |
|
|
|
package Apache::grades; |
package Apache::grades; |
use strict; |
use strict; |
Line 101 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 1001 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(); |
$request->print(<<SUBJAVASCRIPT); |
$request->print(<<SUBJAVASCRIPT); |
<script type="text/javascript" language="javascript"> |
<script type="text/javascript" language="javascript"> |
|
|
Line 1113 sub sub_page_kw_js {
|
Line 1085 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 1244 sub sub_page_kw_js {
|
Line 1216 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 1413 sub submission {
|
Line 1385 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 3079 sub getSymbMap {
|
Line 3052 sub getSymbMap {
|
$minder++; |
$minder++; |
} |
} |
} |
} |
|
|
$navmap->untieHashes(); |
|
return \@titles,\%symbx; |
return \@titles,\%symbx; |
} |
} |
|
|
Line 3213 sub displayPage {
|
Line 3184 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 3227 sub displayPage {
|
Line 3196 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 3242 sub displaySubByDates {
|
Line 3214 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 3410 sub updateGradeByPage {
|
Line 3385 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 3501 sub scantron_CODElist {
|
Line 3474 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 3855 sub scantron_find_student {
|
Line 3828 sub scantron_find_student {
|
|
|
sub scantron_filter { |
sub scantron_filter { |
my ($curres)=@_; |
my ($curres)=@_; |
if (ref($curres) && $curres->is_problem() && !$curres->randomout) { |
# randomout is dysfunctional at best for this purpose |
|
if (ref($curres) && $curres->is_problem()) { #&& !$curres->randomout) { |
return 1; |
return 1; |
} |
} |
return 0; |
return 0; |
Line 4007 sub scantron_form_start {
|
Line 3981 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 4327 sub scantron_get_correction {
|
Line 4301 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("<p>The ID on the form is <tt>". |
$$scan_record{'scantron.ID'}."</tt><br />\n"); |
$$scan_record{'scantron.ID'}."</tt><br />\n"); |
$r->print("The name on the paper is ". |
$r->print("The name on the paper is ". |
Line 4474 sub scantron_validate_CODE {
|
Line 4448 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); |
return(1,$currentphase); |
return(1,$currentphase); |
} |
} |
if (exists($usedCODEs{$CODE}) && $ENV{'form.scantron_CODEunique'} |
if (exists($usedCODEs{$CODE}) |
|
&& $ENV{'form.scantron_CODEunique'} eq 'yes' |
&& !$$scan_record{'scantron.CODE_ignore_dup'}) { |
&& !$$scan_record{'scantron.CODE_ignore_dup'}) { |
&scantron_get_correction($r,$i,$scan_record, |
&scantron_get_correction($r,$i,$scan_record, |
\%scantron_config, |
\%scantron_config, |
Line 4645 SCANTRONFORM
|
Line 4627 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 (&Apache::loncommon::connection_aborted($r)) { last; } |
} |
} |
$completedstudents{$uname}={'line'=>$line}; |
$completedstudents{$uname}={'line'=>$line}; |
|
if (&Apache::loncommon::connection_aborted($r)) { last; } |
} continue { |
} continue { |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('scantron\.'); |
&Apache::lonnet::delenv('scantron\.'); |
Line 4658 SCANTRONFORM
|
Line 4643 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 4719 sub scantron_upload_scantron_data_save {
|
Line 4703 sub scantron_upload_scantron_data_save {
|
} |
} |
return ''; |
return ''; |
} |
} |
$r->print("Doing upload to ".$ENV{'form.courseid'}." <br />"); |
my %coursedata=&Apache::lonnet::coursedescription($ENV{'form.domainid'}.'_'.$ENV{'form.courseid'}); |
|
$r->print("Doing upload to ".$coursedata{'description'}." <br />"); |
my $home=&Apache::lonnet::homeserver($ENV{'form.courseid'}, |
my $home=&Apache::lonnet::homeserver($ENV{'form.courseid'}, |
$ENV{'form.domainid'}); |
$ENV{'form.domainid'}); |
my $fname=$ENV{'form.upfile.filename'}; |
my $fname=$ENV{'form.upfile.filename'}; |
Line 5113 sub send_header {
|
Line 5098 sub send_header {
|
|
|
sub send_footer { |
sub send_footer { |
my ($request)= @_; |
my ($request)= @_; |
$request->print('</body>'); |
$request->print('</body></html>'); |
$request->print(&Apache::lontexconvert::footer()); |
|
} |
} |
|
|
1; |
1; |