--- loncom/interface/lonprintout.pm 2005/08/15 22:39:43 1.383
+++ loncom/interface/lonprintout.pm 2005/10/31 21:06:35 1.396
@@ -1,7 +1,7 @@
-# The LearningOnline Network
+# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.383 2005/08/15 22:39:43 foxr Exp $
+# $Id: lonprintout.pm,v 1.396 2005/10/31 21:06:35 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -42,45 +42,72 @@ use Apache::lonratedt;
use POSIX qw(strftime);
use Apache::lonlocal;
-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 maximum number of allowable digits.
+# have a correct number of digits.
#
# Parameters:
# value - proposed code value.
-# max_digits - Maximum digits allowed.
+# num_digits - Number of digits required.
#
sub is_valid_numeric_code {
- my ($value, $max_digits) = @_;
+ my ($value, $num_digits) = @_;
# Remove leading/trailing whitespace;
- $value =~ s/^\s*//;
- $value =~ s/\s*$//;
+ $value =~ s/^\s*//g;
+ $value =~ s/\s*$//g;
# All digits?
-
- if ($value =~ /^[0-9]+$/) {
- if (length($value) <= $max_digits) {
- return undef;
- } else {
- return "Numeric code $value has too many digits (max = $max_digits)";
- }
- } else {
+ if ($value !~ /^[0-9]+$/) {
return "Numeric code $value has invalid characters - must only be digits";
}
+ 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.
-# They also have a maximum digit count.
+# They also have a correct digit count.
# Parameters:
# value - Proposed code value.
-# max_letters - Maximum number of letters.
+# num_letters - correct number of letters.
# Note:
# leading and trailing whitespace are ignored.
#
sub is_valid_alpha_code {
- my ($value, $max_letters) = @_;
+ my ($value, $num_letters) = @_;
# strip leading and trailing spaces.
@@ -88,16 +115,13 @@ sub is_valid_alpha_code {
$value =~ s/\s*$//g;
# All alphas in the right range?
-
- if ($value =~ /^[A-J,a-j]+$/) {
- if (length($value) <= $max_letters) {
- return undef;
- } else {
- return "Letter code $value has too many letters (max = $max_letters)";
- }
- } else {
+ if ($value !~ /^[A-J,a-j]+$/) {
return "Invalid letter code $value must only contain A-J";
}
+ 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.
@@ -129,13 +153,11 @@ sub is_code_valid {
}
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
@@ -484,6 +506,7 @@ sub character_chart {
$result =~ s/&(prod|\#8719);/\\ensuremath\{\\prod\}/g;
$result =~ s/&(sum|\#8721);/\\ensuremath\{\\sum\}/g;
$result =~ s/&(minus|\#8722);/\\ensuremath\{-\}/g;
+ $result =~ s/–/\\ensuremath\{-\}/g;
$result =~ s/&(lowast|\#8727);/\\ensuremath\{*\}/g;
$result =~ s/&(radic|\#8730);/\\ensuremath\{\\surd\}/g;
$result =~ s/&(prop|\#8733);/\\ensuremath\{\\propto\}/g;
@@ -798,6 +821,7 @@ sub print_latex_header {
$output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n".
'\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n".
'\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n".
+ '\usepackage{wrapfig}'.
'\usepackage{picins}\usepackage{calc}'."\n".
'\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n".
'\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n".
@@ -879,6 +903,34 @@ sub unsupported {
#
+# List of recently generated print files
+#
+
+sub recently_generated {
+ my $r=shift;
+ my $prtspool=$r->dir_config('lonPrtDir');
+ my $result;
+ opendir(DIR,$prtspool);
+ while (my $filename=readdir(DIR)) {
+ if ($filename=~/^$env{'user.name'}\_$env{'user.domain'}\_printout\_(\d+)\_.*.pdf$/) {
+ my ($cdev,$cino,$cmode,$cnlink,
+ $cuid,$cgid,$crdev,$csize,
+ $catime,$cmtime,$cctime,
+ $cblksize,$cblocks)=stat($prtspool.'/'.$filename);
+ $result.="".
+ &mt('Generated [_1] ([_2] bytes)',
+ &Apache::lonlocal::locallocaltime($cctime),$csize).
+ '
';
+ }
+ }
+ closedir(DIR);
+ if ($result) {
+ $r->print('