[LON-CAPA-cvs] cvs: loncom /homework grades.pm

ng lon-capa-cvs@mail.lon-capa.org
Thu, 27 Mar 2003 20:36:01 -0000


This is a MIME encoded message

--ng1048797361
Content-Type: text/plain

ng		Thu Mar 27 15:36:01 2003 EDT

  Modified files:              
    /loncom/homework	grades.pm 
  Log:
  Change the way the grading menu remembers previous selection - makes it easier 
  to add or delete later.
  Fix an unreported bug when displaying essay grading with invalid collaborator(s).
  Fix (i think) bug 1308 - provides a link and show points awarded in message
  sent to student.
  
  
--ng1048797361
Content-Type: text/plain
Content-Disposition: attachment; filename="ng-20030327153601.txt"

Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.76 loncom/homework/grades.pm:1.77
--- loncom/homework/grades.pm:1.76	Mon Mar 24 16:03:54 2003
+++ loncom/homework/grades.pm	Thu Mar 27 15:36:01 2003
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.76 2003/03/24 21:03:54 ng Exp $
+# $Id: grades.pm,v 1.77 2003/03/27 20:36:01 ng Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -125,8 +125,8 @@
 	my (undef,undef,$end,$start,$id,$section,$fullname,$status)=
             @{$classlist->{$_}};
 	# filter students according to status selected
-	if ($filterlist && $ENV{'form.saveStatus'} ne 'Any') {
-	    if ($ENV{'form.saveStatus'} ne $status) {
+	if ($filterlist && $ENV{'form.status'} ne 'Any') {
+	    if ($ENV{'form.status'} ne $status) {
 		delete ($classlist->{$_});
 		next;
 	    }
@@ -211,10 +211,7 @@
     $jscript.= '<form action="/adm/grades" method="post" name="onestudent">'."\n".
 	'<input type="hidden" name="symb"    value="'.$symb.'" />'."\n".
 	'<input type="hidden" name="url"     value="'.$url.'" />'."\n".
-	'<input type="hidden" name="saveCmd" value="'.$ENV{'form.saveCmd'}.'" />'."\n".
-	'<input type="hidden" name="saveSec" value="'.$ENV{'form.saveSec'}.'" />'."\n".
-	'<input type="hidden" name="saveSub" value="'.$ENV{'form.saveSub'}.'" />'."\n".
-	'<input type="hidden" name="saveStatus" value="'.$ENV{'form.saveStatus'}.'" />'."\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="command" value="submission" />'."\n".
 	'<input type="hidden" name="student" value="" />'."\n".
@@ -301,7 +298,7 @@
 	    '<td><b>Type: </b>'.$responsetype.'</td>'.
 	    '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>';
     }
-    $result.='</table>';
+    $result.='</table>'."\n";
 
     my $viewgrade = $ENV{'form.handgrade'} eq 'yes' ? 'View/Grade' : 'View';
     $ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ? 
@@ -361,10 +358,7 @@
 	'<input type="hidden" name="response"    value="'.$ENV{'form.response'}.'" />'."\n".
 	'<input type="hidden" name="handgrade"   value="'.$ENV{'form.handgrade'}.'" /><br />'."\n".
 	'<input type="hidden" name="showgrading" value="'.$ENV{'form.showgrading'}.'" /><br />'."\n".
-	'<input type="hidden" name="saveCmd"     value="'.$ENV{'form.saveCmd'}.'" />'."\n".
-	'<input type="hidden" name="saveSec"     value="'.$ENV{'form.saveSec'}.'" />'."\n".
-	'<input type="hidden" name="saveSub"     value="'.$ENV{'form.saveSub'}.'" />'."\n".
-	'<input type="hidden" name="saveStatus"  value="'.$ENV{'form.saveStatus'}.'" />'."\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="url"  value="'.$url.'" />'."\n".
 	'<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
@@ -1036,10 +1030,7 @@
 
 	$request->print('<form action="/adm/grades" method="post" name="SCORE">'."\n".
 			'<input type="hidden" name="command"    value="handgrade" />'."\n".
-			'<input type="hidden" name="saveCmd"    value="'.$ENV{'form.saveCmd'}.'" />'."\n".
-			'<input type="hidden" name="saveSec"    value="'.$ENV{'form.saveSec'}.'" />'."\n".
-			'<input type="hidden" name="saveSub"    value="'.$ENV{'form.saveSub'}.'" />'."\n".
-			'<input type="hidden" name="saveStatus" value="'.$ENV{'form.saveStatus'}.'" />'."\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="refresh"    value="off" />'."\n".
 			'<input type="hidden" name="symb"       value="'.$symb.'" />'."\n".
@@ -1145,7 +1136,7 @@
                         $result .= 'invalid collaborators';
                     }
                     $result .= ': '.join(', ',@badcollaborators);
-                    
+		    $result .= '</td></tr></table>';                 
                 }
                 if (scalar(@collaborators > $ncol)) {
                     $result .= '<table border="0"><tr bgcolor="#ffbbbb"><td>';
@@ -1352,7 +1343,7 @@
 	my $ctr = 0;
 	while ($ctr < $ngrade) {
 	    my ($uname,$udom) = split(/:/,$ENV{'form.unamedom'.$ctr});
-	    my ($errorflag) = &saveHandGrade($request,$url,$symb,$uname,$udom,$ctr);
+	    my ($errorflag,$pts,$wgt) = &saveHandGrade($request,$url,$symb,$uname,$udom,$ctr);
 	    if ($errorflag eq 'no_score') {
 		$ctr++;
 		next;
@@ -1366,7 +1357,9 @@
 		foreach (@msgnum) {
 		    $message.=$ENV{'form.'.$_} if ($_ =~ /savemsg|newmsg/ && $_ ne '');
 		}
-		#$message =~ s/\s+/ /g;
+		$message =~ s/<([^>]|\n)*>//g; # removes html codes Or should this be lonnet::escape ??
+		$message.="\n\nPoint".($pts > 1 ? 's':'').' awarded = '.$pts.' out of '.$wgt;
+		$message.=" for <a href=\"/res/$url\">$ENV{'form.probTitle'}</a>";
 		$msgstatus = &Apache::lonmsg::user_normal_msg ($uname,$udom,
 							       $ENV{'form.msgsub'},$message);
 	    }
@@ -1504,8 +1497,9 @@
 #---- Save the score and award for each student, if changed
 sub saveHandGrade {
     my ($request,$url,$symb,$stuname,$domain,$newflg,$submitter) = @_;
-    my %record=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},$domain,$stuname);
-    my %newrecord;
+    my %record     = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$domain,$stuname);
+    my %newrecord  = ();
+    my ($pts,$wgt) = ('','');
     foreach (split(/:/,$ENV{'form.partlist'.$newflg})) {
 	if ($ENV{'form.GD_SEL'.$newflg.'_'.$_} eq 'excused') {
 	    if ($record{'resource.'.$_.'.solved'} ne 'excused') {
@@ -1515,11 +1509,11 @@
 		}
 	    }
 	} else {
-	    my $pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ? 
-		       $ENV{'form.GD_BOX'.$newflg.'_'.$_} : 
-		       $ENV{'form.RADVAL'.$newflg.'_'.$_});
+	    $pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ? 
+		    $ENV{'form.GD_BOX'.$newflg.'_'.$_} : 
+		    $ENV{'form.RADVAL'.$newflg.'_'.$_});
 	    return 'no_score' if ($pts eq '' && $ENV{'form.GD_SEL'.$newflg.'_'.$_} eq '');
-	    my $wgt = $ENV{'form.WGT'.$newflg.'_'.$_} eq '' ? 1 : 
+	    $wgt = $ENV{'form.WGT'.$newflg.'_'.$_} eq '' ? 1 : 
 		$ENV{'form.WGT'.$newflg.'_'.$_};
 	    my $partial= $pts/$wgt;
 	    $newrecord{'resource.'.$_.'.awarded'}  = $partial 
@@ -1542,7 +1536,7 @@
 	&Apache::lonnet::cstore(\%newrecord,$symb,
 				$ENV{'request.course.id'},$domain,$stuname);
     }
-    return '';
+    return '',$pts,$wgt;
 }
 
 #--------------------------------------------------------------------------------------
@@ -1738,10 +1732,7 @@
 	'<input type="hidden" name="url"     value="'.$url.'" />'."\n".
 	'<input type="hidden" name="command" value="editgrades" />'."\n".
 	'<input type="hidden" name="section" value="'.$ENV{'form.section'}.'" />'."\n".
-	'<input type="hidden" name="saveCmd" value="'.$ENV{'form.saveCmd'}.'" />'."\n".
-	'<input type="hidden" name="saveSec" value="'.$ENV{'form.saveSec'}.'" />'."\n".
-	'<input type="hidden" name="saveSub" value="'.$ENV{'form.saveSub'}.'" />'."\n".
-	'<input type="hidden" name="saveStatus" value="'.$ENV{'form.saveStatus'}.'" />'."\n".
+	'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n".
 	'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n";
 
     $result.='<h3>Assign Common Grade To ';
@@ -2158,10 +2149,7 @@
                                        value="$ENV{'form.upfile_associate'}" />
 <input type="hidden" name="symb"       value="$symb" />
 <input type="hidden" name="url"        value="$url" />
-<input type="hidden" name="saveCmd"    value="$ENV{'form.saveCmd'}" />
-<input type="hidden" name="saveSec"    value="$ENV{'form.saveSec'}" />
-<input type="hidden" name="saveSub"    value="$ENV{'form.saveSub'}" />
-<input type="hidden" name="saveStatus" value="$ENV{'form.saveStatus'}" />
+<input type="hidden" name="saveState"  value="$ENV{'form.saveState'}" />
 <input type="hidden" name="probTitle"  value="$ENV{'form.probTitle'}" />
 <input type="hidden" name="command"    value="csvuploadassign" />
 <hr />
@@ -2390,10 +2378,7 @@
 	'<input type="hidden" name="command" value="displayPage" />'."\n".
 	'<input type="hidden" name="url"     value="'.$url.'" />'."\n".
 	'<input type="hidden" name="symb"    value="'.$symb.'" />'."<br><br>\n".
-	'<input type="hidden" name="saveCmd" value="'.$ENV{'form.saveCmd'}.'" />'."\n".
-	'<input type="hidden" name="saveSec" value="'.$ENV{'form.saveSec'}.'" />'."\n".
-	'<input type="hidden" name="saveSub" value="'.$ENV{'form.saveSub'}.'" />'."\n".
-	'<input type="hidden" name="saveStatus" value="'.$ENV{'form.saveStatus'}.'" />'."\n";
+	'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n";
 
     $result.='<br />&nbsp;<input type="button" '.
 	'onClick="javascript:checkPickOne(this.form);"value="Submit" /><br />'."\n";
@@ -2525,10 +2510,7 @@
 	'<input type="hidden" name="title"   value="'.$ENV{'form.title'}.'" />'."\n".
 	'<input type="hidden" name="url"     value="'.$url.'" />'."\n".
 	'<input type="hidden" name="symb"    value="'.$symb.'" />'."\n".
-	'<input type="hidden" name="saveCmd" value="'.$ENV{'form.saveCmd'}.'" />'."\n".
-	'<input type="hidden" name="saveSec" value="'.$ENV{'form.saveSec'}.'" />'."\n".
-	'<input type="hidden" name="saveSub" value="'.$ENV{'form.saveSub'}.'" />'."\n".
-	'<input type="hidden" name="saveStatus" value="'.$ENV{'form.saveStatus'}.'" />'."\n";
+	'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n";
 
     my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL').
 	'/check.gif" height="16" border="0" />';
@@ -2590,13 +2572,14 @@
 			my @displaySub = ();
 			foreach my $partid (@{$parts}) {
 			    my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys;
-			    next if ($record{"$version:resource.$partid.award"} eq 'APPROX_ANS' && 
-				     $record{"$version:resource.$partid.solved"} eq '');
+			    next if ($record{"$version:resource.$partid.solved"} eq '');
+#			    next if ($record{"$version:resource.$partid.award"} eq 'APPROX_ANS' && 
+#				     $record{"$version:resource.$partid.solved"} eq '');
 			    $displaySub[0].=(exists $record{$version.':'.$matchKey[0]}) ? 
-				'<b>Part:</b> '.$partid.'&nbsp;<b>Submission:</b>&nbsp;'
+				'<b>Trial&nbsp;'.$version.'&nbsp;Part&nbsp;'.$partid.'</b>&nbsp; '
 				.$record{$version.':'.$matchKey[0]}.'<br />' : '';
 			    $displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ?
-				'<b>Part:</b> '.$partid.'&nbsp;'.
+				'<b>Part&nbsp;'.$partid.'</b> &nbsp;'.
 				$record{"$version:resource.$partid.award"}.'/'.
 				$record{"$version:resource.$partid.solved"}.'<br />' : '';
 			    $displaySub[2].=(exists $record{"$version:resource.$partid.regrader"}) ?
@@ -2878,16 +2861,24 @@
     my $result.='<form action="/adm/grades" method="post">'."\n".
 	'<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
 	'<input type="hidden" name="url" value="'.$url.'" />'."\n".
-	'<input type="hidden" name="saveCmd" value="'.$ENV{'form.saveCmd'}.'" />'."\n".
-	'<input type="hidden" name="saveSec" value="'.$ENV{'form.saveSec'}.'" />'."\n".
-	'<input type="hidden" name="saveSub" value="'.$ENV{'form.saveSub'}.'" />'."\n".
-	'<input type="hidden" name="saveStatus" value="'.$ENV{'form.saveStatus'}.'" />'."\n".
+	'<input type="hidden" name="saveState"  value="'.$ENV{'form.saveState'}.'" />'."\n".
 	'<input type="hidden" name="command" value="gradingmenu" />'."\n".
 	'<input type="submit" name="submit" value="Grading Menu" />'."\n".
 	'</form>'."\n";
     return $result;
 }
 
+# -- Retrieve choices for grading form
+sub savedState {
+    my %savedState = ();
+    if ($ENV{'form.saveState'}) {
+	foreach (split(/:/,$ENV{'form.saveState'})) {
+	    my ($key,$value) = split(/=/,$_,2);
+	    $savedState{$key} = $value;
+	}
+    }
+    return \%savedState;
+}
 
 #--- Displays the main menu page -------
 sub gradingmenu {
@@ -2895,19 +2886,13 @@
     my ($symb,$url)=&get_symb_and_url($request);
     if (!$symb) {return '';}
     my $probTitle = &Apache::lonnet::gettitle($symb);
-    my $saveCmd = ($ENV{'form.saveCmd'} eq '' ? 'pickStudentPage' : $ENV{'form.saveCmd'});
-    my $saveSec = ($ENV{'form.saveSec'} eq '' ? 'all' : $ENV{'form.saveSec'});
-    my $saveSub = ($ENV{'form.saveSub'} eq '' ? 'yes' : $ENV{'form.saveSub'});
-    my $saveStatus = ($ENV{'form.saveStatus'} eq '' ? 'Active' : $ENV{'form.saveStatus'});
 
     $request->print(<<GRADINGMENUJS);
 <script type="text/javascript" language="javascript">
     function checkChoice(formname) {
 	var cmd = formname.command;
-	formname.saveCmd.value = radioSelection(cmd);
-	formname.saveSec.value = pullDownSelection(formname.section);
-	formname.saveSub.value = radioSelection(formname.submitonly);
-	formname.saveStatus.value = pullDownSelection(formname.status);
+	formname.saveState.value = "saveCmd="+radioSelection(cmd)+":saveSec="+pullDownSelection(formname.section)+
+	    ":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.status);
 	if (cmd[0].checked || cmd[1].checked || cmd[2].checked || cmd[4].checked) formname.submit();
 
 	if (cmd[3].checked) browseAndUpload();
@@ -2974,7 +2959,10 @@
 	lDoc.write("     alert(\\"Please use the browse button to select a file from your local directory.\\");");
 	lDoc.write("     return false;");
 	lDoc.write("   }");
+	lDoc.write("   var openformname = opener.document.gradingMenu;");
+	lDoc.write("   formname.saveState.value = \\"saveCmd=\\"+opener.radioSelection(openformname.command)+\\":saveSec=\\"+opener.pullDownSelection(openformname.section)+\\":saveSub=\\"+opener.radioSelection(openformname.submitonly)+\\":saveStatus=\\"+opener.pullDownSelection(openformname.status);");
 	lDoc.write("   document.gradesupload.submit();");
+	lDoc.write("   if (navigator.appName !=\\"Netscape\\") {self.close()};");
 	lDoc.write("   setTimeout('self.close()',750)"); 
 	lDoc.write("}");
 
@@ -2986,13 +2974,10 @@
 	lDoc.write("<input type=\\"hidden\\" name=\\"symb\\"       value=\\"$symb\\">");
 	lDoc.write("<input type=\\"hidden\\" name=\\"url\\"        value=\\"$url\\">");
 	lDoc.write("<input type=\\"hidden\\" name=\\"probTitle\\"  value=\\"$probTitle\\">");
-	lDoc.write("<input type=\\"hidden\\" name=\\"saveCmd\\"    value=\\"csvupload\\">");
-	lDoc.write("<input type=\\"hidden\\" name=\\"saveSec\\"    value=\\"$saveSec\\">");
-	lDoc.write("<input type=\\"hidden\\" name=\\"saveSub\\"    value=\\"$saveSub\\">");
-	lDoc.write("<input type=\\"hidden\\" name=\\"saveStatus\\" value=\\"$saveStatus\\">");
+	lDoc.write("<input type=\\"hidden\\" name=\\"saveState\\"  value=\\"\\">");
 	lDoc.write("<input type=\\"hidden\\" name=\\"command\\"    value=\\"csvuploadmap\\">");
 
-	lDoc.write("<font color=\\"green\\" size=+1><b>Specify a file containing the class scores for problem - $probTitle</b></font><br><br>");
+	lDoc.write("<font color=\\"green\\" size=+1>&nbsp;<b>Specify a file containing the class scores for problem - $probTitle</b></font><br><br>");
 
 	lDoc.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">");
 	lDoc.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">");
@@ -3030,6 +3015,11 @@
     $result.='</table>'."\n";
 
     my (undef,$sections) = &getclasslist('all','0');
+    my $savedState = &savedState();
+    my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'pickStudentPage' : $$savedState{'saveCmd'});
+    my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'});
+    my $saveSub = ($$savedState{'saveSub'} eq '' ? 'yes' : $$savedState{'saveSub'});
+    my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'});
 
     $result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n".
 	'<input type="hidden" name="symb"        value="'.$symb.'" />'."\n".
@@ -3037,10 +3027,7 @@
 	'<input type="hidden" name="response"    value="'.$resptype.'" />'."\n".
 	'<input type="hidden" name="handgrade"   value="'.$hdgrade.'" />'."\n".
 	'<input type="hidden" name="probTitle"   value="'.$probTitle.'" />'."\n".
-	'<input type="hidden" name="saveCmd"     value="" />'."\n".
-	'<input type="hidden" name="saveSec"     value="" />'."\n".
-	'<input type="hidden" name="saveSub"     value="" />'."\n".
-	'<input type="hidden" name="saveStatus"  value="" />'."\n".
+	'<input type="hidden" name="saveState"   value="" />'."\n".
 	'<input type="hidden" name="showgrading" value="yes" />'."\n";
 
     $result.='<table width=100% border=0><tr><td bgcolor=#777777>'."\n".

--ng1048797361--