--- loncom/homework/grades.pm	2005/10/04 17:02:41	1.292
+++ loncom/homework/grades.pm	2005/11/22 19:10:16	1.296
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.292 2005/10/04 17:02:41 albertel Exp $
+# $Id: grades.pm,v 1.296 2005/11/22 19:10:16 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -545,7 +545,13 @@ sub verifyreceipt {
     if ($env{"course.$courseid.receiptalg"} eq 'receipt2') { $receiptparts=1; }
     my $parts=['0'];
     if ($receiptparts) { ($parts)=&response_type($url,$symb); }
-    foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
+    foreach (sort 
+	     {
+		 if (lc($$fullname{$a}) ne lc($$fullname{$b})) {
+		     return (lc($$fullname{$a}) cmp lc($$fullname{$b}));
+		 }
+		 return $a cmp $b;
+	     } (keys(%$fullname))) {
 	my ($uname,$udom)=split(/\:/);
 	foreach my $part (@$parts) {
 	    if ($receipt eq &Apache::lonnet::ireceipt($uname,$udom,$courseid,$symb,$part)) {
@@ -711,7 +717,14 @@ LISTJAVASCRIPT
     $gradeTable.='</tr>'."\n";
 
     my $ctr = 0;
-    foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
+    foreach my $student (sort 
+			 {
+			     if (lc($$fullname{$a}) ne lc($$fullname{$b})) {
+				 return (lc($$fullname{$a}) cmp lc($$fullname{$b}));
+			     }
+			     return $a cmp $b;
+			 }
+			 (keys(%$fullname))) {
 	my ($uname,$udom) = split(/:/,$student);
 	my %status = ();
 	if ($env{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
@@ -1866,7 +1879,16 @@ KEYWORDS
 
     # print end of form
     if ($counter == $total) {
-	my $endform='<table border="0"><tr><td>'."\n";
+	my $endform='';
+	if (&Apache::lonnet::allowed('vgr',$env{'request.course.id'})) {
+	    $endform.='<br />'.
+		&Apache::loncommon::track_student_link(&mt('View recent activity'),$uname,$udom,'check');
+	}
+	if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {
+	    $endform.='<br />'.
+		&Apache::loncommon::pprmlink(&mt('Set/Change parameters'),$uname,$udom,$symb,'check');
+	}
+        $endform.='<table border="0"><tr><td>'."\n";
 	$endform.='<input type="button" value="Save & Next" '.
 	    'onClick="javascript:checksubmit(this.form,\'Save & Next\','.
 	    $total.','.scalar(@partlist).');" TARGET=_self> &nbsp;'."\n";
@@ -1954,6 +1976,7 @@ sub processHandGrade {
 	    my ($subject,$message,$msgstatus) = ('','','');
 	    if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) {
 		$subject = $env{'form.msgsub'} if ($includemsg =~ /^msgsub/);
+		unless ($subject=~/\w/) { $subject=&mt('Grading Feedback'); }
 		my (@msgnum) = split(/,/,$includemsg);
 		foreach (@msgnum) {
 		    $message.=$env{'form.'.$_} if ($_ =~ /savemsg|newmsg/ && $_ ne '');
@@ -1964,7 +1987,10 @@ sub processHandGrade {
 		    &Apache::lonnet::clutter($url).
 		    "?symb=$symb\">$env{'form.probTitle'}</a>";
 		$msgstatus = &Apache::lonmsg::user_normal_msg ($uname,$udom,
-							       $env{'form.msgsub'},$message);
+							       $env{'form.msgsub'}.' ['.
+							       &Apache::lonnet::declutter($url).']',$message);
+		$request->print('<br />'.&mt('Sending message to [_1]@[_2]',$uname,$udom).': '.
+				$msgstatus);
 	    }
 	    if ($env{'form.collaborator'.$ctr}) {
 		my @collabstrs=&Apache::loncommon::get_env_multiple("form.collaborator$ctr");
@@ -2073,7 +2099,13 @@ sub processHandGrade {
 
     my (@parsedlist,@nextlist);
     my ($nextflg) = 0;
-    foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
+    foreach (sort 
+	     {
+		 if (lc($$fullname{$a}) ne lc($$fullname{$b})) {
+		     return (lc($$fullname{$a}) cmp lc($$fullname{$b}));
+		 }
+		 return $a cmp $b;
+	     } (keys(%$fullname))) {
 	if ($nextflg == 1 && $button =~ /Next$/) {
 	    push @parsedlist,$_;
 	}
@@ -2651,7 +2683,13 @@ sub viewgrades {
     #list all the students - with points and grade status
     my (undef,undef,$fullname) = &getclasslist($env{'form.section'},'1');
     my $ctr = 0;
-    foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
+    foreach (sort 
+	     {
+		 if (lc($$fullname{$a}) ne lc($$fullname{$b})) {
+		     return (lc($$fullname{$a}) cmp lc($$fullname{$b}));
+		 }
+		 return $a cmp $b;
+	     } (keys(%$fullname))) {
 	$ctr++;
 	$result.=&viewstudentgrade($url,$symb,$env{'request.course.id'},
 				   $_,$$fullname{$_},\@parts,\%weight,$ctr,\%last_resets);
@@ -3409,7 +3447,13 @@ LISTJAVASCRIPT
  
     my (undef,undef,$fullname) = &getclasslist($getsec,'1');
     my $ptr = 1;
-    foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
+    foreach my $student (sort 
+			 {
+			     if (lc($$fullname{$a}) ne lc($$fullname{$b})) {
+				 return (lc($$fullname{$a}) cmp lc($$fullname{$b}));
+			     }
+			     return $a cmp $b;
+			 } (keys(%$fullname))) {
 	my ($uname,$udom) = split(/:/,$student);
 	$studentTable.=($ptr%2 == 1 ? '<tr bgcolor="#ffffe6">' : '</td>');
 	$studentTable.='<td align="right">'.$ptr.'&nbsp;</td>';
@@ -4041,7 +4085,7 @@ SCANTRONFORM
             </tr>
             <tr bgcolor="#ffffe6">
               <td colspan="2">
-                <input type="submit" value="Show List of Files" />
+                <input type="submit" value="Download: Show List of Associated Files" />
               </td>
             </tr>
           </table>