[LON-CAPA-cvs] cvs: loncom /homework grades.pm
ng
lon-capa-cvs@mail.lon-capa.org
Thu, 17 Jul 2003 22:08:25 -0000
This is a MIME encoded message
--ng1058479705
Content-Type: text/plain
ng Thu Jul 17 18:08:25 2003 EDT
Modified files:
/loncom/homework grades.pm
Log:
clean up a bunch of codes
add ability to grade by part regardless whether it is essay response or not
--ng1058479705
Content-Type: text/plain
Content-Disposition: attachment; filename="ng-20030717180825.txt"
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.117 loncom/homework/grades.pm:1.118
--- loncom/homework/grades.pm:1.117 Wed Jul 16 15:28:08 2003
+++ loncom/homework/grades.pm Thu Jul 17 18:08:25 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.117 2003/07/16 19:28:08 bowersj2 Exp $
+# $Id: grades.pm,v 1.118 2003/07/17 22:08:25 ng Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -106,6 +106,7 @@
if (/^\w+response_\w+.*/) {
my ($responsetype,$part) = split(/_/,$_,2);
my ($partid,$respid) = split(/_/,$part);
+ $responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!!
$handgrade{$part} = $responsetype.':'.($allkeys =~ /parameter_$part\_handgrade/ ? 'yes' : 'no');
next if ($seen{$partid} > 0);
$seen{$partid}++;
@@ -115,6 +116,84 @@
return \@partlist,\%handgrade;
}
+#--- Show resource title
+#--- and parts and response type
+sub showResourceInfo {
+ my ($url,$probTitle) = @_;
+ my $result ='<table border="0">'.
+ '<tr><td colspan=3><font size=+1><b>Current Resource: </b>'.$probTitle.'</font></td></tr>'."\n";
+ my ($partlist,$handgrade) = &response_type($url);
+ my ($resptype,$hdgrade)=('','no');
+ for (sort keys(%$handgrade)) {
+ my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_});
+ $resptype = $responsetype;
+ $hdgrade = $handgrade if ($handgrade eq 'yes');
+ $result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'.
+ '<td><b>Type: </b>'.$responsetype.'</td></tr>';
+# '<td><b>Handgrade: </b>'.$handgrade.'</td></tr>';
+ }
+ $result.='</table>'."\n";
+ return $result,$resptype,$hdgrade,$partlist,$handgrade;
+}
+
+#--- Clean response type for display
+#--- Currently filters option response type only.
+sub cleanRecord {
+ my ($answer,$response) = @_;
+ $answer =~ s|^<br />||;
+ if ($response eq 'option') {
+ my (@IDs,@ans);
+ foreach (split(/\&/,&Apache::lonnet::unescape($answer))) {
+ my ($optionID,$ans) = split(/=/);
+ push @IDs,$optionID.'</font>';
+ push @ans,$ans;
+ }
+ my $grayFont = '<font color="#999999">';
+ return '<table border="1">'.
+ '<tr valign="top"><td>Answer</td><td>'.
+ (join '</td><td>',@ans).'</td></tr>'.
+ '<tr valign="top"><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont.
+ (join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'.
+ '</table>';
+ }
+ return $answer;
+}
+
+#-- A couple of common js functions
+sub commonJSfunctions {
+ my $request = shift;
+ $request->print(<<COMMONJSFUNCTIONS);
+<script type="text/javascript" language="javascript">
+ function radioSelection(radioButton) {
+ var selection=null;
+ if (radioButton.length > 1) {
+ for (var i=0; i<radioButton.length; i++) {
+ if (radioButton[i].checked) {
+ return radioButton[i].value;
+ }
+ }
+ } else {
+ if (radioButton.checked) return radioButton.value;
+ }
+ return selection;
+ }
+
+ function pullDownSelection(selectOne) {
+ var selection="";
+ if (selectOne.length > 1) {
+ for (var i=0; i<selectOne.length; i++) {
+ if (selectOne[i].selected) {
+ return selectOne[i].value;
+ }
+ }
+ } else {
+ if (selectOne.selected) return selectOne.value;
+ }
+ }
+</script>
+COMMONJSFUNCTIONS
+}
+
#--- Dumps the class list with usernames,list of sections,
#--- section, ids and fullnames for each user.
sub getclasslist {
@@ -297,7 +376,7 @@
my $title.='<h3><font color="#339933">Verifying Submission Receipt '.
$receipt.'</h3></font>'."\n".
- '<font size=+1><b>Problem: </b>'.$ENV{'form.probTitle'}.'</font><br><br>'."\n";
+ '<font size=+1><b>Resource: </b>'.$ENV{'form.probTitle'}.'</font><br><br>'."\n";
my ($string,$contents,$matches) = ('','',0);
my (undef,undef,$fullname) = &getclasslist('all','0');
@@ -345,26 +424,15 @@
my $getsec = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'};
my $submitonly= $ENV{'form.submitonly'} eq '' ? 'all' : $ENV{'form.submitonly'};
- my $result;
- my ($partlist,$handgrade) = &response_type($url);
- for (sort keys(%$handgrade)) {
- my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_});
- $ENV{'form.handgrade'} = 'yes' if ($handgrade eq 'yes');
- $result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'.
- '<td><b>Type: </b>'.$responsetype.'</td>'.
- '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';
- }
- $result.='</table>'."\n";
-
- my $viewgrade = $ENV{'form.handgrade'} eq 'yes' ? 'View/Grade' : 'View';
+ my $viewgrade = $ENV{'form.showgrading'} eq 'yes' ? 'View/Grade/Regrade' : 'View';
$ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ?
&Apache::lonnet::gettitle($symb) : $ENV{'form.probTitle'};
- $result='<h3><font color="#339933"> '.
- $viewgrade.
- ' Submissions for a Student or a Group of Students</font></h3>'.
- '<table border="0"><tr><td colspan=3><font size=+1>'.
- '<b>Problem: </b>'.$ENV{'form.probTitle'}.'</font></td></tr>'.$result;
+ my $result='<h3><font color="#339933"> '.$viewgrade.
+ ' Submissions for a Student or a Group of Students</font></h3>';
+
+ my ($table,$resptype,$hdgrade,$partlist,$handgrade) = &showResourceInfo($url,$ENV{'form.probTitle'});
+ $result.=$table;
$request->print(<<LISTJAVASCRIPT);
<script type="text/javascript" language="javascript">
@@ -396,34 +464,22 @@
formname.command.value = 'submission';
formname.submit();
}
-
- function pullDownSelection(selectOne) {
- var selection="";
- if (selectOne.length > 1) {
- for (var i=0; i<selectOne.length; i++) {
- if (selectOne[i].selected) {
- return selectOne[i].value;
- }
- }
- } else {
- if (selectOne.selected) return selectOne.value;
- }
- }
</script>
LISTJAVASCRIPT
+ &commonJSfunctions($request);
$request->print($result);
- my $checkhdgrade = $ENV{'form.handgrade'} eq 'yes' ? 'checked' : '';
- my $checklastsub = $ENV{'form.handgrade'} eq 'yes' ? '' : 'checked';
-
+ my $checkhdgrade = ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked' : '';
+ my $checklastsub = ($ENV{'form.handgrade'} eq 'no') ? 'checked' : '';
+ $checklastsub = 'checked' if ($checkhdgrade eq '' && $checklastsub eq '');
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".
'<input type="radio" name="vProb" value="yes" /> one student '."\n".
'<input type="radio" name="vProb" value="all" /> all students <br />'."\n".
' <b>Submissions: </b>'."\n";
- if ($ENV{'form.handgrade'} eq 'yes') {
- $gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> handgrade only'."\n";
+ if ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1) {
+ $gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> essay part only'."\n";
}
my $saveStatus = $ENV{'form.Status'} eq '' ? 'Active' : $ENV{'form.Status'};
@@ -654,8 +710,8 @@
function checkSolved(formname,id) {
if (eval("formname.solved"+id+".value") == "correct_by_student") {
- alert("This problem has been graded correct by the computer. The score cannot be changed.");
- return "noupdate";
+ var reply = confirm("This problem has been graded correct by the computer. Do you want to change the score?");
+ if (!reply) {return "noupdate";}
}
return "update";
}
@@ -738,6 +794,7 @@
sub sub_page_kw_js {
my $request = shift;
my $iconpath = $request->dir_config('lonIconsURL');
+ &commonJSfunctions($request);
$request->print(<<SUBJAVASCRIPT);
<script type="text/javascript" language="javascript">
@@ -818,7 +875,6 @@
return;
}
-// var pWin = null;
function savedMsgHeader(Nmsg,usrctr,fullname) {
var height = 70*Nmsg+250;
var scrollbar = "no";
@@ -827,7 +883,12 @@
scrollbar = "yes";
}
// if (window.pWin) {window.pWin.close(); window.pWin=null}
- pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx=70,screeny=75,width=600,height='+height);
+ var xpos = (screen.width-600)/2;
+ xpos = (xpos < 0) ? '0' : xpos;
+ var ypos = (screen.height-height)/2-30;
+ ypos = (ypos < 0) ? '0' : ypos;
+
+ pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height);
pWin.focus();
pDoc = pWin.document;
pDoc.write("<html><head>");
@@ -947,10 +1008,14 @@
return;
}
-// var hwdWin = null;
function highlightCentral() {
// if (window.hwdWin) window.hwdWin.close();
- hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx=100,screeny=75');
+ var xpos = (screen.width-400)/2;
+ xpos = (xpos < 0) ? '0' : xpos;
+ var ypos = (screen.height-330)/2-30;
+ ypos = (ypos < 0) ? '0' : ypos;
+
+ hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos);
hwdWin.focus();
var hDoc = hwdWin.document;
hDoc.write("<html><head>");
@@ -958,9 +1023,9 @@
hDoc.write("<script language=javascript>");
hDoc.write("function updateChoice(flag) {");
- hDoc.write(" opener.document.SCORE.kwclr.value = radioSelection(document.hlCenter.kwdclr);");
- hDoc.write(" opener.document.SCORE.kwsize.value = radioSelection(document.hlCenter.kwdsize);");
- hDoc.write(" opener.document.SCORE.kwstyle.value = radioSelection(document.hlCenter.kwdstyle);");
+ hDoc.write(" opener.document.SCORE.kwclr.value = opener.radioSelection(document.hlCenter.kwdclr);");
+ hDoc.write(" opener.document.SCORE.kwsize.value = opener.radioSelection(document.hlCenter.kwdsize);");
+ hDoc.write(" opener.document.SCORE.kwstyle.value = opener.radioSelection(document.hlCenter.kwdstyle);");
hDoc.write(" opener.document.SCORE.refresh.value = \\"on\\";");
hDoc.write(" if (opener.document.SCORE.keywords.value!=\\"\\"){");
hDoc.write(" opener.document.SCORE.submit();");
@@ -968,7 +1033,7 @@
hDoc.write(" self.close()");
hDoc.write("}");
- hDoc.write("function radioSelection(radioButton) {");
+/* 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) {");
@@ -976,7 +1041,7 @@
hDoc.write(" return selection;");
hDoc.write(" }");
hDoc.write(" }");
- hDoc.write("}");
+ hDoc.write("}"); */
hDoc.write("<");
hDoc.write("/script>");
@@ -1125,12 +1190,20 @@
# header info
if ($counter == 0) {
&sub_page_js($request);
- &sub_page_kw_js($request);
+ &sub_page_kw_js($request) if ($ENV{'form.handgrade'} eq 'yes');
$ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ?
&Apache::lonnet::gettitle($symb) : $ENV{'form.probTitle'};
$request->print('<h3> <font color="#339933">Submission Record</font></h3>'."\n".
- '<font size=+1> <b>Problem: </b>'.$ENV{'form.probTitle'}.'</font>'."\n");
+ '<font size=+1> <b>Resource: </b>'.$ENV{'form.probTitle'}.'</font>'."\n");
+
+ if ($ENV{'form.handgrade'} eq 'no') {
+ my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL').
+ '/check.gif" height="16" border="0" />';
+ my $checkMark='<br /><br /> <b>Note:</b> Part(s) graded correct by the computer is marked with a '.
+ $checkIcon.' symbol.'."\n";
+ $request->print($checkMark);
+ }
# option to display problem, only once else it cause problems
# with the form later since the problem has a form.
@@ -1141,7 +1214,7 @@
# kwclr is the only variable that is guaranteed to be non blank
# if this subroutine has been called once.
my %keyhash = ();
- if ($ENV{'form.kwclr'} eq '') {
+ if ($ENV{'form.kwclr'} eq '' && $ENV{'form.handgrade'} eq 'yes') {
%keyhash = &Apache::lonnet::dump('nohist_handgrade',
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
$ENV{'course.'.$ENV{'request.course.id'}.'.num'});
@@ -1229,11 +1302,10 @@
$result.='<b>Fullname: </b>'.$ENV{'form.fullname'}.
'<font color="#999999"> Username: '.$uname.
($ENV{'user.domain'} eq $udom ? '' : ' ('.$udom.')').'</font><br />'."\n";
-# '<font color="#999999"> Domain: '.$udom.'</font><br />'."\n";
$result.='<input type="hidden" name="name'.$counter.
'" value="'.$ENV{'form.fullname'}.'" />'."\n";
- # If this is an essay-response part(handgraded), then check for collaborators
+ # If any part of the problem is an essay-response (handgraded), then check for collaborators
my @col_fullnames;
my ($classlist,$fullname);
if ($ENV{'form.handgrade'} eq 'yes') {
@@ -1309,44 +1381,53 @@
&get_last_submission (%record);
my $lastsubonly=''.
($$timestamp eq '' ? '' : '<b>Date Submitted:</b> '.
- $$timestamp).'';
+ $$timestamp)."</td></tr>\n";
if ($$timestamp eq '') {
- $lastsubonly.='<tr><td bgcolor="#ffffe6">'.$$string[0].'</td></tr>'."\n";
+ $lastsubonly.='<tr><td bgcolor="#ffffe6">'.$$string[0];
} else {
for my $part (sort keys(%$handgrade)) {
- foreach (@$string) {
- my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/;
- if ($part eq ($partid.'_'.$respid)) {
- my ($ressub,$subval) = split(/:/,$_,2);
-# Similarity check
- my $similar='';
- my ($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 '.
- $partid.'</b> <font color="#999999">( ID '.$respid.
- ' )</font> '.
- ($record{"resource.$partid.$respid.uploadedurl"}?
- '<a href="'.
- &Apache::lonnet::tokenwrapper($record{"resource.$partid.$respid.uploadedurl"}).
- '"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> '.
- '<font color="red" size="1">Like all files provided by users, '.
- 'this file may contain virusses</font><br />':'').
- '<b>Answer: </b><blockquote>'.
- &keywords_highlight($subval).'</blockquote><br /> '.$similar.'</td></tr>'."\n"
- if ($ENV{'form.lastSub'} eq 'lastonly' ||
- ($ENV{'form.lastSub'} eq 'hdgrade' &&
- $$handgrade{$part} =~ /:yes$/));
+ my ($responsetype,$foo) = split(/:/,$$handgrade{$part});
+ my ($partid,$respid) = split(/_/,$part);
+ if (!exists($record{'resource.'.$partid.'.'.$respid.'.submission'})) {
+ $lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '.
+ $partid.'</b> <font color="#999999">( ID '.$respid.
+ ' )</font> Nothing submitted<br /><br />';
+ } else {
+ foreach (@$string) {
+ my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/;
+ if ($part eq ($partid.'_'.$respid)) {
+ my ($ressub,$subval) = split(/:/,$_,2);
+ # Similarity check
+ my $similar='';
+ my ($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 '.
+ $partid.'</b> <font color="#999999">( ID '.$respid.
+ ' )</font> '.
+ ($record{"resource.$partid.$respid.uploadedurl"}?
+ '<a href="'.
+ &Apache::lonnet::tokenwrapper($record{"resource.$partid.$respid.uploadedurl"}).
+ '"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> '.
+ '<font color="red" size="1">Like all files provided by users, '.
+ 'this file may contain virusses</font><br />':'').
+ '<b>Submitted Answer: </b>'.($responsetype eq 'essay' ? '<blockquote>' : '').
+ &cleanRecord(&keywords_highlight($subval),$responsetype).
+ ($responsetype eq 'essay' ? '</blockquote><br />' : '<br /><br />').$similar."\n"
+ if ($ENV{'form.lastSub'} eq 'lastonly' ||
+ ($ENV{'form.lastSub'} eq 'hdgrade' &&
+ $$handgrade{$part} =~ /:yes$/));
+ }
}
}
}
}
- $lastsubonly.='</td></tr>'."\n";
+ $lastsubonly.='</td></tr><tr bgcolor="#ffffff"><td>'."\n";
$request->print($lastsubonly);
}
} else {
@@ -1357,8 +1438,8 @@
}
# return if view submission with no grading option
-# if ($ENV{'form.showgrading'} eq '' || (!&canmodify($usec))) {
- if (!&canmodify($usec)) {
+ if ($ENV{'form.showgrading'} eq '' || (!&canmodify($usec))) {
+# if (!&canmodify($usec)) {
$request->print('</td></tr></table></td></tr></table></form>'."\n");
$request->print(&show_grading_menu_form($symb,$url))
if (($ENV{'form.command'} eq 'submission') ||
@@ -1366,27 +1447,29 @@
return;
}
- # Grading options
- $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 $msgfor = $givenn.' '.$lastname;
- if (scalar(@col_fullnames) > 0) {
- my $lastone = pop @col_fullnames;
- $msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.';
- }
- $msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript
- $result.='<tr><td bgcolor="#ffffff">'."\n".
- ' <a href="javascript:msgCenter(document.SCORE,'.$counter.
- ',\''.$msgfor.'\')"; TARGET=_self>'.
- 'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> '.
- '<img src="'.$request->dir_config('lonIconsURL').
- '/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n".
- '<br /> (Message will be sent when you click on Save & Next below.)'."\n"
- if ($ENV{'form.handgrade'} eq 'yes');
- $request->print($result);
+ # essay grading options
+ 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 $msgfor = $givenn.' '.$lastname;
+ if (scalar(@col_fullnames) > 0) {
+ my $lastone = pop @col_fullnames;
+ $msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.';
+ }
+ $msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript
+# $result.='<tr><td bgcolor="#ffffff">'."\n".
+ $result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter.
+ ',\''.$msgfor.'\')"; TARGET=_self>'.
+ 'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> '.
+ '<img src="'.$request->dir_config('lonIconsURL').
+ '/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n".
+ '<br /> (Message will be sent when you click on Save & Next below.)'."\n"
+ if ($ENV{'form.handgrade'} eq 'yes');
+ $request->print($result);
+ }
my %seen = ();
my @partlist;
@@ -1394,7 +1477,7 @@
my ($partid,$respid) = split(/_/);
next if ($seen{$partid} > 0);
$seen{$partid}++;
-# next if ($$handgrade{$_} =~ /:no$/);
+ next if ($$handgrade{$_} =~ /:no$/ && $ENV{'form.lastSub'} =~ /^(hdgrade)$/);
push @partlist,$partid;
$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record));
@@ -1413,7 +1496,7 @@
if ($counter == $total) {
my $endform='<table border="0"><tr><td>'.
'<input type="hidden" name="gradeOpt" value="" />'."\n";
- if ($ENV{'form.handgrade'} eq 'yes') {
+# if ($ENV{'form.handgrade'} eq 'yes') {
$endform.='<input type="button" value="Save & Next" '.
'onClick="javascript:checksubmit(this.form,\'Save & Next\','.
$total.','.scalar(@partlist).');" TARGET=_self> '."\n";
@@ -1424,15 +1507,15 @@
my $nsel = ($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : '1');
$ntstu =~ s/<option>$nsel</<option selected="on">$nsel</;
$endform.=$ntstu.'student(s) ';
- } else {
- $endform.='<input type="hidden" name="NTSTU" value="1" />'."\n";
- }
+# } else {
+# $endform.='<input type="hidden" name="NTSTU" value="1" />'."\n";
+# }
$endform.='<input type="button" value="Next" '.
'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> '."\n".
'<input type="button" value="Previous" '.
'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> ';
- $endform.='(Next and Previous do not save the scores.)'."\n"
- if ($ENV{'form.handgrade'} eq 'yes');
+ $endform.='(Next and Previous do not save the scores.)'."\n" ;
+# if ($ENV{'form.handgrade'} eq 'yes');
$endform.='</td><tr></table></form>';
$endform.=&show_grading_menu_form($symb,$url);
$request->print($endform);
@@ -1895,7 +1978,7 @@
my ($symb,$url) = ($ENV{'form.symb'},$ENV{'form.url'});
my $result='<h3><font color="#339933">Manual Grading</font></h3>';
- $result.='<font size=+1><b>Problem: </b>'.$ENV{'form.probTitle'}.'</font>'."\n";
+ $result.='<font size=+1><b>Current Resource: </b>'.$ENV{'form.probTitle'}.'</font>'."\n";
#view individual student submission form - called using Javascript viewOneStudent
$result.=&jscriptNform($url,$symb);
@@ -2076,7 +2159,7 @@
my $symb=$ENV{'form.symb'};
my $url =$ENV{'form.url'};
my $title='<h3><font color="#339933">Current Grade Status</font></h3>';
- $title.='<font size=+1><b>Problem: </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";
my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n";
$result.= '<table border="0"><tr bgcolor="#deffff">'.
@@ -2314,19 +2397,8 @@
$javascript=&csvupload_javascript_forward_associate();
}
- my $result='<table border="0">';
- $result.='<tr><td colspan=3><font size=+1><b>Problem: </b>'.$ENV{'form.probTitle'}.'</font></td></tr>';
- my ($partlist,$handgrade) = &response_type($url);
- my ($resptype,$hdgrade)=('','no');
- for (sort keys(%$handgrade)) {
- my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_});
- $resptype = $responsetype;
- $hdgrade = $handgrade if ($handgrade eq 'yes');
- $result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'.
- '<td><b>Type: </b>'.$responsetype.'</td>'.
- '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';
- }
- $result.='</table>';
+ my ($result,$resptype,$hdgrade,$partlist,$handgrade) = &showResourceInfo($url,$ENV{'form.probTitle'});
+
$request->print(<<ENDPICK);
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
<h3><font color="#339933">Uploading Class Grades</font></h3>
@@ -2354,7 +2426,8 @@
$javascript
</script>
ENDPICK
-return '';
+ $request->print(&show_grading_menu_form($symb,$url));
+ return '';
}
@@ -2400,9 +2473,11 @@
</script>
CSVFORMJS
$ENV{'form.probTitle'} = &Apache::lonnet::gettitle($symb);
+ my ($table) = &showResourceInfo($url,$ENV{'form.probTitle'});
+ $result.=$table;
$result.='<br /><table width=100% border=0><tr><td bgcolor="#777777">'."\n";
$result.='<table width=100% border=0><tr bgcolor="#e6ffff"><td>'."\n";
- $result.=' <b>Specify a file containing the class scores for problem - '.$ENV{'form.probTitle'}.
+ $result.=' <b>Specify a file containing the class scores for current resource'.
'.</b></td></tr>'."\n";
$result.='<tr bgcolor=#ffffe6><td>'."\n";
my $upfile_select=&Apache::loncommon::upfile_select_html();
@@ -2421,7 +2496,6 @@
$result.='</td></tr></table>'."\n";
$result.='</td></tr></table><br /><br />'."\n";
$result.=&show_grading_menu_form($symb,$url);
-
return $result;
}
@@ -2555,35 +2629,9 @@
formname.submit();
}
-function radioSelection(radioButton) {
- var selection=null;
- if (radioButton.length > 1) {
- for (var i=0; i<radioButton.length; i++) {
- if (radioButton[i].checked) {
- return radioButton[i].value;
- }
- }
- } else {
- if (radioButton.checked) return radioButton.value;
- }
- return selection;
-}
-
-function pullDownSelection(selectOne) {
- var selection="";
- if (selectOne.length > 1) {
- for (var i=0; i<selectOne.length; i++) {
- if (selectOne[i].selected) {
- return selectOne[i].value;
- }
- }
- } else {
- if (selectOne.selected) return selectOne.value;
- }
-}
</script>
LISTJAVASCRIPT
-
+ &commonJSfunctions($request);
my ($symb,$url) = &get_symb_and_url($request);
my $cdom = $ENV{"course.$ENV{'request.course.id'}.domain"};
my $cnum = $ENV{"course.$ENV{'request.course.id'}.num"};
@@ -2624,7 +2672,7 @@
'<input type="radio" name="lastSub" value="all" /> all details'."\n";
$result.='<input type="hidden" name="section" value="'.$getsec.'" />'."\n".
- '<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n".
+ '<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n".
'<input type="hidden" name="command" value="displayPage" />'."\n".
'<input type="hidden" name="url" value="'.$url.'" />'."\n".
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
@@ -2736,12 +2784,12 @@
my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL').
'/check.gif" height="16" border="0" />';
- $studentTable.=' <b>Note:</b> A problem graded correct ('.$checkIcon.
- ') by the computer cannot be changed.'."\n".
+ $studentTable.=' <b>Note:</b> Problems graded correct by the computer are marked with a '.$checkIcon.
+ ' symbol.'."\n".
'<table border="0"><tr><td bgcolor="#777777">'.
'<table border="0"><tr bgcolor="#e6ffff">'.
- '<td align="center"><b> No </b></td>'.
- '<td><b> '.($ENV{'form.vProb'} eq 'no' ? 'Title' : 'Problem View').'/Grade</b></td></tr>';
+ '<td align="center"><b> Prob. </b></td>'.
+ '<td><b> '.($ENV{'form.vProb'} eq 'no' ? 'Title' : 'Problem Text').'/Grade</b></td></tr>';
my ($depth,$question) = (1,1);
$iterator->next(); # skip the first BEGIN_MAP
@@ -2786,6 +2834,8 @@
$responseType{$partid} = $curRes->responseType($partid);
}
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>';
@@ -2801,8 +2851,9 @@
&cleanRecord($record{$version.':'.$matchKey[0]},$responseType{$partid}).'<br />' : '';
$displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ?
'<b>Part '.$partid.'</b> '.
- $record{"$version:resource.$partid.award"}.'/'.
- $record{"$version:resource.$partid.solved"}.'<br />' : '';
+ 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.')' : '';
}
@@ -2845,26 +2896,6 @@
return '';
}
-sub cleanRecord {
- my ($answer,$response) = @_;
- if ($response eq 'option') {
- my (@IDs,@ans);
- foreach (split(/\&/,&Apache::lonnet::unescape($answer))) {
- my ($optionID,$ans) = split(/=/);
- push @IDs,$optionID.'</font>';
- push @ans,$ans;
- }
- my $grayFont = '<font color="#999999">';
- return '<table border="1">'.
- '<tr valign="top"><td>Answer</td><td>'.
- (join '</td><td>',@ans).'</td></tr>'.
- '<tr><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont.
- (join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'.
- '</table>';
- }
- return $answer;
-}
-
sub updateGradeByPage {
my ($request) = shift;
@@ -3335,11 +3366,13 @@
function checkChoice(formname,val,cmdx) {
if (val <= 2) {
var cmd = radioSelection(formname.radioChoice);
+ var cmdsave = cmd;
} else {
cmd = cmdx;
+ cmdsave = 'submission';
}
formname.command.value = cmd;
- formname.saveState.value = "saveCmd="+cmd+":saveSec="+pullDownSelection(formname.section)+
+ formname.saveState.value = "saveCmd="+cmdsave+":saveSec="+pullDownSelection(formname.section)+
":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.Status);
if (val < 5) formname.submit();
if (val == 5) {
@@ -3361,57 +3394,17 @@
}
return true;
}
-
- function radioSelection(radioButton) {
- var selection=null;
- if (radioButton.length > 1) {
- for (var i=0; i<radioButton.length; i++) {
- if (radioButton[i].checked) {
- return radioButton[i].value;
- }
- }
- } else {
- if (radioButton.checked) return radioButton.value;
- }
- return selection;
- }
-
- function pullDownSelection(selectOne) {
- var selection="";
- if (selectOne.length > 1) {
- for (var i=0; i<selectOne.length; i++) {
- if (selectOne[i].selected) {
- return selectOne[i].value;
- }
- }
- } else {
- if (selectOne.selected) return selectOne.value;
- }
- }
-
</script>
GRADINGMENUJS
-
- my $result='<h3> <font color="#339933">Manual Grading/View Submission</font></h3>'.
- '<table border="0">'.
- '<tr><td colspan=3><font size=+1><b>Problem: </b>'.$probTitle.'</font></td></tr>'."\n";
- my ($partlist,$handgrade) = &response_type($url);
- my ($resptype,$hdgrade)=('','no');
- for (sort keys(%$handgrade)) {
- my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_});
- $resptype = $responsetype;
- $hdgrade = $handgrade if ($handgrade eq 'yes');
- $result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'.
- '<td><b>Type: </b>'.$responsetype.'</td></tr>';
-# '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';
- }
- $result.='</table>'."\n";
-
+ &commonJSfunctions($request);
+ my $result='<h3> <font color="#339933">Manual Grading/View Submission</font></h3>';
+ my ($table,$resptype,$hdgrade) = &showResourceInfo($url,$probTitle);
+ $result.=$table;
my (undef,$sections) = &getclasslist('all','0');
my $savedState = &savedState();
- my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'pickStudentPage' : $$savedState{'saveCmd'});
+ my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'});
my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'});
- my $saveSub = ($$savedState{'saveSub'} eq '' ? 'yes' : $$savedState{'saveSub'});
+ my $saveSub = ($$savedState{'saveSub'} eq '' ? 'all' : $$savedState{'saveSub'});
my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'});
$result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n".
@@ -3431,7 +3424,7 @@
$result.='<table width="100%" border=0>';
$result.='<tr bgcolor="#ffffe6" valign="top"><td>'."\n".
- ' Section: <select name="section">'."\n";
+ ' Select Section: <select name="section">'."\n";
if (ref($sections)) {
foreach (sort (@$sections)) {$result.='<option value="'.$_.'" '.
($saveSec eq $_ ? 'selected="on"' : '').'>'.$_.'</option>'."\n";}
@@ -3446,24 +3439,24 @@
}
$result.='</td></tr>';
- $result.='<tr bgcolor="#ffffe6" valign="top"><td>'.
- '<input type="radio" name="radioChoice" value="pickStudentPage" '.
- ($saveCmd eq 'pickStudentPage' ? 'checked' : '').'> '.
- 'One student for whole page/sequence/folder</td></tr>'."\n";
+ $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.
+ '<input type="radio" name="radioChoice" value="submission" '.
+ ($saveCmd eq 'submission' ? 'checked' : '').'> '.'<b>Current Resource:</b> For one or more students'.
+ '<br /> -->For students with '.
+ '<input type="radio" name="submitonly" value="yes" '.
+ ($saveSub eq 'yes' ? 'checked' : '').' /> submissions or '.
+ '<input type="radio" name="submitonly" value="all" '.
+ ($saveSub eq 'all' ? 'checked' : '').' /> for all</td></tr>'."\n";
$result.='<tr bgcolor="#ffffe6"valign="top"><td>'.
'<input type="radio" name="radioChoice" value="viewgrades" '.
($saveCmd eq 'viewgrades' ? 'checked' : '').'> '.
- 'All students in section/course for current resource</td></tr>'."\n";
+ '<b>Current Resource:</b> For all students in selected section or course</td></tr>'."\n";
- $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.
- '<input type="radio" name="radioChoice" value="submission" '.
- ($saveCmd eq 'submission' ? 'checked' : '').'> '.'One or more students for current resource'.
- '<br /> -->For students who has: '.
- '<input type="radio" name="submitonly" value="yes" '.
- ($saveSub eq 'yes' ? 'checked' : '').' /> submitted'.
- '<input type="radio" name="submitonly" value="all" '.
- ($saveSub eq 'all' ? 'checked' : '').' /> everybody</td></tr>'."\n";
+ $result.='<tr bgcolor="#ffffe6" valign="top"><td>'.
+ '<input type="radio" name="radioChoice" value="pickStudentPage" '.
+ ($saveCmd eq 'pickStudentPage' ? 'checked' : '').'> '.
+ 'The <b>complete</b> set/page/sequence: For one student</td></tr>'."\n";
$result.='<tr bgcolor="#ffffe6"><td><br />'.
'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="View/Grade/Regrade" />'.
--ng1058479705--