[LON-CAPA-cvs] cvs: loncom /interface lonprintout.pm
foxr
lon-capa-cvs@mail.lon-capa.org
Tue, 16 Aug 2005 10:11:27 -0000
foxr Tue Aug 16 06:11:27 2005 EDT
Modified files:
/loncom/interface lonprintout.pm
Log:
Got print problems for anonymous with single typed in code to work
On to the same for resources... may later put in a chooser for known
codes but will still need to allow the type-in of a code that was not
saved.
Index: loncom/interface/lonprintout.pm
diff -u loncom/interface/lonprintout.pm:1.384 loncom/interface/lonprintout.pm:1.385
--- loncom/interface/lonprintout.pm:1.384 Mon Aug 15 23:34:34 2005
+++ loncom/interface/lonprintout.pm Tue Aug 16 06:11:24 2005
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.384 2005/08/16 03:34:34 albertel Exp $
+# $Id: lonprintout.pm,v 1.385 2005/08/16 10:11:24 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -44,6 +44,38 @@
my $resources_printed = '';
+#
+# Convert a numeric code to letters
+#
+sub num_to_letters {
+ my ($num) = @_;
+ my @nums= split('',$num);
+ my @num_to_let=('A'..'Z');
+ my $word;
+ foreach my $digit (@nums) { $word.=$num_to_let[$digit]; }
+ return $word;
+}
+# Convert a letter code to numeric.
+#
+sub letters_to_num {
+ my ($letters) = @_;
+ my @letters = split('', uc($letters));
+ my %substitution;
+ my $digit = 0;
+ foreach my $letter ('A'..'J') {
+ $substitution{$letter} = $digit;
+ $digit++;
+ }
+ # The substitution is done as below to preserve leading
+ # zeroes which are needed to keep the code size exact
+ #
+ my $result ="";
+ foreach my $letter (@letters) {
+ $result.=$substitution{$letter};
+ }
+ return $result;
+}
+
# Determine if a code is a valid numeric code. Valid
# numeric codes must be comprised entirely of digits and
# have a correct number of digits.
@@ -65,6 +97,7 @@
if (length($value) != $num_digits) {
return "Numeric code $value incorrect number of digits (correct = $num_digits)";
}
+ return undef;
}
# Determines if a code is a valid alhpa code. Alpha codes
# are ciphers that map [A-J,a-j] -> 0..9 0..9.
@@ -90,6 +123,7 @@
if (length($value) != $num_letters) {
return "Letter code $value has incorrect number of letters (correct = $num_letters)";
}
+ return undef;
}
# Determine if a code entered by the user in a helper is valid.
@@ -121,12 +155,11 @@
}
my $valid;
if ($code_type eq 'number') {
- $valid = &is_valid_numeric_code($code_value, $code_length);
+ return &is_valid_numeric_code($code_value, $code_length);
} else {
- $valid = &is_valid_alpha_code($code_value, $code_length);
+ return &is_valid_alpha_code($code_value, $code_length);
}
- return "Entering a single code is not supported (yet): $code_type $code_length $valid";
}
# Compare two students by name. The students are in the form
@@ -1329,7 +1362,7 @@
my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'};
my $code_name=$helper->{'VARS'}->{'ANON_CODE_STORAGE_NAME'};
my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'};
-
+ my $single_code = $helper->{'VARS'}->{'SINGLE_CODE'};
my $code_option=$helper->{'VARS'}->{'CODE_OPTION'};
open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab');
my ($code_type,$code_length)=('letter',6);
@@ -1351,6 +1384,16 @@
$code_type=$result{"type\0$old_name"};
@allcodes=split(',',$result{$old_name});
$num_todo=scalar(@allcodes);
+ } elsif ($single_code) {
+
+ # If an alpha code have to convert to numbers so it can be
+ # converted back to letters again :-)
+ #
+ if ($code_type ne 'number') {
+ $single_code = &letters_to_num($single_code);
+ $num_todo = 1;
+ }
+ @allcodes = ($single_code);
} else {
my %allcodes;
srand($seed);
@@ -1576,14 +1619,6 @@
FINALEND
}
-sub num_to_letters {
- my ($num) = @_;
- my @nums= split('',$num);
- my @num_to_let=('A'..'Z');
- my $word;
- foreach my $digit (@nums) { $word.=$num_to_let[$digit]; }
- return $word;
-}
sub get_CODE {
my ($all_codes,$num,$seed,$size,$type)=@_;