--- loncom/homework/grades.pm	2005/07/12 14:57:55	1.276
+++ loncom/homework/grades.pm	2005/08/29 10:06:07	1.280
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.276 2005/07/12 14:57:55 albertel Exp $
+# $Id: grades.pm,v 1.280 2005/08/29 10:06:07 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2293,12 +2293,13 @@ sub version_portfiles {
     my $portfolio_root = &Apache::loncommon::propath($domain,
 						 $stuname).
 						'/userfiles/portfolio';
-    foreach my $key(keys %$record) {
+    foreach my $key (keys(%$record)) {
         my $new_portfiles;
+	
         if ($key =~ /^resource\.($version_parts)\./ && $key =~ /\.portfiles$/ ) {
             my @v_portfiles;
             my @portfiles = split(/,/,$$record{$key});
-            # &Apache::lonnet::logthis("should be unmarking and remarking");
+            &Apache::lonnet::logthis("should be unmarking and remarking $key",@portfiles);
             foreach my $file (@portfiles) {
                 &Apache::lonnet::unmark_as_readonly($domain,$stuname,[$symb,$env{'request.course.id'}],$file);
                 my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*$)/);
@@ -3864,6 +3865,7 @@ sub scantron_CODElist {
     my $namechoice='<option></option>';
     foreach my $name (sort {uc($a) cmp uc($b)} @names) {
 	if ($name =~ /^error: 2 /) { next; }
+	if ($name =~ /^type\0/) { next; }
 	$namechoice.='<option value="'.$name.'">'.$name.'</option>';
     }
     $namechoice='<select name="scantron_CODElist">'.$namechoice.'</select>';
@@ -4139,8 +4141,11 @@ sub scantron_parse_scanline {
     my %record;
     my $questions=substr($line,$$scantron_config{'Qstart'}-1);
     my $data=substr($line,0,$$scantron_config{'Qstart'}-1);
-    if ($$scantron_config{'CODElocation'} ne 0) {
-	if ($$scantron_config{'CODElocation'} < 0) {
+    if (!($$scantron_config{'CODElocation'} eq 0 ||
+	  $$scantron_config{'CODElocation'} eq 'none')) {
+	if ($$scantron_config{'CODElocation'} < 0 ||
+	    $$scantron_config{'CODElocation'} eq 'letter' ||
+	    $$scantron_config{'CODElocation'} eq 'number') {
 	    $record{'scantron.CODE'}=substr($data,
 					    $$scantron_config{'CODEstart'}-1,
 					    $$scantron_config{'CODElength'});
@@ -4751,12 +4756,14 @@ sub scantron_get_correction {
 	if ($error eq 'incorrectCODE' 
 	    && $$scan_record{'scantron.CODE'}=~/\S/ ) {
 	    my ($max,$closest)=&scantron_get_closely_matching_CODEs($arg,$$scan_record{'scantron.CODE'});
-	    foreach my $testcode (@{$closest}) {
-		my $checked='';
-		if (!$i) { $checked=' checked="on" '; }
-		$r->print("<label><input type='radio' name='scantron_CODE_resolution' value='use_closest_$i' $checked /> Use the similar CODE <b><tt>".$testcode."</tt></b> instead.</label><input type='hidden' name='scantron_CODE_closest_$i' value='$testcode' />");
-		$r->print("\n<br />");
-		$i++;
+	    if ($closest > 0) {
+		foreach my $testcode (@{$closest}) {
+		    my $checked='';
+		    if (!$i) { $checked=' checked="on" '; }
+		    $r->print("<label><input type='radio' name='scantron_CODE_resolution' value='use_closest_$i' $checked /> Use the similar CODE <b><tt>".$testcode."</tt></b> instead.</label><input type='hidden' name='scantron_CODE_closest_$i' value='$testcode' />");
+		    $r->print("\n<br />");
+		    $i++;
+		}
 	    }
 	}
 	if ($$scan_record{'scantron.CODE'}=~/\S/ ) {
@@ -4862,11 +4869,24 @@ sub scantron_get_closely_matching_CODEs
 }
 
 sub get_codes {
-    my $old_name=$env{'form.scantron_CODElist'};
-    my $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'};
-    my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'};
-    my %result=&Apache::lonnet::get('CODEs',[$old_name],$cdom,$cnum);
-    my %allcodes=map {(&Apache::lonprintout::num_to_letters($_),1)} split(',',$result{$old_name});
+    my ($old_name, $cdom, $cnum) = @_;
+    if (!$old_name) {
+	$old_name=$env{'form.scantron_CODElist'};
+    }
+    if (!$cdom) {
+	$cdom =$env{'course.'.$env{'request.course.id'}.'.domain'};
+    }
+    if (!$cnum) {
+	$cnum =$env{'course.'.$env{'request.course.id'}.'.num'};
+    }
+    my %result=&Apache::lonnet::get('CODEs',[$old_name,"type\0$old_name"],
+				    $cdom,$cnum);
+    my %allcodes;
+    if ($result{"type\0$old_name"} eq 'number') {
+	%allcodes=map {($_,1)} split(',',$result{$old_name});
+    } else {
+	%allcodes=map {(&Apache::lonprintout::num_to_letters($_),1)} split(',',$result{$old_name});
+    }
     return %allcodes;
 }
 
@@ -5399,6 +5419,9 @@ GRADINGMENUJS
     $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.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
+	'<input type="button" onClick="javascript:this.form.command.value=\'codelist\';this.form.action=\'/adm/pickcode\';this.form.submit();'.
+	'" value="'.&mt('View').'" /> saved CODEs.</td></tr>'."\n";
 
     $result.='</form></td></tr></table>'."\n".
 	'</td></tr></table>'."\n".