--- loncom/homework/grades.pm	2004/11/23 02:37:58	1.230
+++ loncom/homework/grades.pm	2005/01/16 08:28:32	1.238
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.230 2004/11/23 02:37:58 banghart Exp $
+# $Id: grades.pm,v 1.238 2005/01/16 08:28:32 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -973,6 +973,7 @@ sub sub_page_kw_js {
     my $iconpath = $request->dir_config('lonIconsURL');
     &commonJSfunctions($request);
     my $docopen=&Apache::lonhtmlcommon::javascript_docopen();
+    $docopen=~s/^document\.//;
     $request->print(<<SUBJAVASCRIPT);
 <script type="text/javascript" language="javascript">
 
@@ -1663,7 +1664,6 @@ KEYWORDS
 			}
 		    }
 		    my $order=&get_order($partid,$respid,$symb,$uname,$udom);
-		    my $portfolio_path;
 		    if ($ENV{'form.lastSub'} eq 'lastonly' || 
 			($ENV{'form.lastSub'} eq 'hdgrade' && 
 			 $$handgrade{$part} eq 'yes')) {
@@ -1671,20 +1671,26 @@ KEYWORDS
 			$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part:</b> '.
 			    $display_part.' <font color="#999999">( ID '.$respid.
 			    ' )</font>&nbsp; &nbsp;';
+			my @files;
 			if ($record{"resource.$partid.$respid.portfiles"}) {
-			    $portfolio_path = '/uploaded/'.$udom.'/'.$uname.'/portfolio';
-			    &Apache::lonnet::logthis("found a portfolio file".$record{"resource.$partid.$respid.portfiles"});
-			    &Apache::lonnet::logthis("uploaded URL file".$record{"resource.$partid.$respid.uploadedurl"});
-			} else {
-			    $portfolio_path = '';
+			    my $file_url = '/uploaded/'.$udom.'/'.$uname.'/portfolio';
+			    foreach my $file (split(',',$record{"resource.$partid.$respid.portfiles"})) {
+				push(@files,$file_url.$file);
+			    
+				&Apache::lonnet::logthis("found a portfolio file".$record{"resource.$partid.$respid.portfiles"});
+				&Apache::lonnet::logthis("uploaded URL file".$record{"resource.$partid.$respid.uploadedurl"});
+			    }
 			}
 			if ($record{"resource.$partid.$respid.uploadedurl"}) {
-			    &Apache::lonnet::allowuploaded('/adm/grades',
-			    $record{"resource.$partid.$respid.uploadedurl"});
-			    $lastsubonly.='<a href="'.$portfolio_path.$record{"resource.$partid.$respid.uploadedurl"}.'" target="lonGRDs"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> <font color="red" size="1">Like all files provided by users, this file may contain virusses</font><br />';
+			    push(@files,$record{"resource.$partid.$respid.uploadedurl"});
 			}
-			if ($record{"resource.$partid.$respid.portfiles"}) {
-			    $lastsubonly.='<a href="'.$portfolio_path.$record{"resource.$partid.$respid.portfiles"}.'" target="lonGRDs"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> <font color="red" size="1">Like all files provided by users, this file may contain virusses</font><br />';
+			if (@files) {
+			    $lastsubonly.='<br /><font color="red" size="1">Like all files provided by users, this file may contain virusses</font><br />';
+			    foreach my $file (@files) {
+				&Apache::lonnet::allowuploaded('/adm/grades',$file);
+				$lastsubonly.='<br /><a href="'.$file.'" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border=0"> '.$file.'</a>';
+			    }
+			    $lastsubonly.='<br />';
 			}
 			$lastsubonly.='<b>Submitted Answer: </b>'.
 			    &cleanRecord($subval,$responsetype,$symb,$partid,
@@ -2398,9 +2404,6 @@ sub viewgrades {
     my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'1');
     my $ctr = 0;
     foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
-	my $uname = $_;
-	$uname=~s/:/_/;
-	$result.='<input type="hidden" name="ctr'.$ctr.'" value="'.$uname.'" />'."\n";
 	$ctr++;
 	$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'},
 				   $_,$$fullname{$_},\@parts,\%weight,$ctr);
@@ -2424,18 +2427,21 @@ sub viewstudentgrade {
     my ($uname,$udom) = split(/:/,$student);
     $student=~s/:/_/;
     my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname);
-    my $result='<tr bgcolor="#ffffdd"><td align="right">'.$ctr.'&nbsp;</td><td>&nbsp;'.
+    my $result='<tr bgcolor="#ffffdd"><td align="right">'.
+	'<input type="hidden" name="ctr'.($ctr-1).'" value="'.$student.'" />'.
+	"\n".$ctr.'&nbsp;</td><td>&nbsp;'.
 	'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom.
 	'\')"; TARGET=_self>'.$fullname.'</a> '.
 	'<font color="#999999">('.$uname.($ENV{'user.domain'} eq $udom ? '' : ':'.$udom).')</font></td>'."\n";
     foreach my $apart (@$parts) {
 	my ($part,$type) = &split_part_type($apart);
 	my $score=$record{"resource.$part.$type"};
+	$result.='<td align="middle">';
 	if ($type eq 'awarded') {
 	    my $pts = $score eq '' ? '' : $score*$$weight{$part};
 	    $result.='<input type="hidden" name="'.
 		'GD_'.$student.'_'.$part.'_awarded_s" value="'.$pts.'" />'."\n";
-	    $result.='<td align="middle"><input type="text" name="'.
+	    $result.='<input type="text" name="'.
 		'GD_'.$student.'_'.$part.'_awarded" '.
 		'onChange="javascript:changeSelect(\''.$part.'\',\''.$student.
 		'\')" value="'.$pts.'" size="4" /></td>'."\n";
@@ -2444,7 +2450,7 @@ sub viewstudentgrade {
 	    $status = 'nothing' if ($status eq '');
 	    $result.='<input type="hidden" name="'.'GD_'.$student.'_'.
 		$part.'_solved_s" value="'.$status.'" />'."\n";
-	    $result.='<td align="middle">&nbsp;<select name="'.
+	    $result.='&nbsp;<select name="'.
 		'GD_'.$student.'_'.$part.'_solved" '.
 		'onChange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n";
 	    $result.= (($status eq 'excused') ? '<option> </option><option selected="on">excused</option>' 
@@ -2455,7 +2461,7 @@ sub viewstudentgrade {
 	    $result.='<input type="hidden" name="'.
 		'GD_'.$student.'_'.$part.'_'.$type.'_s" value="'.$score.'" />'.
 		    "\n";
-	    $result.='<td align="middle"><input type="text" name="'.
+	    $result.='<input type="text" name="'.
 		'GD_'.$student.'_'.$part.'_'.$type.'" '.
 		'value="'.$score.'" size="4" /></td>'."\n";
 	}
@@ -3133,7 +3139,7 @@ sub displayPage {
         if($curRes == $iterator->BEGIN_MAP) { $depth++; }
         if($curRes == $iterator->END_MAP) { $depth--; }
 
-        if (ref($curRes) && $curRes->is_problem()) {
+        if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) {
 	    my $parts = $curRes->parts();
             my $title = $curRes->compTitle();
 	    my $symbx = $curRes->symb();
@@ -3973,14 +3979,28 @@ sub scantron_do_warning {
     if (!$symb) {return '';}
     my $default_form_data=&defaultFormData($symb,$url);
     $r->print(&scantron_form_start().$default_form_data);
-    my $warning=&scantron_warning_screen('Validate Records');
-    $r->print(<<STUFF);
+    if ( $ENV{'form.selectpage'} eq '' ||
+	 $ENV{'form.scantron_selectfile'} eq '' ||
+	 $ENV{'form.scantron_format'} eq '' ) {
+	$r->print("<p>You have forgetten to specify some information. Please go Back and try again.</p>");
+	if ( $ENV{'form.selectpage'} eq '') {
+	    $r->print('<p><font color="red">You have not selected a Sequence to grade</font></p>');
+	} 
+	if ( $ENV{'form.scantron_selectfile'} eq '') {
+	    $r->print('<p><font color="red">You have not selected a file that contains the student\'s response data.</font></p>');
+	} 
+	if ( $ENV{'form.scantron_format'} eq '') {
+	    $r->print('<p><font color="red">You have not selected a the format of the student\'s response data.</font></p>');
+	} 
+    } else {
+	my $warning=&scantron_warning_screen('Validate Records');
+	$r->print(<<STUFF);
 $warning
 <input type="submit" name="submit" value="Validate Records" />
 <input type="hidden" name="command" value="scantron_validate" />
-</form>
 STUFF
-    $r->print("<br />".&show_grading_menu_form($symb,$url)."</body></html>");
+    }
+    $r->print("</form><br />".&show_grading_menu_form($symb,$url)."</body></html>");
     return '';
 }
 
@@ -4520,7 +4540,7 @@ sub scantron_get_maxbubble {
     my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0);
     &Apache::lonnet::delenv('form.counter');
     foreach my $resource (@resources) {
-	my $result=&Apache::lonnet::ssi($resource->src());
+	my $result=&Apache::lonnet::ssi($resource->src().'?symb='.&Apache::lonnet::escape($resource->symb()));
     }
     &Apache::lonnet::delenv('scantron\.');
     my $envfile=$ENV{'user.environment'};
@@ -4804,7 +4824,6 @@ DOWNLOAD
 #
 #-------------------------------------------------------------------
 
-
 #-------------------------- Menu interface -------------------------
 #
 #--- Show a Grading Menu button - Calls the next routine ---
@@ -4857,6 +4876,7 @@ sub gradingmenu {
 	    if (!checkReceiptNo(formname,'notOK')) { return false;}
 	    formname.submit();
 	}
+	if (val < 7) formname.submit();
     }
 
     function checkReceiptNo(formname,nospace) {
@@ -4909,7 +4929,7 @@ GRADINGMENUJS
 		($saveSec eq $_ ? 'selected="on"':'').'>'.$_.'</option>'."\n";
 	}
     }
-    $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="on"' : ''). '>all</select> &nbsp; ';
+    $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="on"' : ''). '>all</option></select> &nbsp; ';
 
     $result.=&mt('Student Status').':</b>'.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,undef);
 
@@ -4961,6 +4981,9 @@ GRADINGMENUJS
 	    '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')">'.
 	    '</td></tr>'."\n";
     } 
+    $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
+	'<input type="button" onClick="javascript:this.form.action=\'/adm/helper/resettimes.helper\';this.form.submit();'.
+	'" value="'.&mt('Manage').'" /> access times.</td></tr>'."\n";
 
     $result.='</form></td></tr></table>'."\n".
 	'</td></tr></table>'."\n".