--- loncom/homework/grades.pm	2009/05/18 20:07:34	1.574.2.1
+++ loncom/homework/grades.pm	2009/05/28 14:30:04	1.577
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.574.2.1 2009/05/18 20:07:34 raeburn Exp $
+# $Id: grades.pm,v 1.577 2009/05/28 14:30:04 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -183,7 +183,8 @@ sub get_display_part {
     my ($partID,$symb)=@_;
     my $display=&Apache::lonnet::EXT('resource.'.$partID.'.display',$symb);
     if (defined($display) and $display ne '') {
-	$display.= " (<span class=\"LC_internal_info\">id $partID</span>)";
+        $display.= ' (<span class="LC_internal_info">'
+                  .&mt('Part ID: [_1]',$partID).'</span>)';
     } else {
 	$display=$partID;
     }
@@ -217,9 +218,9 @@ sub showResourceInfo {
 		$partsseen{$partID}=1;
 	    }
 	    my $display_part=&get_display_part($partID,$symb);
-	    $result.='<td><b>'.&mt('Part').': </b>'.$display_part.
+            $result.='<td><b>'.&mt('Part: [_1]',$display_part).'</b>'.
                 ' <span class="LC_internal_info">'.$resID.'</span></td>'.
-		'<td><b>'.&mt('Type').': </b>'.$responsetype.'</td></tr>';
+                '<td><b>'.&mt('Type: [_1]',$responsetype).'</b></td></tr>';
 #	    '<td>'.&mt('<b>Handgrade: </b>[_1]',$handgrade).'</td></tr>';
 	}
     }
@@ -1734,7 +1735,7 @@ sub gradeBox {
 
 	#&mt('<td><b>Part:</b></td><td>[_1]</td><td><b>Points:</b></td><td>[_2]</td><td>or</td><td>[_3]</td>',$display_part,$radio,$line);
     $result .= 
-	    '<td><b>'.&mt('Part').':</b></td><td>'.$display_part.'</td><td><b>'.&mt('Points').':</b></td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'.
+	    '<td><b>'.&mt('Part:').'</b></td><td>'.$display_part.'</td><td><b>'.&mt('Points:').'</b></td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'.
     
     $result.='</tr></table>'."\n";
     $result.='<input type="hidden" name="stores'.$counter.'_'.$partid.'" value="" />'."\n".
@@ -2113,9 +2114,11 @@ KEYWORDS
 		}
 		my $responsetype = $responseType->{$partid}->{$respid};
 		if (!exists($record{"resource.$partid.$respid.submission"})) {
-		    $lastsubonly.="\n".'<div class="LC_grade_submission_part"><b>Part:</b> '.
-			$display_part.' <span class="LC_internal_info">( ID '.$respid.
-			' )</span>&nbsp; &nbsp;'.
+                    $lastsubonly.="\n".'<div class="LC_grade_submission_part">'.
+                        '<b>'.&mt('Part: [_1]',$display_part).'</b>'.
+                        ' <span class="LC_internal_info">'.
+                        '('.&mt('Part ID: [_1]',$respid).')</b>'.
+                        '</span>&nbsp; &nbsp;'.
 			'<span class="LC_warning">'.&mt('Nothing submitted - no attempts.').'</span><br /><br /></div>';
 		    next;
 		}
@@ -2151,9 +2154,11 @@ KEYWORDS
 			($env{'form.lastSub'} eq 'hdgrade' && 
 			 $$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) {
 			my $display_part=&get_display_part($partid,$symb);
-			$lastsubonly.='<div class="LC_grade_submission_part"><b>Part:</b> '.
-			    $display_part.' <span class="LC_internal_info">( ID '.$respid.
-			    ' )</span>&nbsp; &nbsp;';
+                        $lastsubonly.='<div class="LC_grade_submission_part">'.
+                            '<b>'.&mt('Part: [_1]',$display_part).'</b>'.
+                            ' <span class="LC_internal_info">'.
+                            '('.&mt('Part ID: [_1]',$respid).')'.
+                            '</b></span>&nbsp; &nbsp;';
 			my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record);
 			if (@$files) {
 			    $lastsubonly.='<br /><span class="LC_warning">'.&mt('Like all files provided by users, this file may contain viruses').'</span><br />';
@@ -3294,7 +3299,7 @@ sub viewgrades {
 
 	$result.=
 	    &Apache::loncommon::start_data_table_row()."\n".
-	    '<td><b>'.&mt('Part').':</b></td><td>'.$display_part.'</td><td><b>'.&mt('Points').':</b></td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'.
+	    '<td><b>'.&mt('Part:').'</b></td><td>'.$display_part.'</td><td><b>'.&mt('Points:').'</b></td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'.
 	    &Apache::loncommon::end_data_table_row()."\n";
 	$ctsparts++;
     }
@@ -4466,13 +4471,16 @@ sub displaySubByDates {
 
 		    my ($responseId)= ($isTask ? ($matchKey=~ /^resource\.(.*?)\.\Q$partid\E\.award$/)
 				               : ($matchKey=~ /^resource\.\Q$partid\E\.(.*?)\.submission$/));
-		    $displaySub[0].='<b>'.&mt('Part:').'</b>&nbsp;'.$display_part.'&nbsp;';
-		    $displaySub[0].='<span class="LC_internal_info">('.&mt('ID').'&nbsp;'.
-			$responseId.')</span>&nbsp;<b>';
+                    $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).')'
+                                   .'</span>'
+                                   .' <b>';
 		    if ($$record{"$where.$partid.tries"} eq '') {
-			$displaySub[0].=&mt('Trial&nbsp;not&nbsp;counted');
+			$displaySub[0].=&mt('Trial not counted');
 		    } else {
-			$displaySub[0].=&mt('Trial&nbsp;[_1]',
+			$displaySub[0].=&mt('Trial: [_1]',
 					    $$record{"$where.$partid.tries"});
 		    }
 		    my $responseType=($isTask ? 'Task'
@@ -4483,7 +4491,8 @@ sub displaySubByDates {
 			    &get_order($partid,$responseId,$symb,$uname,$udom,
                                        $no_increment);
 		    }
-		    $displaySub[0].='</b>&nbsp; '.
+		    $displaySub[0].='</b></span>'; # /nobreak
+		    $displaySub[0].='&nbsp; '.
 			&cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom).'<br />';
 		}
 	    }
@@ -5199,7 +5208,7 @@ sub scantron_selectphase {
               &Apache::loncommon::start_data_table_row()."\n".
               '<td colspan="2">'."\n".
               '<input type="hidden" name="command" value="checksubmissions" />'."\n".
-              '<input type="submit" value="'.&mt('Review Scantron Data and Submission Records').'" />'."\n".
+              '<input type="submit" value="'.&mt('Review Bubblesheet Data and Submission Records').'" />'."\n".
               '</td>'."\n".
               &Apache::loncommon::end_data_table_row()."\n".
               &Apache::loncommon::end_data_table()."\n".
@@ -7474,8 +7483,8 @@ SCANTRONFORM
     
     my $lock=&Apache::lonnet::set_lock(&mt('Grading bubblesheet exam'));
     my $count=&get_todo_count($scanlines,$scan_data);
-    my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Scantron Status',
- 				    'Scantron Progress',$count,
+    my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Bubblesheet Status',
+ 				    'Bubblesheet Progress',$count,
 				    'inline',undef,'scantronupload');
     &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
 					  'Processing first student');
@@ -7759,7 +7768,7 @@ sub scantron_upload_scantron_data {
   &Apache::lonhtmlcommon::end_pick_box().'<br />
 
 <input name="command" value="scantronupload_save" type="hidden" />
-<input type="button" onClick="javascript:checkUpload(this.form);" value="'.&mt('Upload Scantron Data').'" />
+<input type="button" onClick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" />
 </form>
 ');
     return '';
@@ -7777,7 +7786,7 @@ sub scantron_upload_scantron_data_save {
     if (!&Apache::lonnet::allowed('usc',$env{'form.domainid'}) &&
 	!&Apache::lonnet::allowed('usc',
 			    $env{'form.domainid'}.'_'.$env{'form.courseid'})) {
-	$r->print(&mt("You are not allowed to upload Scantron data to the requested course.")."<br />");
+	$r->print(&mt("You are not allowed to upload bubblesheet data to the requested course.")."<br />");
 	if ($symb) {
 	    $r->print(&show_grading_menu_form($symb));
 	} else {
@@ -8278,36 +8287,50 @@ sub grading_menu {
                   'saveState'=>"",
                   'gradingMenu'=>1,
                   'showgrading'=>"yes");
-    my $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    my @menu = ({ url => $url,
-                     name => &mt('Manual Grading/View Submissions'),
-                     short_description =>
-    &mt('Start the process of hand grading submissions.'),
-                 });
+    
+    my $url1 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    
     $fields{'command'} = 'csvform';
-    $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    push(@menu, { url => $url,
-                   name => &mt('Upload Scores'),
-                   short_description =>
-            &mt('Specify a file containing the class scores for current resource.')});
+    my $url2 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    
     $fields{'command'} = 'processclicker';
-    $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    push(@menu, { url => $url,
-                   name => &mt('Process Clicker'),
-                   short_description =>
-            &mt('Specify a file containing the clicker information for this resource.')});
+    my $url3 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    
     $fields{'command'} = 'scantron_selectphase';
-    $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    push(@menu, { url => $url,
-                   name => &mt('Grade/Manage/Review Scantron Forms'),
-                   short_description =>
-            &mt('Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.')});
-    $fields{'command'} = 'verify';
-    $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    push(@menu, { url => "",
-                   name => &mt('Verify Receipt'),
-                   short_description =>
-            &mt('')});
+    my $url4 = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    
+    my @menu = ({	categorytitle=>'Course Grading',
+            items =>[
+                        {	linktext => 'Manual Grading/View Submissions',
+                    		url => $url1,
+                    		permission => 'F',
+                    		icon => 'edit-find-replace.png',
+                    		linktitle => 'Start the process of hand grading submissions.'
+                        },
+                	    {	linktext => 'Upload Scores',
+                    		url => $url2,
+                    		permission => 'F',
+                    		icon => 'uploadscores.png',
+                    		linktitle => 'Specify a file containing the class scores for current resource.'
+                	    },
+                	    {	linktext => 'Process Clicker',
+                    		url => $url3,
+                    		permission => 'F',
+                    		icon => 'addClickerInfoFile.png',
+                    		linktitle => 'Specify a file containing the clicker information for this resource.'
+                	    },
+                	    {	linktext => 'Grade/Manage/Review Scantron Forms',
+                    		url => $url4,
+                    		permission => 'F',
+                    		icon => 'stat.png',
+                    		linktitle => 'Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.'
+                	    }
+                    ]
+            });
+
+    #$fields{'command'} = 'verify';
+    #$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
+    #
     # Create the menu
     my $Str;
     # $Str .= '<h2>'.&mt('Please select a grading task').'</h2>';
@@ -8319,24 +8342,15 @@ sub grading_menu {
 	'<input type="hidden" name="saveState"   value="" />'."\n".
 	'<input type="hidden" name="gradingMenu" value="1" />'."\n".
 	'<input type="hidden" name="showgrading" value="yes" />'."\n";
-    foreach my $menudata (@menu) {
-        if ($menudata->{'name'} ne &mt('Verify Receipt')) {
-            $Str .='    <h3><a '.
-                $menudata->{'jscript'}.
-                ' href="'.
-                $menudata->{'url'}.'" >'.
-                $menudata->{'name'}."</a></h3>\n";
-        } else {
-            $Str .='<hr /><input type="button" value="'.&mt('Verify Receipt').'" '.
-                $menudata->{'jscript'}.
-                ' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '.
-                ' /> '.
-                &Apache::lonnet::recprefix($env{'request.course.id'}).
-                    '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />';
-        }
-        $Str .= '    '.('&nbsp;'x8).$menudata->{'short_description'}.
-            "\n";
-    }
+
+    $Str .= Apache::lonhtmlcommon::generate_menu(@menu);
+    #$menudata->{'jscript'}
+    $Str .='<hr /><input type="button" value="'.&mt('Verify Receipt').'" '.
+        ' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '.
+        ' /> '.
+        &Apache::lonnet::recprefix($env{'request.course.id'}).
+        '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />';
+
     $Str .="</form>\n";
     my $receiptalert = &mt("Please enter a receipt number given by a student in the receipt box.");
     $request->print(<<GRADINGMENUJS);
@@ -8453,102 +8467,91 @@ GRADINGMENUJS
 	'<input type="hidden" name="showgrading" value="yes" />'."\n";
 
     $result.='
-    <div class="LC_grade_select_mode">
-      <div class="LC_grade_select_mode_current">
-        <h2>
-          '.&mt('Grade Current Resource').'
-        </h2>
-        <div class="LC_grade_select_mode_body">
-          <div class="LC_grades_resource_info">
-           '.$table.'
-          </div>
-          <div class="LC_grade_select_mode_selector">
-             <div class="LC_grade_select_mode_selector_header">
-                '.&mt('Sections').'
-             </div>
-             <div class="LC_grade_select_mode_selector_body">
-               <select name="section" multiple="multiple" size="5">'."\n";
-    if (ref($sections)) {
-        foreach my $section (sort(@$sections)) {
-            $result.='<option value="'.$section.'" '.
-                ($saveSec eq $section ? 'selected="selected"':'').'>'.$section.'</option>'."\n";
-        }
-    }
+<h2>
+  '.&mt('Grade Current Resource').'
+</h2>
+<div>
+  '.$table.'
+</div>
+
+<div class="LC_columnSection">
+  
+    <fieldset>
+      <legend>
+       '.&mt('Sections').'
+      </legend>
+      <select name="section" multiple="multiple" size="5">'."\n";
+    $result.= $selsec;
     $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="selected"' : ''). '>all</option></select> &nbsp; ';
     $result.='
-             </div>
-          </div>
-          <div class="LC_grade_select_mode_selector">
-             <div class="LC_grade_select_mode_selector_header">
-                '.&mt('Groups').'
-             </div>
-             <div class="LC_grade_select_mode_selector_body">
-                '.&Apache::lonstatistics::GroupSelect('group','multiple',5).'
-             </div>
-          </div>
-          <div class="LC_grade_select_mode_selector">
-             <div class="LC_grade_select_mode_selector_header">
-                '.&mt('Access Status').'
-             </div>
-             <div class="LC_grade_select_mode_selector_body">
-                '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').'
-             </div>
-          </div>
-          <div class="LC_grade_select_mode_selector">
-             <div class="LC_grade_select_mode_selector_header">
-                '.&mt('Submission Status').'
-             </div>
-             <div class="LC_grade_select_mode_selector_body">
-               <select name="submitonly" size="5">
-                 <option value="yes" '.      ($saveSub eq 'yes'       ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option>
-                 <option value="queued" '.   ($saveSub eq 'queued'    ? 'selected="selected"' : '').'>'.&mt('in grading queue').'</option>
-                 <option value="graded" '.   ($saveSub eq 'graded'    ? 'selected="selected"' : '').'>'.&mt('with ungraded submissions').'</option>
-                 <option value="incorrect" '.($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option>
+    </fieldset>
+  
+    <fieldset>
+      <legend>
+        '.&mt('Groups').'
+      </legend>
+      '.&Apache::lonstatistics::GroupSelect('group','multiple',5).'
+    </fieldset>
+  
+    <fieldset>
+      <legend>
+        '.&mt('Access Status').'
+      </legend>
+      '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').'
+    </fieldset>
+  
+    <fieldset>
+      <legend>
+        '.&mt('Submission Status').'
+      </legend>
+      <select name="submitonly" size="5">
+	         <option value="yes" '.      ($saveSub eq 'yes'       ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option>
+	         <option value="queued" '.   ($saveSub eq 'queued'    ? 'selected="selected"' : '').'>'.&mt('in grading queue').'</option>
+	         <option value="graded" '.   ($saveSub eq 'graded'    ? 'selected="selected"' : '').'>'.&mt('with ungraded submissions').'</option>
+	         <option value="incorrect" '.($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option>
                  <option value="all" '.      ($saveSub eq 'all'       ? 'selected="selected"' : '').'>'.&mt('with any status').'</option>
-               </select>
-             </div>
-          </div>
-          <div class="LC_grade_select_mode_type_body">
-            <div class="LC_grade_select_mode_type">
+      </select>
+    </fieldset>
+  
+</div>
+
+<br />
+          <div>
+            <div>
               <label>
                 <input type="radio" name="radioChoice" value="submission" '.
                   ($saveCmd eq 'submission' ? 'checked="checked"' : '').' /> '.
              &mt('Select individual students to grade and view submissions.').'
-              </label>
+	      </label> 
             </div>
-            <div class="LC_grade_select_mode_type">
-              <label>
+            <div>
+	      <label>
                 <input type="radio" name="radioChoice" value="viewgrades" '.
                   ($saveCmd eq 'viewgrades' ? 'checked="checked"' : '').' /> '.
                     &mt('Grade all selected students in a grading table.').'
               </label>
             </div>
-            <div class="LC_grade_select_mode_type">
-              <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next-&gt;').'" />
+            <div>
+	      <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
             </div>
           </div>
-        </div>
-      </div>
-      <div class="LC_grade_select_mode_page">
+
+
         <h2>
          '.&mt('Grade Complete Folder for One Student').'
         </h2>
-        <div class="LC_grades_select_mode_body">
-          <div class="LC_grade_select_mode_type_body">
-            <div class="LC_grade_select_mode_type">
+        <div>
+            <div>
               <label>
                 <input type="radio" name="radioChoice" value="pickStudentPage" '.
-          ($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '.
+	  ($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '.
   &mt('The <b>complete</b> page/sequence/folder: For one student').'
               </label>
             </div>
-            <div class="LC_grade_select_mode_type">
-              <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next-&gt;').'" />
+            <div>
+	      <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' &rarr;" />
             </div>
-          </div>
         </div>
-      </div>
-    </div>
   </form>';
     $result .= &show_grading_menu_form($symb);
     return $result;
@@ -9049,13 +9052,13 @@ ENDHEADER
           my $sum=0;
           my $realnumber=$number;
           for (my $i=0;$i<$number;$i++) {
-             if ($answer[$i]) {
+             if  ($correct[$i] eq '-') {
+                $realnumber--;
+             } elsif ($answer[$i]) {
                 if ($gradingmechanism eq 'attendance') {
                    $sum+=$pcorrect;
-                } elsif ($answer[$i] eq '*') {
+                } elsif ($correct[$i] eq '*') {
                    $sum+=$pcorrect;
-                } elsif ($answer[$i] eq '-') {
-                   $realnumber--;
                 } else {
                    if ($answer[$i] eq $correct[$i]) {
                       $sum+=$pcorrect;