--- loncom/interface/lonprintout.pm 2003/02/14 21:43:35 1.116
+++ loncom/interface/lonprintout.pm 2003/02/20 22:11:42 1.119
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.116 2003/02/14 21:43:35 sakharuk Exp $
+# $Id: lonprintout.pm,v 1.119 2003/02/20 22:11:42 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -238,6 +238,7 @@ sub problem_choice_menu {
$subdirtoprint =~ s/\/[^\/]+$//;
my @list_of_files = ();
my @content_directory = ();
+ $r->print("Subdir: " . $subdirtoprint . " ");
if ($subdirtoprint =~ m|/home/([^/]+)/public_html|) {
#localmachine CSTR space
my $user=$1;
@@ -381,11 +382,12 @@ ENDDISHEADER
}
}
$r->print(<Number of blank pages to add:
+
+
Number of blank pages added to each student assignments to print these assignments on physically different sheets (requires manual addjustment):
@@ -611,7 +613,7 @@ ENDPART
foreach my $person (@students) {
my $current_output = '';
my ($usersection,$username,$userdomain) = split /:/,$person;
- my $fullname = &Apache::grades::get_fullname($username,$userdomain);
+ my $fullname = &Apache::grades::get_fullname($username,$userdomain);
#goes through all resources, checks if they are available for current student, and produces output
foreach my $curresline (@master_seq) {
my ($curres,$symb) = split /&&/, $curresline;
@@ -630,16 +632,17 @@ ENDPART
$flag_latex_header_remove = 'YES';
}
}
+ my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
if ($current_output=~/\\documentclass/) {
- my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
- $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{$courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}} \\begin{document}\\noindent\\textit{\\textbf{$fullname}}\\vskip 3 mm /;
+ $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\vskip 3 mm /;
} else {
my $blanspages = '';
for (my $j=0;$j<$ENV{'form.addedpages'};$j++) {$blanspages.='\clearpage\strut\clearpage';}
- $current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License } \\vskip 3mm'.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\textit{\textbf{'.$fullname.'}}\hskip 1.4in } \vskip 5 mm '.$current_output;
+ $current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License }\\newpage \\vskip 3mm'.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}} - '.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}\hskip 1.4in } \vskip 5 mm '.$current_output;
}
$result .= $current_output;
- &Apache::lonnet::delenv('form.counter');
+ &Apache::lonnet::delenv('form.counter');
+ &Apache::lonxml::init_counter();
}
$result .= '\end{document}';
&Apache::lonnet::delenv('form.textwidth');
@@ -834,7 +837,6 @@ sub character_chart {
$result =~ s/&\#0?61;/\$=\$/g;
$result =~ s/&(\#0?62|gt|\#155);/\$>\$/g;
$result =~ s/&\#0?63;/\?/g;
-# $result =~ s/?64;//g;
$result =~ s/&\#0?65;/A/g;
$result =~ s/&\#0?66;/B/g;
$result =~ s/&\#0?67;/C/g;
@@ -924,8 +926,6 @@ sub character_chart {
$result =~ s/&(\#168|uml);/\\texthighdieresis /g;
$result =~ s/&(\#169|copy);/\\copyright /g;
$result =~ s/&(\#170|ordf);/\\textordfeminine /g;
-# $result =~ s/«//g;
-# $result =~ s/«//g;
$result =~ s/&(\#172|not);/\$\\neg\$/g;
$result =~ s/&(\#173|shy);/ - /g;
$result =~ s/&(\#174|reg);/\\textregistered /g;
@@ -941,8 +941,6 @@ sub character_chart {
$result =~ s/&(\#184|cedil);/\\c{\\strut}/g;
$result =~ s/&(\#185|sup1);/\$^1\$/g;
$result =~ s/&(\#186|ordm);/\\textordmasculine /g;
-# $result =~ s/»//g;
-# $result =~ s/»//g;
$result =~ s/&(\#188|frac14);/\\textonequarter /g;
$result =~ s/&(\#189|frac12);/\\textonehalf /g;
$result =~ s/&(\#190|frac34);/\\textthreequarters /g;
@@ -963,8 +961,6 @@ sub character_chart {
$result =~ s/&(\#205|Iacute);/\\\'{I}/g;
$result =~ s/&(\#206|Icirc);/\\^{I}/g;
$result =~ s/&(\#207|Iuml);/\\\"{I}/g;
-# $result =~ s/Ð//g;
-# $result =~ s/Ð//g;
$result =~ s/&(\#209|Ntilde);/\\~{N}/g;
$result =~ s/&(\#210|Ograve);/\\\`{O}/g;
$result =~ s/&(\#211|Oacute);/\\\'{O}/g;
@@ -978,8 +974,6 @@ sub character_chart {
$result =~ s/&(\#219|Ucirc);/\\^{U}/g;
$result =~ s/&(\#220|Uuml);/\\\"{U}/g;
$result =~ s/&(\#221|Yacute);/\\\'{Y}/g;
-# $result =~ s/Þ//g;
-# $result =~ s/Þ//g;
$result =~ s/&(\#223|szlig);/\\ss/g;
$result =~ s/&(\#224|agrave);/\\\`{a}/g;
$result =~ s/&(\#225|aacute);/\\\'{a}/g;
@@ -1011,10 +1005,44 @@ sub character_chart {
$result =~ s/&(\#251|ucirc);/\\^{u}/g;
$result =~ s/&(\#252|uuml);/\\\"{u}/g;
$result =~ s/&(\#253|yacute);/\\\'{y}/g;
-# $result =~ s/þ//g;
-# $result =~ s/þ//g;
$result =~ s/&(\#255|yuml);/\\\"{y}/g;
$result =~ s/&\#952;/\$\\theta\$/g;
+#Greek Alphabet
+ $result =~ s/&(alpha|\#945);/\$\\alpha \$/g;
+ $result =~ s/&(beta|\#946);/\$\\beta \$/g;
+ $result =~ s/&(gamma|\#947);/\$\\gamma \$/g;
+ $result =~ s/&(delta|\#948);/\$\\delta \$/g;
+ $result =~ s/&(epsilon|\#949);/\$\\epsilon \$/g;
+ $result =~ s/&(zeta|\#950);/\$\\zeta \$/g;
+ $result =~ s/&(eta|\#951);/\$\\eta \$/g;
+ $result =~ s/&(theta|\#952);/\$\\theta \$/g;
+ $result =~ s/&(iota|\#953);/\$\\iota \$/g;
+ $result =~ s/&(kappa|\#954);/\$\\kappa \$/g;
+ $result =~ s/&(lambda|\#955);/\$\\lambda \$/g;
+ $result =~ s/&(mu|\#956);/\$\\mu \$/g;
+ $result =~ s/&(nu|\#957);/\$\\nu \$/g;
+ $result =~ s/&(xi|\#958);/\$\\xi \$/g;
+ $result =~ s/&(pi|\#960);/\$\\pi \$/g;
+ $result =~ s/&(rho|\#961);/\$\\rho \$/g;
+ $result =~ s/&(sigma|\#963);/\$\\sigma \$/g;
+ $result =~ s/&(tau|\#964);/\$\\tau \$/g;
+ $result =~ s/&(upsilon|\#965);/\$\\upsilon \$/g;
+ $result =~ s/&(phi|\#966);/\$\\phi \$/g;
+ $result =~ s/&(chi|\#967);/\$\\chi \$/g;
+ $result =~ s/&(psi|\#968);/\$\\psi \$/g;
+ $result =~ s/&(omega|\#969);/\$\\omega \$/g;
+ $result =~ s/&(Gamma|\#915);/\$\\Gamma \$/g;
+ $result =~ s/&(Delta|\#916);/\$\\Delta \$/g;
+ $result =~ s/&(Theta|\#920);/\$\\Theta \$/g;
+ $result =~ s/&(Lambda|\#923);/\$\\Lambda \$/g;
+ $result =~ s/&(Xi|\#926);/\$\\Xi \$/g;
+ $result =~ s/&(Pi|\#928);/\$\\Pi \$/g;
+ $result =~ s/&(Sigma|\#931);/\$\\Sigma \$/g;
+ $result =~ s/&(Upsilon|\#933);/\$\\Upsilon \$/g;
+ $result =~ s/&(Phi|\#934);/\$\\Phi \$/g;
+ $result =~ s/&(Psi|\#936);/\$\\Psi \$/g;
+ $result =~ s/&(Omega|\#937);/\$\\Omega \$/g;
+
return $result;
}
@@ -1104,7 +1132,8 @@ sub page_format_transformation {
if ($choice ne 'All class print') {
$text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{\\textbf{$firstname $lastname} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/;
} else {
- $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\begin{document}\\voffset=-0\.8cm\\setcounter{page}{1} \\vskip 5 mm /;
+ $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\\setcounter{page}{1} \\vskip 5 mm /;
+
}
}
return $text;
@@ -1188,9 +1217,6 @@ sub handler {
my $r = shift;
- # not sure where the form.* was getting processed.
- Apache::loncommon::get_unprocessed_cgi($ENV{QUERY_STRING});
-
# A hook for me to work without disturbing Alex.
if ($ENV{'form.jeremy'}) {
printWizard($r);
@@ -1282,29 +1308,40 @@ sub printWizard {
my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu;
- my $wizard = Apache::lonwizard->new("Printing Wizard");
+ my $wizard = Apache::lonwizard->new("Printing Wizard", $ENV{QUERY_STRING});
# PRINT_TYPE: What the user wants to print (current docs,
# whole sequence, etc.
- $wizard->declareVars(['PRINT_TYPE']);
+ $wizard->declareVars(['PRINT_TYPE', 'FORMAT', 'postdata', 'url',
+ 'symb', 'RESOURCES', 'FILES']);
+
+ # Extract map
+ my $symb = $wizard->{VARS}->{'symb'};
+ my ($map, $id, $url) = split(/__/, $symb);
+
+ my $subdir = &Apache::lonnet::filelocation("", $ENV{'form.url'});
+
+ # "Delete everything after the last slash."
+ $subdir =~ s|/[^/]+$||;
+
+ # This really ought to be in some repository in loncommon or
+ # something where it can just be grabbed.
+ my $problemFilter = sub {
+ my $name = shift;
+ return $name =~ m/^[^\.]+\.(problem|exam|quiz|assess|survey|form|library)$/;
+ };
- my $subdir = $ENV{'form.postdata'};
- $subdir =~ s|http://[^/]+||;
- $subdir =~ m/\/([^\/]+)$/;
- $subdir =~ s/\Q$1\E//;
-
- # This code also shows up above... which is prefered? Is one
- # right for this context?
- #my $subdir = &Apache::lonnet::filelocation("",$ENV{'form.url'});
- #$subdir =~ s/\/[^\/]+$//;
-
Apache::lonwizard::switch_state->new($wizard, "START", "Selecting Resources to Print", "PRINT_TYPE", [
['current_document', "$resourceTitle (exactly what was on the screen)", 'CHOOSE_FORMAT'],
- ['map_problems', "Problems from $sequenceTitle", 'CHOOSE_FORMAT'],
- ['map_problems_pages', "All of $sequenceTitle", 'CHOOSE_FORMAT'],
+ ['map_problems', "Problems from $sequenceTitle", 'CHOOSE_PROBLEMS'],
+ ['map_problems_pages', "Problems and pages from $sequenceTitle", 'CHOOSE_PROBLEMS_HTML'],
['problems_for_students', "Problems from $sequenceTitle for selected students", 'CHOOSE_FORMAT'],
- ['problems_from_directory', "Problems from $subdir", 'CHOOSE_FORMAT'] ],
+ ['problems_from_directory', "Problems from $subdir", 'CHOOSE_FROM_SUBDIR'] ],
"What do you want to print?");
-
+ Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS", 'Select Problems', "Select problems to print from $sequenceTitle:", '', 'CHOOSE_FORMAT', 'RESOURCES', sub {my $res = shift; return $res->is_problem()}, undef, $map);
+ Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS_HTML", 'Select Resources', "Select resources to print from $sequenceTitle:", '', "CHOOSE_FORMAT", 'RESOURCES', sub {my $res = shift; return !$res->is_map()}, undef, $map);
+ Apache::lonwizard::choose_files->new($wizard, "CHOOSE_FROM_SUBDIR", "Select Files","Select problems you wish to print from $subdir:", '', 'CHOOSE_FORMAT', 'FILES', $subdir, $problemFilter);
+ Apache::lonprintout::page_format_state->new($wizard, "CHOOSE_FORMAT", "Page Format", "FORMAT", "FINAL");
+
$r->print($wizard->display());
untie %hash;
@@ -1315,5 +1352,153 @@ sub printWizard {
1;
+
+package Apache::lonprintout::page_format_state;
+
+=pod
+
+=head1 Wizard state: page_format_state
+
+See lonwizard.pm documentation for discussion of the wizard framework.
+
+Apache::lonprintout::page_format_state is a state that gives the user an opportunity to select the page layout they wish to print with: Number of columns, portrait/landscape, and paper size. If you want to change the paper size choices, change the @paperSize array contents in this package.
+
+=over 4
+
+=item * B(parentLonWizReference, stateName, stateTitle, varName, nextState): varName is where the print information will be stored in the format FIXME. nextState is the state that follows this one.
+
+=back
+
+=cut
+
+use Apache::lonwizard;
+
+no strict;
+@ISA = ("Apache::lonwizard::state");
+use strict;
+
+my $maxColumns = 2;
+my @paperSize = ("Letter [8 1/2x11 in]", "Legal [8 1/2x14 in]",
+ "Ledger/Tabloid [11x17 in]", "Executive [7 1/2x10 in]",
+ "A2 [420x594 mm]", "A3 [297x420 mm]", "A4 [210x297 mm]",
+ "A5 [148x210 mm]", "A6 [105x148 mm]" );
+
+# Tentative format: Orientation (L = Landscape, P = portrait) | Colnum |
+# Paper type
+
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = bless $proto->SUPER::new(shift, shift, shift);
+
+ $self->{VAR_NAME} = shift;
+ $self->{NEXT_STATE} = shift;
+ return $self;
+}
+
+sub postprocess {
+ my $self = shift;
+ my $wizard = $self->{WIZARD};
+
+ # We have to manually collect the value and store it in the
+ # wizard variable
+ my $result = $ENV{'form.' . $self->{VAR_NAME} . '.layout'} . '|';
+ $result .= $ENV{'form.' . $self->{VAR_NAME} . '.cols'} . '|';
+ $result .= $ENV{'form.' . $self->{VAR_NAME} . '.paper'};
+
+ $wizard->setVar($self->{VAR_NAME}, $result);
+ $wizard->changeState($self->{NEXT_STATE});
+}
+
+sub render {
+ my $self = shift;
+ my $wizard = $self->{WIZARD};
+ my $result = '';
+ my $var = $self->{VAR_NAME};
+ my $curVal = $self->{WIZARD}->{VARS}->{$var};
+
+ my ($layout, $cols, $paper) = split(/\|/, $curVal);
+
+ my $landscapeChecked = ($layout ne "L")? '' : 'checked ';
+ my $portraitChecked = $landscapeChecked ? '' : 'checked ';
+
+ $result .= <How should the printing be formatted?
+
+
+
Layout
+
Columns
+
Paper type
+
+
+
+ Landscape
+ Portrait
+
+
+
\n";
+ $result .= "
";
+ return $result;
+}
+
+1;
+
+package Apache::lonprintout::printwizfinal;
+
+# This is the final state for the print wizard. It is not generally useful,
+# so it is not perldoc'ed.
+
+no strict;
+@ISA = ('Apache::lonwizard::state');
+use strict;
+
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = bless $proto->SUPER::new(shift, shift, shift);
+
+ # All other variables come from the wizard.
+}
+
+sub render {
+ my $self = shift;
+ my $wizard = $self->{WIZARD};
+ my $wizvars = $wizard->{VARS};
+
+ my $result = '';
+
+ $result .= "";
+}
+
+1;
+
__END__