version 1.124, 2003/07/23 18:04:51
|
version 1.125, 2003/07/25 20:35:40
|
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 98 sub get_fullname {
|
Line 99 sub get_fullname {
|
#--- 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 109 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'); #a bug $value is 'yes' regardless |
|
$handgrade{$part} = $responsetype.':'.(($allkeys =~ /parameter_$part\_handgrade/) ? 'yes' : 'no'); |
next if ($seen{$partid} > 0); |
next if ($seen{$partid} > 0); |
$seen{$partid}++; |
$seen{$partid}++; |
push @partlist,$partid; |
push @partlist,$partid; |
Line 321 sub jscriptNform {
|
Line 325 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 645 sub sub_page_js {
|
Line 650 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 674 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 686 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 704 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 714 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 732 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 741 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 751 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); |
var selopt = formname["GD_SEL"+i+"_"+partid]; |
if (selopt[0].selected) { |
if (selopt[0].selected) { |
var points = eval("formname.GD_BOX"+i+"_"+partid+".value"); |
var points = 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 resp = confirm("You did not assign a score for "+name+", 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 784 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); |
var selopt = formname["GD_SEL"+i+"_"+partid]; |
if (selopt[0].selected) { |
if (selopt[0].selected) { |
var points = eval("formname.GD_BOX"+i+"_"+partid+".value"); |
var points = formname["GD_BOX"+i+"_"+partid].value; |
var status = eval("formname.solved"+i+"_"+partid+".value"); |
var status = 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 880 sub sub_page_kw_js {
|
Line 882 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 rtrchk = document.SCORE["includemsg"+usrctr]; |
var msgchk = rtrchk.value; |
var msgchk = rtrchk.value; |
re = /msgsub/; |
re = /msgsub/; |
var shwsel = ""; |
var shwsel = ""; |
Line 892 sub sub_page_kw_js {
|
Line 894 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"); |
var shownOnce = document.SCORE["shownOnce"+i].value; |
message = (shownOnce == 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 947 sub sub_page_kw_js {
|
Line 949 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 958 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 973 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 1165 sub gradeBox {
|
Line 1167 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 1343 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 />')); |
Line 1438 KEYWORDS
|
Line 1442 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 1465 KEYWORDS
|
Line 1470 KEYWORDS
|
'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>'.($responsetype =~ /^(essay|option)$/ ? |
'<blockquote>' : ''). |
'<blockquote>' : ''). |
# &cleanRecord(&keywords_highlight($subval),$responsetype). |
|
&cleanRecord($subval,$responsetype,$symb). |
&cleanRecord($subval,$responsetype,$symb). |
($responsetype =~ /^(essay|option)$/ ? '</blockquote><br />' : |
($responsetype =~ /^(essay|option)$/ ? '</blockquote><br />' : |
'<br /><br />').$similar."\n" |
'<br /><br />').$similar."\n" |
Line 1596 sub get_last_submission {
|
Line 1600 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 1770 sub processHandGrade {
|
} |
} |
} |
} |
$ctr = 0; |
$ctr = 0; |
my ($partlist,$handgrade) = &response_type($ENV{'form.url'}); |
my ($partlist,$handgrade) = &response_type($ENV{'form.url'},$symb); |
@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); |
Line 1815 sub saveHandGrade {
|
Line 1819 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 1878 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 1912 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 1926 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 1941 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 1971 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 1993 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 2016 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 2056 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 '; |
$result.='<h3>Assign Common Grade To '; |
Line 2062 sub viewgrades {
|
Line 2071 sub viewgrades {
|
'<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 2107 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></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 2189 sub viewstudentgrade {
|
Line 2200 sub viewstudentgrade {
|
$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"; |
# my $optsel = '<option selected="on"> </option><option>excused</option>'."\n"; |
$optsel = '<option> </option><option selected="on">excused</option>'."\n" |
# $optsel = '<option> </option><option selected="on">excused</option>'."\n" |
if ($status eq 'excused'); |
# if ($status eq 'excused'); |
$result.=$optsel; |
# $result.=$optsel; |
|
$result.= (($status eq 'excused') ? '<option> </option><option selected="on">excused</option>' |
|
: '<option selected="on"> </option><option>excused</option>')."\n"; |
|
$result.='<option>reset status</option>'; |
$result.="</select></td>\n"; |
$result.="</select></td>\n"; |
} else { |
} else { |
$result.='<input type="hidden" name="'. |
$result.='<input type="hidden" name="'. |
Line 2253 sub editgrades {
|
Line 2267 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 2302 sub editgrades {
|
Line 2317 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 |
|
print "reset status<br>"; |
|
$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 2347 sub editgrades {
|
Line 2374 sub editgrades {
|
} |
} |
$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 2679 function checkPickOne(formname) {
|
Line 2706 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 2761 LISTJAVASCRIPT
|
Line 2788 LISTJAVASCRIPT
|
$studentTable.='</td><td> </td><td> ' if ($ptr%4 == 3); |
$studentTable.='</td><td> </td><td> ' if ($ptr%4 == 3); |
$studentTable.='</td><td> ' if ($ptr%4 == 0); |
$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.='<br /><input type="button" '. |
'onClick="javascript:checkPickOne(this.form);"value="Submit" /></form>'."\n"; |
'onClick="javascript:checkPickOne(this.form);"value="Submit" /></form>'."\n"; |
|
|
$studentTable.=&show_grading_menu_form($symb,$url); |
$studentTable.=&show_grading_menu_form($symb,$url); |
Line 2830 sub displayPage {
|
Line 2857 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 2877 sub displayPage {
|
Line 2906 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 2940 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 2976 sub updateGradeByPage {
|
Line 3006 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: '.$ENV{'form.fullname'}. |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
|
|
$request->print($result); |
$request->print($result); |
Line 2991 sub updateGradeByPage {
|
Line 3021 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 3053 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 |
|
print "got to reset = $ENV{'form.solved'.$question.'_'.$partid}:<br>"; |
|
$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 3094 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 3396 SCANTRONFORM
|
Line 3436 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". |