--- loncom/interface/lonprintout.pm 2003/04/21 17:53:10 1.130
+++ loncom/interface/lonprintout.pm 2003/04/30 19:18:37 1.135
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.130 2003/04/21 17:53:10 sakharuk Exp $
+# $Id: lonprintout.pm,v 1.135 2003/04/30 19:18:37 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -100,11 +100,6 @@ ENDMENUOUT1
Problem(s) plus page(s) or html/xml file(s) from $title_for_sequence
ENDMENUOUT2
}
- if ($ENV{'request.role.adv'}) {
- $r->print(< Problem(s) from $title_for_sequence with answers
-ENDMENUOUT27
- }
if (($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) and ($ENV{'form.postdata'}=~/\/res\//)) {
$r->print(< All problems in this course (warning: this may be time consuming)
@@ -509,8 +504,7 @@ ENDPART
$result.=' \end{document}'
}
} elsif ($choice eq 'Standard LaTeX output for the primary sequence' or
- $choice eq 'Standard LaTeX output for whole primary sequence' or
- $choice eq 'Standard LaTeX output for the primary sequence with answers') {
+ $choice eq 'Standard LaTeX output for whole primary sequence') {
#-- minimal sequence to which the current document belongs
#-- where is the primary sequence containing file?
my @master_seq = ();
@@ -532,11 +526,10 @@ ENDPART
my %moreenv;
$moreenv{'form.grade_target'}='tex';
$moreenv{'form.textwidth'}=$LaTeXwidth;
- if ($choice eq 'Standard LaTeX output for the primary sequence with answers') {$moreenv{'form.texaward'}='SHOW_ANSWER';}
&Apache::lonnet::appenv(%moreenv);
#&Apache::lonnet::logthis("Trying to get $urlp with symb $symb");
my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb));
- &Apache::lonnet::delenv('form.grade_target','form.textwidth','form.texaward');
+ &Apache::lonnet::delenv('form.grade_target','form.textwidth');
if ($urlp =~ m/\.page/) {
($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;}
@@ -917,7 +910,7 @@ sub character_chart {
$result =~ s/&\#153;/\\texttrademark /g;
$result =~ s/&\#156;/\\oe/g;
$result =~ s/&\#159;/\\\"Y/g;
- $result =~ s/&(\#160|nbsp);?//g;
+ $result =~ s/&(\#160|nbsp);//g;
$result =~ s/&(\#161|iexcl);/!\`/g;
$result =~ s/&(\#162|cent);/\\textcent /g;
$result =~ s/&(\#163|pound);/\\pounds /g;
@@ -1228,19 +1221,23 @@ sub latex_corrections {
sub handler {
my $r = shift;
+ my $helper;
# A hook for me to work without disturbing Alex.
- if ($ENV{'form.jeremy'}) {
- printWizard($r);
- return OK;
+ if (!$ENV{'form.jeremy'}) {
+ my $result = printHelper($r);
+ if (!ref($result)) {
+ return $result;
+ }
+ $helper = $result;
}
-# my $loaderror=&Apache::lonnet::overloaderror($r);
-# if ($loaderror) { return $loaderror; }
-# $loaderror=
-# &Apache::lonnet::overloaderror($r,
-# $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
-# if ($loaderror) { return $loaderror; }
+ my $loaderror=&Apache::lonnet::overloaderror($r);
+ if ($loaderror) { return $loaderror; }
+ $loaderror=
+ &Apache::lonnet::overloaderror($r,
+ $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
+ if ($loaderror) { return $loaderror; }
$r->content_type('text/html');
$r->send_http_header;
@@ -1263,8 +1260,6 @@ sub handler {
&sequence_content_menu(0,$r);
} elsif($ENV{'form.choice'} eq 'Standard LaTeX output for the primary sequence') {
&sequence_content_menu(1,$r);
- } elsif($ENV{'form.choice'} eq 'Standard LaTeX output for the primary sequence with answers') {
- &sequence_content_menu(1,$r);
} elsif($ENV{'form.choice'} eq 'All class print') {
&additional_class_menu($r);
} elsif($ENV{'form.choice'} eq 'Subdirectory print') {
@@ -1290,423 +1285,196 @@ sub handler {
}
-sub new_output_data {
- my $r = shift;
- $r->print(<
-
-LON-CAPA output for printing
-
-
-
-ENDPART
-
- my $choice = $ENV{'form.PRINT_TYPE'};
- my $layout = $ENV{'form.FORMAT.layout'};
- my $numberofcolumns = $ENV{'form.FORMAT.cols'};
- my $papersize = $ENV{'form.FORMAT.paper'};
- my $laystyle = 'book';
- my $assignment = $ENV{'form.assignment'};
- if ($choice eq 'Subdirectory print') {
- if ($ENV{'form.layout'} eq '') {$layout = 'CAPA';}
- if ($ENV{'form.papersize'} eq '') {$papersize = 'Letter [8 1/2x11 in]';}
- if ($ENV{'form.numberofcolumns'} eq '') {$numberofcolumns = 2;}
- }
- if (($choice eq 'current_document') && ($ENV{'form.url'}=~m|^/~|)) {
- if ($ENV{'form.FORMAT.layout'} eq '') {$layout = 'CAPA';}
- if ($ENV{'form.FORMAT.paper'} eq '') {$papersize = 'Letter [8 1/2x11 in]';}
- if ($ENV{'form.FORMAT.cols'} eq '') {$numberofcolumns = 2;}
- }
- my $result = '';
- my $number_of_columns = 1; #used only for pages to determine the width of the cell
- my $selectionmade = '';
- my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$layout,$numberofcolumns);
- if ($numberofcolumns == 1) {
- $textwidth=$ENV{'form.width'};
- $textheight=$ENV{'form.height'};
- }
- my $LaTeXwidth;
- if ($textwidth=~/(\d+\s*cm)/) {
- $LaTeXwidth = $1*10;
- } elsif ($textwidth=~/(\d+\s*mm)/) {
- $LaTeXwidth = $1;
- }
- if ($choice eq 'current_document') {
- #-- single document - problem, page, html, xml, ...
- $selectionmade = 1;
- if ($ENV{'form.url'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
- my %moreenv;
- $moreenv{'form.grade_target'}='tex';
- if (&Apache::lonnet::allowed('bre',$ENV{'form.url'})) {
- $ENV{'form.url'}=~s/http:\/\/[^\/]+//;
- }
- $moreenv{'request.filename'}=$ENV{'form.url'};
- $moreenv{'form.textwidth'}=$LaTeXwidth;
- &Apache::lonnet::appenv(%moreenv);
- my $texversion=&Apache::lonnet::ssi($ENV{'form.url'});
- &Apache::lonnet::delenv('form.grade_target','form.textwidth','form.counter');
- $result .= $texversion;
- if ($ENV{'form.url'}=~m/\.page\s*$/) {
- ($result,$number_of_columns) = &page_cleanup($result);
- }
- } else {
- $result='\documentclass[letterpaper]{article}\usepackage{calc}\begin{document}Printout of this type of document is currently not supported: ';
- if ($ENV{'form.url'}=~/\/(aboutme|syllabus|bulletinboard|smppg)$/) {
- $result.=$1;
- } else {
- $result.=$ENV{'form.url'};
- }
- $result.=' \end{document}'
- }
- } elsif ($choice eq 'Standard LaTeX output for the primary sequence' or
- $choice eq 'Standard LaTeX output for whole primary sequence') {
- #-- minimal sequence to which the current document belongs
- #-- where is the primary sequence containing file?
- my @master_seq = ();
- for (my $i=0; $i<$ENV{'form.numberoffiles'};$i++) {
- if ($ENV{'form.whatfile'.$i}=~/\S/) {
- push @master_seq,$ENV{'form.whatfile'.$i};
- }
- }
- #-- produce an output string
- my $flag_latex_header_remove = 'NO';
- my $flag_page_in_sequence = 'NO';
- for (my $i=0;$i<=$#master_seq;$i++) {
- my ($urlp,$symb) = split /&&/, $master_seq[$i];
- if ($choice eq 'Standard LaTeX output for the primary sequence') {
- $selectionmade = 2;
- } elsif ($choice eq 'Standard LaTeX output for whole primary sequence') {
- $selectionmade = 3;
- }
- my %moreenv;
- $moreenv{'form.grade_target'}='tex';
- $moreenv{'form.textwidth'}=$LaTeXwidth;
- &Apache::lonnet::appenv(%moreenv);
- #&Apache::lonnet::logthis("Trying to get $urlp with symb $symb");
- my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb));
- &Apache::lonnet::delenv('form.grade_target','form.textwidth');
- if ($urlp =~ m/\.page/) {
- ($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
- if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;}
- $texversion =~ s/\\end{document}\d*/\\end{document}/;
- $flag_page_in_sequence = 'YES';
- }
- if ($flag_latex_header_remove ne 'NO') {
- $texversion = &latex_header_footer_remove($texversion);
- } else {
- $texversion =~ s/\\end{document}//;
- }
- $result .= $texversion;
- $flag_latex_header_remove = 'YES';
- }
- &Apache::lonnet::delenv('form.counter');
- if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;}
- $result .= '\end{document}';
- } elsif ($choice eq 'Standard LaTeX output for the top level sequence') {
- # where is the main sequence of the course?
- $selectionmade = 4;
- my $main_seq=&Apache::lonnet::clutter($ENV{'request.course.uri'});
- my @file_seq = &coming_from_hash($main_seq);
- for (my $i=0;$i<=$#file_seq;$i++) {
- my ($path,$title,$symb) = split /&&/,$file_seq[$i];
- $file_seq[$i] = $path.'&&'.$symb;
- }
- my $flag_latex_header_remove = 'NO';
- #-- produce an output string
- for (my $i=0;$i<=$#file_seq;$i++) {
- if (not $file_seq[$i]=~/^&&/) {
- my ($urlp,$symb) = split /&&/, $file_seq[$i];
- $urlp=~s/\/home\/httpd\/html//;
- if ($urlp=~m/\.(problem|exam|quiz|assess|survey|form|library)/) {
- my %moreenv;
- $moreenv{'form.grade_target'}='tex';
- $moreenv{'form.textwidth'}=$LaTeXwidth;
- &Apache::lonnet::appenv(%moreenv);
- my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb));
- &Apache::lonnet::delenv('form.grade_target','form.textwidth');
- if ($flag_latex_header_remove ne 'NO') {
- $texversion = &latex_header_footer_remove($texversion);
- } else {
- $texversion =~ s/\\end{document}//;
- }
- $result .= $texversion;
- $flag_latex_header_remove = 'YES';
- }
- }
- }
- $result .= '\end{document}';
- } elsif ($choice eq 'All class print') {
- #-- prints assignments for whole class or for selected students
- $selectionmade = 5;
- my @students = ();
- for (my $i=0; $i<$ENV{'form.numberofstudents'};$i++) {
- if ($ENV{'form.whomtoprint'.$i}=~/:/) {
- push @students,$ENV{'form.whomtoprint'.$i};
- }
- }
- #where is the primary sequence containing current resource (the same for all students)?
- my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});
- my @sequence = split('___',$symbolic);
- my $primary_sequence;
-
- $primary_sequence=&Apache::lonnet::clutter($sequence[0]);
- my @master_seq = &coming_from_hash($primary_sequence);
- for (my $i=0;$i<=$#master_seq;$i++) {
- my ($path,$title,$symb) = split /&&/,$master_seq[$i];
- $master_seq[$i] = $path.'&&'.$symb;
- }
- #loop over students
- my $flag_latex_header_remove = 'NO';
- my %moreenv;
- $moreenv{'form.textwidth'}=$LaTeXwidth;
- &Apache::lonnet::appenv(%moreenv);
- my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1);
- foreach my $person (@students) {
- my $current_output = '';
- my ($usersection,$username,$userdomain) = split /:/,$person;
- my $fullname = &get_name($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;
- if ($curres=~ m/\.(problem|exam|quiz|assess|survey|form|library)/) {
- my ($map,$id,$res_url) = split(/___/,$symb);
- if (&Apache::lonnet::allowed('bre',$res_url)) {
- my $rendered = &Apache::loncommon::get_student_view($symb,$username,$userdomain,
- $ENV{'request.course.id'},'tex');
- if ($flag_latex_header_remove eq 'YES') {
- $rendered = &latex_header_footer_remove($rendered);
- } else {
- $rendered =~ s/\\end{document}//;
- }
- $current_output .= $rendered;
- }
- $flag_latex_header_remove = 'YES';
- }
- }
- my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
- if ($current_output=~/\\documentclass/) {
- $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 }\\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::lonxml::init_counter();
- &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
- 'last student '.$fullname);
- }
- &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
- $result .= '\end{document}';
- &Apache::lonnet::delenv('form.textwidth');
- } elsif ($choice eq 'Subdirectory print') {
- #prints selected problems from the subdirectory
- $selectionmade = 6;
- my @list_of_files = ();
- for (my $i=0; $i<$ENV{'form.numberofproblems'};$i++) {
- if ($ENV{'form.whattoprint'.$i}=~/^\//) {
- push @list_of_files,$ENV{'form.whattoprint'.$i};
- }
- }
- my $flag_latex_header_remove = 'NO';
- for (my $i=0;$i<=$#list_of_files;$i++) {
- my $urlp = $list_of_files[$i];
- if ($urlp=~/\//) {
- my %moreenv;
- $moreenv{'form.grade_target'}='tex';
- $moreenv{'form.textwidth'}=$LaTeXwidth;
- &Apache::lonnet::appenv(%moreenv);
- if ($urlp =~ m|/home/([^/]+)/public_html|) {
- $urlp =~ s|/home/([^/]*)/public_html|/~$1|;
- } else {
- $urlp =~ s|^/home/httpd/html||;
- }
- my $texversion=&Apache::lonnet::ssi($urlp);
- &Apache::lonnet::delenv('form.grade_target','form.textwidth');
- #this chunck is responsible for printing the path to problem
- my $newurlp = '';
- my $HowMany = length($urlp)*2;
- if ($HowMany > $LaTeXwidth) {
- my @temporrary = split '/',$urlp;
- my $HowManyNew = 0;
- for (my $ii=0;$ii<=$#temporrary;$ii++) {
- if ($temporrary[$ii] ne '') {
- $HowManyNew += length($temporrary[$ii])*2;
- if ($HowManyNew < $LaTeXwidth ) {
- $newurlp .= '/'.$temporrary[$ii];
- } else {
- $HowManyNew = 0;
- $newurlp .= '|\vskip -1 mm \noindent \verb|';
- $ii--;
- }
- }
- }
- }
- $texversion =~ s/(\\begin{minipage}{\\textwidth})/$1 {\\small\\noindent\\verb|$newurlp\|\\vskip 0 mm}/;
- if ($flag_latex_header_remove ne 'NO') {
- $texversion = &latex_header_footer_remove($texversion);
- } else {
- $texversion =~ s/\\end{document}//;
- }
- $result .= $texversion;
- }
- $flag_latex_header_remove = 'YES';
- }
- $result .= '\end{document}';
- }
-#-------------------------------------------------------- corrections for the different page formats
- $result = &page_format_transformation($papersize,$layout,$numberofcolumns,$choice,$result,$assignment);
- if ($layout eq 'CBI') {
- $laystyle = 'album';
- }
- $result = &latex_corrections($number_of_columns,$result);
- #changes page's parameters for the one column output
- if ($ENV{'form.numberofcolumns'} == 1) {
- $result =~ s/\\textwidth= 9cm/\\textwidth= $ENV{'form.width'}/;
- $result =~ s/\\textheight 25\.9cm/\\textheight $ENV{'form.height'}/;
- $result =~ s/\\evensidemargin = -0\.57in/\\evensidemargin= $ENV{'form.leftmargin'}/;
- $result =~ s/\\oddsidemargin = -0\.57in/\\oddsidemargin= $ENV{'form.leftmargin'}/;
- }
-#-- writing .tex file in prtspool
- my $temp_file;
- my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout_".time."_".rand(10000000).".tex";
- unless ($temp_file = Apache::File->new('>'.$filename)) {
- $r->log_error("Couldn't open $filename for output $!");
- return SERVER_ERROR;
- }
- print $temp_file $result;
-$r->print(<
-
-