version 1.118, 2003/07/17 22:08:25
|
version 1.121, 2003/07/21 13:32:49
|
Line 140 sub showResourceInfo {
|
Line 140 sub showResourceInfo {
|
#--- Currently filters option response type only. |
#--- Currently filters option response type only. |
sub cleanRecord { |
sub cleanRecord { |
my ($answer,$response) = @_; |
my ($answer,$response) = @_; |
$answer =~ s|^<br />||; |
|
if ($response eq 'option') { |
if ($response eq 'option') { |
my (@IDs,@ans); |
my (@IDs,@ans); |
foreach (split(/\&/,&Apache::lonnet::unescape($answer))) { |
foreach (split(/\&/,&Apache::lonnet::unescape($answer))) { |
Line 198 COMMONJSFUNCTIONS
|
Line 197 COMMONJSFUNCTIONS
|
#--- section, ids and fullnames for each user. |
#--- section, ids and fullnames for each user. |
sub getclasslist { |
sub getclasslist { |
my ($getsec,$filterlist) = @_; |
my ($getsec,$filterlist) = @_; |
|
$getsec = $getsec eq '' ? 'all' : $getsec; |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
# Bail out if we were unable to get the classlist |
# Bail out if we were unable to get the classlist |
return if (! defined($classlist)); |
return if (! defined($classlist)); |
Line 471 LISTJAVASCRIPT
|
Line 471 LISTJAVASCRIPT
|
$request->print($result); |
$request->print($result); |
|
|
my $checkhdgrade = ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked' : ''; |
my $checkhdgrade = ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked' : ''; |
my $checklastsub = ($ENV{'form.handgrade'} eq 'no') ? 'checked' : ''; |
my $checklastsub = $checkhdgrade eq '' ? 'checked' : ''; |
$checklastsub = 'checked' if ($checkhdgrade eq '' && $checklastsub eq ''); |
|
my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'."\n". |
my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'."\n". |
' <b>View Problem Text: </b><input type="radio" name="vProb" value="no" checked /> no '."\n". |
' <b>View Problem Text: </b><input type="radio" name="vProb" value="no" checked /> no '."\n". |
'<input type="radio" name="vProb" value="yes" /> one student '."\n". |
'<input type="radio" name="vProb" value="yes" /> one student '."\n". |
Line 709 sub sub_page_js {
|
Line 708 sub sub_page_js {
|
} |
} |
|
|
function checkSolved(formname,id) { |
function checkSolved(formname,id) { |
if (eval("formname.solved"+id+".value") == "correct_by_student") { |
if (eval("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'; |
} |
} |
return "update"; |
return "update"; |
} |
} |
Line 722 sub sub_page_js {
|
Line 722 sub sub_page_js {
|
return; |
return; |
} |
} |
|
|
//=========== Check that a point is assigned for all the parts (essay grading only) ============ |
//=========== Check that a point is assigned for all the parts ============ |
function checksubmit(formname,val,total,parttot) { |
function checksubmit(formname,val,total,parttot) { |
document.SCORE.gradeOpt.value = val; |
formname.gradeOpt.value = val; |
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++) { |
Line 746 sub sub_page_js {
|
Line 746 sub sub_page_js {
|
} |
} |
|
|
} |
} |
|
if (val == "Grade Student") { |
|
formname.showgrading.value = "yes"; |
|
if (formname.Status.value == "") { |
|
formname.Status.value = "Active"; |
|
} |
|
formname.studentNo.value = total; |
|
} |
formname.submit(); |
formname.submit(); |
} |
} |
|
|
Line 1033 sub sub_page_kw_js {
|
Line 1040 sub sub_page_kw_js {
|
hDoc.write(" self.close()"); |
hDoc.write(" self.close()"); |
hDoc.write("}"); |
hDoc.write("}"); |
|
|
/* hDoc.write("function radioSelection(radioButton) {"); |
|
hDoc.write(" var selection=null;"); |
|
hDoc.write(" for (var i=0; i<radioButton.length; i++) {"); |
|
hDoc.write(" if (radioButton[i].checked) {"); |
|
hDoc.write(" selection=radioButton[i].value;"); |
|
hDoc.write(" return selection;"); |
|
hDoc.write(" }"); |
|
hDoc.write(" }"); |
|
hDoc.write("}"); */ |
|
|
|
hDoc.write("<"); |
hDoc.write("<"); |
hDoc.write("/script>"); |
hDoc.write("/script>"); |
|
|
Line 1172 sub submission {
|
Line 1169 sub submission {
|
|
|
(my $url=$ENV{'form.url'})=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; |
(my $url=$ENV{'form.url'})=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; |
my ($uname,$udom) = ($ENV{'form.student'},$ENV{'form.userdom'}); |
my ($uname,$udom) = ($ENV{'form.student'},$ENV{'form.userdom'}); |
|
$udom = ($udom eq '' ? $ENV{'user.domain'} : $udom); #has form.userdom changed for a student? |
my $usec = &Apache::lonnet::getsection($udom,$uname,$ENV{'request.course.id'}); |
my $usec = &Apache::lonnet::getsection($udom,$uname,$ENV{'request.course.id'}); |
$ENV{'form.fullname'} = &get_fullname ($uname,$udom) if $ENV{'form.fullname'} eq ''; |
$ENV{'form.fullname'} = &get_fullname ($uname,$udom) if $ENV{'form.fullname'} eq ''; |
|
|
Line 1185 sub submission {
|
Line 1183 sub submission {
|
return; |
return; |
} |
} |
|
|
|
$ENV{'form.lastSub'} = ($ENV{'form.lastSub'} eq '' ? 'all' : $ENV{'form.lastSub'}); |
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
|
|
# header info |
# header info |
Line 1229 sub submission {
|
Line 1228 sub submission {
|
$ENV{'form.savemsgN'} = $keyhash{$symb.'_savemsgN'} ne '' ? $keyhash{$symb.'_savemsgN'} : '0'; |
$ENV{'form.savemsgN'} = $keyhash{$symb.'_savemsgN'} ne '' ? $keyhash{$symb.'_savemsgN'} : '0'; |
|
|
} |
} |
|
my $overRideScore = $ENV{'form.overRideScore'} eq '' ? 'no' : $ENV{'form.overRideScore'}; |
|
|
$request->print('<form action="/adm/grades" method="post" name="SCORE">'."\n". |
$request->print('<form action="/adm/grades" method="post" name="SCORE">'."\n". |
'<input type="hidden" name="command" value="handgrade" />'."\n". |
'<input type="hidden" name="command" value="handgrade" />'."\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="overRideScore" value="'.$overRideScore.'" />'."\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="refresh" value="off" />'."\n". |
'<input type="hidden" name="refresh" value="off" />'."\n". |
|
'<input type="hidden" name="studentNo" value="" />'."\n". |
|
'<input type="hidden" name="gradeOpt" value="" />'."\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="showgrading" value="'.$ENV{'form.showgrading'}.'" />'."\n". |
'<input type="hidden" name="showgrading" value="'.$ENV{'form.showgrading'}.'" />'."\n". |
Line 1290 KEYWORDS
|
Line 1294 KEYWORDS
|
$request->print('<br /><br /><br />') if ($counter > 0); |
$request->print('<br /><br /><br />') if ($counter > 0); |
$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); |
|
|
Line 1377 KEYWORDS
|
Line 1380 KEYWORDS
|
$$fullname{$ENV{'form.'.$uname.':'.$udom.':submitted_by'}}.'</a>'; |
$$fullname{$ENV{'form.'.$uname.':'.$udom.':submitted_by'}}.'</a>'; |
$request->print($submitby); |
$request->print($submitby); |
} else { |
} else { |
my ($string,$timestamp)= |
my ($string,$timestamp)= &get_last_submission (\%record); |
&get_last_submission (%record); |
|
my $lastsubonly=''. |
my $lastsubonly=''. |
($$timestamp eq '' ? '' : '<b>Date Submitted:</b> '. |
($$timestamp eq '' ? '' : '<b>Date Submitted:</b> '. |
$$timestamp)."</td></tr>\n"; |
$$timestamp)."</td></tr>\n"; |
Line 1416 KEYWORDS
|
Line 1418 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 eq 'essay' ? '<blockquote>' : ''). |
'<b>Submitted Answer: </b>'.($responsetype =~ /^(essay|option)$/ ? |
|
'<blockquote>' : ''). |
&cleanRecord(&keywords_highlight($subval),$responsetype). |
&cleanRecord(&keywords_highlight($subval),$responsetype). |
($responsetype eq 'essay' ? '</blockquote><br />' : '<br /><br />').$similar."\n" |
($responsetype =~ /^(essay|option)$/ ? '</blockquote><br />' : |
|
'<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 1436 KEYWORDS
|
Line 1440 KEYWORDS
|
$last,'.submission', |
$last,'.submission', |
'Apache::grades::keywords_highlight')); |
'Apache::grades::keywords_highlight')); |
} |
} |
|
|
|
$request->print('<input type="hidden" name="unamedom'.$counter.'" value="'.$uname.':' |
|
.$udom.'" />'."\n"); |
|
|
# return if view submission with no grading option |
# return if view submission with no grading option |
if ($ENV{'form.showgrading'} eq '' || (!&canmodify($usec))) { |
if ($ENV{'form.showgrading'} eq '' || (!&canmodify($usec))) { |
# if (!&canmodify($usec)) { |
my $toGrade.='<input type="button" value="Grade Student" '. |
$request->print('</td></tr></table></td></tr></table></form>'."\n"); |
'onClick="javascript:checksubmit(this.form,\'Grade Student\',\'' |
$request->print(&show_grading_menu_form($symb,$url)) |
.$counter.'\');" TARGET=_self> '."\n" if (&canmodify($usec)); |
|
$toGrade.='</td></tr></table></td></tr></table></form>'."\n"; |
|
$toGrade.=&show_grading_menu_form($symb,$url) |
if (($ENV{'form.command'} eq 'submission') || |
if (($ENV{'form.command'} eq 'submission') || |
($ENV{'form.command'} eq 'processGroup' && $counter == $total)); |
($ENV{'form.command'} eq 'processGroup' && $counter == $total)); |
|
$request = print($toGrade); |
return; |
return; |
} |
} |
|
|
# essay grading options |
# essay grading message center |
if ($ENV{'form.handgrade'} eq 'yes') { |
if ($ENV{'form.handgrade'} eq 'yes') { |
$result='<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n". |
|
'<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
|
'<input type="hidden" name="unamedom'.$counter.'" value="'.$uname.':' |
|
.$udom.'" />'."\n"; |
|
my ($lastname,$givenn) = split(/,/,$ENV{'form.fullname'}); |
my ($lastname,$givenn) = split(/,/,$ENV{'form.fullname'}); |
my $msgfor = $givenn.' '.$lastname; |
my $msgfor = $givenn.' '.$lastname; |
if (scalar(@col_fullnames) > 0) { |
if (scalar(@col_fullnames) > 0) { |
Line 1461 KEYWORDS
|
Line 1467 KEYWORDS
|
} |
} |
$msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript |
$msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript |
# $result.='<tr><td bgcolor="#ffffff">'."\n". |
# $result.='<tr><td bgcolor="#ffffff">'."\n". |
|
$result='<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
|
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n"; |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
',\''.$msgfor.'\')"; TARGET=_self>'. |
',\''.$msgfor.'\')"; TARGET=_self>'. |
'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> '. |
'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> '. |
Line 1494 KEYWORDS
|
Line 1502 KEYWORDS
|
|
|
# print end of form |
# print end of form |
if ($counter == $total) { |
if ($counter == $total) { |
my $endform='<table border="0"><tr><td>'. |
my $endform='<table border="0"><tr><td>'."\n"; |
'<input type="hidden" name="gradeOpt" value="" />'."\n"; |
$endform.='<input type="button" value="Save & Next" '. |
# if ($ENV{'form.handgrade'} eq 'yes') { |
'onClick="javascript:checksubmit(this.form,\'Save & Next\','. |
$endform.='<input type="button" value="Save & Next" '. |
$total.','.scalar(@partlist).');" TARGET=_self> '."\n"; |
'onClick="javascript:checksubmit(this.form,\'Save & Next\','. |
my $ntstu ='<select name="NTSTU">'. |
$total.','.scalar(@partlist).');" TARGET=_self> '."\n"; |
'<option>1</option><option>2</option>'. |
my $ntstu ='<select name="NTSTU">'. |
'<option>3</option><option>5</option>'. |
'<option>1</option><option>2</option>'. |
'<option>7</option><option>10</option></select>'."\n"; |
'<option>3</option><option>5</option>'. |
my $nsel = ($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : '1'); |
'<option>7</option><option>10</option></select>'."\n"; |
$ntstu =~ s/<option>$nsel</<option selected="on">$nsel</; |
my $nsel = ($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : '1'); |
$endform.=$ntstu.'student(s) '; |
$ntstu =~ s/<option>$nsel</<option selected="on">$nsel</; |
|
$endform.=$ntstu.'student(s) '; |
|
# } else { |
|
# $endform.='<input type="hidden" name="NTSTU" value="1" />'."\n"; |
|
# } |
|
$endform.='<input type="button" value="Next" '. |
$endform.='<input type="button" value="Next" '. |
'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> '."\n". |
'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> '."\n". |
'<input type="button" value="Previous" '. |
'<input type="button" value="Previous" '. |
'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> '; |
'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> '; |
$endform.='(Next and Previous do not save the scores.)'."\n" ; |
$endform.='(Next and Previous do not save the scores.)'."\n" ; |
# if ($ENV{'form.handgrade'} eq 'yes'); |
|
$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 1525 KEYWORDS
|
Line 1527 KEYWORDS
|
|
|
#--- Retrieve the last submission for all the parts |
#--- Retrieve the last submission for all the parts |
sub get_last_submission { |
sub get_last_submission { |
my (%returnhash)=@_; |
my ($returnhash)=@_; |
my (@string,$timestamp); |
my (@string,$timestamp); |
if ($returnhash{'version'}) { |
if ($$returnhash{'version'}) { |
my %lasthash=(); |
my %lasthash=(); |
my ($version); |
my ($version); |
for ($version=1;$version<=$returnhash{'version'};$version++) { |
for ($version=1;$version<=$$returnhash{'version'};$version++) { |
foreach (sort(split(/\:/,$returnhash{$version.':keys'}))) { |
foreach (sort(split(/\:/,$$returnhash{$version.':keys'}))) { |
$lasthash{$_}=$returnhash{$version.':'.$_}; |
$lasthash{$_}=$$returnhash{$version.':'.$_}; |
$timestamp = scalar(localtime($returnhash{$version.':timestamp'})); |
$timestamp = scalar(localtime($$returnhash{$version.':timestamp'})); |
} |
} |
} |
} |
foreach ((keys %lasthash)) { |
foreach ((keys %lasthash)) { |
Line 1557 sub keywords_highlight {
|
Line 1559 sub keywords_highlight {
|
(my $styleoff = $styleon) =~ s/\</\<\//; |
(my $styleoff = $styleon) =~ s/\</\<\//; |
my @keylist = split(/[,\s+]/,$ENV{'form.keywords'}); |
my @keylist = split(/[,\s+]/,$ENV{'form.keywords'}); |
foreach (@keylist) { |
foreach (@keylist) { |
$string =~ s/\b\Q$_\E(\b|\.)/\<font color\=$ENV{'form.kwclr'} $size\>$styleon$_$styleoff\<\/font\>/gi; |
$string =~ s/\b\Q$_\E(\b|\.)/<font color\=$ENV{'form.kwclr'} $size\>$styleon$_$styleoff<\/font>/gi; |
} |
} |
# This is not really the right place to do this, but I cannot find a |
|
# better one at this time. So here we go - the m in the s:::mg causes |
|
# ^ to match the beginning of a new line. So we replace(???) the beginning |
|
# of the line with <br /> to make things formatted a little better. |
|
$string =~ s:^:<br />:mg; |
|
return $string; |
return $string; |
} |
} |
|
|
Line 1575 sub processHandGrade {
|
Line 1572 sub processHandGrade {
|
my $button = $ENV{'form.gradeOpt'}; |
my $button = $ENV{'form.gradeOpt'}; |
my $ngrade = $ENV{'form.NCT'}; |
my $ngrade = $ENV{'form.NCT'}; |
my $ntstu = $ENV{'form.NTSTU'}; |
my $ntstu = $ENV{'form.NTSTU'}; |
|
|
if ($button eq 'Save & Next') { |
if ($button eq 'Save & Next') { |
my $ctr = 0; |
my $ctr = 0; |
while ($ctr < $ngrade) { |
while ($ctr < $ngrade) { |
Line 1609 sub processHandGrade {
|
Line 1605 sub processHandGrade {
|
if ($ENV{'form.collaborator'.$ctr}) { |
if ($ENV{'form.collaborator'.$ctr}) { |
my (@collaborators) = split(/:/,$ENV{'form.collaborator'.$ctr}); |
my (@collaborators) = split(/:/,$ENV{'form.collaborator'.$ctr}); |
foreach (@collaborators) { |
foreach (@collaborators) { |
my ($errorflag,$pts,$wgt) = &saveHandGrade($request,$url,$symb,$_,$udom,$ctr,$ENV{'form.unamedom'.$ctr}); |
my ($errorflag,$pts,$wgt) = |
|
&saveHandGrade($request,$url,$symb,$_,$udom,$ctr,$ENV{'form.unamedom'.$ctr}); |
if ($errorflag eq 'not_allowed') { |
if ($errorflag eq 'not_allowed') { |
$request->print("<font color=\"red\">Not allowed to modify grades for $_:$udom</font>"); |
$request->print("<font color=\"red\">Not allowed to modify grades for $_:$udom</font>"); |
next; |
next; |
Line 1626 sub processHandGrade {
|
Line 1623 sub processHandGrade {
|
} |
} |
} |
} |
|
|
# Keywords sorted in alphabatical order |
if ($ENV{'form.handgrade'} eq 'yes') { |
my $loginuser = $ENV{'user.name'}.':'.$ENV{'user.domain'}; |
# Keywords sorted in alphabatical order |
my %keyhash = (); |
my $loginuser = $ENV{'user.name'}.':'.$ENV{'user.domain'}; |
$ENV{'form.keywords'} =~ s/,\s{0,}|\s+/ /g; |
my %keyhash = (); |
$ENV{'form.keywords'} =~ s/^\s+|\s+$//; |
$ENV{'form.keywords'} =~ s/,\s{0,}|\s+/ /g; |
my (@keywords) = sort(split(/\s+/,$ENV{'form.keywords'})); |
$ENV{'form.keywords'} =~ s/^\s+|\s+$//; |
$ENV{'form.keywords'} = join(' ',@keywords); |
my (@keywords) = sort(split(/\s+/,$ENV{'form.keywords'})); |
$keyhash{$symb.'_keywords'} = $ENV{'form.keywords'}; |
$ENV{'form.keywords'} = join(' ',@keywords); |
$keyhash{$symb.'_subject'} = $ENV{'form.msgsub'}; |
$keyhash{$symb.'_keywords'} = $ENV{'form.keywords'}; |
$keyhash{$loginuser.'_kwclr'} = $ENV{'form.kwclr'}; |
$keyhash{$symb.'_subject'} = $ENV{'form.msgsub'}; |
$keyhash{$loginuser.'_kwsize'} = $ENV{'form.kwsize'}; |
$keyhash{$loginuser.'_kwclr'} = $ENV{'form.kwclr'}; |
$keyhash{$loginuser.'_kwstyle'} = $ENV{'form.kwstyle'}; |
$keyhash{$loginuser.'_kwsize'} = $ENV{'form.kwsize'}; |
|
$keyhash{$loginuser.'_kwstyle'} = $ENV{'form.kwstyle'}; |
# message center - Order of message gets changed. Blank line is eliminated. |
|
# New messages are saved in ENV for the next student. |
# message center - Order of message gets changed. Blank line is eliminated. |
# All messages are saved in nohist_handgrade.db |
# New messages are saved in ENV for the next student. |
my ($ctr,$idx) = (1,1); |
# All messages are saved in nohist_handgrade.db |
while ($ctr <= $ENV{'form.savemsgN'}) { |
my ($ctr,$idx) = (1,1); |
if ($ENV{'form.savemsg'.$ctr} ne '') { |
while ($ctr <= $ENV{'form.savemsgN'}) { |
$keyhash{$symb.'_savemsg'.$idx} = $ENV{'form.savemsg'.$ctr}; |
if ($ENV{'form.savemsg'.$ctr} ne '') { |
$idx++; |
$keyhash{$symb.'_savemsg'.$idx} = $ENV{'form.savemsg'.$ctr}; |
|
$idx++; |
|
} |
|
$ctr++; |
} |
} |
$ctr++; |
$ctr = 0; |
} |
while ($ctr < $ngrade) { |
$ctr = 0; |
if ($ENV{'form.newmsg'.$ctr} ne '') { |
while ($ctr < $ngrade) { |
$keyhash{$symb.'_savemsg'.$idx} = $ENV{'form.newmsg'.$ctr}; |
if ($ENV{'form.newmsg'.$ctr} ne '') { |
$ENV{'form.savemsg'.$idx} = $ENV{'form.newmsg'.$ctr}; |
$keyhash{$symb.'_savemsg'.$idx} = $ENV{'form.newmsg'.$ctr}; |
$idx++; |
$ENV{'form.savemsg'.$idx} = $ENV{'form.newmsg'.$ctr}; |
} |
$idx++; |
$ctr++; |
} |
} |
$ctr++; |
$ENV{'form.savemsgN'} = --$idx; |
|
$keyhash{$symb.'_savemsgN'} = $ENV{'form.savemsgN'}; |
|
my $putresult = &Apache::lonnet::put |
|
('nohist_handgrade',\%keyhash, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
} |
} |
$ENV{'form.savemsgN'} = --$idx; |
|
$keyhash{$symb.'_savemsgN'} = $ENV{'form.savemsgN'}; |
|
my $putresult = &Apache::lonnet::put |
|
('nohist_handgrade',\%keyhash, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
|
|
# Called by Save & Refresh from Highlight Attribute Window |
# Called by Save & Refresh from Highlight Attribute Window |
my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0'); |
my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'1'); |
if ($ENV{'form.refresh'} eq 'on') { |
if ($ENV{'form.refresh'} eq 'on') { |
my ($ctr,$total) = (0,0); |
my ($ctr,$total) = (0,0); |
while ($ctr < $ngrade) { |
while ($ctr < $ngrade) { |
Line 1686 sub processHandGrade {
|
Line 1684 sub processHandGrade {
|
return ''; |
return ''; |
} |
} |
|
|
|
# Go directly to grade student - from submission or link from chart page |
|
if ($button eq 'Grade Student') { |
|
(undef,undef,$ENV{'form.handgrade'},undef,undef) = &showResourceInfo($url); |
|
my $processUser = $ENV{'form.unamedom'.$ENV{'form.studentNo'}}; |
|
($ENV{'form.student'},$ENV{'form.userdom'}) = split(/:/,$processUser); |
|
$ENV{'form.fullname'} = $$fullname{$processUser}; |
|
&submission($request,0,0); |
|
return ''; |
|
} |
|
|
# Get the next/previous one or group of students |
# Get the next/previous one or group of students |
my $firststu = $ENV{'form.unamedom0'}; |
my $firststu = $ENV{'form.unamedom0'}; |
my $laststu = $ENV{'form.unamedom'.($ngrade-1)}; |
my $laststu = $ENV{'form.unamedom'.($ngrade-1)}; |
$ctr = 2; |
my $ctr = 2; |
while ($laststu eq '') { |
while ($laststu eq '') { |
$laststu = $ENV{'form.unamedom'.($ngrade-$ctr)}; |
$laststu = $ENV{'form.unamedom'.($ngrade-$ctr)}; |
$ctr++; |
$ctr++; |
Line 1773 sub saveHandGrade {
|
Line 1781 sub saveHandGrade {
|
$wgt = $ENV{'form.WGT'.$newflg.'_'.$_} eq '' ? 1 : |
$wgt = $ENV{'form.WGT'.$newflg.'_'.$_} eq '' ? 1 : |
$ENV{'form.WGT'.$newflg.'_'.$_}; |
$ENV{'form.WGT'.$newflg.'_'.$_}; |
my $partial= $pts/$wgt; |
my $partial= $pts/$wgt; |
|
next if ($partial eq $record{'resource.'.$_.'.awarded'}); #do not update score for part if not changed. |
$newrecord{'resource.'.$_.'.awarded'} = $partial |
$newrecord{'resource.'.$_.'.awarded'} = $partial |
if ($record{'resource.'.$_.'.awarded'} ne $partial); |
if ($record{'resource.'.$_.'.awarded'} ne $partial); |
my $reckey = 'resource.'.$_.'.solved'; |
my $reckey = 'resource.'.$_.'.solved'; |
Line 2047 sub viewgrades {
|
Line 2056 sub viewgrades {
|
'<input type="hidden" name="totalparts" value="'.$ctsparts.'" />'; |
'<input type="hidden" name="totalparts" value="'.$ctsparts.'" />'; |
$result.='<input type="button" value="Reset" '. |
$result.='<input type="button" value="Reset" '. |
'onClick="javascript:resetEntry('.$ctsparts.');" TARGET=_self>'; |
'onClick="javascript:resetEntry('.$ctsparts.');" TARGET=_self>'; |
# $result.=' <input type="button" value="Submit Changes" name="subButton1'. |
|
# 'onClick="javascript:submit();" TARGET=_self />'."\n"; |
|
|
|
#table listing all the students in a section/class |
#table listing all the students in a section/class |
#header of table |
#header of table |
Line 2798 sub displayPage {
|
Line 2805 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() && !$curRes->randomout) { |
|
if (ref($curRes) && $curRes->is_problem()) { |
my $parts = $curRes->parts(); |
my $parts = $curRes->parts(); |
my $title = $curRes->compTitle(); |
my $title = $curRes->compTitle(); |
my $symbx = $curRes->symb(); |
my $symbx = $curRes->symb(); |
Line 2824 sub displayPage {
|
Line 2832 sub displayPage {
|
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 />'; |
} else { |
} else { |
$studentTable.='<table border="0" width="100%"><tr><td bgcolor="#777777">'. |
|
'<table border="0" width="100%"><tr bgcolor="#e6ffff">'. |
|
'<td><b>Date/Time</b></td>'. |
|
'<td><b>Submission</b></td>'. |
|
'<td><b>Status </b></td></tr>'; |
|
my %responseType = (); |
my %responseType = (); |
foreach my $partid (@{$parts}) { |
foreach my $partid (@{$parts}) { |
$responseType{$partid} = $curRes->responseType($partid); |
$responseType{$partid} = $curRes->responseType($partid); |
} |
} |
my ($version); |
$studentTable.= &displaySubByDates(\%record,$parts,\%responseType,$checkIcon); |
my %mark; |
|
$mark{'correct_by_student'} = $checkIcon; |
|
for ($version=1;$version<=$record{'version'};$version++) { |
|
my $timestamp = scalar(localtime($record{$version.':timestamp'})); |
|
$studentTable.='<tr bgcolor="#ffffff" valign="top"><td>'.$timestamp.'</td>'; |
|
my @versionKeys = split(/\:/,$record{$version.':keys'}); |
|
my @displaySub = (); |
|
foreach my $partid (@{$parts}) { |
|
my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys; |
|
next if ($record{"$version:resource.$partid.solved"} eq ''); |
|
$displaySub[0].=(exists $record{$version.':'.$matchKey[0]}) ? |
|
'<b>Part '.$partid.' '. |
|
($record{"$version:resource.$partid.tries"} eq '' ? 'Trial not counted' : |
|
'Trial '.$record{"$version:resource.$partid.tries"}).'</b> '. |
|
&cleanRecord($record{$version.':'.$matchKey[0]},$responseType{$partid}).'<br />' : ''; |
|
$displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ? |
|
'<b>Part '.$partid.'</b> '. |
|
lc($record{"$version:resource.$partid.award"}).' '. |
|
$mark{$record{"$version:resource.$partid.solved"}}.'<br />' : ''; |
|
# $record{"$version:resource.$partid.solved"}.'<br />' : ''; |
|
$displaySub[2].=(exists $record{"$version:resource.$partid.regrader"}) ? |
|
$record{"$version:resource.$partid.regrader"}.' (<b>Part:</b> '.$partid.')' : ''; |
|
} |
|
$displaySub[2].=(exists $record{"$version:resource.regrader"}) ? |
|
$record{"$version:resource.regrader"} : ''; |
|
$studentTable.='<td>'.$displaySub[0].' </td><td>'.$displaySub[1]. |
|
($displaySub[2] eq '' ? '' : 'Manually graded by '.$displaySub[2]).' </td></tr>'; |
|
} |
|
$studentTable.='</table></td></tr></table>'; |
|
} |
} |
} elsif ($ENV{'form.lastSub'} eq 'all') { |
} elsif ($ENV{'form.lastSub'} eq 'all') { |
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
Line 2896 sub displayPage {
|
Line 2870 sub displayPage {
|
return ''; |
return ''; |
} |
} |
|
|
|
sub displaySubByDates { |
|
my ($record,$parts,$responseType,$checkIcon) = @_; |
|
my $studentTable='<table border="0" width="100%"><tr><td bgcolor="#777777">'. |
|
'<table border="0" width="100%"><tr bgcolor="#e6ffff">'. |
|
'<td><b>Date/Time</b></td>'. |
|
'<td><b>Submission</b></td>'. |
|
'<td><b>Status </b></td></tr>'; |
|
my ($version); |
|
my %mark; |
|
$mark{'correct_by_student'} = $checkIcon; |
|
for ($version=1;$version<=$$record{'version'};$version++) { |
|
my $timestamp = scalar(localtime($$record{$version.':timestamp'})); |
|
$studentTable.='<tr bgcolor="#ffffff" valign="top"><td>'.$timestamp.'</td>'; |
|
my @versionKeys = split(/\:/,$$record{$version.':keys'}); |
|
my @displaySub = (); |
|
foreach my $partid (@{$parts}) { |
|
my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys; |
|
next if ($$record{"$version:resource.$partid.solved"} eq ''); |
|
$displaySub[0].=(exists $$record{$version.':'.$matchKey[0]}) ? |
|
'<b>Part '.$partid.' '. |
|
($$record{"$version:resource.$partid.tries"} eq '' ? 'Trial not counted' : |
|
'Trial '.$$record{"$version:resource.$partid.tries"}).'</b> '. |
|
&cleanRecord($$record{$version.':'.$matchKey[0]},$$responseType{$partid}).'<br />' : ''; |
|
$displaySub[1].=(exists $$record{"$version:resource.$partid.award"}) ? |
|
'<b>Part '.$partid.'</b> '. |
|
lc($$record{"$version:resource.$partid.award"}).' '. |
|
$mark{$$record{"$version:resource.$partid.solved"}}.'<br />' : ''; |
|
# $$record{"$version:resource.$partid.solved"}.'<br />' : ''; |
|
$displaySub[2].=(exists $$record{"$version:resource.$partid.regrader"}) ? |
|
$$record{"$version:resource.$partid.regrader"}.' (<b>Part:</b> '.$partid.')' : ''; |
|
} |
|
$displaySub[2].=(exists $$record{"$version:resource.regrader"}) ? |
|
$$record{"$version:resource.regrader"} : ''; |
|
$studentTable.='<td>'.$displaySub[0].' </td><td>'.$displaySub[1]. |
|
($displaySub[2] eq '' ? '' : 'Manually graded by '.$displaySub[2]).' </td></tr>'; |
|
} |
|
$studentTable.='</table></td></tr></table>'; |
|
return $studentTable; |
|
} |
|
|
sub updateGradeByPage { |
sub updateGradeByPage { |
my ($request) = shift; |
my ($request) = shift; |
|
|