--- loncom/homework/grades.pm	2010/03/26 15:40:55	1.603
+++ loncom/homework/grades.pm	2010/04/07 21:08:35	1.607
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.603 2010/03/26 15:40:55 www Exp $
+# $Id: grades.pm,v 1.607 2010/04/07 21:08:35 droeschl Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -637,7 +637,6 @@ sub jscriptNform {
     $jscript.= '<form action="/adm/grades" method="post" name="onestudent">'."\n".
 	'<input type="hidden" name="symb"    value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\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="Status"  value="'.$stu_status.'" />'."\n".
 	'<input type="hidden" name="command" value="submission" />'."\n".
 	'<input type="hidden" name="student" value="" />'."\n".
@@ -732,7 +731,7 @@ sub initialverifyreceipt {
    my $request = shift;
    &commonJSfunctions($request);
    my ($symb)   = &get_symb($request);
-   return '<form name="gradingMenu"><input type="submit" value="'.&mt('Verify Receipt No.').'" />'.
+   return '<form name="gradingMenu"><input type="submit" value="'.&mt('Verify Receipt Number.').'" />'.
         &Apache::lonnet::recprefix($env{'request.course.id'}).
         '-<input type="text" name="receipt" size="4" />'.
         '<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
@@ -752,10 +751,8 @@ sub verifyreceipt {
 
     my $title.=
 	'<h3><span class="LC_info">'.
-	&mt('Verifying Receipt No. [_1]',$receipt).
-	'</span></h3>'."\n".
-	'<h4>'.&mt('<b>Resource: </b>[_1]',$env{'form.probTitle'}).
-	'</h4>'."\n";
+	&mt('Verifying Receipt Number [_1]',$receipt).
+	'</span></h3>'."\n";
 
     my ($string,$contents,$matches) = ('','',0);
     my (undef,undef,$fullname) = &getclasslist('all','0');
@@ -842,8 +839,6 @@ sub listStudents {
     my $getgroup  = $env{'form.group'} eq '' ? 'all' : $env{'form.group'};
     my $submitonly= $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'};
     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'};
 
     my $result='<h3><span class="LC_info">&nbsp;'
 	.&mt("$viewgrade Submissions for a Student or a Group of Students")
@@ -948,7 +943,6 @@ LISTJAVASCRIPT
 	'<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="saveState"   value="'.$env{'form.saveState'}.'" />'."\n".
-	'<input type="hidden" name="probTitle"   value="'.$env{'form.probTitle'}.'" />'."\n".
 	'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
 	'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n";
 
@@ -1758,7 +1752,6 @@ sub gradeBox {
     $line.='<option value="reset status">'.&mt('reset status').'</option></select>'."\n";
 
 
-	#&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>'.$display_part.'</td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>';
     $result.=&Apache::loncommon::end_data_table_row();
@@ -1919,7 +1912,8 @@ sub submission {
     $udom = ($udom eq '' ? $env{'user.domain'} : $udom); #has form.userdom changed for a student?
     my $usec = &Apache::lonnet::getsection($udom,$uname,$env{'request.course.id'});
     $env{'form.fullname'} = &Apache::loncommon::plainname($uname,$udom,'lastname') if $env{'form.fullname'} eq '';
-    my $symb = &get_symb($request); 
+    my $symb = &get_symb($request);
+    my $probtitle=&Apache::lonnet::gettitle($symb); 
     if ($symb eq '') { $request->print("Unable to handle ambiguous references:."); return ''; }
 
     if (!&canview($usec)) {
@@ -1943,13 +1937,10 @@ sub submission {
     if ($counter == 0) {
 	&sub_page_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'};
 	if ($env{'form.handgrade'} eq 'yes' && &files_exist($request, $symb)) {
 	    &download_all_link($request, $symb);
 	}
-	$request->print('<h3>&nbsp;<span class="LC_info">'.&mt('Submission Record').'</span></h3>'."\n".
-			'<h4>&nbsp;'.&mt('<b>Resource: </b> [_1]',$env{'form.probTitle'}).'</h4>'."\n");
+	$request->print('<h3>&nbsp;<span class="LC_info">'.&mt('Submission Record').'</span></h3>');
 
 	# option to display problem, only once else it cause problems 
         # with the form later since the problem has a form.
@@ -1980,7 +1971,7 @@ sub submission {
 	    $env{'form.kwsize'}   = $keyhash{$loginuser.'_kwsize'} ne '' ? $keyhash{$loginuser.'_kwsize'} : '0';
 	    $env{'form.kwstyle'}  = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : '';
 	    $env{'form.msgsub'}   = $keyhash{$symb.'_subject'} ne '' ? 
-		$keyhash{$symb.'_subject'} : $env{'form.probTitle'};
+		$keyhash{$symb.'_subject'} : $probtitle;
 	    $env{'form.savemsgN'} = $keyhash{$symb.'_savemsgN'} ne '' ? $keyhash{$symb.'_savemsgN'} : '0';
 	}
 	my $overRideScore = $env{'form.overRideScore'} eq '' ? 'no' : $env{'form.overRideScore'};
@@ -1990,7 +1981,6 @@ sub submission {
 			'<input type="hidden" name="saveState"  value="'.$env{'form.saveState'}.'" />'."\n".
 			'<input type="hidden" name="Status"     value="'.$stu_status.'" />'."\n".
 			'<input type="hidden" name="overRideScore" value="'.$overRideScore.'" />'."\n".
-			'<input type="hidden" name="probTitle"  value="'.$env{'form.probTitle'}.'" />'."\n".
 			'<input type="hidden" name="refresh"    value="off" />'."\n".
 			'<input type="hidden" name="studentNo"  value="" />'."\n".
 			'<input type="hidden" name="gradeOpt"   value="" />'."\n".
@@ -2538,7 +2528,7 @@ sub processHandGrade {
 		if ($env{'form.withgrades'.$ctr}) {
 		    $message.="\n\nPoint".($pts > 1 ? 's':'').' awarded = '.$pts.' out of '.$wgt;
 		    $messagetail = " for <a href=\"".
-		                   $feedurl."?symb=$showsymb\">$env{'form.probTitle'}</a>";
+		                   $feedurl."?symb=$showsymb\">$restitle</a>";
 		}
 		$msgstatus = 
                     &Apache::lonmsg::user_normal_msg($uname,$udom,$subject,
@@ -2566,7 +2556,7 @@ sub processHandGrade {
 						      $udom);
 			    if ($env{'form.withgrades'.$ctr}) {
 				$messagetail = " for <a href=\"".
-                                    $baseurl."?symb=$showsymb\">$env{'form.probTitle'}</a>";
+                                    $baseurl."?symb=$showsymb\">$restitle</a>";
 			    }
 			    $msgstatus = 
 				&Apache::lonmsg::user_normal_msg($collaborator,$udom,$subject,$message.$messagetail,undef,$baseurl,undef,undef,undef,$showsymb,$restitle);
@@ -2666,6 +2656,7 @@ sub processHandGrade {
 		 }
 		 return $a cmp $b;
 	     } (keys(%$fullname))) {
+# FIXME: this is fishy, looks like the button label
 	if ($nextflg == 1 && $button =~ /Next$/) {
 	    push(@parsedlist,$item);
 	}
@@ -2676,6 +2667,7 @@ sub processHandGrade {
 	}
     }
     $ctr = 0;
+# FIXME: this is fishy, looks like the button label
     @parsedlist = reverse @parsedlist if ($button eq 'Previous');
     my $res_error;
     my ($partlist) = &response_type($symb,\$res_error);
@@ -3311,7 +3303,6 @@ sub viewgrades {
     &Apache::lonnet::clear_EXT_cache_status();
 
     my $result='<h3><span class="LC_info">'.&mt('Manual Grading').'</span></h3>';
-    $result.='<h4>'.&mt('<b>Current Resource: </b>[_1]',$env{'form.probTitle'}).'</h4>'."\n";
 
     #view individual student submission form - called using Javascript viewOneStudent
     $result.=&jscriptNform($symb);
@@ -3324,7 +3315,6 @@ sub viewgrades {
 	&build_section_inputs().
 	'<input type="hidden" name="saveState" value="'.$env{'form.saveState'}.'" />'."\n".
 	'<input type="hidden" name="Status" value="'.$env{'stu_status'}.'" />'."\n".
-	'<input type="hidden" name="probTitle" value="'.$env{'form.probTitle'}.'" />'."\n";
 
     my ($common_header,$specific_header);
     if ($env{'form.section'} eq 'all') {
@@ -3547,7 +3537,6 @@ sub editgrades {
     my $symb=&get_symb($request);
     my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section'));
     my $title='<h2>'.&mt('Current Grade Status').'</h2>';
-    $title.='<h4>'.&mt('<b>Current Resource: </b>[_1]',$env{'form.probTitle'}).'</h4>'."\n";
     $title.='<h4>'.&mt('<b>Section: </b>[_1]',$section_display).'</h4>'."\n";
 
     my $result= &Apache::loncommon::start_data_table().
@@ -3869,7 +3858,6 @@ sub csvuploadmap_header {
 	$javascript=&csvupload_javascript_forward_associate();
     }
 
-#    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
     my $result='';
     my $checked=(($env{'form.noFirstLine'})?' checked="checked"':'');
     my $ignore=&mt('Ignore First Line');
@@ -3894,7 +3882,6 @@ to this page if the data selected is ins
                                        value="$env{'form.upfile_associate'}" />
 <input type="hidden" name="symb"       value="$symb" />
 <input type="hidden" name="saveState"  value="$env{'form.saveState'}" />
-<input type="hidden" name="probTitle"  value="$env{'form.probTitle'}" />
 <input type="hidden" name="command"    value="csvuploadoptions" />
 <hr />
 ENDPICK
@@ -3960,9 +3947,6 @@ sub upcsvScores_form {
     my ($symb)=&get_symb($request);
     if (!$symb) {return '';}
     my $result=&checkforfile_js();
-    $env{'form.probTitle'} = &Apache::lonnet::gettitle($symb);
-#    my ($table) = &showResourceInfo($symb,$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.='&nbsp;<b>'.&mt('Specify a file containing the class scores for current resource.').
@@ -3976,7 +3960,6 @@ sub upcsvScores_form {
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
 <input type="hidden" name="symb" value="$symb" />
 <input type="hidden" name="command" value="csvuploadmap" />
-<input type="hidden" name="probTitle" value="$env{'form.probTitle'}" />
 <input type="hidden" name="saveState"  value="$env{'form.saveState'}" />
 $upfile_select
 <br /><input type="button" onclick="javascript:checkUpload(this.form);" value="$upload" />
@@ -4902,8 +4885,7 @@ the homework problem.
 sub defaultFormData {
     my ($symb)=@_;
     return '<input type="hidden" name="symb"    value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\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="saveState" value="'.$env{'form.saveState'}.'" />';
 }
 
 
@@ -5208,6 +5190,52 @@ sub scantron_selectphase {
 
     $ssi_error = 0;
 
+    if (&Apache::lonnet::allowed('usc',$env{'request.role.domain'}) ||
+        &Apache::lonnet::allowed('usc',$env{'request.course.id'})) {
+
+	# Chunk of form to prompt for a scantron file upload.
+
+        $r->print('
+    <br />
+    '.&Apache::loncommon::start_data_table('LC_scantron_action').'
+       '.&Apache::loncommon::start_data_table_header_row().'
+            <th>
+              &nbsp;'.&mt('Specify a bubblesheet data file to upload.').'
+            </th>
+       '.&Apache::loncommon::end_data_table_header_row().'
+       '.&Apache::loncommon::start_data_table_row().'
+            <td>
+');
+    my $default_form_data=&defaultFormData(&get_symb($r,1));
+    my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'};
+    my $cnum= $env{'course.'.$env{'request.course.id'}.'.num'};
+    $r->print(&Apache::lonhtmlcommon::scripttag('
+    function checkUpload(formname) {
+	if (formname.upfile.value == "") {
+	    alert("'.&mt('Please use the browse button to select a file from your local directory.').'");
+	    return false;
+	}
+	formname.submit();
+    }'));
+    $r->print('
+              <form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post">
+                '.$default_form_data.'
+                <input name="courseid" type="hidden" value="'.$cnum.'" />
+                <input name="domainid" type="hidden" value="'.$cdom.'" />
+                <input name="command" value="scantronupload_save" type="hidden" />
+                '.&mt('File to upload: [_1]','<input type="file" name="upfile" size="50" />').'
+                <br />
+                <input type="button" onclick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" />
+              </form>
+');
+
+        $r->print('
+            </td>
+       '.&Apache::loncommon::end_data_table_row().'
+       '.&Apache::loncommon::end_data_table().'
+');
+    }
+
     # Chunk of form to prompt for a file to grade and how:
 
     $result.= '
@@ -5255,51 +5283,7 @@ sub scantron_selectphase {
    
     $r->print($result);
 
-    if (&Apache::lonnet::allowed('usc',$env{'request.role.domain'}) ||
-        &Apache::lonnet::allowed('usc',$env{'request.course.id'})) {
-
-	# Chunk of form to prompt for a scantron file upload.
-
-        $r->print('
-    <br />
-    '.&Apache::loncommon::start_data_table('LC_scantron_action').'
-       '.&Apache::loncommon::start_data_table_header_row().'
-            <th>
-              &nbsp;'.&mt('Specify a bubblesheet data file to upload.').'
-            </th>
-       '.&Apache::loncommon::end_data_table_header_row().'
-       '.&Apache::loncommon::start_data_table_row().'
-            <td>
-');
-    my $default_form_data=&defaultFormData(&get_symb($r,1));
-    my $cdom= $env{'course.'.$env{'request.course.id'}.'.domain'};
-    my $cnum= $env{'course.'.$env{'request.course.id'}.'.num'};
-    $r->print(&Apache::lonhtmlcommon::scripttag('
-    function checkUpload(formname) {
-	if (formname.upfile.value == "") {
-	    alert("'.&mt('Please use the browse button to select a file from your local directory.').'");
-	    return false;
-	}
-	formname.submit();
-    }'));
-    $r->print('
-              <form enctype="multipart/form-data" action="/adm/grades" name="rules" method="post">
-                '.$default_form_data.'
-                <input name="courseid" type="hidden" value="'.$cnum.'" />
-                <input name="domainid" type="hidden" value="'.$cdom.'" />
-                <input name="command" value="scantronupload_save" type="hidden" />
-                '.&mt('File to upload: [_1]','<input type="file" name="upfile" size="50" />').'
-                <br />
-                <input type="button" onclick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" />
-              </form>
-');
 
-        $r->print('
-            </td>
-       '.&Apache::loncommon::end_data_table_row().'
-       '.&Apache::loncommon::end_data_table().'
-');
-    }
 
     # Chunk of the form that prompts to view a scoring office file,
     # corrected file, skipped records in a file.
@@ -8482,10 +8466,8 @@ sub grading_menu {
     my ($request) = @_;
     my ($symb)=&get_symb($request);
     if (!$symb) {return '';}
-    my $probTitle = &Apache::lonnet::gettitle($symb);
 
     my %fields = ('symb'=>&Apache::lonenc::check_encrypt($symb),
-                  'probTitle'=>$probTitle,
                   'command'=>'individual',
                   'gradingMenu'=>1,
                   'showgrading'=>"yes");
@@ -8576,7 +8558,6 @@ sub grading_menu {
     $Str .= '<form method="post" action="" name="gradingMenu">';
     $Str .= '<input type="hidden" name="command" value="" />'.
     	'<input type="hidden" name="symb"        value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
-	'<input type="hidden" name="probTitle"   value="'.$probTitle.'" />'."\n".
 	'<input type="hidden" name="gradingMenu" value="1" />'."\n".
 	'<input type="hidden" name="showgrading" value="yes" />'."\n";
 
@@ -8651,14 +8632,12 @@ sub submit_options {
     my ($request) = @_;
     my ($symb)=&get_symb($request);
     if (!$symb) {return '';}
-    my $probTitle = &Apache::lonnet::gettitle($symb);
 
     &commonJSfunctions($request);
     my $result;
 
     $result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n".
 	'<input type="hidden" name="symb"        value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
-	'<input type="hidden" name="probTitle"   value="'.$probTitle.'" />'."\n".
 	'<input type="hidden" name="gradingMenu" value="1" />'."\n".
 	'<input type="hidden" name="showgrading" value="yes" />'."\n";
 
@@ -8809,7 +8788,6 @@ sub process_clicker {
     my ($symb)=&get_symb($r);
     if (!$symb) {return '';}
     my $result=&checkforfile_js();
-    $env{'form.probTitle'} = &Apache::lonnet::gettitle($symb);
     $result.='<br /><table width="100%" border="0"><tr><td bgcolor="#777777">'."\n";
     $result.='<table width="100%" border="0"><tr bgcolor="#e6ffff"><td>'."\n";
     $result.='&nbsp;<b>'.&mt('Specify a file containing the clicker information for this resource.').
@@ -8887,7 +8865,6 @@ ENDUPFORM
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
 <input type="hidden" name="symb" value="$symb" />
 <input type="hidden" name="command" value="processclickerfile" />
-<input type="hidden" name="probTitle" value="$env{'form.probTitle'}" />
 <input type="hidden" name="saveState"  value="$env{'form.saveState'}" />
 <input type="file" name="upfile" size="50" />
 <br /><label>$type: $selectform</label>
@@ -8919,7 +8896,6 @@ sub process_clicker_file {
     &Apache::loncommon::store_course_settings('grades_clicker',
                                               \%Saveable_Parameters);
     my $result='';
-#    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
     if (($env{'form.gradingmechanism'} eq 'specific') && ($env{'form.specificid'}!~/\w/)) {
 	$result.='<span class="LC_error">'.&mt('You need to specify a clicker ID for the correct answer').'</span>';
 	return $result.&show_grading_menu_form($symb);
@@ -8996,7 +8972,6 @@ sub process_clicker_file {
 <form method="post" action="/adm/grades" name="clickeranalysis">
 <input type="hidden" name="symb" value="$symb" />
 <input type="hidden" name="command" value="assignclickergrades" />
-<input type="hidden" name="probTitle" value="$env{'form.probTitle'}" />
 <input type="hidden" name="saveState"  value="$env{'form.saveState'}" />
 <input type="hidden" name="gradingmechanism" value="$env{'form.gradingmechanism'}" />
 <input type="hidden" name="pcorrect" value="$env{'form.pcorrect'}" />
@@ -9159,7 +9134,6 @@ sub assign_clicker_grades {
     my $part=$$partlist[0];
 # Start screen output
     my $result='';
-#    my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
 
     my $heading=&mt('Assigning grades based on clicker file');
     $result.=(<<ENDHEADER);
@@ -9265,6 +9239,13 @@ sub navmap_errormsg {
            &mt('It is recommended that you [_1]re-initialize the course[_2] and then return to this grading page.','<a href="/adm/roles?selectrole=1&newrole='.$env{'request.role'}.'">','</a>').
            '</div>';
 }
+sub startpage{
+    my ($r,$crumbs) = @_;
+
+    unshift(@$crumbs,  {href=>"/adm/grades",text=>"Grading"});
+    $r->print(&Apache::loncommon::start_page('Grading',undef,
+                                          {'bread_crumbs' => $crumbs}));
+}
 
 sub handler {
     my $request=$_[0];
@@ -9284,11 +9265,8 @@ sub handler {
     if ($#commands > 0) {
 	&Apache::lonnet::logthis("grades got multiple commands ".join(':',@commands));
     }
-
+                             
     $ssi_error = 0;
-    my $brcrum = [{href=>"/adm/grades",text=>"Grading"}];
-    $request->print(&Apache::loncommon::start_page('Grading',undef,
-                                          {'bread_crumbs' => $brcrum}));
     if ($symb eq '' && $command eq '') {
 #
 # Not called from a resource
@@ -9297,6 +9275,7 @@ sub handler {
     } else {
 	&init_perm();
 	if ($command eq 'submission' && $perm{'vgr'}) {
+        &startpage($request, [{href=>"", text=>"Student Submissions"}]);
 	    ($env{'form.student'} eq '' ? &listStudents($request) : &submission($request,0,0));
 	} elsif ($command eq 'pickStudentPage' && $perm{'vgr'}) {
 	    &pickStudentPage($request);
@@ -9307,6 +9286,7 @@ sub handler {
 	} elsif ($command eq 'processGroup' && $perm{'vgr'}) {
 	    &processGroup($request);
 	} elsif ($command eq 'gradingmenu' && $perm{'vgr'}) {
+        &startpage($request);
 	    $request->print(&grading_menu($request));
 	} elsif ($command eq 'individual' && $perm{'vgr'}) {
 	    $request->print(&submit_options($request));