--- 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?

+ + + + + + + + +
LayoutColumnsPaper 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 .= "
\n"; + + # Nope, I'm lost. + $result .= "
"; +} + +1; + __END__