--- loncom/interface/lonpickcode.pm	2004/04/24 08:31:57	1.2
+++ loncom/interface/lonpickcode.pm	2007/10/12 20:08:38	1.13
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Pick a CODE from the list of possible CODEs
 #
-# $Id: lonpickcode.pm,v 1.2 2004/04/24 08:31:57 albertel Exp $
+# $Id: lonpickcode.pm,v 1.13 2007/10/12 20:08:38 banghart Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -33,79 +33,125 @@ use Apache::Constants qw(:common);
 use Apache::loncommon();
 use Apache::grades();
 use Apache::lonlocal;
+use Apache::lonnet;
 
 sub get_code_freq {
     my ($r)=@_;
     my %codes;
     my %scantron_config=
-	&Apache::grades::get_scantron_config($ENV{'form.scantron_format'});
+	&Apache::grades::get_scantron_config($env{'form.scantron_format'});
     $r->rflush();
     my ($scanlines,$scan_data)=&Apache::grades::scantron_getfile();
     for (my $i=0;$i<=$scanlines->{'count'};$i++) {
-	my $line=&Apache::grades::scantron_get_line($scanlines,$i);
+	my $line=&Apache::grades::scantron_get_line($scanlines,$scan_data,$i);
 	if ($line=~/^[\s\cz]*$/) { next; }
 	my $scan_record=
 	    &Apache::grades::scantron_parse_scanline($line,$i,
 						     \%scantron_config,
 						     $scan_data,1);
-	$codes{$$scan_record{'scantron.CODE'}}++;
+	push(@{$codes{$$scan_record{'scantron.CODE'}}},$$scan_record{'scantron.PaperID'});
 
     }
     return %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});
-    return %allcodes;
-}
-
-sub num_matches {
-    my ($code) = @_;
-    my $orig=$ENV{'form.curCODE'};
-    my @code=split(//,$code);
-    my @orig=split(//,$orig);
-    my $same=0;
-    for (my $i=0;$i<scalar(@code);$i++) {
-	if ($code[$i] eq $orig[$i]) { $same++; }
-    }
-    return $same;
-}
-
 sub handler {
     my $r = shift;
     &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;
     return OK if $r->header_only;
 
-    $r->print(<<ENDDOCUMENT);
-<html>
-  <head>
-    <title>The LearningOnline Network with CAPA</title>
-  </head>
-ENDDOCUMENT
-
-
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 					    ['curCODE','scantron_selectfile',
-					     'form','scantron_format',
-					     'scantron_CODElist']);
+					     'form','scantron_format','symb',
+					     'scantron_CODElist','command']);
 
-    if  (!($ENV{'request.course.id'}) && 
-	 (&Apache::lonnet::allowed('usc',$ENV{'request.course.id'}))) {
-	$r->print('<body>Access not allowed.</body>');
+    if  (!($env{'request.course.id'}) && 
+	 (&Apache::lonnet::allowed('usc',$env{'request.course.id'}))) {
+	$r->print(&Apache::loncommon::start_page().
+		  &mt('Access not allowed.').
+		  &Apache::loncommon::end_page());
         return OK;
     }
+    if      ($env{'form.command'} eq 'codelist') {
+	&code_list($r);
+        $r->print(&Apache::grades::show_grading_menu_form($env{'form.symb'},
+						      $env{'form.url'}));	
+    } elsif ($env{'form.command'} eq 'showcodes') {
+	&show_codes($r);
+    } else {
+	&picking_a_code($r);
+    }
+    $r->print(&Apache::loncommon::end_page());
+    return OK;
+}
 
-    $r->print(&Apache::loncommon::bodytag("Selecting a CODE"));
+sub code_list {
+    my ($r,$context)=@_;
+    # $context = 0 Print page header and enclosing table
+    # $context = 1 No page header, print enclosing table
+    # $context = 2 No page header, no enclosing table
+    my $table_head;
+    my $enc_table_start;
+    my $enc_table_close;
+    
+    if (!$context) {
+	$r->print(&Apache::loncommon::start_page("View CODEs",undef,
+						 {'no_nav_bar' => 1}));
+	$table_head = ('<b>'.&mt('Select a set of saved CODEs to view.')."</b>");
+    } elsif ($context eq 1) {
+	$table_head = ('<b>'.&mt('Select another set of saved CODEs to view.')."</b>");
+	$enc_table_start = '<table width="100%"><tr><td bgcolor="#777777">';
+	$enc_table_close = '</tr></td></table>';
+    } elsif ($context eq 2) {
+        $table_head = ('<b>'.&mt('Select a set of saved CODEs to view.')."</b>");
+    }
+    $r->print("<form method='POST' action='/adm/pickcode' name='pickcode'>");
+    $r->print($enc_table_start);
+    $r->print('<table width="100%">');
+    $r->print('<tr><td bgcolor="#e6ffff">');
+    $r->print($table_head);
+    $r->print('</td></tr>');
+    $r->print('<tr><td bgcolor="#ffffe6">');
+    $r->print(&Apache::grades::scantron_CODElist());
+    $r->print('</td></tr>');
+    $r->print("<input type='hidden' name='command' value='showcodes' />");
+    $r->print("<input type='hidden' name='symb' value='".$env{'form.symb'}."' />");
+    $r->print("<input type='hidden' name='url' value='".$env{'form.url'}."' />");
+    $r->print('<tr><td bgcolor="#ffffe6">');
+    $r->print("<input type='submit' name='submit' value='".&mt("View")."' />");
+    $r->print('</td></tr>');
+    $r->print('</table>');
+    $r->print($enc_table_close); # conditional
+    $r->print("</form>");
+    
+}
+
+sub show_codes {
+    my ($r)=@_;
+    $r->print(&Apache::loncommon::start_page("View CODEs",undef,
+					     {'no_nav_bar' => 1}));
+    my %codes=&Apache::grades::get_codes();
+    $r->print("<h2>".$env{'form.scantron_CODElist'}."</h2>");
+    $r->print('<pre>');
+    foreach my $code (sort(keys(%codes))) {
+	$r->print($code."\n");
+    }
+    $r->print('</pre>');
+    &code_list($r,1);
+    $r->print(&Apache::grades::show_grading_menu_form($env{'form.symb'},
+						      $env{'form.url'}));
+}
+
+sub picking_a_code {
+    my ($r)=@_;
+    $r->print(&Apache::loncommon::start_page("Selecting a CODE",undef,
+					     {'no_nav_bar' => 1}));
     $r->print(<<ENDSCRIPT);
 <script>
 function gochoose(newcode) {
-    opener.document.$ENV{'form.form'}.scan_CODE_selectedvalue.value=newcode;
-    var slct=opener.document.$ENV{'form.form'}.scan_CODE_resolution;
+    opener.document.$env{'form.form'}.scantron_CODE_selectedvalue.value=newcode;
+    var slct=opener.document.$env{'form.form'}.scantron_CODE_resolution;
     var i;
     for (i=0;i<slct.length;i++) {
         if (slct[i].value=='use_found') { slct[i].checked=true; }
@@ -116,32 +162,36 @@ function gochoose(newcode) {
 ENDSCRIPT
 
 
-    $r->print("<p>The CODE on the paper is <tt><b>".$ENV{'form.curCODE'}.
+    $r->print("<p>The CODE on the paper is <tt><b>".$env{'form.curCODE'}.
 	      "</b></tt>. Please Select a new one.</p>\n".'<form>');
-    my %codes=&get_codes();
+    my %codes=&Apache::grades::get_codes();
     my %code_freq=&get_code_freq($r);
-    my $num_matches=&num_matches($ENV{'form.curCODE'});
+    my $num_matches=length($env{'form.curCODE'});
     for (my $i=$num_matches;$i>=0;$i--) {
-	my $to_print="<p> CODEs with $i matches</p>";
-	$to_print.='<table border="1"><tr><td></td><td>CODE</td><td># of exams using this CODE</td>';
+	my $to_print="<p>".&mt("CODEs with [_1] matching letters",$i)."</p>";
+	$to_print.='<table border="1"><tr><td></td><td>CODE</td><td>exams using this CODE</td>';
 	my $print;
 	foreach my $code (sort(keys(%codes))) {
-	    if (&num_matches($code) != $i) { next; }
+	    if (&Apache::grades::num_matches($env{'form.curCODE'},$code) != $i) { next; }
 	    $print=1;
-	    my $count=$code_freq{$code};
-	    if (!$count) { $count=0; }
+	    my ($count,$list);
+	    if (!ref($code_freq{$code})) {
+		$count=0;
+	    } else {
+		$count=scalar(@{$code_freq{$code}});
+		$list=' - '.join(', ',@{$code_freq{$code}});
+	    }
 	    $to_print.='<tr><td>'.
 		      '<input type="button" value="'.&mt('Select').
 		      '" onClick="gochoose(\''.$code.'\')" /></td>'.
-		      '<td><tt>'.$code.'</tt></td><td> <tt>'.$count.
-		      '</tt></td></tr>';
+		      '<td><tt>'.$code.'</tt></td><td>'.$count.
+		      $list.'</td></tr>';
 	    delete($codes{$code});
 	}
 	$to_print.='</table>';
 	if ($print) { $r->print($to_print); }
     }
-    $r->print('</form></body></html>');
-    return OK;
+    $r->print('</form>');
 } 
 
 1;