version 1.124, 2003/07/23 18:04:51
|
version 1.138, 2003/09/18 17:20:05
|
Line 33
|
Line 33
|
# June-August H.K. Ng |
# June-August H.K. Ng |
# Year 2003 |
# Year 2003 |
# February, March H.K. Ng |
# February, March H.K. Ng |
|
# July, H. K. Ng |
# |
# |
|
|
package Apache::grades; |
package Apache::grades; |
Line 95 sub get_fullname {
|
Line 96 sub get_fullname {
|
return $fullname; |
return $fullname; |
} |
} |
|
|
|
#--- Format fullname, username:domain if different for display |
|
#--- Use anywhere where the student names are listed |
|
sub nameUserString { |
|
my ($type,$fullname,$uname,$udom) = @_; |
|
if ($type eq 'header') { |
|
return '<b> Fullname </b><font color="#999999">(Username)</font> '; |
|
} else { |
|
return ' '.$fullname.'<font color="#999999"> ('.$uname. |
|
($ENV{'user.domain'} eq $udom ? '' : ' ('.$udom.')').')</font>'; |
|
} |
|
} |
|
|
#--- Get the partlist and the response type for a given problem. --- |
#--- Get the partlist and the response type for a given problem. --- |
#--- Indicate if a response type is coded handgraded or not. --- |
#--- Indicate if a response type is coded handgraded or not. --- |
sub response_type { |
sub response_type { |
my ($url) = shift; |
my ($url,$symb) = shift; |
|
$symb=($ENV{'form.symb'} ne '' ? $ENV{'form.symb'} : (&Apache::lonnet::symbread($url))) if ($symb eq ''); |
my $allkeys = &Apache::lonnet::metadata($url,'keys'); |
my $allkeys = &Apache::lonnet::metadata($url,'keys'); |
my %seen = (); |
my %seen = (); |
my (@partlist,%handgrade); |
my (@partlist,%handgrade); |
Line 107 sub response_type {
|
Line 121 sub response_type {
|
my ($responsetype,$part) = split(/_/,$_,2); |
my ($responsetype,$part) = split(/_/,$_,2); |
my ($partid,$respid) = split(/_/,$part); |
my ($partid,$respid) = split(/_/,$part); |
$responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!! |
$responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!! |
$handgrade{$part} = $responsetype.':'.($allkeys =~ /parameter_$part\_handgrade/ ? 'yes' : 'no'); |
my ($value) = &Apache::lonnet::EXT('resource.'.$part.'.handgrade',$symb); |
|
$handgrade{$part} = $responsetype.':'.($value eq 'yes' ? 'yes' : 'no'); |
next if ($seen{$partid} > 0); |
next if ($seen{$partid} > 0); |
$seen{$partid}++; |
$seen{$partid}++; |
push @partlist,$partid; |
push @partlist,$partid; |
Line 123 sub showResourceInfo {
|
Line 138 sub showResourceInfo {
|
my $result ='<table border="0">'. |
my $result ='<table border="0">'. |
'<tr><td colspan=3><font size=+1><b>Current Resource: </b>'.$probTitle.'</font></td></tr>'."\n"; |
'<tr><td colspan=3><font size=+1><b>Current Resource: </b>'.$probTitle.'</font></td></tr>'."\n"; |
my ($partlist,$handgrade) = &response_type($url); |
my ($partlist,$handgrade) = &response_type($url); |
my %resptype = (); #,$hdgrade)=('','no'); |
my %resptype = (); |
my $hdgrade='no'; |
my $hdgrade='no'; |
for (sort keys(%$handgrade)) { |
for (sort keys(%$handgrade)) { |
my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_}); |
my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_}); |
Line 150 sub cleanRecord {
|
Line 165 sub cleanRecord {
|
push @ans,$ans; |
push @ans,$ans; |
} |
} |
my $grayFont = '<font color="#999999">'; |
my $grayFont = '<font color="#999999">'; |
return '<table border="1">'. |
return '<blockquote><table border="1">'. |
'<tr valign="top"><td>Answer</td><td>'. |
'<tr valign="top"><td>Answer</td><td>'. |
(join '</td><td>',@ans).'</td></tr>'. |
(join '</td><td>',@ans).'</td></tr>'. |
'<tr valign="top"><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont. |
'<tr valign="top"><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont. |
(join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'. |
(join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'. |
'</table>'; |
'</table></blockquote>'; |
} |
} |
if ($response eq 'essay') { |
if ($response eq 'essay') { |
if (! exists ($ENV{'form.'.$symb})) { |
if (! exists ($ENV{'form.'.$symb})) { |
Line 170 sub cleanRecord {
|
Line 185 sub cleanRecord {
|
$ENV{'form.kwstyle'} = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : ''; |
$ENV{'form.kwstyle'} = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : ''; |
$ENV{'form.'.$symb} = 1; # so that we don't have to read it from disk for multiple sub of the same prob. |
$ENV{'form.'.$symb} = 1; # so that we don't have to read it from disk for multiple sub of the same prob. |
} |
} |
return &keywords_highlight($answer); |
return '<br /><br /><blockquote>'.&keywords_highlight($answer).'</blockquote>'; |
} |
} |
return $answer; |
return $answer; |
} |
} |
Line 203 sub commonJSfunctions {
|
Line 218 sub commonJSfunctions {
|
} |
} |
} |
} |
} else { |
} else { |
if (selectOne.selected) return selectOne.value; |
// only one value it must be the selected one |
|
return selectOne.value; |
} |
} |
} |
} |
</script> |
</script> |
Line 295 sub student_gradeStatus {
|
Line 311 sub student_gradeStatus {
|
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
my %partstatus = (); |
my %partstatus = (); |
foreach (@$partlist) { |
foreach (@$partlist) { |
my ($status,$foo) = split(/_/,$record{"resource.$_.solved"},2); |
my ($status,undef) = split(/_/,$record{"resource.$_.solved"},2); |
$status = 'nothing' if ($status eq ''); |
$status = 'nothing' if ($status eq ''); |
$partstatus{$_} = $status; |
$partstatus{$_} = $status; |
my $subkey = "resource.$_.submitted_by"; |
my $subkey = "resource.$_.submitted_by"; |
Line 321 sub jscriptNform {
|
Line 337 sub jscriptNform {
|
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n". |
|
'<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n". |
'<input type="hidden" name="command" value="submission" />'."\n". |
'<input type="hidden" name="command" value="submission" />'."\n". |
'<input type="hidden" name="student" value="" />'."\n". |
'<input type="hidden" name="student" value="" />'."\n". |
'<input type="hidden" name="userdom" value="" />'."\n". |
'<input type="hidden" name="userdom" value="" />'."\n". |
Line 470 sub listStudents {
|
Line 487 sub listStudents {
|
sense = "the student"; |
sense = "the student"; |
} |
} |
if (ctr == 0) { |
if (ctr == 0) { |
alert("Please select "+sense+" before clicking on the $viewgrade button."); |
alert("Please select "+sense+" before clicking on the Next button."); |
return false; |
return false; |
} |
} |
document.gradesub.submit(); |
document.gradesub.submit(); |
Line 501 LISTJAVASCRIPT
|
Line 518 LISTJAVASCRIPT
|
my $saveStatus = $ENV{'form.Status'} eq '' ? 'Active' : $ENV{'form.Status'}; |
my $saveStatus = $ENV{'form.Status'} eq '' ? 'Active' : $ENV{'form.Status'}; |
$ENV{'form.Status'} = $saveStatus; |
$ENV{'form.Status'} = $saveStatus; |
|
|
$gradeTable.='<input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last sub only'."\n". |
$gradeTable.='<input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last submission only'."\n". |
'<input type="radio" name="lastSub" value="last" /> last sub & parts info'."\n". |
'<input type="radio" name="lastSub" value="last" /> last submission & parts info'."\n". |
'<input type="radio" name="lastSub" value="datesub" /> by dates and submissions'."\n". |
'<input type="radio" name="lastSub" value="datesub" /> by dates and submissions'."\n". |
'<input type="radio" name="lastSub" value="all" /> all details'."\n". |
'<input type="radio" name="lastSub" value="all" /> all details'."\n". |
'<input type="hidden" name="section" value="'.$getsec.'" />'."\n". |
'<input type="hidden" name="section" value="'.$getsec.'" />'."\n". |
Line 522 LISTJAVASCRIPT
|
Line 539 LISTJAVASCRIPT
|
&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);').'<br />'; |
&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);').'<br />'; |
} |
} |
|
|
$gradeTable.='To '.lc($viewgrade).' a submission, click on the check box next to the student\'s name. Then '."\n". |
$gradeTable.='To '.lc($viewgrade).' a submission or a group of submissions, click on the check box(es) '. |
'click on the '.$viewgrade.' button. To view the submissions for a group of students, click'."\n". |
'next to the student\'s name(s). Then click on the Next button.<br />'."\n". |
' on the check boxes for the group of students.<br />'."\n". |
|
'<input type="hidden" name="command" value="processGroup" />'."\n"; |
'<input type="hidden" name="command" value="processGroup" />'."\n"; |
$gradeTable.='<input type="button" '."\n". |
$gradeTable.='<input type="button" '."\n". |
'onClick="javascript:checkSelect(this.form.stuinfo);" '."\n". |
'onClick="javascript:checkSelect(this.form.stuinfo);" '."\n". |
'value="'.$viewgrade.'" />'."\n"; |
'value="Next->" />'."\n"; |
|
$gradeTable.='<input type="checkbox" name="checkPlag" checked="on">Check For Plagiarism</input>'; |
my (undef, undef, $fullname) = &getclasslist($getsec,'1'); |
my (undef, undef, $fullname) = &getclasslist($getsec,'1'); |
$gradeTable.='<table border="0"><tr><td bgcolor="#777777">'. |
$gradeTable.='<table border="0"><tr><td bgcolor="#777777">'. |
'<table border="0"><tr bgcolor="#e6ffff">'; |
'<table border="0"><tr bgcolor="#e6ffff">'; |
my $loop = 0; |
my $loop = 0; |
while ($loop < 2) { |
while ($loop < 2) { |
$gradeTable.='<td><b> Select </b></td><td><b> Fullname </b>'. |
$gradeTable.='<td><b> No.</b> </td><td><b> Select </b></td>'. |
'<font color="#999999">(Username)</font> </td>'; |
'<td>'.&nameUserString('header').'</td>'; |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
foreach (sort(@$partlist)) { |
foreach (sort(@$partlist)) { |
$gradeTable.='<td><b> Part '.(split(/_/))[0].' Status </b></td>'; |
$gradeTable.='<td><b> Part '.(split(/_/))[0].' Status </b></td>'; |
} |
} |
} |
} |
$loop++; |
$loop++; |
|
# $gradeTable.='<td></td>' if ($loop%2 ==1); |
} |
} |
$gradeTable.='</tr>'."\n"; |
$gradeTable.='</tr>'."\n"; |
|
|
Line 569 LISTJAVASCRIPT
|
Line 586 LISTJAVASCRIPT
|
$ctr++; |
$ctr++; |
if ( $perm{'vgr'} eq 'F' ) { |
if ( $perm{'vgr'} eq 'F' ) { |
$gradeTable.='<tr bgcolor="#ffffe6">' if ($ctr%2 ==1); |
$gradeTable.='<tr bgcolor="#ffffe6">' if ($ctr%2 ==1); |
$gradeTable.='<td align="center"><input type=checkbox name="stuinfo" value="'. |
$gradeTable.='<td align="right">'.$ctr.' </td>'. |
|
'<td align="center"><input type=checkbox name="stuinfo" value="'. |
$student.':'.$$fullname{$student}.' "></td>'."\n". |
$student.':'.$$fullname{$student}.' "></td>'."\n". |
'<td> '.$$fullname{$student}.' '."\n". |
'<td>'.&nameUserString(undef,$$fullname{$student},$uname,$udom).'</td>'."\n"; |
'<font color="#999999">('.$uname.')</font></td>'."\n"; |
|
|
|
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
foreach (sort keys(%status)) { |
foreach (sort keys(%status)) { |
Line 580 LISTJAVASCRIPT
|
Line 597 LISTJAVASCRIPT
|
$gradeTable.='<td align="middle"> '.$status{$_}.' </td>'."\n"; |
$gradeTable.='<td align="middle"> '.$status{$_}.' </td>'."\n"; |
} |
} |
} |
} |
|
# $gradeTable.='<td></td>' if ($ctr%2 ==1); |
$gradeTable.='</tr>'."\n" if ($ctr%2 ==0); |
$gradeTable.='</tr>'."\n" if ($ctr%2 ==0); |
} |
} |
} |
} |
if ($ctr%2 ==1) { |
if ($ctr%2 ==1) { |
$gradeTable.='<td> </td><td> </td>'; |
$gradeTable.='<td> </td><td> </td><td> </td>'; |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
foreach (@$partlist) { |
foreach (@$partlist) { |
$gradeTable.='<td> </td>'; |
$gradeTable.='<td> </td>'; |
Line 596 LISTJAVASCRIPT
|
Line 614 LISTJAVASCRIPT
|
$gradeTable.='</table></td></tr></table>'. |
$gradeTable.='</table></td></tr></table>'. |
'<input type="button" '. |
'<input type="button" '. |
'onClick="javascript:checkSelect(this.form.stuinfo);" '. |
'onClick="javascript:checkSelect(this.form.stuinfo);" '. |
'value="'.$viewgrade.'" /></form>'."\n"; |
'value="Next->" /></form>'."\n"; |
if ($ctr == 0) { |
if ($ctr == 0) { |
my $num_students=(scalar(keys(%$fullname))); |
my $num_students=(scalar(keys(%$fullname))); |
if ($num_students eq 0) { |
if ($num_students eq 0) { |
Line 645 sub sub_page_js {
|
Line 663 sub sub_page_js {
|
$request->print(<<SUBJAVASCRIPT); |
$request->print(<<SUBJAVASCRIPT); |
<script type="text/javascript" language="javascript"> |
<script type="text/javascript" language="javascript"> |
function updateRadio(formname,id,weight) { |
function updateRadio(formname,id,weight) { |
var gradeBox = eval("formname.GD_BOX"+id); |
var gradeBox = formname["GD_BOX"+id]; |
var radioButton = eval("formname.RADVAL"+id); |
var radioButton = formname["RADVAL"+id]; |
var oldpts = eval("formname.oldpts"+id+".value"); |
var oldpts = formname["oldpts"+id].value; |
var pts = checkSolved(formname,id) == 'update' ? gradeBox.value : oldpts; |
var pts = checkSolved(formname,id) == 'update' ? gradeBox.value : oldpts; |
gradeBox.value = pts; |
gradeBox.value = pts; |
var resetbox = false; |
var resetbox = false; |
Line 669 sub sub_page_js {
|
Line 687 sub sub_page_js {
|
var resp = confirm("You entered a value ("+pts+ |
var resp = confirm("You entered a value ("+pts+ |
") greater than the weight for the part. Accept?"); |
") greater than the weight for the part. Accept?"); |
if (resp == false) { |
if (resp == false) { |
gradeBox.value = ""; |
gradeBox.value = oldpts; |
return; |
return; |
} |
} |
} |
} |
Line 681 sub sub_page_js {
|
Line 699 sub sub_page_js {
|
} |
} |
} |
} |
updateSelect(formname,id); |
updateSelect(formname,id); |
var stores = eval("formname.stores"+id); |
formname["stores"+id].value = "0"; |
stores.value = "0"; |
|
} |
} |
|
|
function writeBox(formname,id,pts) { |
function writeBox(formname,id,pts) { |
var gradeBox = eval("formname.GD_BOX"+id); |
var gradeBox = formname["GD_BOX"+id]; |
if (checkSolved(formname,id) == 'update') { |
if (checkSolved(formname,id) == 'update') { |
gradeBox.value = pts; |
gradeBox.value = pts; |
} else { |
} else { |
var oldpts = eval("formname.oldpts"+id+".value"); |
var oldpts = formname["oldpts"+id].value; |
gradeBox.value = oldpts; |
gradeBox.value = oldpts; |
var radioButton = eval("formname.RADVAL"+id); |
var radioButton = formname["RADVAL"+id]; |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
radioButton[i].checked=false; |
radioButton[i].checked=false; |
if (i == oldpts) { |
if (i == oldpts) { |
Line 700 sub sub_page_js {
|
Line 717 sub sub_page_js {
|
} |
} |
} |
} |
} |
} |
var stores = eval("formname.stores"+id); |
formname["stores"+id].value = "0"; |
stores.value = "0"; |
|
updateSelect(formname,id); |
updateSelect(formname,id); |
return; |
return; |
} |
} |
Line 711 sub sub_page_js {
|
Line 727 sub sub_page_js {
|
updateSelect(formname,id); |
updateSelect(formname,id); |
return; |
return; |
} |
} |
gradeSelect = eval("formname.GD_SEL"+id); |
gradeSelect = formname["GD_SEL"+id]; |
for (var i=0; i<gradeSelect.length; i++) { |
for (var i=0; i<gradeSelect.length; i++) { |
if (gradeSelect[i].selected) { |
if (gradeSelect[i].selected) { |
var selectx=i; |
var selectx=i; |
} |
} |
} |
} |
var stores = eval("formname.stores"+id); |
var stores = formname["stores"+id]; |
if (selectx == stores.value) { return }; |
if (selectx == stores.value) { return }; |
var gradeBox = eval("formname.GD_BOX"+id); |
var gradeBox = formname["GD_BOX"+id]; |
gradeBox.value = ""; |
gradeBox.value = ""; |
var radioButton = eval("formname.RADVAL"+id); |
var radioButton = formname["RADVAL"+id]; |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
radioButton[i].checked=false; |
radioButton[i].checked=false; |
} |
} |
Line 729 sub sub_page_js {
|
Line 745 sub sub_page_js {
|
} |
} |
|
|
function checkSolved(formname,id) { |
function checkSolved(formname,id) { |
if (eval("formname.solved"+id+".value") == "correct_by_student" && formname.overRideScore.value == 'no') { |
if (formname["solved"+id].value == "correct_by_student" && formname.overRideScore.value == 'no') { |
var reply = confirm("This problem has been graded correct by the computer. Do you want to change the score?"); |
var reply = confirm("This problem has been graded correct by the computer. Do you want to change the score?"); |
if (!reply) {return "noupdate";} |
if (!reply) {return "noupdate";} |
formname.overRideScore.value = 'yes'; |
formname.overRideScore.value = 'yes'; |
Line 738 sub sub_page_js {
|
Line 754 sub sub_page_js {
|
} |
} |
|
|
function updateSelect(formname,id) { |
function updateSelect(formname,id) { |
var gradeSelect = eval("formname.GD_SEL"+id); |
formname["GD_SEL"+id][0].selected = true; |
gradeSelect[0].selected = true; |
|
return; |
return; |
} |
} |
|
|
Line 749 sub sub_page_js {
|
Line 764 sub sub_page_js {
|
if (val == "Save & Next") { |
if (val == "Save & Next") { |
for (i=0;i<=total;i++) { |
for (i=0;i<=total;i++) { |
for (j=0;j<parttot;j++) { |
for (j=0;j<parttot;j++) { |
var partid = eval("formname.partid"+i+"_"+j+".value"); |
var partid = formname["partid"+i+"_"+j].value; |
var selopt = eval("formname.GD_SEL"+i+"_"+partid); |
if (formname["GD_SEL"+i+"_"+partid][0].selected) { |
if (selopt[0].selected) { |
var points = formname["GD_BOX"+i+"_"+partid].value; |
var points = eval("formname.GD_BOX"+i+"_"+partid+".value"); |
|
if (points == "") { |
if (points == "") { |
var name = eval("formname.name"+i+".value"); |
var name = formname["name"+i].value; |
var resp = confirm("You did not assign a score for "+name+", part "+partid+". Continue?"); |
var studentID = (name != '' ? name : formname["unamedom"+i].value); |
|
var resp = confirm("You did not assign a score for "+studentID+ |
|
", part "+partid+". Continue?"); |
if (resp == false) { |
if (resp == false) { |
eval("formname.GD_BOX"+i+"_"+partid+".focus()"); |
formname["GD_BOX"+i+"_"+partid].focus(); |
return false; |
return false; |
} |
} |
} |
} |
Line 782 sub sub_page_js {
|
Line 798 sub sub_page_js {
|
noscore = new Array(100); |
noscore = new Array(100); |
var ptr = 0; |
var ptr = 0; |
for (i=1;i<total;i++) { |
for (i=1;i<total;i++) { |
var partid = eval("formname.q_"+i+".value"); |
var partid = formname["q_"+i].value; |
var selopt = eval("formname.GD_SEL"+i+"_"+partid); |
if (formname["GD_SEL"+i+"_"+partid][0].selected) { |
if (selopt[0].selected) { |
var points = formname["GD_BOX"+i+"_"+partid].value; |
var points = eval("formname.GD_BOX"+i+"_"+partid+".value"); |
var status = formname["solved"+i+"_"+partid].value; |
var status = eval("formname.solved"+i+"_"+partid+".value"); |
|
if (points == "" && status != "correct_by_student") { |
if (points == "" && status != "correct_by_student") { |
noscore[ptr] = i; |
noscore[ptr] = i; |
ptr++; |
ptr++; |
Line 832 sub sub_page_kw_js {
|
Line 847 sub sub_page_kw_js {
|
if (nret==null) return; |
if (nret==null) return; |
formname.keywords.value = nret; |
formname.keywords.value = nret; |
|
|
formname.refresh.value = "on"; |
|
if (formname.keywords.value != "") { |
if (formname.keywords.value != "") { |
|
formname.refresh.value = "on"; |
formname.submit(); |
formname.submit(); |
} |
} |
return; |
return; |
Line 860 sub sub_page_kw_js {
|
Line 875 sub sub_page_kw_js {
|
} |
} |
var nret = prompt("Add selection to keyword list? Edit if desired.",cleantxt); |
var nret = prompt("Add selection to keyword list? Edit if desired.",cleantxt); |
if (nret==null) return; |
if (nret==null) return; |
var curlist = document.SCORE.keywords.value; |
document.SCORE.keywords.value = document.SCORE.keywords.value+" "+nret; |
document.SCORE.keywords.value = curlist+" "+nret; |
|
document.SCORE.refresh.value = "on"; |
|
if (document.SCORE.keywords.value != "") { |
if (document.SCORE.keywords.value != "") { |
|
document.SCORE.refresh.value = "on"; |
document.SCORE.submit(); |
document.SCORE.submit(); |
} |
} |
return; |
return; |
Line 880 sub sub_page_kw_js {
|
Line 894 sub sub_page_kw_js {
|
var Nmsg = msgform.savemsgN.value; |
var Nmsg = msgform.savemsgN.value; |
savedMsgHeader(Nmsg,usrctr,fullname); |
savedMsgHeader(Nmsg,usrctr,fullname); |
var subject = msgform.msgsub.value; |
var subject = msgform.msgsub.value; |
var rtrchk = eval("document.SCORE.includemsg"+usrctr); |
var msgchk = document.SCORE["includemsg"+usrctr].value; |
var msgchk = rtrchk.value; |
|
re = /msgsub/; |
re = /msgsub/; |
var shwsel = ""; |
var shwsel = ""; |
if (re.test(msgchk)) { shwsel = "checked" } |
if (re.test(msgchk)) { shwsel = "checked" } |
Line 892 sub sub_page_kw_js {
|
Line 905 sub sub_page_kw_js {
|
re = new RegExp(testmsg,"g"); |
re = new RegExp(testmsg,"g"); |
shwsel = ""; |
shwsel = ""; |
if (re.test(msgchk)) { shwsel = "checked" } |
if (re.test(msgchk)) { shwsel = "checked" } |
var message = eval("document.SCORE.savemsg"+i+".value"); |
var message = document.SCORE["savemsg"+i].value; |
var shownOnce = eval("document.SCORE.shownOnce"+i+".value"); |
message = (document.SCORE["shownOnce"+i].value == 0 ? checkEntities(message) : message); |
message = (shownOnce == 0 ? checkEntities(message) : message); |
|
displaySavedMsg(i,message,shwsel); //I do not get it. w/o checkEntities on saved messages, |
displaySavedMsg(i,message,shwsel); //I do not get it. w/o checkEntities on saved messages, |
//any < is already converted to <, etc. However, only once!! |
//any < is already converted to <, etc. However, only once!! |
} |
} |
newmsg = eval("document.SCORE.newmsg"+usrctr+".value"); |
newmsg = document.SCORE["newmsg"+usrctr].value; |
shwsel = ""; |
shwsel = ""; |
re = /newmsg/; |
re = /newmsg/; |
if (re.test(msgchk)) { shwsel = "checked" } |
if (re.test(msgchk)) { shwsel = "checked" } |
Line 930 sub sub_page_kw_js {
|
Line 942 sub sub_page_kw_js {
|
height = 600; |
height = 600; |
scrollbar = "yes"; |
scrollbar = "yes"; |
} |
} |
// if (window.pWin) {window.pWin.close(); window.pWin=null} |
|
var xpos = (screen.width-600)/2; |
var xpos = (screen.width-600)/2; |
xpos = (xpos < 0) ? '0' : xpos; |
xpos = (xpos < 0) ? '0' : xpos; |
var ypos = (screen.height-height)/2-30; |
var ypos = (screen.height-height)/2-30; |
Line 939 sub sub_page_kw_js {
|
Line 950 sub sub_page_kw_js {
|
pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height); |
pWin = window.open('', 'MessageCenter', '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.write("<html><head>"); |
pDoc.write("<html><head>"); |
pDoc.write("<title>Message Central</title>"); |
pDoc.write("<title>Message Central</title>"); |
|
|
Line 947 sub sub_page_kw_js {
|
Line 959 sub sub_page_kw_js {
|
pDoc.write(" opener.document.SCORE.msgsub.value = opener.checkEntities(document.msgcenter.msgsub.value);"); |
pDoc.write(" opener.document.SCORE.msgsub.value = opener.checkEntities(document.msgcenter.msgsub.value);"); |
pDoc.write(" var nmsg = opener.document.SCORE.savemsgN.value;"); |
pDoc.write(" var nmsg = opener.document.SCORE.savemsgN.value;"); |
pDoc.write(" var usrctr = document.msgcenter.usrctr.value;"); |
pDoc.write(" var usrctr = document.msgcenter.usrctr.value;"); |
pDoc.write(" var newval = eval(\\"opener.document.SCORE.newmsg\\"+usrctr);"); |
pDoc.write(" var newval = opener.document.SCORE[\\"newmsg\\"+usrctr];"); |
pDoc.write(" newval.value = opener.checkEntities(document.msgcenter.newmsg.value);"); |
pDoc.write(" newval.value = opener.checkEntities(document.msgcenter.newmsg.value);"); |
|
|
pDoc.write(" var msgchk = \\"\\";"); |
pDoc.write(" var msgchk = \\"\\";"); |
Line 956 sub sub_page_kw_js {
|
Line 968 sub sub_page_kw_js {
|
pDoc.write(" }"); |
pDoc.write(" }"); |
pDoc.write(" var includemsg = 0;"); |
pDoc.write(" var includemsg = 0;"); |
pDoc.write(" for (var i=1; i<=nmsg; i++) {"); |
pDoc.write(" for (var i=1; i<=nmsg; i++) {"); |
pDoc.write(" var opnmsg = eval(\\"opener.document.SCORE.savemsg\\"+i);"); |
pDoc.write(" var opnmsg = opener.document.SCORE[\\"savemsg\\"+i];"); |
pDoc.write(" var frmmsg = eval(\\"document.msgcenter.msg\\"+i);"); |
pDoc.write(" var frmmsg = document.msgcenter[\\"msg\\"+i];"); |
pDoc.write(" opnmsg.value = opener.checkEntities(frmmsg.value);"); |
pDoc.write(" opnmsg.value = opener.checkEntities(frmmsg.value);"); |
pDoc.write(" var showflg = eval(\\"opener.document.SCORE.shownOnce\\"+i);"); |
pDoc.write(" var showflg = opener.document.SCORE[\\"shownOnce\\"+i];"); |
pDoc.write(" showflg.value = \\"1\\";"); |
pDoc.write(" showflg.value = \\"1\\";"); |
pDoc.write(" var chkbox = eval(\\"document.msgcenter.msgn\\"+i);"); |
pDoc.write(" var chkbox = document.msgcenter[\\"msgn\\"+i];"); |
pDoc.write(" if (chkbox.checked) {"); |
pDoc.write(" if (chkbox.checked) {"); |
pDoc.write(" msgchk += \\"savemsg\\"+i+\\",\\";"); |
pDoc.write(" msgchk += \\"savemsg\\"+i+\\",\\";"); |
pDoc.write(" includemsg = 1;"); |
pDoc.write(" includemsg = 1;"); |
Line 971 sub sub_page_kw_js {
|
Line 983 sub sub_page_kw_js {
|
pDoc.write(" msgchk += \\"newmsg\\"+usrctr;"); |
pDoc.write(" msgchk += \\"newmsg\\"+usrctr;"); |
pDoc.write(" includemsg = 1;"); |
pDoc.write(" includemsg = 1;"); |
pDoc.write(" }"); |
pDoc.write(" }"); |
pDoc.write(" imgformname = eval(\\"opener.document.SCORE.mailicon\\"+usrctr);"); |
pDoc.write(" imgformname = opener.document.SCORE[\\"mailicon\\"+usrctr];"); |
pDoc.write(" imgformname.src = \\"$iconpath/\\"+((includemsg) ? \\"mailto.gif\\" : \\"mailbkgrd.gif\\");"); |
pDoc.write(" imgformname.src = \\"$iconpath/\\"+((includemsg) ? \\"mailto.gif\\" : \\"mailbkgrd.gif\\");"); |
pDoc.write(" var includemsg = eval(\\"opener.document.SCORE.includemsg\\"+usrctr);"); |
pDoc.write(" var includemsg = opener.document.SCORE[\\"includemsg\\"+usrctr];"); |
pDoc.write(" includemsg.value = msgchk;"); |
pDoc.write(" includemsg.value = msgchk;"); |
|
|
pDoc.write(" self.close()"); |
pDoc.write(" self.close()"); |
Line 1025 sub sub_page_kw_js {
|
Line 1037 sub sub_page_kw_js {
|
pDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>"); |
pDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>"); |
pDoc.write("</form>"); |
pDoc.write("</form>"); |
pDoc.write("</body></html>"); |
pDoc.write("</body></html>"); |
|
pDoc.close(); |
} |
} |
|
|
//====================== Script for keyword highlight options ============== |
//====================== Script for keyword highlight options ============== |
Line 1068 sub sub_page_kw_js {
|
Line 1081 sub sub_page_kw_js {
|
hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos); |
hwdWin = window.open('', 'KeywordHighlightCentral', '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.write("<html><head>"); |
hDoc.write("<html><head>"); |
hDoc.write("<title>Highlight Central</title>"); |
hDoc.write("<title>Highlight Central</title>"); |
|
|
Line 1116 sub sub_page_kw_js {
|
Line 1130 sub sub_page_kw_js {
|
hDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>"); |
hDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>"); |
hDoc.write("</form>"); |
hDoc.write("</form>"); |
hDoc.write("</body></html>"); |
hDoc.write("</body></html>"); |
|
hDoc.close(); |
} |
} |
|
|
</script> |
</script> |
Line 1165 sub gradeBox {
|
Line 1180 sub gradeBox {
|
'onChange="javascript:clearRadBox(this.form,\''.$counter.'_'.$partid.'\')" >'."\n"; |
'onChange="javascript:clearRadBox(this.form,\''.$counter.'_'.$partid.'\')" >'."\n"; |
if ($$record{'resource.'.$partid.'.solved'} eq 'excused') { |
if ($$record{'resource.'.$partid.'.solved'} eq 'excused') { |
$result.='<option> </option>'. |
$result.='<option> </option>'. |
'<option selected="on">excused</option></select>'."\n"; |
'<option selected="on">excused</option>'; |
} else { |
} else { |
$result.='<option selected="on"> </option>'. |
$result.='<option selected="on"> </option>'. |
'<option>excused</option></select>'."\n"; |
'<option>excused</option>'; |
} |
} |
|
$result.='<option>reset status</option></select>'."\n"; |
$result.="  \n"; |
$result.="  \n"; |
$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". |
Line 1340 KEYWORDS
|
Line 1356 KEYWORDS
|
$request->print(&show_problem($request,$symb,$uname,$udom,1,1)); |
$request->print(&show_problem($request,$symb,$uname,$udom,1,1)); |
} |
} |
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
my ($partlist,$handgrade) = &response_type($url); |
|
|
my ($partlist,$handgrade) = &response_type($url,$symb); |
|
|
# Display student info |
# Display student info |
$request->print(($counter == 0 ? '' : '<br />')); |
$request->print(($counter == 0 ? '' : '<br />')); |
my $result='<table border="0" width=100%><tr><td bgcolor="#777777">'."\n". |
my $result='<table border="0" width=100%><tr><td bgcolor="#777777">'."\n". |
'<table border="0" width=100%><tr bgcolor="#edffff"><td>'."\n"; |
'<table border="0" width=100%><tr bgcolor="#edffff"><td>'."\n"; |
|
|
$result.='<b>Fullname: </b>'.$ENV{'form.fullname'}. |
$result.='<b>Fullname: </b>'.&nameUserString(undef,$ENV{'form.fullname'},$uname,$udom).'<br />'."\n"; |
'<font color="#999999"> Username: '.$uname. |
|
($ENV{'user.domain'} eq $udom ? '' : ' ('.$udom.')').'</font><br />'."\n"; |
|
$result.='<input type="hidden" name="name'.$counter. |
$result.='<input type="hidden" name="name'.$counter. |
'" value="'.$ENV{'form.fullname'}.'" />'."\n"; |
'" value="'.$ENV{'form.fullname'}.'" />'."\n"; |
|
|
Line 1438 KEYWORDS
|
Line 1453 KEYWORDS
|
if (!exists($record{'resource.'.$partid.'.'.$respid.'.submission'})) { |
if (!exists($record{'resource.'.$partid.'.'.$respid.'.submission'})) { |
$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '. |
$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '. |
$partid.'</b> <font color="#999999">( ID '.$respid. |
$partid.'</b> <font color="#999999">( ID '.$respid. |
' )</font> Nothing submitted - no attempts<br /><br />'; |
' )</font> '. |
|
'<font color="red">Nothing submitted - no attempts</font><br /><br />'; |
} else { |
} else { |
foreach (@$string) { |
foreach (@$string) { |
my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/; |
my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/; |
Line 1446 KEYWORDS
|
Line 1462 KEYWORDS
|
my ($ressub,$subval) = split(/:/,$_,2); |
my ($ressub,$subval) = split(/:/,$_,2); |
# Similarity check |
# Similarity check |
my $similar=''; |
my $similar=''; |
my ($oname,$odom,$ocrsid,$oessay,$osim)=&most_similar($uname,$udom,$subval); |
my $oname; |
if ($osim) { |
my $odom; |
$osim=int($osim*100.0); |
my $ocrsid; |
$similar='<hr /><h3><font color="#FF0000">Essay is '.$osim. |
my $oessay; |
'% similar to an essay by '.&Apache::loncommon::plainname($oname,$odom). |
my $osim; |
'</font></h3><blockquote><i>'. |
if($ENV{'form.checkPlag'}){ |
&keywords_highlight($oessay).'</i></blockquote><hr />'; |
($oname,$odom,$ocrsid,$oessay,$osim)=&most_similar($uname,$udom,$subval); |
|
if ($osim) { |
|
$osim=int($osim*100.0); |
|
$similar='<hr /><h3><font color="#FF0000">Essay is '.$osim. |
|
'% similar to an essay by '.&Apache::loncommon::plainname($oname,$odom). |
|
'</font></h3><blockquote><i>'. |
|
&keywords_highlight($oessay).'</i></blockquote><hr />'; |
|
} |
} |
} |
$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '. |
$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '. |
$partid.'</b> <font color="#999999">( ID '.$respid. |
$partid.'</b> <font color="#999999">( ID '.$respid. |
Line 1463 KEYWORDS
|
Line 1486 KEYWORDS
|
'"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> '. |
'"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> '. |
'<font color="red" size="1">Like all files provided by users, '. |
'<font color="red" size="1">Like all files provided by users, '. |
'this file may contain virusses</font><br />':''). |
'this file may contain virusses</font><br />':''). |
'<b>Submitted Answer: </b>'.($responsetype =~ /^(essay|option)$/ ? |
'<b>Submitted Answer: </b>'. |
'<blockquote>' : ''). |
|
# &cleanRecord(&keywords_highlight($subval),$responsetype). |
|
&cleanRecord($subval,$responsetype,$symb). |
&cleanRecord($subval,$responsetype,$symb). |
($responsetype =~ /^(essay|option)$/ ? '</blockquote><br />' : |
'<br /><br />'.$similar."\n" |
'<br /><br />').$similar."\n" |
|
if ($ENV{'form.lastSub'} eq 'lastonly' || |
if ($ENV{'form.lastSub'} eq 'lastonly' || |
($ENV{'form.lastSub'} eq 'hdgrade' && |
($ENV{'form.lastSub'} eq 'hdgrade' && |
$$handgrade{$part} =~ /:yes$/)); |
$$handgrade{$part} =~ /:yes$/)); |
Line 1515 KEYWORDS
|
Line 1535 KEYWORDS
|
$msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.'; |
$msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.'; |
} |
} |
$msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript |
$msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript |
# $result.='<tr><td bgcolor="#ffffff">'."\n". |
|
$result='<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
$result='<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
'<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. |
Line 1530 KEYWORDS
|
Line 1549 KEYWORDS
|
|
|
my %seen = (); |
my %seen = (); |
my @partlist; |
my @partlist; |
|
my @gradePartRespid; |
for (sort keys(%$handgrade)) { |
for (sort keys(%$handgrade)) { |
my ($partid,$respid) = split(/_/); |
my ($partid,$respid) = split(/_/); |
next if ($seen{$partid} > 0); |
next if ($seen{$partid} > 0); |
$seen{$partid}++; |
$seen{$partid}++; |
next if ($$handgrade{$_} =~ /:no$/ && $ENV{'form.lastSub'} =~ /^(hdgrade)$/); |
next if ($$handgrade{$_} =~ /:no$/ && $ENV{'form.lastSub'} =~ /^(hdgrade)$/); |
push @partlist,$partid; |
push @partlist,$partid; |
|
push @gradePartRespid,$partid.'.'.$respid; |
|
|
$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record)); |
$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record)); |
} |
} |
$result='<input type="hidden" name="partlist'.$counter. |
$result='<input type="hidden" name="partlist'.$counter. |
'" value="'.(join ":",@partlist).'" />'."\n"; |
'" value="'.(join ":",@partlist).'" />'."\n"; |
|
$result.='<input type="hidden" name="gradePartRespid'. |
|
'" value="'.(join ":",@gradePartRespid).'" />'."\n" if ($counter == 0); |
my $ctr = 0; |
my $ctr = 0; |
while ($ctr < scalar(@partlist)) { |
while ($ctr < scalar(@partlist)) { |
$result.='<input type="hidden" name="partid'.$counter.'_'.$ctr.'" value="'. |
$result.='<input type="hidden" name="partid'.$counter.'_'.$ctr.'" value="'. |
Line 1562 KEYWORDS
|
Line 1585 KEYWORDS
|
my $nsel = ($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : '1'); |
my $nsel = ($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : '1'); |
$ntstu =~ s/<option>$nsel</<option selected="on">$nsel</; |
$ntstu =~ s/<option>$nsel</<option selected="on">$nsel</; |
$endform.=$ntstu.'student(s) '; |
$endform.=$ntstu.'student(s) '; |
$endform.='<input type="button" value="Next" '. |
$endform.='<input type="button" value="Previous" '. |
'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> '."\n". |
'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> '."\n". |
'<input type="button" value="Previous" '. |
'<input type="button" value="Next" '. |
'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> '; |
'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> '; |
$endform.='(Next and Previous do not save the scores.)'."\n" ; |
$endform.='(Next and Previous (student) do not save the scores.)'."\n" ; |
$endform.='</td><tr></table></form>'; |
$endform.='</td><tr></table></form>'; |
$endform.=&show_grading_menu_form($symb,$url); |
$endform.=&show_grading_menu_form($symb,$url); |
$request->print($endform); |
$request->print($endform); |
Line 1596 sub get_last_submission {
|
Line 1619 sub get_last_submission {
|
} |
} |
} |
} |
} |
} |
@string = $string[0] eq '' ? 'Nothing submitted - no attempts.' : @string; |
@string = $string[0] eq '' ? '<font color="red">Nothing submitted - no attempts.</font>' : @string; |
return \@string,\$timestamp; |
return \@string,\$timestamp; |
} |
} |
|
|
Line 1766 sub processHandGrade {
|
Line 1789 sub processHandGrade {
|
} |
} |
} |
} |
$ctr = 0; |
$ctr = 0; |
my ($partlist,$handgrade) = &response_type($ENV{'form.url'}); |
|
@parsedlist = reverse @parsedlist if ($button eq 'Previous'); |
@parsedlist = reverse @parsedlist if ($button eq 'Previous'); |
foreach my $student (@parsedlist) { |
foreach my $student (@parsedlist) { |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
if ($ENV{'form.submitonly'} eq 'yes') { |
if ($ENV{'form.submitonly'} eq 'yes') { |
my (%status) = &student_gradeStatus($ENV{'form.url'},$symb,$udom,$uname,$partlist) ; |
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
my $statusflg = ''; |
my $statusflg = ''; |
foreach (keys(%status)) { |
foreach (split(/:/,$ENV{'form.gradePartRespid'})){ |
$statusflg = 1 if ($status{$_} ne 'nothing'); |
$statusflg = 1 if (exists ($record{'resource.'.$_.'.submission'})); |
my ($foo,$partid,$foo1) = split(/\./); |
|
$statusflg = '' if ($status{'resource.'.$partid.'.submitted_by'} ne ''); |
|
} |
} |
next if ($statusflg eq ''); |
next if ($statusflg eq ''); |
} |
} |
push @nextlist,$student if ($ctr < $ntstu); |
push @nextlist,$student if ($ctr < $ntstu); |
|
last if ($ctr == $ntstu); |
$ctr++; |
$ctr++; |
} |
} |
|
|
Line 1815 sub saveHandGrade {
|
Line 1836 sub saveHandGrade {
|
my %newrecord = (); |
my %newrecord = (); |
my ($pts,$wgt) = ('',''); |
my ($pts,$wgt) = ('',''); |
foreach (split(/:/,$ENV{'form.partlist'.$newflg})) { |
foreach (split(/:/,$ENV{'form.partlist'.$newflg})) { |
if ($ENV{'form.GD_SEL'.$newflg.'_'.$_} eq 'excused') { |
my $dropMenu = $ENV{'form.GD_SEL'.$newflg.'_'.$_}; |
|
if ($dropMenu eq 'excused') { |
if ($record{'resource.'.$_.'.solved'} ne 'excused') { |
if ($record{'resource.'.$_.'.solved'} ne 'excused') { |
$newrecord{'resource.'.$_.'.solved'} = 'excused'; |
$newrecord{'resource.'.$_.'.solved'} = 'excused'; |
if (exists($record{'resource.'.$_.'.awarded'})) { |
if (exists($record{'resource.'.$_.'.awarded'})) { |
$newrecord{'resource.'.$_.'.awarded'} = ''; |
$newrecord{'resource.'.$_.'.awarded'} = ''; |
} |
} |
|
$newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
} |
} |
} else { |
} elsif ($dropMenu eq 'reset status' |
|
&& exists($record{'resource.'.$_.'.solved'})) { #don't bother if no old records -> no attempts |
|
$newrecord{'resource.'.$_.'.tries'} = 0; |
|
$newrecord{'resource.'.$_.'.solved'} = ''; |
|
$newrecord{'resource.'.$_.'.award'} = ''; |
|
$newrecord{'resource.'.$_.'.awarded'} = 0; |
|
$newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
|
} elsif ($dropMenu eq '') { |
$pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ? |
$pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ? |
$ENV{'form.GD_BOX'.$newflg.'_'.$_} : |
$ENV{'form.GD_BOX'.$newflg.'_'.$_} : |
$ENV{'form.RADVAL'.$newflg.'_'.$_}); |
$ENV{'form.RADVAL'.$newflg.'_'.$_}); |
Line 1865 sub viewgrades_js {
|
Line 1895 sub viewgrades_js {
|
$request->print(<<VIEWJAVASCRIPT); |
$request->print(<<VIEWJAVASCRIPT); |
<script type="text/javascript" language="javascript"> |
<script type="text/javascript" language="javascript"> |
function writePoint(partid,weight,point) { |
function writePoint(partid,weight,point) { |
var radioButton = eval("document.classgrade.RADVAL_"+partid); |
var radioButton = document.classgrade["RADVAL_"+partid]; |
var textbox = eval("document.classgrade.TEXTVAL_"+partid); |
var textbox = document.classgrade["TEXTVAL_"+partid]; |
if (point == "textval") { |
if (point == "textval") { |
var point = eval("document.classgrade.TEXTVAL_"+partid+".value"); |
point = document.classgrade["TEXTVAL_"+partid].value; |
if (isNaN(point) || parseFloat(point) < 0) { |
if (isNaN(point) || parseFloat(point) < 0) { |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
var resetbox = false; |
var resetbox = false; |
Line 1899 sub viewgrades_js {
|
Line 1929 sub viewgrades_js {
|
} |
} |
|
|
} else { |
} else { |
textbox.value = point; |
textbox.value = parseFloat(point); |
} |
} |
for (i=0;i<document.classgrade.total.value;i++) { |
for (i=0;i<document.classgrade.total.value;i++) { |
var user = eval("document.classgrade.ctr"+i+".value"); |
var user = document.classgrade["ctr"+i].value; |
var scorename = eval("document.classgrade.GD_"+user+ |
var scorename = document.classgrade["GD_"+user+"_"+partid+"_awarded"]; |
"_"+partid+"_awarded"); |
var saveval = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value; |
var saveval = eval("document.classgrade.GD_"+user+ |
var selname = document.classgrade["GD_"+user+"_"+partid+"_solved"]; |
"_"+partid+"_solved_s.value"); |
|
var selname = eval("document.classgrade.GD_"+user+"_"+partid+"_solved"); |
|
if (saveval != "correct") { |
if (saveval != "correct") { |
scorename.value = point; |
scorename.value = point; |
if (selname[0].selected != true) { |
if (selname[0].selected != true) { |
Line 1915 sub viewgrades_js {
|
Line 1943 sub viewgrades_js {
|
} |
} |
} |
} |
} |
} |
var selval = eval("document.classgrade.SELVAL_"+partid); |
document.classgrade["SELVAL_"+partid][0].selected = true; |
selval[0].selected = true; |
|
} |
} |
|
|
function writeRadText(partid,weight) { |
function writeRadText(partid,weight) { |
var selval = eval("document.classgrade.SELVAL_"+partid); |
var selval = document.classgrade["SELVAL_"+partid]; |
var radioButton = eval("document.classgrade.RADVAL_"+partid); |
var radioButton = document.classgrade["RADVAL_"+partid]; |
var textbox = eval("document.classgrade.TEXTVAL_"+partid); |
var textbox = document.classgrade["TEXTVAL_"+partid]; |
if (selval[1].selected) { |
if (selval[1].selected || selval[2].selected) { |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
radioButton[i].checked=false; |
radioButton[i].checked=false; |
|
|
Line 1931 sub viewgrades_js {
|
Line 1958 sub viewgrades_js {
|
textbox.value = ""; |
textbox.value = ""; |
|
|
for (i=0;i<document.classgrade.total.value;i++) { |
for (i=0;i<document.classgrade.total.value;i++) { |
var user = eval("document.classgrade.ctr"+i+".value"); |
var user = document.classgrade["ctr"+i].value; |
var scorename = eval("document.classgrade.GD_"+user+ |
var scorename = document.classgrade["GD_"+user+"_"+partid+"_awarded"]; |
"_"+partid+"_awarded"); |
var saveval = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value; |
var saveval = eval("document.classgrade.GD_"+user+ |
var selname = document.classgrade["GD_"+user+"_"+partid+"_solved"]; |
"_"+partid+"_solved_s.value"); |
|
var selname = eval("document.classgrade.GD_"+user+ |
|
"_"+partid+"_solved"); |
|
if (saveval != "correct") { |
if (saveval != "correct") { |
scorename.value = ""; |
scorename.value = ""; |
selname[1].selected = true; |
if (selval[1].selected) { |
|
selname[1].selected = true; |
|
} else { |
|
selname[2].selected = true; |
|
if (Number(document.classgrade["GD_"+user+"_"+partid+"_tries"].value)) |
|
{document.classgrade["GD_"+user+"_"+partid+"_tries"].value = '0';} |
|
} |
} |
} |
} |
} |
} else { |
} else { |
for (i=0;i<document.classgrade.total.value;i++) { |
for (i=0;i<document.classgrade.total.value;i++) { |
var user = eval("document.classgrade.ctr"+i+".value"); |
var user = document.classgrade["ctr"+i].value; |
var scorename = eval("document.classgrade.GD_"+user+ |
var scorename = document.classgrade["GD_"+user+"_"+partid+"_awarded"]; |
"_"+partid+"_awarded"); |
var saveval = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value; |
var saveval = eval("document.classgrade.GD_"+user+ |
var selname = document.classgrade["GD_"+user+"_"+partid+"_solved"]; |
"_"+partid+"_solved_s.value"); |
|
var selname = eval("document.classgrade.GD_"+user+ |
|
"_"+partid+"_solved"); |
|
if (saveval != "correct") { |
if (saveval != "correct") { |
scorename.value = eval("document.classgrade.GD_"+user+ |
scorename.value = document.classgrade["GD_"+user+"_"+partid+"_awarded_s"].value; |
"_"+partid+"_awarded_s.value");; |
|
selname[0].selected = true; |
selname[0].selected = true; |
} |
} |
} |
} |
Line 1962 sub viewgrades_js {
|
Line 1988 sub viewgrades_js {
|
} |
} |
|
|
function changeSelect(partid,user) { |
function changeSelect(partid,user) { |
var selval = eval("document.classgrade.GD_"+user+'_'+partid+"_solved"); |
var selval = document.classgrade["GD_"+user+'_'+partid+"_solved"]; |
var textbox = eval("document.classgrade.GD_"+user+'_'+partid+"_awarded"); |
var textbox = document.classgrade["GD_"+user+'_'+partid+"_awarded"]; |
var point = textbox.value; |
var point = textbox.value; |
var weight = eval("document.classgrade.weight_"+partid+".value"); |
var weight = document.classgrade["weight_"+partid].value; |
|
|
if (isNaN(point) || parseFloat(point) < 0) { |
if (isNaN(point) || parseFloat(point) < 0) { |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
Line 1984 sub viewgrades_js {
|
Line 2010 sub viewgrades_js {
|
} |
} |
|
|
function changeOneScore(partid,user) { |
function changeOneScore(partid,user) { |
var selval = eval("document.classgrade.GD_"+user+'_'+partid+"_solved"); |
var selval = document.classgrade["GD_"+user+'_'+partid+"_solved"]; |
if (selval[1].selected) { |
if (selval[1].selected || selval[2].selected) { |
var boxval = eval("document.classgrade.GD_"+user+'_'+partid+"_awarded"); |
document.classgrade["GD_"+user+'_'+partid+"_awarded"].value = ""; |
boxval.value = ""; |
if (selval[2].selected) { |
|
document.classgrade["GD_"+user+'_'+partid+"_tries"].value = "0"; |
|
} |
} |
} |
} |
} |
|
|
function resetEntry(numpart) { |
function resetEntry(numpart) { |
for (ctpart=0;ctpart<numpart;ctpart++) { |
for (ctpart=0;ctpart<numpart;ctpart++) { |
var partid = eval("document.classgrade.partid_"+ctpart+".value"); |
var partid = document.classgrade["partid_"+ctpart].value; |
var radioButton = eval("document.classgrade.RADVAL_"+partid); |
var radioButton = document.classgrade["RADVAL_"+partid]; |
var textbox = eval("document.classgrade.TEXTVAL_"+partid); |
var textbox = document.classgrade["TEXTVAL_"+partid]; |
var selval = eval("document.classgrade.SELVAL_"+partid); |
var selval = document.classgrade["SELVAL_"+partid]; |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
radioButton[i].checked=false; |
radioButton[i].checked=false; |
|
|
Line 2005 sub viewgrades_js {
|
Line 2033 sub viewgrades_js {
|
selval[0].selected = true; |
selval[0].selected = true; |
|
|
for (i=0;i<document.classgrade.total.value;i++) { |
for (i=0;i<document.classgrade.total.value;i++) { |
var user = eval("document.classgrade.ctr"+i+".value"); |
var user = document.classgrade["ctr"+i].value; |
var resetscore = eval("document.classgrade.GD_"+user+ |
var resetscore = document.classgrade["GD_"+user+"_"+partid+"_awarded"]; |
"_"+partid+"_awarded"); |
resetscore.value = document.classgrade["GD_"+user+"_"+partid+"_awarded_s"].value; |
resetscore.value = eval("document.classgrade.GD_"+user+ |
var resettries = document.classgrade["GD_"+user+"_"+partid+"_tries"]; |
"_"+partid+"_awarded_s.value"); |
resettries.value = document.classgrade["GD_"+user+"_"+partid+"_tries_s"].value; |
|
var saveselval = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value; |
var saveselval = eval("document.classgrade.GD_"+user+ |
var selname = document.classgrade["GD_"+user+"_"+partid+"_solved"]; |
"_"+partid+"_solved_s.value"); |
|
|
|
var selname = eval("document.classgrade.GD_"+user+"_"+partid+"_solved"); |
|
if (saveselval == "excused") { |
if (saveselval == "excused") { |
if (selname[1].selected == false) { selname[1].selected = true;} |
if (selname[1].selected == false) { selname[1].selected = true;} |
} else { |
} else { |
Line 2048 sub viewgrades {
|
Line 2073 sub viewgrades {
|
'<input type="hidden" name="command" value="editgrades" />'."\n". |
'<input type="hidden" name="command" value="editgrades" />'."\n". |
'<input type="hidden" name="section" value="'.$ENV{'form.section'}.'" />'."\n". |
'<input type="hidden" name="section" value="'.$ENV{'form.section'}.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
|
'<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n"; |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n"; |
|
|
$result.='<h3>Assign Common Grade To '; |
my $sectionClass; |
if ($ENV{'form.section'} eq 'all') { |
if ($ENV{'form.section'} eq 'all') { |
$result.='Class </h3>'; |
$sectionClass='Class </h3>'; |
} elsif ($ENV{'form.section'} eq 'no') { |
} elsif ($ENV{'form.section'} eq 'no') { |
$result.='Students in no Section </h3>'; |
$sectionClass='Students in no Section </h3>'; |
} else { |
} else { |
$result.='Students in Section '.$ENV{'form.section'}.'</h3>'; |
$sectionClass='Students in Section '.$ENV{'form.section'}.'</h3>'; |
} |
} |
|
$result.='<h3>Assign Common Grade To '.$sectionClass; |
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
'<table border=0><tr bgcolor="#ffffdd"><td>'; |
'<table border=0><tr bgcolor="#ffffdd"><td>'; |
#radio buttons/text box for assigning points for a section or class. |
#radio buttons/text box for assigning points for a section or class. |
#handles different parts of a problem |
#handles different parts of a problem |
my ($partlist,$handgrade) = &response_type($ENV{'form.url'}); |
my ($partlist,$handgrade) = &response_type($url,$symb); |
my %weight = (); |
my %weight = (); |
my $ctsparts = 0; |
my $ctsparts = 0; |
$result.='<table border="0">'; |
$result.='<table border="0">'; |
Line 2098 sub viewgrades {
|
Line 2125 sub viewgrades {
|
'onChange="javascript:writeRadText(\''.$partid.'\','. |
'onChange="javascript:writeRadText(\''.$partid.'\','. |
$weight{$partid}.')"> '. |
$weight{$partid}.')"> '. |
'<option selected="on"> </option>'. |
'<option selected="on"> </option>'. |
'<option>excused</option></select></td></tr>'."\n"; |
'<option>excused</option>'. |
|
'<option>reset status</option></select></td></tr>'."\n"; |
$ctsparts++; |
$ctsparts++; |
} |
} |
$result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n". |
$result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n". |
Line 2108 sub viewgrades {
|
Line 2136 sub viewgrades {
|
|
|
#table listing all the students in a section/class |
#table listing all the students in a section/class |
#header of table |
#header of table |
$result.= '<h3>Assign Grade to Specific Students in '; |
$result.= '<h3>Assign Grade to Specific Students in '.$sectionClass; |
if ($ENV{'form.section'} eq 'all') { |
|
$result.='the Class </h3>'; |
|
} elsif ($ENV{'form.section'} eq 'no') { |
|
$result.='no Section </h3>'; |
|
} else { |
|
$result.='Section '.$ENV{'form.section'}.'</h3>'; |
|
} |
|
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
'<table border=0><tr bgcolor="#deffff">'. |
'<table border=0><tr bgcolor="#deffff"><td> <b>No.</b> </td>'. |
'<td><b>Fullname</b> <font color="#999999">(Username)</font></td>'."\n"; |
'<td>'.&nameUserString('header')."</td>\n"; |
my (@parts) = sort(&getpartlist($url)); |
my (@parts) = sort(&getpartlist($url)); |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
$display =~ s/^Number of Attempts/Tries/; # makes the column narrower |
$display =~ s|^Number of Attempts|Tries<br />|; # makes the column narrower |
if (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); } |
if (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); } |
if ($display =~ /^Partial Credit Factor/) { |
if ($display =~ /^Partial Credit Factor/) { |
my ($partid) = &split_part_type($part); |
my ($partid) = &split_part_type($part); |
Line 2143 sub viewgrades {
|
Line 2164 sub viewgrades {
|
my $uname = $_; |
my $uname = $_; |
$uname=~s/:/_/; |
$uname=~s/:/_/; |
$result.='<input type="hidden" name="ctr'.$ctr.'" value="'.$uname.'" />'."\n"; |
$result.='<input type="hidden" name="ctr'.$ctr.'" value="'.$uname.'" />'."\n"; |
$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'}, |
|
$_,$$fullname{$_},\@parts,\%weight); |
|
$ctr++; |
$ctr++; |
|
$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'}, |
|
$_,$$fullname{$_},\@parts,\%weight,$ctr); |
} |
} |
$result.='</table></td></tr></table>'; |
$result.='</table></td></tr></table>'; |
$result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n"; |
$result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n"; |
$result.='<input type="button" value="Submit Changes" '. |
$result.='<input type="button" value="Save" '. |
'onClick="javascript:submit();" TARGET=_self /></form>'."\n"; |
'onClick="javascript:submit();" TARGET=_self /></form>'."\n"; |
if (scalar(%$fullname) eq 0) { |
if (scalar(%$fullname) eq 0) { |
my $colspan=3+scalar(@parts); |
my $colspan=3+scalar(@parts); |
Line 2162 sub viewgrades {
|
Line 2183 sub viewgrades {
|
|
|
#--- call by previous routine to display each student |
#--- call by previous routine to display each student |
sub viewstudentgrade { |
sub viewstudentgrade { |
my ($url,$symb,$courseid,$student,$fullname,$parts,$weight) = @_; |
my ($url,$symb,$courseid,$student,$fullname,$parts,$weight,$ctr) = @_; |
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>'. |
my $result='<tr bgcolor="#ffffdd"><td align="right">'.$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"; |
Line 2186 sub viewstudentgrade {
|
Line 2207 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.='<td align="middle"> <select name="'. |
'GD_'.$student.'_'.$part.'_solved" '. |
'GD_'.$student.'_'.$part.'_solved" '. |
'onChange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n"; |
'onChange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n"; |
my $optsel = '<option selected="on"> </option><option>excused</option>'."\n"; |
$result.= (($status eq 'excused') ? '<option> </option><option selected="on">excused</option>' |
$optsel = '<option> </option><option selected="on">excused</option>'."\n" |
: '<option selected="on"> </option><option>excused</option>')."\n"; |
if ($status eq 'excused'); |
$result.='<option>reset status</option>'; |
$result.=$optsel; |
$result.="</select> </td>\n"; |
$result.="</select></td>\n"; |
|
} else { |
} else { |
$result.='<input type="hidden" name="'. |
$result.='<input type="hidden" name="'. |
'GD_'.$student.'_'.$part.'_'.$type.'_s" value="'.$score.'" />'. |
'GD_'.$student.'_'.$part.'_'.$type.'_s" value="'.$score.'" />'. |
Line 2217 sub editgrades {
|
Line 2237 sub editgrades {
|
my $title='<h3><font color="#339933">Current Grade Status</font></h3>'; |
my $title='<h3><font color="#339933">Current Grade Status</font></h3>'; |
$title.='<font size=+1><b>Current Resource: </b>'.$ENV{'form.probTitle'}.'</font><br />'."\n"; |
$title.='<font size=+1><b>Current Resource: </b>'.$ENV{'form.probTitle'}.'</font><br />'."\n"; |
$title.='<font size=+1><b>Section: </b>'.$ENV{'form.section'}.'</font>'."\n"; |
$title.='<font size=+1><b>Section: </b>'.$ENV{'form.section'}.'</font>'."\n"; |
|
|
my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n"; |
my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n"; |
$result.= '<table border="0"><tr bgcolor="#deffff">'. |
$result.= '<table border="0"><tr bgcolor="#deffff">'. |
'<td rowspan=2><b>Username</b></td><td rowspan=2><b>Domain</b></td><td rowspan=2><b>Fullname</b></td>'."\n"; |
'<td rowspan=2 valign="center"> <b>No.</b> </td>'. |
|
'<td rowspan=2 valign="center">'.&nameUserString('header')."</td>\n"; |
|
|
my %scoreptr = ( |
my %scoreptr = ( |
'correct' =>'correct_by_override', |
'correct' =>'correct_by_override', |
Line 2253 sub editgrades {
|
Line 2275 sub editgrades {
|
if ($type eq 'awarded' || $type eq 'solved') { next; } |
if ($type eq 'awarded' || $type eq 'solved') { next; } |
my $display=&Apache::lonnet::metadata($url,$stores.'.display'); |
my $display=&Apache::lonnet::metadata($url,$stores.'.display'); |
$display =~ s/\[Part: (\w)+\]//; |
$display =~ s/\[Part: (\w)+\]//; |
$header .= '<td align="center"> <b>Old</b> '.$display.' </td>'. |
$display =~ s/Number of Attempts/Tries/; |
'<td align="center"> <b>New</b> '.$display.' </td>'; |
$header .= '<td align="center"> <b>Old '.$display.'</b> </td>'. |
|
'<td align="center"> <b>New '.$display.'</b> </td>'; |
$columns{$partid}+=2; |
$columns{$partid}+=2; |
} |
} |
} |
} |
Line 2268 sub editgrades {
|
Line 2291 sub editgrades {
|
$result .= $header; |
$result .= $header; |
$result .= '</tr>'."\n"; |
$result .= '</tr>'."\n"; |
my $noupdate; |
my $noupdate; |
|
my ($updateCtr,$noupdateCtr) = (1,1); |
for ($i=0; $i<$ENV{'form.total'}; $i++) { |
for ($i=0; $i<$ENV{'form.total'}; $i++) { |
my $line; |
my $line; |
my $user = $ENV{'form.ctr'.$i}; |
my $user = $ENV{'form.ctr'.$i}; |
Line 2276 sub editgrades {
|
Line 2300 sub editgrades {
|
my ($uname,$udom)=split(/_/,$user); |
my ($uname,$udom)=split(/_/,$user); |
my %newrecord; |
my %newrecord; |
my $updateflag = 0; |
my $updateflag = 0; |
$line .= '<tr bgcolor="#ffffde"><td>'.$uname.' </td><td>'. |
$line .= '<td>'.&nameUserString(undef,$$fullname{$usercolon},$uname,$udom).'</td>'; |
$udom.' </td><td>'. |
|
$$fullname{$usercolon}.' </td>'; |
|
my $usec=$classlist->{"$uname:$udom"}[5]; |
my $usec=$classlist->{"$uname:$udom"}[5]; |
if (!&canmodify($usec)) { |
if (!&canmodify($usec)) { |
my $numcols=scalar(@partid)*(scalar(@parts)-1)*2; |
my $numcols=scalar(@partid)*4+2; |
$noupdate.=$line."<td colspan=\"$numcols\"><font color=\"red\">Not allowed to modify student</font></td></tr>"; |
$noupdate.=$line."<td colspan=\"$numcols\"><font color=\"red\">Not allowed to modify student</font></td></tr>"; |
next; |
next; |
} |
} |
Line 2302 sub editgrades {
|
Line 2324 sub editgrades {
|
} elsif ($partial == 0) { |
} elsif ($partial == 0) { |
$score = 'incorrect_by_override'; |
$score = 'incorrect_by_override'; |
} |
} |
$score = 'excused' if (($ENV{'form.GD_'.$user.'_'.$_.'_solved'} eq 'excused') && |
my $dropMenu = $ENV{'form.GD_'.$user.'_'.$_.'_solved'}; |
($score ne 'excused')); |
$score = 'excused' if (($dropMenu eq 'excused') && ($score ne 'excused')); |
|
|
|
if ($dropMenu eq 'reset status' && |
|
$old_score ne '') { # ignore if no previous attempts => nothing to reset |
|
$newrecord{'resource.'.$_.'.tries'} = 0; |
|
$newrecord{'resource.'.$_.'.solved'} = ''; |
|
$newrecord{'resource.'.$_.'.award'} = ''; |
|
$newrecord{'resource.'.$_.'.awarded'} = 0; |
|
$newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
|
$updateflag = 1; |
|
} |
|
|
$line .= '<td align="center">'.$old_aw.' </td>'. |
$line .= '<td align="center">'.$old_aw.' </td>'. |
'<td align="center">'.$awarded. |
'<td align="center">'.$awarded. |
($score eq 'excused' ? $score : '').' </td>'; |
($score eq 'excused' ? $score : '').' </td>'; |
Line 2336 sub editgrades {
|
Line 2369 sub editgrades {
|
$count++; |
$count++; |
&Apache::lonnet::cstore(\%newrecord,$symb,$ENV{'request.course.id'}, |
&Apache::lonnet::cstore(\%newrecord,$symb,$ENV{'request.course.id'}, |
$udom,$uname); |
$udom,$uname); |
$result.=$line; |
$result.='<tr bgcolor="#ffffde"><td align="right"> '.$updateCtr.' </td>'.$line; |
|
$updateCtr++; |
} else { |
} else { |
$noupdate.=$line; |
$noupdate.='<tr bgcolor="#ffffde"><td align="right"> '.$noupdateCtr.' </td>'.$line; |
|
$noupdateCtr++; |
} |
} |
} |
} |
if ($noupdate) { |
if ($noupdate) { |
my $numcols=(scalar(@partid)*(scalar(@parts)-1)*2)+3; |
# my $numcols=(scalar(@partid)*(scalar(@parts)-1)*2)+3; |
$result .= '<tr bgcolor="#ffffff"><td align="center" colspan="'.$numcols.'">No Changes Occured For the Students Below</td></tr>'.$noupdate; |
my $numcols=scalar(@partid)*4+2; |
|
$result .= '<tr bgcolor="#ffffff"><td align="center" colspan="'.$numcols.'">No Changes Occurred For the Students Below</td></tr>'.$noupdate; |
} |
} |
$result .= '</table></td></tr></table>'."\n". |
$result .= '</table></td></tr></table>'."\n". |
&show_grading_menu_form ($symb,$url); |
&show_grading_menu_form ($symb,$url); |
my $msg = '<b>Number of records updated = '.$rec_update. |
my $msg = '<br /><b>Number of records updated = '.$rec_update. |
' for '.$count.' student'.($count <= 1 ? '' : 's').'.</b><br />'. |
' for '.$count.' student'.($count <= 1 ? '' : 's').'.</b><br />'. |
'<b>Total number of students = '.$ENV{'form.total'}.'</b><br />'; |
'<b>Total number of students = '.$ENV{'form.total'}.'</b><br />'; |
return $title.$msg.$result; |
return $title.$msg.$result; |
Line 2482 to this page if the data selected is ins
|
Line 2518 to this page if the data selected is ins
|
$javascript |
$javascript |
</script> |
</script> |
ENDPICK |
ENDPICK |
$request->print(&show_grading_menu_form($symb,$url)); |
|
return ''; |
return ''; |
|
|
} |
} |
Line 2679 function checkPickOne(formname) {
|
Line 2714 function checkPickOne(formname) {
|
alert("Please select the student you wish to grade."); |
alert("Please select the student you wish to grade."); |
return; |
return; |
} |
} |
var ptr = pullDownSelection(formname.selectpage); |
ptr = pullDownSelection(formname.selectpage); |
formname.page.value = eval("formname.page"+ptr+".value"); |
formname.page.value = formname["page"+ptr].value; |
formname.title.value = eval("formname.title"+ptr+".value"); |
formname.title.value = formname["title"+ptr].value; |
formname.submit(); |
formname.submit(); |
} |
} |
|
|
Line 2699 LISTJAVASCRIPT
|
Line 2734 LISTJAVASCRIPT
|
$result.='<form action="/adm/grades" method="post" name="displayPage">'."\n"; |
$result.='<form action="/adm/grades" method="post" name="displayPage">'."\n"; |
$result.=' <b>Problems from:</b> <select name="selectpage">'."\n"; |
$result.=' <b>Problems from:</b> <select name="selectpage">'."\n"; |
my ($titles,$symbx) = &getSymbMap($request); |
my ($titles,$symbx) = &getSymbMap($request); |
my ($curpage,$type,$mapId) = ($symb =~ /(.*?\.(page|sequence))___(\d+)___/); |
my ($curpage) =&Apache::lonnet::decode_symb($symb); |
|
# my ($curpage,$mapId) =&Apache::lonnet::decode_symb($symb); |
|
# my $type=($curpage =~ /\.(page|sequence)/); |
my $ctr=0; |
my $ctr=0; |
foreach (@$titles) { |
foreach (@$titles) { |
my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); |
my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); |
Line 2735 LISTJAVASCRIPT
|
Line 2772 LISTJAVASCRIPT
|
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."<br />\n"; |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."<br />\n"; |
|
|
$result.=' <input type="button" '. |
$result.=' <input type="button" '. |
'onClick="javascript:checkPickOne(this.form);"value="Submit" /><br />'."\n"; |
'onClick="javascript:checkPickOne(this.form);"value="Next->" /><br />'."\n"; |
|
|
$request->print($result); |
$request->print($result); |
|
|
my $studentTable.=' <b>Select a student you wish to grade</b><br>'. |
my $studentTable.=' <b>Select a student you wish to grade and then click on the Next button.</b><br>'. |
'<table border="0"><tr><td bgcolor="#777777">'. |
'<table border="0"><tr><td bgcolor="#777777">'. |
'<table border="0"><tr bgcolor="#e6ffff">'. |
'<table border="0"><tr bgcolor="#e6ffff">'. |
'<td><b> Fullname <font color="#999999">(username)</font></b></td>'. |
'<td align="right"> <b>No.</b></td>'. |
'<td><b> Fullname <font color="#999999">(username)</font></b></td>'. |
'<td>'.&nameUserString('header').'</td>'. |
'<td><b> Fullname <font color="#999999">(username)</font></b></td>'. |
'<td align="right"> <b>No.</b></td>'. |
'<td><b> Fullname <font color="#999999">(username)</font></b></td></tr>'; |
'<td>'.&nameUserString('header').'</td></tr>'; |
|
|
my (undef,undef,$fullname) = &getclasslist($getsec,'1'); |
my (undef,undef,$fullname) = &getclasslist($getsec,'1'); |
my $ptr = 1; |
my $ptr = 1; |
foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
$studentTable.=($ptr%4 == 1 ? '<tr bgcolor="#ffffe6"><td>' : '</td><td>'); |
$studentTable.=($ptr%2 == 1 ? '<tr bgcolor="#ffffe6">' : '</td>'); |
$studentTable.='<input type="radio" name="student" value="'.$student.'" /> '.$$fullname{$student}. |
$studentTable.='<td align="right">'.$ptr.' </td>'; |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font>'."\n"; |
$studentTable.='<td> <input type="radio" name="student" value="'.$student.'" /> ' |
$studentTable.=($ptr%4 == 0 ? '</td></tr>' : ''); |
.&nameUserString(undef,$$fullname{$student},$uname,$udom)."\n"; |
|
$studentTable.=($ptr%2 == 0 ? '</td></tr>' : ''); |
$ptr++; |
$ptr++; |
} |
} |
$studentTable.='</td><td> </td><td> </td><td> ' if ($ptr%4 == 2); |
$studentTable.='</td><td> </td><td> ' if ($ptr%2 == 0); |
$studentTable.='</td><td> </td><td> ' if ($ptr%4 == 3); |
|
$studentTable.='</td><td> ' if ($ptr%4 == 0); |
|
$studentTable.='</td></tr></table></td></tr></table>'."\n"; |
$studentTable.='</td></tr></table></td></tr></table>'."\n"; |
$studentTable.='<br /> <input type="button" '. |
$studentTable.='<input type="button" '. |
'onClick="javascript:checkPickOne(this.form);"value="Submit" /></form>'."\n"; |
'onClick="javascript:checkPickOne(this.form);"value="Next->" /></form>'."\n"; |
|
|
$studentTable.=&show_grading_menu_form($symb,$url); |
$studentTable.=&show_grading_menu_form($symb,$url); |
$request->print($studentTable); |
$request->print($studentTable); |
Line 2772 LISTJAVASCRIPT
|
Line 2808 LISTJAVASCRIPT
|
|
|
sub getSymbMap { |
sub getSymbMap { |
my ($request) = @_; |
my ($request) = @_; |
my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db', |
my $navmap = Apache::lonnavmaps::navmap->new(); |
$ENV{'request.course.fn'}.'_parms.db'); |
|
$navmap->init(); |
|
|
|
my %symbx = (); |
my %symbx = (); |
my @titles = (); |
my @titles = (); |
Line 2814 sub displayPage {
|
Line 2848 sub displayPage {
|
return; |
return; |
} |
} |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
$result.='<h3> Student: '.$$fullname{$ENV{'form.student'}}. |
$result.='<h3> Student: '.&nameUserString(undef,$$fullname{$ENV{'form.student'}},$uname,$udom). |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
'</h3>'."\n"; |
|
|
&sub_page_js($request); |
&sub_page_js($request); |
$request->print($result); |
$request->print($result); |
|
|
my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db', |
my $navmap = Apache::lonnavmaps::navmap->new(); |
$ENV{'request.course.fn'}.'_parms.db',1, 1); |
my ($mapUrl, $id, $resUrl)=&Apache::lonnet::decode_symb($ENV{'form.page'}); |
my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'}); |
|
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps |
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps |
|
|
my $iterator = $navmap->getIterator($map->map_start(), |
my $iterator = $navmap->getIterator($map->map_start(), |
Line 2830 sub displayPage {
|
Line 2862 sub displayPage {
|
|
|
my $studentTable='<form action="/adm/grades" method="post" name="gradePage">'."\n". |
my $studentTable='<form action="/adm/grades" method="post" name="gradePage">'."\n". |
'<input type="hidden" name="command" value="gradeByPage" />'."\n". |
'<input type="hidden" name="command" value="gradeByPage" />'."\n". |
|
'<input type="hidden" name="fullname" value="'.$$fullname{$ENV{'form.student'}}.'" />'."\n". |
'<input type="hidden" name="student" value="'.$ENV{'form.student'}.'" />'."\n". |
'<input type="hidden" name="student" value="'.$ENV{'form.student'}.'" />'."\n". |
'<input type="hidden" name="page" value="'.$pageTitle.'" />'."\n". |
'<input type="hidden" name="page" value="'.$pageTitle.'" />'."\n". |
'<input type="hidden" name="title" value="'.$ENV{'form.title'}.'" />'."\n". |
'<input type="hidden" name="title" value="'.$ENV{'form.title'}.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
|
'<input type="hidden" name="overRideScore" value="no" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n"; |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n"; |
|
|
my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL'). |
my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL'). |
Line 2854 sub displayPage {
|
Line 2888 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() && !$curRes->randomout) { |
|
if (ref($curRes) && $curRes->is_problem()) { |
if (ref($curRes) && $curRes->is_problem()) { |
my $parts = $curRes->parts(); |
my $parts = $curRes->parts(); |
my $title = $curRes->compTitle(); |
my $title = $curRes->compTitle(); |
Line 2877 sub displayPage {
|
Line 2910 sub displayPage {
|
} |
} |
|
|
my %record = &Apache::lonnet::restore($symbx,$ENV{'request.course.id'},$udom,$uname); |
my %record = &Apache::lonnet::restore($symbx,$ENV{'request.course.id'},$udom,$uname); |
|
|
if ($ENV{'form.lastSub'} eq 'datesub') { |
if ($ENV{'form.lastSub'} eq 'datesub') { |
if ($record{'version'} eq '') { |
if ($record{'version'} eq '') { |
$studentTable.='<br /> <font color="red">No recorded submission for this problem</font><br />'; |
$studentTable.='<br /> <font color="red">No recorded submission for this problem</font><br />'; |
Line 2910 sub displayPage {
|
Line 2944 sub displayPage {
|
$navmap->untieHashes(); |
$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 />'. |
'</form>'."\n"; |
'</form>'."\n"; |
$studentTable.=&show_grading_menu_form($symb,$url); |
$studentTable.=&show_grading_menu_form($symb,$url); |
Line 2952 sub displaySubByDates {
|
Line 2986 sub displaySubByDates {
|
$$record{"$version:resource.$partid.regrader"}.' (<b>Part:</b> '.$partid.')' : ''; |
$$record{"$version:resource.$partid.regrader"}.' (<b>Part:</b> '.$partid.')' : ''; |
} |
} |
$displaySub[2].=(exists $$record{"$version:resource.regrader"}) ? |
$displaySub[2].=(exists $$record{"$version:resource.regrader"}) ? |
$$record{"$version:resource.regrader"} : ''; |
$$record{"$version:resource.regrader"} : ''; # needed because old essay regrader has not parts info |
$studentTable.='<td>'.$displaySub[0].' </td><td>'.$displaySub[1]. |
$studentTable.='<td>'.$displaySub[0].' </td><td>'.$displaySub[1]. |
($displaySub[2] eq '' ? '' : 'Manually graded by '.$displaySub[2]).' </td></tr>'; |
($displaySub[2] eq '' ? '' : 'Manually graded by '.$displaySub[2]).' </td></tr>'; |
} |
} |
Line 2976 sub updateGradeByPage {
|
Line 3010 sub updateGradeByPage {
|
return; |
return; |
} |
} |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
$result.='<h3> Student: '.$$fullname{$ENV{'form.student'}}. |
$result.='<h3> Student: '.&nameUserString(undef,$ENV{'form.fullname'},$uname,$udom). |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
'</h3>'."\n"; |
|
|
$request->print($result); |
$request->print($result); |
|
|
my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db', |
my $navmap = Apache::lonnavmaps::navmap->new(); |
$ENV{'request.course.fn'}.'_parms.db',1, 1); |
my ($mapUrl, $id, $resUrl) = &Apache::lonnet::decode_symb( $ENV{'form.page'}); |
my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'}); |
|
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps |
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps |
|
|
my $iterator = $navmap->getIterator($map->map_start(), |
my $iterator = $navmap->getIterator($map->map_start(), |
Line 2991 sub updateGradeByPage {
|
Line 3024 sub updateGradeByPage {
|
|
|
my $studentTable='<table border="0"><tr><td bgcolor="#777777">'. |
my $studentTable='<table border="0"><tr><td bgcolor="#777777">'. |
'<table border="0"><tr bgcolor="#e6ffff">'. |
'<table border="0"><tr bgcolor="#e6ffff">'. |
'<td align="center"><b> No </b></td>'. |
'<td align="center"><b> Prob. </b></td>'. |
'<td><b> Title </b></td>'. |
'<td><b> Title </b></td>'. |
'<td><b> Previous Score </b></td>'. |
'<td><b> Previous Score </b></td>'. |
'<td><b> New Score </b></td></tr>'; |
'<td><b> New Score </b></td></tr>'; |
Line 3023 sub updateGradeByPage {
|
Line 3056 sub updateGradeByPage {
|
my $score; |
my $score; |
if ($partial > 0) { |
if ($partial > 0) { |
$score = 'correct_by_override'; |
$score = 'correct_by_override'; |
} elsif ($partial == 0) { |
} elsif ($newpts ne '') { #empty is taken as 0 |
$score = 'incorrect_by_override'; |
$score = 'incorrect_by_override'; |
} |
} |
if ($ENV{'form.GD_SEL'.$question.'_'.$partid} eq 'excused') { |
my $dropMenu = $ENV{'form.GD_SEL'.$question.'_'.$partid}; |
|
if ($dropMenu eq 'excused') { |
$partial = ''; |
$partial = ''; |
$score = 'excused'; |
$score = 'excused'; |
|
} elsif ($dropMenu eq 'reset status' |
|
&& $ENV{'form.solved'.$question.'_'.$partid} ne '') { #update only if previous record exists |
|
$newrecord{'resource.'.$partid.'.tries'} = 0; |
|
$newrecord{'resource.'.$partid.'.solved'} = ''; |
|
$newrecord{'resource.'.$partid.'.award'} = ''; |
|
$newrecord{'resource.'.$partid.'.awarded'} = 0; |
|
$newrecord{'resource.'.$partid.'.regrader'} = "$ENV{'user.name'}:$ENV{'user.domain'}"; |
|
$changeflag++; |
|
$newpts = ''; |
} |
} |
|
|
my $oldstatus = $ENV{'form.solved'.$question.'_'.$partid}; |
my $oldstatus = $ENV{'form.solved'.$question.'_'.$partid}; |
$displayPts[0].=' <b>Part</b> '.$partid.' = '. |
$displayPts[0].=' <b>Part</b> '.$partid.' = '. |
(($oldstatus eq 'excused') ? 'excused' : $oldpts). |
(($oldstatus eq 'excused') ? 'excused' : $oldpts). |
' <br>'; |
' <br>'; |
$displayPts[1].=' <b>Part</b> '.$partid.' = '. |
$displayPts[1].=' <b>Part</b> '.$partid.' = '. |
($oldstatus eq 'correct_by_student' ? $oldpts : |
(($score eq 'excused') ? 'excused' : $newpts). |
(($score eq 'excused') ? 'excused' : $newpts)). |
|
' <br>'; |
' <br>'; |
|
|
$question++; |
$question++; |
if (($oldstatus eq 'correct_by_student') || |
next if ($dropMenu eq 'reset status' || ($newpts == $oldpts && $score ne 'excused')); |
($newpts eq $oldpts && $score eq $oldstatus)) |
|
{ |
|
next; |
|
} |
|
$newrecord{'resource.'.$partid.'.awarded'} = $partial if $partial ne ''; |
$newrecord{'resource.'.$partid.'.awarded'} = $partial if $partial ne ''; |
$newrecord{'resource.'.$partid.'.solved'} = $score; |
$newrecord{'resource.'.$partid.'.solved'} = $score if $score ne ''; |
$newrecord{'resource.'.$partid.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$newrecord{'resource.'.$partid.'.regrader'} = "$ENV{'user.name'}:$ENV{'user.domain'}" |
|
if (scalar(keys(%newrecord)) > 0); |
|
|
$changeflag++; |
$changeflag++; |
} |
} |
Line 3055 sub updateGradeByPage {
|
Line 3096 sub updateGradeByPage {
|
&Apache::lonnet::cstore(\%newrecord,$symbx,$ENV{'request.course.id'}, |
&Apache::lonnet::cstore(\%newrecord,$symbx,$ENV{'request.course.id'}, |
$udom,$uname); |
$udom,$uname); |
} |
} |
|
|
$studentTable.='<td valign="top">'.$displayPts[0].'</td>'. |
$studentTable.='<td valign="top">'.$displayPts[0].'</td>'. |
'<td valign="top">'.$displayPts[1].'</td>'. |
'<td valign="top">'.$displayPts[1].'</td>'. |
'</tr>'; |
'</tr>'; |
Line 3096 sub getSequenceDropDown {
|
Line 3138 sub getSequenceDropDown {
|
my ($request,$symb)=@_; |
my ($request,$symb)=@_; |
my $result='<select name="selectpage">'."\n"; |
my $result='<select name="selectpage">'."\n"; |
my ($titles,$symbx) = &getSymbMap($request); |
my ($titles,$symbx) = &getSymbMap($request); |
my ($curpage,$type,$mapId) = ($symb =~ /(.*?\.(page|sequence))___(\d+)___/); |
my ($curpage)=&Apache::lonnet::decode_symb($symb); |
my $ctr=0; |
my $ctr=0; |
foreach (@$titles) { |
foreach (@$titles) { |
my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); |
my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); |
Line 3282 sub scantron_filter {
|
Line 3324 sub scantron_filter {
|
|
|
sub scantron_process_students { |
sub scantron_process_students { |
my ($r) = @_; |
my ($r) = @_; |
my (undef,undef,$sequence)=split(/___/,$ENV{'form.selectpage'}); |
my (undef,undef,$sequence)=&Apache::lonnet::decode_symb($ENV{'form.selectpage'}); |
my ($symb,$url)=&get_symb_and_url($r); |
my ($symb,$url)=&get_symb_and_url($r); |
if (!$symb) {return '';} |
if (!$symb) {return '';} |
my $default_form_data=&defaultFormData($symb,$url); |
my $default_form_data=&defaultFormData($symb,$url); |
Line 3292 sub scantron_process_students {
|
Line 3334 sub scantron_process_students {
|
my @scanlines=<$scanlines>; |
my @scanlines=<$scanlines>; |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my %idmap=&username_to_idmap($classlist); |
my %idmap=&username_to_idmap($classlist); |
my $navmap=Apache::lonnavmaps::navmap->new($ENV{'request.course.fn'}.'.db',$ENV{'request.course.fn'}.'_parms.db',1, 1); |
my $navmap=Apache::lonnavmaps::navmap->new(); |
my $map=$navmap->getResourceByUrl($sequence); |
my $map=$navmap->getResourceByUrl($sequence); |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
$r->print("geto ".scalar(@resources)."<br />"); |
$r->print("geto ".scalar(@resources)."<br />"); |
Line 3396 SCANTRONFORM
|
Line 3438 SCANTRONFORM
|
#--- Show a Grading Menu button - Calls the next routine --- |
#--- Show a Grading Menu button - Calls the next routine --- |
sub show_grading_menu_form { |
sub show_grading_menu_form { |
my ($symb,$url)=@_; |
my ($symb,$url)=@_; |
my $result.='<form action="/adm/grades" method="post">'."\n". |
my $result.='<br /><form action="/adm/grades" method="post">'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
Line 3523 GRADINGMENUJS
|
Line 3565 GRADINGMENUJS
|
'The <b>complete</b> set/page/sequence: For one student</td></tr>'."\n"; |
'The <b>complete</b> set/page/sequence: For one student</td></tr>'."\n"; |
|
|
$result.='<tr bgcolor="#ffffe6"><td><br />'. |
$result.='<tr bgcolor="#ffffe6"><td><br />'. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="View/Grade/Regrade" />'. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="Next->" />'. |
'</td></tr></table>'."\n"; |
'</td></tr></table>'."\n"; |
|
|
$result.='</td><td valign="top">'; |
$result.='</td><td valign="top">'; |
Line 3568 sub handler {
|
Line 3610 sub handler {
|
my $command=$ENV{'form.command'}; |
my $command=$ENV{'form.command'}; |
if (!$url) { |
if (!$url) { |
my ($temp1,$temp2); |
my ($temp1,$temp2); |
($temp1,$temp2,$ENV{'form.url'})=split(/___/,$symb); |
($temp1,$temp2,$ENV{'form.url'})=&Apache::lonnet::decode_symb($symb); |
$url = $ENV{'form.url'}; |
$url = $ENV{'form.url'}; |
} |
} |
&send_header($request); |
&send_header($request); |
Line 3581 sub handler {
|
Line 3623 sub handler {
|
my ($tsymb,$tuname,$tudom,$tcrsid)= |
my ($tsymb,$tuname,$tudom,$tcrsid)= |
&Apache::lonnet::checkin($token); |
&Apache::lonnet::checkin($token); |
if ($tsymb) { |
if ($tsymb) { |
my ($map,$id,$url)=split(/\_\_\_/,$tsymb); |
my ($map,$id,$url)=&Apache::lonnet::decode_symb($tsymb); |
if (&Apache::lonnet::allowed('mgr',$tcrsid)) { |
if (&Apache::lonnet::allowed('mgr',$tcrsid)) { |
$request->print(&Apache::lonnet::ssi_body('/res/'.$url, |
$request->print(&Apache::lonnet::ssi_body('/res/'.$url, |
('grade_username' => $tuname, |
('grade_username' => $tuname, |