# The LearningOnline Network # Printout # # $Id: lonprintout.pm,v 1.32 2002/06/20 17:50:24 sakharuk Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # # (Internal Server Error Handler # # (Login Screen # 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, # 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer) # # 3/1/1 Gerd Kortemeyer) # # 3/1 Gerd Kortemeyer # # 9/17 Alex Sakharuk # package Apache::lonprintout; use strict; use Apache::Constants qw(:common :http); use Apache::lonxml; use Apache::lonnet; use Apache::inputtags; use Apache::edit; use Apache::File(); sub headerform { my $r = shift; $r->print(< LON-CAPA output for printing

What do you want to print? Make a choice.


ENDHEADER } sub menu_for_output { my $r = shift; $r->print(< Current document (you will print what you see on the screen)
All problems from the primary sequence
The whole primary sequence (problems plus all html and xml files)
All problems from the top level sequence

ENDMENUOUT1 my $subdirtoprint = &Apache::lonnet::filelocation("",$ENV{'form.url'}); $subdirtoprint =~ s/\/[^\/]+$//; if (&Apache::lonnet::allowed('bre',$subdirtoprint) eq 'F') { $r->print(< All problems from current subdirectory (where this particular problem is)
ENDMENUOUT2 } $r->print(<

And what page format do you prefer?

Two columns landscape
Two columns portrait
ENDMENUOUT3 } sub output_data { my $r = shift; $r->print(< LON-CAPA output for printing
ENDPART my $choice = $ENV{'form.choice'}; my $layout = $ENV{'form.layout'}; my $subdirtoprint = $ENV{'form.subdirect'}; my $laystyle = 'book'; my $result = ''; my %mystyle; my $filename; if ($choice eq 'Standard LaTeX output for current document') { my %moreenv; my $currequest=$ENV{'request.filename'}; $moreenv{'form.grade_target'}='tex'; $moreenv{'request.filename'}=$ENV{'form.url'}; &Apache::lonnet::appenv(%moreenv); my $texversion=&Apache::lonnet::ssi($ENV{'form.url'}); &Apache::lonnet::delenv('form.grade_target'); %moreenv = (); $moreenv{'request.filename'}=$currequest; &Apache::lonnet::appenv(%moreenv); $result .= $texversion; $result = &additional_cleanup($result); } elsif ($choice eq 'Standard LaTeX output for the primary sequence' or $choice eq 'Standard LaTeX output for whole primary sequence') { #-- where is the primary sequence containing file? my %moreenv; my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'}); $_ = $symbolic; m/([^_]+)_/; my $primary_sequence = '/res/'.$1; #-- open and analyses the primary sequence my $sequence_file=&Apache::lonnet::filelocation("",$primary_sequence); my $sequencefilecontents=&Apache::lonnet::getfile($sequence_file); my @master_seq = &content_map($sequencefilecontents); #-- produce an output string for (my $i=0;$i<=$#master_seq;$i++) { $_ = $master_seq[$i]; m/\"(.*)\"/; $_ = $1; my $urlp = $1; if ($choice eq 'Standard LaTeX output for the primary sequence') { if (/\.(problem|exam|quiz|assess|survey|form|library)/) { my %moreenv; $moreenv{'form.grade_target'}='tex'; &Apache::lonnet::appenv(%moreenv); my $texversion=&Apache::lonnet::ssi($urlp); &Apache::lonnet::delenv('form.grade_target'); $result .= $texversion; } } else { $moreenv{'form.grade_target'}='tex'; &Apache::lonnet::appenv(%moreenv); my $texversion=&Apache::lonnet::ssi($urlp); &Apache::lonnet::delenv('form.grade_target'); $result .= $texversion; } } $result = &additional_cleanup($result); } elsif ($choice eq 'Standard LaTeX output for the top level sequence') { my @master_seq = (); my @add_file_seq = (); #-- where is the main sequence of the course? my $main_seq = '/res/'.$ENV{'request.course.uri'}; my $file=&Apache::lonnet::filelocation("",$main_seq); my $filecontents=&Apache::lonnet::getfile($file); my @file_seq = &content_map($filecontents); #-- do we have any other sequence inside? my $i=0; while ($i<=$#file_seq) { $_ = $file_seq[$i]; if (/\.sequence$/) { $file = &Apache::lonnet::filelocation("",$file_seq[$i]); $filecontents=&Apache::lonnet::getfile($file); @add_file_seq = &content_map($filecontents); splice(@file_seq,$i,1,@add_file_seq); @add_file_seq = (); $i = -1; } $i++; } @master_seq = @file_seq; #-- produce an output string for (my $i=0;$i<=$#master_seq;$i++) { $_ = $master_seq[$i]; m/\"(.*)\"/; $_ = $1; my $urlp = $1; if (/\.(problem|exam|quiz|assess|survey|form|library)/) { my %moreenv; $moreenv{'form.grade_target'}='tex'; &Apache::lonnet::appenv(%moreenv); my $texversion=&Apache::lonnet::ssi($urlp); &Apache::lonnet::delenv('form.grade_target'); $result .= $texversion; } } $result = &additional_cleanup($result); } elsif ($choice eq 'Subdirectory print') { my $subdirtoprint = &Apache::lonnet::filelocation("",$ENV{'form.url'}); $subdirtoprint =~ s/\/[^\/]+$//; my @list_of_files = (); my $localdirectory = $subdirtoprint; $localdirectory =~ s/.*(\/res\/)/$1/; my @content_directory = &Apache::lonnet::dirlist($localdirectory); for (my $iy=0;$iy<=$#content_directory;$iy++) { my @tempo_array = split(/&/,$content_directory[$iy]); $content_directory[$iy] = $tempo_array[0]; if ($content_directory[$iy] =~ m/^[^\.]+\.problem$/) { push @list_of_files,$content_directory[$iy]; } } $localdirectory =~ s/\/$//; for (my $i=0;$i<=$#list_of_files;$i++) { my $urlp = $localdirectory.'/'.$list_of_files[$i]; my %moreenv; $moreenv{'form.grade_target'}='tex'; &Apache::lonnet::appenv(%moreenv); my $texversion=&Apache::lonnet::ssi($urlp); &Apache::lonnet::delenv('form.grade_target'); $texversion =~ s/(\\begin{document})/$1 {\\tiny\\begin{verbatim}$urlp\\end{verbatim}}/; $result .= $texversion; } $result = &additional_cleanup($result); } #-- corrections for page layout $result =~ s/&\s*REMOVE\\\\/\\\\/g; $_ = $result; m/\\end{document}(\d*)$/; my $insert = '{'; for (my $id=1;$id<=$1;$id++) { $insert .='l'; } $insert .= '}'; $result =~ s/(\\begin{tabular})INSERT/$1$insert/g; #-- corrections for the different page formats if ($layout eq 'CBI') { $result =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{-40pt}\\setlength{\\evensidemargin}{-60pt}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{4\.4in}\\setlength{\\textheight}{6\.8in}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt} \\begin{document}/; $laystyle = 'album'; } elsif ($layout eq 'CAPA') { my $courseidinfo = $ENV{'request.role'}; $_ = $courseidinfo; m/.*\/(.*)/; $courseidinfo = $ENV{'course.physnet_'.$1.'.description'}; $result =~ s/\\documentclass\[letterpaper\]{article}/\\documentclass\[twocolumn\]{article}/; $result =~ s/\\begin{document}/\\textheight 25\.9cm\\oddsidemargin = -0\.57in\\evensidemargin = -0\.57in\\textwidth= 7\.7in\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/2-0\.2in}\\renewcommand{\\ref}{\\keephidden\}\\begin{document}\\voffset=-1\.8cm\\setcounter{page}{1}\\noindent\\fbox{\\textbf{$ENV{'environment.firstname'} $ENV{'environment.lastname'}}}\\hskip 1\.4in $courseidinfo \\vskip 5 mm /; $result =~ s/\\includegraphics{/\\includegraphics\[width=9\.0 cm\]{/g; $result =~ s/(\\end{document})/\\newline\\noindent\\makebox\[9.0cm\]\[b\]{\\hrulefill}\\newline\\noindent\\tiny Dept\. of Physics and Astronomy, MSU\\makebox\[1.5cm\]\[b\]{\\hfill}LON-CAPA\\copyright MSU GNU\/GPL $1/; } #-- LaTeX corrections my $first_comment = index($result,'',$first_comment); substr($result,$first_comment,$end_comment-$first_comment+3) = ''; $first_comment = index($result,'