--- loncom/homework/grades.pm	2010/04/18 18:45:41	1.623
+++ loncom/homework/grades.pm	2010/04/25 13:18:32	1.631
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.623 2010/04/18 18:45:41 www Exp $
+# $Id: grades.pm,v 1.631 2010/04/25 13:18:32 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -864,8 +864,6 @@ LISTJAVASCRIPT
     &commonJSfunctions($request);
     $request->print($result);
 
-    my $checkhdgrade = ($env{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked="checked"' : '';
-    my $checklastsub = $checkhdgrade eq '' ? 'checked="checked"' : '';
     my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'.
 	"\n";
 	
@@ -882,22 +880,18 @@ LISTJAVASCRIPT
                   .&Apache::lonhtmlcommon::row_closure();
 
     my $submission_options;
-    if ($env{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1) {
-	$submission_options.=
-	    '<label><input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> '.&mt('essay part only').' </label>'."\n";
-    }
     my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status'));
     my $saveStatus = $stu_status eq '' ? 'Active' : $stu_status;
     $env{'form.Status'} = $saveStatus;
     $submission_options.=
         '<span class="LC_nobreak">'.
-        '<label><input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> '.
+        '<label><input type="radio" name="lastSub" value="lastonly" /> '.
         &mt('last submission only').' </label></span>'."\n".
         '<span class="LC_nobreak">'.
         '<label><input type="radio" name="lastSub" value="last" /> '.
         &mt('last submission &amp; parts info').' </label></span>'."\n".
         '<span class="LC_nobreak">'.
-        '<label><input type="radio" name="lastSub" value="datesub" /> '.
+        '<label><input type="radio" name="lastSub" value="datesub" checked="checked" /> '.
         &mt('by dates and submissions').'</label></span>'."\n".
         '<span class="LC_nobreak">'.
         '<label><input type="radio" name="lastSub" value="all" /> '.
@@ -918,7 +912,6 @@ LISTJAVASCRIPT
     $gradeTable .= 
         &build_section_inputs().
 	'<input type="hidden" name="submitonly"  value="'.$submitonly.'" />'."\n".
-	'<input type="hidden" name="handgrade"   value="'.$env{'form.handgrade'}.'" /><br />'."\n".
 	'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
 	'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n";
 
@@ -1330,7 +1323,8 @@ sub sub_page_kw_js {
     my $iconpath = $request->dir_config('lonIconsURL');
     &commonJSfunctions($request);
 
-    my $inner_js_msg_central= &Apache::lonhtmlcommon::scripttag(<<INNERJS);
+    my $inner_js_msg_central= (<<INNERJS);
+<script type="text/javascript">
     function checkInput() {
       opener.document.SCORE.msgsub.value = opener.checkEntities(document.msgcenter.msgsub.value);
       var nmsg   = opener.document.SCORE.savemsgN.value;
@@ -1367,9 +1361,11 @@ sub sub_page_kw_js {
       self.close()
 
     }
+</script>
 INNERJS
 
-    my $inner_js_highlight_central= &Apache::lonhtmlcommon::scripttag(<<INNERJS);
+    my $inner_js_highlight_central= (<<INNERJS);
+<script type="text/javascript">
     function updateChoice(flag) {
       opener.document.SCORE.kwclr.value = opener.radioSelection(document.hlCenter.kwdclr);
       opener.document.SCORE.kwsize.value = opener.radioSelection(document.hlCenter.kwdsize);
@@ -1380,6 +1376,7 @@ INNERJS
       }
       self.close()
     }
+</script>
 INNERJS
 
     my $start_page_msg_central = 
@@ -1936,7 +1933,8 @@ sub submission {
 	# 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 '' && $env{'form.handgrade'} eq 'yes') {
+#	if ($env{'form.kwclr'} eq '' && $env{'form.handgrade'} eq 'yes') {
+        if (1) {
 	    %keyhash = &Apache::lonnet::dump('nohist_handgrade',
 					     $env{'course.'.$env{'request.course.id'}.'.domain'},
 					     $env{'course.'.$env{'request.course.id'}.'.num'});
@@ -1965,10 +1963,10 @@ sub submission {
 			'<input type="hidden" name="lastSub"    value="'.$env{'form.lastSub'}.'" />'."\n".
 			&build_section_inputs().
 			'<input type="hidden" name="submitonly" value="'.$env{'form.submitonly'}.'" />'."\n".
-			'<input type="hidden" name="handgrade"  value="'.$env{'form.handgrade'}.'" />'."\n".
 			'<input type="hidden" name="NCT"'.
 			' value="'.($env{'form.NTSTU'} ne '' ? $env{'form.NTSTU'} : $total+1).'" />'."\n");
-	if ($env{'form.handgrade'} eq 'yes') {
+#	if ($env{'form.handgrade'} eq 'yes') {
+        if (1) {
 	    $request->print('<input type="hidden" name="keywords" value="'.$env{'form.keywords'}.'" />'."\n".
 			    '<input type="hidden" name="kwclr"    value="'.$env{'form.kwclr'}.'" />'."\n".
 			    '<input type="hidden" name="kwsize"   value="'.$env{'form.kwsize'}.'" />'."\n".
@@ -1993,7 +1991,8 @@ sub submission {
 	}
 	$request->print($prnmsg);
 
-	if ($env{'form.handgrade'} eq 'yes') {
+#	if ($env{'form.handgrade'} eq 'yes') {
+        if (1) {
 #
 # Print out the keyword options line
 #
@@ -2069,7 +2068,8 @@ KEYWORDS
               .'<h3 class="LC_hcell">'.&mt('Submissions').'</h3>';
     $result.='<input type="hidden" name="name'.$counter.
              '" value="'.$env{'form.fullname'}.'" />'."\n";
-    if ($env{'form.handgrade'} eq 'no') {
+#    if ($env{'form.handgrade'} eq 'no') {
+    if (1) {
         $result.='<p class="LC_info">'
                 .&mt('Part(s) graded correct by the computer is marked with a [_1] symbol.',$checkIcon)
                 ."</p>\n";
@@ -2078,7 +2078,8 @@ KEYWORDS
     # If any part of the problem is an essay-response (handgraded), then check for collaborators
     my $fullname;
     my $col_fullnames = [];
-    if ($env{'form.handgrade'} eq 'yes') {
+#    if ($env{'form.handgrade'} eq 'yes') {
+    if (1) {
 	(my $sub_result,$fullname,$col_fullnames)=
 	    &check_collaborators($symb,$uname,$udom,\%record,$handgrade,
 				 $counter);
@@ -2229,7 +2230,8 @@ KEYWORDS
     }
 
     # essay grading message center
-    if ($env{'form.handgrade'} eq 'yes') {
+#    if ($env{'form.handgrade'} eq 'yes') {
+    if (1) {
 	my $result='<div class="LC_grade_message_center">';
     
 	$result.='<div class="LC_grade_message_center_header">'.
@@ -2339,10 +2341,10 @@ sub check_collaborators {
 	next if ($record->{'resource.'.$part.'.collaborators'} eq '');
 	my (@good_collaborators, @bad_collaborators);
 	foreach my $possible_collaborator
-	    (split(/,?\s+/,$record->{'resource.'.$part.'.collaborators'})) { 
+	    (split(/[,;\s]+/,$record->{'resource.'.$part.'.collaborators'})) { 
 	    $possible_collaborator =~ s/[\$\^\(\)]//g;
 	    next if ($possible_collaborator eq '');
-	    my ($co_name,$co_dom) = split(/\@|:/,$possible_collaborator);
+	    my ($co_name,$co_dom) = split(/:/,$possible_collaborator);
 	    $co_dom = $udom if (! defined($co_dom) || $co_dom =~ /^domain$/i);
 	    next if ($co_name eq $uname && $co_dom eq $udom);
 	    # Doing this grep allows 'fuzzy' specification
@@ -2355,13 +2357,13 @@ sub check_collaborators {
 	    }
 	}
 	if (scalar(@good_collaborators) != 0) {
-	    $result.='<br />'.&mt('Collaborators: ');
+	    $result.='<br />'.&mt('Collaborators:').'<ol>';
 	    foreach my $name (@good_collaborators) {
 		my ($lastname,$givenn) = split(/,/,$$fullname{$name});
 		push(@col_fullnames, $givenn.' '.$lastname);
-		$result.=$fullname->{$name}.'&nbsp; &nbsp; &nbsp;';
+		$result.='<li>'.$fullname->{$name}.'</li>';
 	    }
-	    $result.='<br />'."\n";
+	    $result.='</ol><br />'."\n";
 	    my ($part)=split(/\./,$part);
 	    $result.='<input type="hidden" name="collaborator'.$counter.
 		'" value="'.$part.':'.(join ':',@good_collaborators).'" />'.
@@ -2534,7 +2536,8 @@ sub processHandGrade {
 	}
     }
 
-    if ($env{'form.handgrade'} eq 'yes') {
+#    if ($env{'form.handgrade'} eq 'yes') {
+    if (1) {
 	# Keywords sorted in alphabatical order
 	my $loginuser = $env{'user.name'}.':'.$env{'user.domain'};
 	my %keyhash = ();
@@ -2587,19 +2590,19 @@ sub processHandGrade {
 	    my $processUser = $env{'form.unamedom'.$ctr};
 	    ($env{'form.student'},$env{'form.userdom'}) = split(/:/,$processUser);
 	    $env{'form.fullname'} = $$fullname{$processUser};
-	    &submission($request,$ctr,$total-1);
+	    &submission($request,$ctr,$total-1,$symb);
 	    $ctr++;
 	}
 	return '';
     }
 
 # Go directly to grade student - from submission or link from chart page
+# FIXME: looks like reading off the button label!
     if ($button eq 'Grade Student') {
-#	(undef,undef,$env{'form.handgrade'},undef,undef) = &showResourceInfo($symb);
 	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);
+	&submission($request,0,0,$symb);
 	return '';
     }
 
@@ -2686,7 +2689,7 @@ sub processHandGrade {
 	$env{'form.student'}  = $uname;
 	$env{'form.userdom'}  = $udom;
 	$env{'form.fullname'} = $$fullname{$_};
-	&submission($request,$ctr,$total);
+	&submission($request,$ctr,$total,$symb);
 	$ctr++;
     }
     if ($total < 0) {
@@ -3372,6 +3375,9 @@ sub viewgrades {
 	if  (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); }
 	my ($partid) = &split_part_type($part);
         push(@partids,$partid);
+#
+# FIXME: Looks like $display looks at English text
+#
 	my $display_part=&get_display_part($partid,$symb);
 	if ($display =~ /^Partial Credit Factor/) {
 	    $result.='<th>'.
@@ -3819,8 +3825,6 @@ sub csvuploadmap_header {
     }
 
     my $result='';
-    my $checked=(($env{'form.noFirstLine'})?' checked="checked"':'');
-    my $ignore=&mt('Ignore First Line');
     $symb = &Apache::lonenc::check_encrypt($symb);
     $request->print(<<ENDPICK);
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
@@ -3832,7 +3836,6 @@ Total number of records found in file: $
 Enter as many fields as you can. The system will inform you and bring you back
 to this page if the data selected is insufficient to run your class.<hr />
 <input type="button" value="Reverse Association" onclick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" />
-<label><input type="checkbox" name="noFirstLine" $checked />$ignore</label>
 <input type="hidden" name="associate"  value="" />
 <input type="hidden" name="phase"      value="three" />
 <input type="hidden" name="datatoken"  value="$datatoken" />
@@ -3920,7 +3923,6 @@ sub upcsvScores_form {
 <input type="hidden" name="command" value="csvuploadmap" />
 $upfile_select
 <br /><input type="button" onclick="javascript:checkUpload(this.form);" value="$upload" />
-<label><input type="checkbox" name="noFirstLine" />$ignore</label>
 </form>
 ENDUPFORM
     $result.=&Apache::loncommon::help_open_topic("Course_Convert_To_CSV",
@@ -3943,7 +3945,6 @@ sub csvuploadmap {
 	&Apache::loncommon::load_tmp_file($request);
     }
     my @records=&Apache::loncommon::upfile_record_sep();
-    if ($env{'form.noFirstLine'}) { shift(@records); }
     &csvuploadmap_header($request,$symb,$datatoken,$#records+1);
     my ($i,$keyfields);
     if (@records) {
@@ -3979,8 +3980,6 @@ sub csvuploadmap {
 
 sub csvuploadoptions {
     my ($request,$symb)= @_;
-    my $checked=(($env{'form.noFirstLine'})?'1':'0');
-    my $ignore=&mt('Ignore First Line');
     $request->print(<<ENDPICK);
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
 <h3><span class="LC_info">Uploading Class Grade Options</span></h3>
@@ -4042,7 +4041,6 @@ sub csvuploadassign {
     my $error_msg = '';
     &Apache::loncommon::load_tmp_file($request);
     my @gradedata = &Apache::loncommon::upfile_record_sep();
-    if ($env{'form.noFirstLine'}) { shift(@gradedata); }
     my %fields=&get_fields();
     $request->print('<h3>Assigning Grades</h3>');
     my $courseid=$env{'request.course.id'};
@@ -4124,14 +4122,20 @@ sub csvuploadassign {
 					   $env{'request.course.id'},
 					   $domain,$username);
 	   if ($result eq 'ok') {
+# Successfully stored
 	      $request->print('.');
-	   } else {
+# Remove from grading queue
+              &Apache::bridgetask::remove_from_queue('gradingqueue',$symb,
+                                             $env{'course.'.$env{'request.course.id'}.'.domain'},
+                                             $env{'course.'.$env{'request.course.id'}.'.num'},
+                                             $domain,$username);
+              $countdone++;
+           } else {
 	      $request->print("<p><span class=\"LC_error\">".
                               &mt("Failed to save data for student [_1]. Message when trying to save was: [_2]",
                                   "$username:$domain",$result)."</span></p>");
 	   }
 	   $request->rflush();
-	   $countdone++;
         }
     }
     $request->print('<br />'.&Apache::lonhtmlcommon::confirm_success(&mt("Saved scores for [quant,_1,student]",$countdone),$countdone==0));
@@ -4527,7 +4531,7 @@ sub displaySubByDates {
                     $displaySub[0].='<span class="LC_nobreak"';
                     $displaySub[0].='<b>'.&mt('Part: [_1]',$display_part).'</b>'
                                    .' <span class="LC_internal_info">'
-                                   .'('.&mt('Part ID: [_1]',$responseId).')'
+                                   .'('.&mt('Response ID: [_1]',$responseId).')'
                                    .'</span>'
                                    .' <b>';
                     if ($hidden) {
@@ -9286,17 +9290,17 @@ sub handler {
                                        {href=>'', text=>'Store grades'}]);
             $request->print(&assign_clicker_grades($request,$symb));
 	} elsif ($command eq 'csvform' && $perm{'mgr'}) {
-            &startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1);
+            &startpage($request,$symb,[{href=>'', text=>'Upload Scores'}],1,1);
 	    $request->print(&upcsvScores_form($request,$symb));
 	} elsif ($command eq 'csvupload' && $perm{'mgr'}) {
-            &startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1);
+            &startpage($request,$symb,[{href=>'', text=>'Upload Scores'}],1,1);
 	    $request->print(&csvupload($request,$symb));
 	} elsif ($command eq 'csvuploadmap' && $perm{'mgr'} ) {
-            &startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1);
+            &startpage($request,$symb,[{href=>'', text=>'Upload Scores'}],1,1);
 	    $request->print(&csvuploadmap($request,$symb));
 	} elsif ($command eq 'csvuploadoptions' && $perm{'mgr'}) {
 	    if ($env{'form.associate'} ne 'Reverse Association') {
-                &startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1);
+                &startpage($request,$symb,[{href=>'', text=>'Upload Scores'}],1,1);
 		$request->print(&csvuploadoptions($request,$symb));
 	    } else {
 		if ( $env{'form.upfile_associate'} ne 'reverse' ) {
@@ -9304,11 +9308,11 @@ sub handler {
 		} else {
 		    $env{'form.upfile_associate'} = 'forward';
 		}
-                &startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1);
+                &startpage($request,$symb,[{href=>'', text=>'Upload Scores'}],1,1);
 		$request->print(&csvuploadmap($request,$symb));
 	    }
 	} elsif ($command eq 'csvuploadassign' && $perm{'mgr'} ) {
-            &startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1);
+            &startpage($request,$symb,[{href=>'', text=>'Upload Scores'}],1,1);
 	    $request->print(&csvuploadassign($request,$symb));
 	} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) {
             &startpage($request,$symb,[{href=>'', text=>'Grade/Manage/Review Bubblesheets'}],1,1);