--- loncom/homework/grades.pm	2007/09/02 02:10:31	1.438
+++ loncom/homework/grades.pm	2007/10/01 19:41:51	1.442
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.438 2007/09/02 02:10:31 www Exp $
+# $Id: grades.pm,v 1.442 2007/10/01 19:41:51 banghart Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -56,28 +56,15 @@ my %bubble_lines_per_response;     # no.
 # --- Retrieve the parts from the metadata file.---
 sub getpartlist {
     my ($symb) = @_;
-    my (undef,undef,$url) = &Apache::lonnet::decode_symb($symb);
-    my $partorder = &Apache::lonnet::metadata($url, 'partorder');
-    my @parts;
-    if ($partorder) {
-	for my $part (split (/,/,$partorder)) {
-	    if (!&Apache::loncommon::check_if_partid_hidden($part,$symb)) {
-		push(@parts, $part);
-	    }
-	}	    
-    } else {
-	my $metadata = &Apache::lonnet::metadata($url, 'packages');
-	foreach (split(/\,/,$metadata)) {
-	    if ($_ =~ /^part_(.*)$/) {
-		if (!&Apache::loncommon::check_if_partid_hidden($1,$symb)) {
-		    push(@parts, $1);
-		}
-	    }
-	}
-    }
+
+    my $navmap   = Apache::lonnavmaps::navmap->new();
+    my $res      = $navmap->getBySymb($symb);
+    my $partlist = $res->parts();
+    my $url      = $res->src();
+    my @metakeys = split(/,/,&Apache::lonnet::metadata($url,'keys'));
+
     my @stores;
-    foreach my $part (@parts) {
-	my (@metakeys) = split(/,/,&Apache::lonnet::metadata($url,'keys'));
+    foreach my $part (@{ $partlist }) {
 	foreach my $key (@metakeys) {
 	    if ($key =~ m/^stores_\Q$part\E_/) { push(@stores,$key); }
 	}
@@ -362,7 +349,10 @@ sub cleanRecord {
 	    $result.='</ul>';
 	    return $result;
 	}
-       
+    } elsif ( $response =~ m/(?:numerical|formula)/) {
+	$answer = 
+	    &Apache::loncommon::format_previous_attempt_value('submission',
+							      $answer);
     }
     return $answer;
 }
@@ -408,6 +398,7 @@ COMMONJSFUNCTIONS
 sub getclasslist {
     my ($getsec,$filterlist) = @_;
     my @getsec;
+    my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status'));
     if (!ref($getsec)) {
 	if ($getsec ne '' && $getsec ne 'all') {
 	    @getsec=($getsec);
@@ -437,8 +428,8 @@ sub getclasslist {
         my $status   = 
             $classlist->{$student}->[&Apache::loncoursedata::CL_STATUS()];
 	# filter students according to status selected
-	if ($filterlist && $env{'form.Status'} ne 'Any') {
-	    if ($env{'form.Status'} ne $status) {
+	if ($filterlist && (!($stu_status =~ /Any/))) {
+	    if (!($stu_status =~ $status)) {
 		delete ($classlist->{$student});
 		next;
 	    }
@@ -520,6 +511,7 @@ sub student_gradeStatus {
 # Shows a student's view of problem and submission
 sub jscriptNform {
     my ($symb) = @_;
+    my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status'));
     my $jscript='<script type="text/javascript" language="javascript">'."\n".
 	'    function viewOneStudent(user,domain) {'."\n".
 	'	document.onestudent.student.value = user;'."\n".
@@ -531,7 +523,7 @@ sub jscriptNform {
 	'<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="'.$env{'form.Status'}.'" />'."\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".
 	'<input type="hidden" name="userdom" value="" />'."\n".
@@ -756,8 +748,8 @@ LISTJAVASCRIPT
     if ($env{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1) {
 	$gradeTable.='<label><input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> essay part only </label>'."\n";
     }
-
-    my $saveStatus = $env{'form.Status'} eq '' ? 'Active' : $env{'form.Status'};
+    my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status'));
+    my $saveStatus = $stu_status eq '' ? 'Active' : $stu_status;
     $env{'form.Status'} = $saveStatus;
     $gradeTable.='<label><input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last submission only </label>'."\n".
 	'<label><input type="radio" name="lastSub" value="last" /> last submission & parts info </label>'."\n".
@@ -779,7 +771,7 @@ LISTJAVASCRIPT
 	'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n";
 
     if (exists($env{'form.gradingMenu'}) && exists($env{'form.Status'})) {
-	$gradeTable.='<input type="hidden" name="Status"   value="'.$env{'form.Status'}.'" />'."\n";
+	$gradeTable.='<input type="hidden" name="Status"   value="'.$stu_status.'" />'."\n";
     } else {
 	$gradeTable.='<b>Student Status:</b> '.
 	    &Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);').'<br />';
@@ -1716,7 +1708,6 @@ 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); 
     if ($symb eq '') { $request->print("Unable to handle ambiguous references:."); return ''; }
 
@@ -1769,7 +1760,7 @@ sub submission {
 	    &Apache::lonxml::clear_problem_counter();
 	    $request->print(&show_problem($request,$symb,$uname,$udom,0,1,$mode));
 	}
-	
+
 	# kwclr is the only variable that is guaranteed to be non blank 
         # if this subroutine has been called once.
 	my %keyhash = ();
@@ -1788,10 +1779,11 @@ sub submission {
 	    $env{'form.savemsgN'} = $keyhash{$symb.'_savemsgN'} ne '' ? $keyhash{$symb.'_savemsgN'} : '0';
 	}
 	my $overRideScore = $env{'form.overRideScore'} eq '' ? 'no' : $env{'form.overRideScore'};
+	my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status'));
 	$request->print('<form action="/adm/grades" method="post" name="SCORE" enctype="multipart/form-data">'."\n".
 			'<input type="hidden" name="command"    value="handgrade" />'."\n".
 			'<input type="hidden" name="saveState"  value="'.$env{'form.saveState'}.'" />'."\n".
-			'<input type="hidden" name="Status"     value="'.$env{'form.Status'}.'" />'."\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".
@@ -1854,8 +1846,13 @@ KEYWORDS
         }
     }
 
+# This is where output for one specific student would start
+    my $bgcolor='#DDEEDD';
+    if (int($counter/2) eq $counter) { $bgcolor='#DDDDEE'; }
+    $request->print("\n\n".
+                    '<p><table border="2"><tr><th bgcolor="'.$bgcolor.'">'.$env{'form.fullname'}.'</th></tr><tr><td bgcolor="'.$bgcolor.'">');
+
     if ($env{'form.vProb'} eq 'all' or $env{'form.vAns'} eq 'all') {
-	$request->print('<br /><br /><br />') if ($counter > 0);
 	my $mode;
 	if ($env{'form.vProb'} eq 'all' && $env{'form.vAns'} eq 'all') {
 	    $mode='both';
@@ -2125,6 +2122,11 @@ KEYWORDS
     }
     $request->print($result.'</td></tr></table></td></tr></table>'."\n");
 
+# Done with printing info for one student
+
+    $request->print('</td></tr></table></p>');
+
+
     # print end of form
     if ($counter == $total) {
 	my $endform='<table border="0"><tr><td>'."\n";
@@ -3008,12 +3010,13 @@ sub viewgrades {
     $result.=&jscriptNform($symb);
 
     #beginning of class grading form
+    my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status'));
     $result.= '<form action="/adm/grades" method="post" name="classgrade">'."\n".
 	'<input type="hidden" name="symb"    value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
 	'<input type="hidden" name="command" value="editgrades" />'."\n".
 	&build_section_inputs().
 	'<input type="hidden" name="saveState" value="'.$env{'form.saveState'}.'" />'."\n".
-	'<input type="hidden" name="Status" value="'.$env{'form.Status'}.'" />'."\n".
+	'<input type="hidden" name="Status" value="'.$env{'stu_status'}.'" />'."\n".
 	'<input type="hidden" name="probTitle" value="'.$env{'form.probTitle'}.'" />'."\n";
 
     my $sectionClass;
@@ -3132,9 +3135,10 @@ sub viewgrades {
     if (scalar(%$fullname) eq 0) {
 	my $colspan=3+scalar(@parts);
 	my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section'));
+        my $stu_status = join(' or ',&Apache::loncommon::get_env_multiple('form.Status'));
 	$result='<span class="LC_warning">'.
 	    &mt('There are no students in section(s) [_1] with enrollment status [_2] to modify or grade',
-	        $section_display, $env{'form.Status'}).
+	        $section_display, $stu_status).
 	    '</span>';
     }
     $result.=&show_grading_menu_form($symb);
@@ -3413,7 +3417,7 @@ sub split_part_type {
     my ($partstr) = @_;
     my ($temp,@allparts)=split(/_/,$partstr);
     my $type=pop(@allparts);
-    my $part=join('.',@allparts);
+    my $part=join('_',@allparts);
     return ($part,$type);
 }
 
@@ -3918,7 +3922,8 @@ LISTJAVASCRIPT
 	'<label><input type="radio" name="lastSub" value="all" /> all details</label>'."\n";
     
     $result.=&build_section_inputs();
-    $result.='<input type="hidden" name="Status"  value="'.$env{'form.Status'}.'" />'."\n".
+    my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status'));
+    $result.='<input type="hidden" name="Status"  value="'.$stu_status.'" />'."\n".
 	'<input type="hidden" name="command" value="displayPage" />'."\n".
 	'<input type="hidden" name="symb"    value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n".
 	'<input type="hidden" name="saveState" value="'.$env{'form.saveState'}.'" />'."<br />\n";
@@ -7009,8 +7014,13 @@ GRADINGMENUJS
 	'<tr bgcolor="#ffffe6" valign="top"><td>'."\n";
 
     $result.='<table width="100%" border="0">';
+    $result.='<tr bgcolor="#ffffe6" valign="top">'."\n";
+    $result.='<td><b>'.&mt('Sections').'</b></td>';
+#    $result.='<td>Groups</td>';
+    $result.='<td><b>'.&mt('Access Status').'</td>'."\n";
+    $result.='</tr>';
     $result.='<tr bgcolor="#ffffe6" valign="top"><td>'."\n".
-	'&nbsp;'.&mt('Select Section').': <select name="section" multiple="multiple" size="3">'."\n";
+	'&nbsp;<select name="section" multiple="multiple" size="3">'."\n";
     if (ref($sections)) {
 	foreach (sort (@$sections)) {
 	    $result.='<option value="'.$_.'" '.
@@ -7018,12 +7028,14 @@ GRADINGMENUJS
 	}
     }
     $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="selected"' : ''). '>all</option></select> &nbsp; ';
-
-    $result.=&mt('Student Status').':'.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,undef);
+#    $result.= '</td><td>'."\n";
+#    $result.='Put group select here'."\n";
+    $result.='</td><td>'."\n";
+    $result.=&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,3,undef,'mult');
 
     $result.='</td></tr>';
 
-    $result.='<tr bgcolor="#ffffe6"valign="top"><td><label>'.
+    $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="3"><label>'.
 	'<input type="radio" name="radioChoice" value="submission" '.
 	($saveCmd eq 'submission' ? 'checked="checked"' : '').' /> '.'<b>'.&mt('Current Resource').':</b> '.&mt('For one or more students').
 	'</label> <select name="submitonly">'.
@@ -7038,17 +7050,17 @@ GRADINGMENUJS
 	'<option value="all" '.
 	($saveSub eq 'all' ? 'selected="selected"' : '').'>'.&mt('with any status').'</option></select></td></tr>'."\n";
 
-    $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.
+    $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
 	'<label><input type="radio" name="radioChoice" value="viewgrades" '.
 	($saveCmd eq 'viewgrades' ? 'checked="checked"' : '').' /> '.
 	'<b>Current Resource:</b> For all students in selected section or course</label></td></tr>'."\n";
 
-    $result.='<tr bgcolor="#ffffe6" valign="top"><td>'.
+    $result.='<tr bgcolor="#ffffe6" valign="top"><td colspan="2">'.
 	'<label><input type="radio" name="radioChoice" value="pickStudentPage" '.
 	($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '.
 	'The <b>complete</b> set/page/sequence: For one student</label></td></tr>'."\n";
 
-    $result.='<tr bgcolor="#ffffe6"><td><br />'.
+    $result.='<tr bgcolor="#ffffe6"><td colspan="2"><br />'.
 	'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="Next->" />'.
 	'</td></tr></table>'."\n";