--- loncom/interface/lonprintout.pm 2004/05/10 14:25:02 1.301
+++ loncom/interface/lonprintout.pm 2005/01/04 09:53:11 1.346
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.301 2004/05/10 14:25:02 sakharuk Exp $
+# $Id: lonprintout.pm,v 1.346 2005/01/04 09:53:11 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -41,13 +41,68 @@ use Apache::lonnavmaps;
use Apache::lonratedt;
use POSIX qw(strftime);
use Apache::lonlocal;
-use GDBM_File;
-
-my %hash;
my $LaTeXwidth = 0;
+# Compare two students by name. The students are in the form
+# returned by the helper:
+# user:domain:section:last, first:status
+# This is a helper function for the perl sort built-in therefore:
+# Implicit Inputs:
+# $a - The first element to compare (global)
+# $b - The second element to compare (global)
+# Returns:
+# -1 - $a < $b
+# 0 - $a == $b
+# +1 - $a > $b
+# Note that the initial comparison is done on the last names with the
+# first names only used to break the tie.
+#
+#
+sub compare_names {
+ # First split the names up into the primary fields.
+
+ my ($u1, $d1, $s1, $n1, $stat1) = split(/:/, $a);
+ my ($u2, $d2, $s2, $n2, $stat2) = split(/:/, $b);
+
+ # Now split the last name and first name of each n:
+ #
+
+ my ($l1,$f1) = split(/,/, $n1);
+ my ($l2,$f2) = split(/,/, $n2);
+
+ # We don't bother to remove the leading/trailing whitespace from the
+ # firstname, unless the last names compare identical.
+
+ if($l1 lt $l2) {
+ return -1;
+ }
+ if($l1 gt $l2) {
+ return 1;
+ }
+
+ # Break the tie on the first name, but there are leading (possibly trailing
+ # whitespaces to get rid of first
+ #
+ $f1 =~ s/^\s+//; # Remove leading...
+ $f1 =~ s/\s+$//; # Trailing spaces from first 1...
+
+ $f2 =~ s/^\s+//;
+ $f2 =~ s/\s+$//; # And the same for first 2...
+
+ if($f1 lt $f2) {
+ return -1;
+ }
+ if($f1 gt $f2) {
+ return 1;
+ }
+
+ # Must be the same name.
+
+ return 0;
+}
+
sub latex_header_footer_remove {
my $text = shift;
$text =~ s/\\end{document}//;
@@ -229,7 +284,7 @@ sub character_chart {
$result =~ s/&(\#219|Ucirc);/\\^{U}/g;
$result =~ s/&(\#220|Uuml);/\\\"{U}/g;
$result =~ s/&(\#221|Yacute);/\\\'{Y}/g;
- $result =~ s/&(\#223|szlig);/\\ss/g;
+ $result =~ s/&(\#223|szlig);/{\\ss}/g;
$result =~ s/&(\#224|agrave);/\\\`{a}/g;
$result =~ s/&(\#225|aacute);/\\\'{a}/g;
$result =~ s/&(\#226|acirc);/\\^{a}/g;
@@ -373,83 +428,110 @@ sub character_chart {
}
+ #width, height, oddsidemargin, evensidemargin, topmargin
+my %page_formats=
+ ('letter' => {
+ 'book' => {
+ '1' => [ '7.1 in','10.2 in', '-0.57 in','-0.57 in','1 cm'],
+ '2' => ['3.66 in','10.2 in', '-0.57 in','-0.57 in','1 cm']
+ },
+ 'album' => {
+ '1' => [ '8.8 in', '6.8 in','-40 pt in', '-60 pt','1 cm'],
+ '2' => [ '4.4 in', '6.8 in','-0.5 in', '-1.5 in','3.5 in']
+ },
+ },
+ 'legal' => {
+ 'book' => {
+ '1' => ['7.1 in','13 in',,'-0.57 in','-0.57 in','-0.5 in'],
+ '2' => ['3.16 in','13 in','-0.57 in','-0.57 in','-0.5 in']
+ },
+ 'album' => {
+ '1' => [],
+ '2' => []
+ },
+ },
+ 'tabloid' => {
+ 'book' => {
+ '1' => ['9.8 in','16 in','-0.57 in','-0.57 in','-0.5 in'],
+ '2' => ['4.9 in','16 in','-0.57 in','-0.57 in','-0.5 in']
+ },
+ 'album' => {
+ '1' => [],
+ '2' => []
+ },
+ },
+ 'executive' => {
+ 'book' => {
+ '1' => ['6.8 in','9 in','-0.57 in','-0.57 in','1.2 in'],
+ '2' => ['3.1 in','9 in','-0.57 in','-0.57 in','1.2 in']
+ },
+ 'album' => {
+ '1' => [],
+ '2' => []
+ },
+ },
+ 'a2' => {
+ 'book' => {
+ '1' => [],
+ '2' => []
+ },
+ 'album' => {
+ '1' => [],
+ '2' => []
+ },
+ },
+ 'a3' => {
+ 'book' => {
+ '1' => [],
+ '2' => []
+ },
+ 'album' => {
+ '1' => [],
+ '2' => []
+ },
+ },
+ 'a4' => {
+ 'book' => {
+ '1' => ['176 mm','272 mm','-40 pt in','-60 pt','-0.5 in'],
+ '2' => [ '91 mm','272 mm','-40 pt in','-60 pt','-0.5 in']
+ },
+ 'album' => {
+ '1' => ['8.5 in','7.7 in','-40 pt in','-60 pt','0 in'],
+ '2' => ['3.9 in','7.7 in','-40 pt in','-60 pt','0 in']
+ },
+ },
+ 'a5' => {
+ 'book' => {
+ '1' => [],
+ '2' => []
+ },
+ 'album' => {
+ '1' => [],
+ '2' => []
+ },
+ },
+ 'a6' => {
+ 'book' => {
+ '1' => [],
+ '2' => []
+ },
+ 'album' => {
+ '1' => [],
+ '2' => []
+ },
+ },
+ );
+
sub page_format {
#
-#Correspondence between $papersize variable and real paper format:
-# 0 - "Letter [8 1/2x11 in]"
-# 1 - "Legal [8 1/2x14 in]"
-# 2 - "Ledger/Tabloid [11x17 in]"
-# 3 - "Executive [7 1/2x10 in]"
-# 4 - "A2 [420x594 mm]"
-# 5 - "A3 [297x420 mm]"
-# 6 - "A4 [210x297 mm]"
-# 7 - "A5 [148x210 mm]"
-# 8 - "A6 [105x148 mm]"
+#Supported paper format: "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]"
#
my ($papersize,$layout,$numberofcolumns) = @_;
- my ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = (0,0,0,0,0);
- if ($papersize eq '0') {
- if ($layout eq 'book') {
- if ($numberofcolumns == 1) {
- $textwidth = '7.1 in'; #'18 cm';
- $textheight = '10.2 in'; #'25.9 cm';
- $oddoffset = '-0.57 in';
- $evenoffset = '-0.57 in';
- } elsif ($numberofcolumns == 2) {
- $textwidth = '3.66 in'; #'93 mm';
- $textheight = '10.2 in'; #'25.9 cm';
- $oddoffset = '-0.57 in';
- $evenoffset = '-0.57 in';
- }
- } elsif ($layout eq 'album') {
- if ($numberofcolumns eq '1') {
- $textwidth = '8.8 in';
- $textheight = '6.8 in';
- $oddoffset = '-40 pt';
- $evenoffset = '-60 pt';
- } elsif ($numberofcolumns == 2) {
- $textwidth = '4.4 in';
- $textheight = '6.8 in';
- $oddoffset = '-0.5 in';
- $evenoffset = '-1.5 in';
- $topmargin = '3.5 in';
- }
- }
-# } elsif($papersize eq '1') {
-# } elsif($papersize eq '2') {
-# } elsif($papersize eq '3'/) {
- } elsif($papersize eq '6') {
- if ($layout eq 'book') {
- if ($numberofcolumns == 1) {
- $textwidth = '18 cm';
- $textheight = '28 cm';
- $oddoffset = '-0.57 in';
- $evenoffset = '-0.57 in';
- } elsif ($numberofcolumns == 2) {
- $textwidth = '96 mm';
- $textheight = '2 cm';
- $oddoffset = '-0.57 in';
- $evenoffset = '-0.57 in';
- }
- } elsif ($layout eq 'album') {
- if ($numberofcolumns eq '1') {
- $textwidth = '8.5 in';
- $textheight = '7.7 in';
- $oddoffset = '-40 pt';
- $evenoffset = '-60 pt';
- } elsif ($numberofcolumns == 2) {
- $textwidth = '3.9 in';
- $textheight = '7.7 in';
- $oddoffset = '-40 pt';
- $evenoffset = '-60 pt';
- }
- }
-# } elsif($papersize eq '5') {
-# } elsif($papersize eq '4') {
-# } elsif($papersize eq '7') {
-# } elsif($papersize eq '8') {
- }
- return $textwidth,$textheight,$oddoffset,$evenoffset,$topmargin;
+ return @{$page_formats{$papersize}->{$layout}->{$numberofcolumns}};
}
@@ -472,22 +554,35 @@ sub get_course {
}
sub page_format_transformation {
- my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment,$tableofcontents,$indexlist) = @_;
+ my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment,$tableofcontents,$indexlist,$selectionmade) = @_;
my ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin);
- $assignment=&Apache::lonxml::latex_special_symbols($assignment,'header');
+ if ($selectionmade eq '4') {
+ $assignment='Problems from the Whole Course';
+ } else {
+ $assignment=&Apache::lonxml::latex_special_symbols($assignment,'header');
+ }
($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = &page_format($papersize,$layout,$numberofcolumns,$topmargin);
my $name = &get_name();
my $courseidinfo = &get_course();
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
+ my $topmargintoinsert = '';
+ if ($topmargin ne '0') {$topmargintoinsert='\setlength{\topmargin}{'.$topmargin.'}';}
+ my $fancypagestatement='';
+ if ($numberofcolumns eq '2') {
+ $fancypagestatement="\\fancyhead{}\\fancyhead[LO]{\\textbf{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}";
+ } else {
+ $fancypagestatement="\\rhead{}\\chead{}\\lhead{\\textbf{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}";
+ }
if ($layout eq 'album') {
- my $topmargintoinsert = '';
- if ($topmargin ne '0') {$topmargintoinsert='\setlength{\topmargin}{'.$topmargin.'}';}
- $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{}\\lhead{\\textbf{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}} \\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1} /;
+ $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /;
} elsif ($layout eq 'book') {
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{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/;
+ $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/;
} else {
- $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 /;
+ $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\n\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\n\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1} \\vskip 5 mm\n /;
+ }
+ if ($papersize eq 'a4') {
+ $text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/;
}
}
if ($tableofcontents eq 'yes') {$text=~s/(\\setcounter\{page\}\{1\})/$1 \\tableofcontents\\newpage /;}
@@ -514,9 +609,11 @@ sub page_cleanup {
sub details_for_menu {
-
- my $name_of_resourse = &Apache::lonnet::gettitle($ENV{'form.postdata'});
- my $symbolic = &Apache::lonnet::symbread($ENV{'form.postdata'});
+ my ($helper)=@_;
+ my $postdata=$ENV{'form.postdata'};
+ if (!$postdata) { $postdata=$helper->{VARS}{'postdata'}; }
+ my $name_of_resource = &Apache::lonnet::gettitle($postdata);
+ my $symbolic = &Apache::lonnet::symbread($postdata);
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($symbolic);
$map=&Apache::lonnet::clutter($map);
my $name_of_sequence = &Apache::lonnet::gettitle($map);
@@ -529,18 +626,21 @@ sub details_for_menu {
$ENV{'request.course.uri'} =~ m|([^/]+)$|;
$name_of_map = $1;
}
- return ($name_of_resourse,$name_of_sequence,$name_of_map);
-
+ return ($name_of_resource,$name_of_sequence,$name_of_map);
}
sub latex_corrections {
- my ($number_of_columns,$result) = @_;
+ my ($number_of_columns,$result,$selectionmade) = @_;
# $result =~ s/\\includegraphics{/\\includegraphics\[width=\\minipagewidth\]{/g;
$result =~ s/\$number_of_columns/$number_of_columns/g;
- $result =~ s/(\\end{document})/\\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 $1/;
+ if ($selectionmade ne '1') {
+ $result =~ s/(\\end{document})/\\strut\\vspace\*{-4 mm}\\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 $1/;
+ } else {
+ $result =~ s/(\\end{document})/\\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 $1/;
+ }
$result =~ s/(\\end{longtable}\s*)(\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]{\\hrulefill})/$2$1/g;
$result =~ s/(\\end{longtable}\s*)\\strut\\newline/$1/g;
#-- LaTeX corrections
@@ -555,8 +655,7 @@ sub latex_corrections {
$result =~ s/\\\\\s*\\vskip/\\vskip/gm;
$result =~ s/\\\\\s*\\noindent\s*(\\\\)+/\\\\\\noindent /g;
$result =~ s/{\\par }\s*\\\\/\\\\/gm;
- $result =~ s/\\\\\s+\[/ \[/g;
- $result =~ s/\b__+\b/\\makebox\[1 cm\]\[b\]{\\hrulefill}/g;
+ $result =~ s/\\\\\s+\[/ \[/g;
#conversion of html characters to LaTeX equivalents
if ($result =~ m/&(\w+|#\d+);/) {
$result = &character_chart($result);
@@ -602,44 +701,42 @@ sub print_latex_header {
if ($mode eq 'batchmode') {
$output.='\batchmode';
}
- $output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'.
- '\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'.
- '\usepackage[dvips]{graphicx}\usepackage{epsfig}\usepackage{calc}'.
- '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'.
- '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'.
- '\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}'.
- '\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}'.
- '\setlength{\abovedisplayshortskip}{-0.04in}'.
- '\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'.
- '\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large'.
- '\textbf{Index}} \newline \setlength{\rightmargin}{0in}'.
- '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}'.
- '\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}'.
- '\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}'.
- '\setlength{\abovedisplayshortskip}{-0.04in}'.
- '\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}\begin{document}';
+ $output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n".
+ '\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n".
+ '\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n".
+ '\usepackage{picins}\usepackage{calc}'."\n".
+ '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n".
+ '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n".
+ '\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}'."\n".
+ '\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}'."\n".
+ '\setlength{\abovedisplayshortskip}{-0.04in}'."\n".
+ '\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'."\n".
+ '\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large'."\n".
+ '\textbf{Index}} \newline \setlength{\rightmargin}{0in}'."\n".
+ '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}'."\n".
+ '\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}'."\n".
+ '\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}'."\n".
+ '\setlength{\abovedisplayshortskip}{-0.04in}'."\n".
+ '\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}\begin{document}'."\n";
return $output;
}
sub path_to_problem {
- my ($urlp,$LaTeXwidth)=@_;
+ my ($urlp,$colwidth)=@_;
my $newurlp = '';
- $LaTeXwidth=~s/\s*mm\s*$//;
- 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--;
- }
+ $colwidth=~s/\s*mm\s*$//;
+#characters average about 2 mm in width
+ if (length($urlp)*2 > $LaTeXwidth) {
+ my @elements = split '/',$urlp;
+ my $curlength=0;
+ foreach my $element (@elements) {
+ if ($curlength+(length($element)*2) > $colwidth) {
+ $newurlp .= '|\vskip -1 mm \noindent \verb|';
+ $curlength=0;
+ } else {
+ $curlength+=length($element)*2;
}
+ $newurlp.='/'.$element;
}
} else {
$newurlp=$urlp;
@@ -650,11 +747,11 @@ sub path_to_problem {
sub recalcto_mm {
my $textwidth=shift;
my $LaTeXwidth;
- if ($textwidth=~/(\d+\.?\d*)\s*cm/) {
+ if ($textwidth=~/(-?\d+\.?\d*)\s*cm/) {
$LaTeXwidth = $1*10;
- } elsif ($textwidth=~/(\d+\.?\d*)\s*mm/) {
+ } elsif ($textwidth=~/(-?\d+\.?\d*)\s*mm/) {
$LaTeXwidth = $1;
- } elsif ($textwidth=~/(\d+\.?\d*)\s*in/) {
+ } elsif ($textwidth=~/(-?\d+\.?\d*)\s*in/) {
$LaTeXwidth = $1*25.4;
}
$LaTeXwidth.=' mm';
@@ -674,8 +771,9 @@ sub get_textwidth {
sub unsupported {
- my $currentURL=shift;
- my $result.='\documentclass[letterpaper]{article}\usepackage{calc}\begin{document}Printout of this type of document is currently not supported: ';
+ my ($currentURL,$mode)=@_;
+ if ($mode ne '') {$mode='\\'.$mode}
+ my $result.= &print_latex_header($mode);
if ($currentURL=~/\/ext\//) {
$result.=' \strut \\\\ THIS IS EXTERNAL RESOURCE WITH URL \strut \\\\ '.$currentURL.' ';
} else {
@@ -741,22 +839,24 @@ ENDPART
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') {
#-- single document - problem, page, html, xml, ...
- my $currentURL;
+ my ($currentURL,$cleanURL);
if ($helper->{'VARS'}->{'construction'} ne '1') {
#prints published resource
$currentURL=$helper->{'VARS'}->{'postdata'};
+ $cleanURL=&Apache::lonenc::check_decrypt($currentURL);
} else {
#prints resource from the construction space
$currentURL='/'.$helper->{'VARS'}->{'filename'};
if ($currentURL=~/([^?]+)/) {$currentURL=$1;}
+ $cleanURL=$currentURL;
}
$selectionmade = 1;
- if ($currentURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
+ if ($cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
my $rndseed=time;
my $texversion='';
if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') {
my %moreenv;
- $moreenv{'request.filename'}=$currentURL;
+ $moreenv{'request.filename'}=$cleanURL;
if ($helper->{'VARS'}->{'style_file'}=~/\w/) {
$moreenv{'construct.style'}=$helper->{'VARS'}->{'style_file'};
my $dom = $ENV{'user.domain'};
@@ -768,7 +868,10 @@ ENDPART
$form{'grade_target'}='tex';
$form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
$form{'problem_split'}=$parmhash{'problem_stream_switch'};
+ $form{'suppress_tries'}=$parmhash{'suppress_tries'};
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
+ $form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'};
+ if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$form{'problem_split'}='yes';}
if ($helper->{'VARS'}->{'curseed'}) {
$rndseed=$helper->{'VARS'}->{'curseed'};
}
@@ -793,10 +896,10 @@ ENDPART
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
if ($helper->{'VARS'}->{'construction'} ne '1') {
$texversion.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'}).'}\vskip 0 mm ';
- $texversion.=&path_to_problem ($currentURL,$LaTeXwidth);
+ $texversion.=&path_to_problem($cleanURL,$LaTeXwidth);
} else {
$texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm ';
- my $URLpath=$currentURL;
+ my $URLpath=$cleanURL;
$URLpath=~s/~([^\/]+)/public_html\/$1\/$1/;
$texversion.=&path_to_problem ($URLpath,$LaTeXwidth);
}
@@ -833,6 +936,7 @@ ENDPART
$form{'grade_target'}='tex';
$form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
$form{'problem_split'}=$parmhash{'problem_stream_switch'};
+ $form{'suppress_tries'}=$parmhash{'suppress_tries'};
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
$form{'rndseed'}=$rndseed;
$texversion=&Apache::lonnet::ssi($urlp,%form);
@@ -874,7 +978,7 @@ ENDPART
}
if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;}
$result .= '\end{document}';
- } elsif ($currentURL=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
+ } elsif ($cleanURL=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
my %form;
$form{'grade_target'}='tex';
$form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
@@ -883,7 +987,7 @@ ENDPART
my $texversion=&Apache::lonnet::ssi($currentURL,%form);
$result .= $texversion;
} else {
- $result.=&unsupported($currentURL);
+ $result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'});
}
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or
@@ -903,7 +1007,10 @@ ENDPART
$form{'grade_target'}='tex';
$form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
$form{'problem_split'}=$parmhash{'problem_stream_switch'};
+ $form{'suppress_tries'}=$parmhash{'suppress_tries'};
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
+ $form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'};
+ if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$form{'problem_split'}='yes';}
my $flag_latex_header_remove = 'NO';
my $flag_page_in_sequence = 'NO';
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
@@ -918,7 +1025,6 @@ ENDPART
my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #tittle of the assignment which contains this problem
if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;}
if ($i==0) {$prevassignment=$assignment;}
- #&Apache::lonnet::logthis("Trying to get $urlp with symb $master_seq[$i]");
my $texversion='';
if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
$texversion.=&Apache::lonnet::ssi($urlp,%form);
@@ -944,7 +1050,7 @@ ENDPART
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
} else {
- if ($urlp=~/\.(problem|exam|quiz|library)$/) {
+ if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
$texversion.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($urlp).'}\vskip 0 mm ';
$texversion.=&path_to_problem ($urlp,$LaTeXwidth);
@@ -967,7 +1073,7 @@ ENDPART
my $courseidinfo = &get_course();
if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
$prevassignment=$assignment;
- $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip -5 mm ';
+ $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip 5 mm ';
}
$result .= $texversion;
$flag_latex_header_remove = 'YES';
@@ -986,7 +1092,7 @@ ENDPART
$result .= $texversion;
$flag_latex_header_remove = 'YES';
} else {
- $texversion=&unsupported($urlp);
+ $texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'});
if ($flag_latex_header_remove ne 'NO') {
$texversion = &latex_header_footer_remove($texversion);
} else {
@@ -995,9 +1101,12 @@ ENDPART
$result .= $texversion;
$flag_latex_header_remove = 'YES';
}
+ if (&Apache::loncommon::connection_aborted($r)) { last; }
}
&Apache::lonnet::delenv('form.counter');
- if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;}
+ if ($flag_page_in_sequence eq 'YES') {
+ $result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;
+ }
$result .= '\end{document}';
} elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') ||
($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')){
@@ -1011,6 +1120,16 @@ ENDPART
$type='resources';
}
my @students=split /\|\|\|/, $helper->{'VARS'}->{'STUDENTS'};
+ # The normal sort order is by section then by students within the
+ # section. If the helper var student_sort is 1, then the user has elected
+ # to override this and output the students by name.
+ # Each element of the students array is of the form:
+ # username:domain:section:last, first:status
+ #
+ #
+ if ($helper->{'VARS'}->{'student_sort'} eq 1) {
+ @students = sort compare_names @students;
+ }
if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0' ||
$helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq 'all' ) {
$helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1;
@@ -1019,10 +1138,18 @@ ENDPART
#loop over students
my $flag_latex_header_remove = 'NO';
my %moreenv;
+ $moreenv{'instructor_comments'}='hide';
$moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
- my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1);
+ $moreenv{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'};
+ if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';}
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1,'inline','75');
my $student_counter=-1;
foreach my $person (@students) {
+ my $duefile="/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.due";
+ if (-e $duefile) {
+ my $temp_file = Apache::File->new('>>'.$duefile);
+ print $temp_file "1969\n";
+ }
$student_counter++;
my $i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'});
my ($output,$fullname)=&print_resources($r,$helper,$person,$type,\%moreenv,\@master_seq,$flag_latex_header_remove);
@@ -1030,6 +1157,7 @@ ENDPART
$student_names[$i].=$person.':'.$fullname.'_END_';
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname);
$flag_latex_header_remove = 'YES';
+ if (&Apache::loncommon::connection_aborted($r)) { last; }
}
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= $print_array[0].' \end{document}';
@@ -1040,20 +1168,13 @@ ENDPART
my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'};
my $code_name=$helper->{'VARS'}->{'ANON_CODE_STORAGE_NAME'};
my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'};
- my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
- my ($type) = split(/_/,$helper->{'VARS'}->{'PRINT_TYPE'});
- my $number_per_page=$helper->{'VARS'}->{'NUMBER_TO_PRINT'};
- if ($number_per_page eq '0' || $number_per_page eq 'all') {
- $number_per_page=$num_todo;
- }
- my $flag_latex_header_remove = 'NO';
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));
- my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline','75');
my $seed=time+($$<<16)+($$);
my @allcodes;
if ($old_name) {
my %result=&Apache::lonnet::get('CODEs',[$old_name],$cdom,$cnum);
@allcodes=split(',',$result{$old_name});
+ $num_todo=scalar(@allcodes);
} else {
my %allcodes;
srand($seed);
@@ -1067,6 +1188,14 @@ ENDPART
}
@allcodes=keys(%allcodes);
}
+ my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
+ my ($type) = split(/_/,$helper->{'VARS'}->{'PRINT_TYPE'});
+ my $number_per_page=$helper->{'VARS'}->{'NUMBER_TO_PRINT'};
+ if ($number_per_page eq '0' || $number_per_page eq 'all') {
+ $number_per_page=$num_todo;
+ }
+ my $flag_latex_header_remove = 'NO';
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline','75');
my $count=0;
foreach my $code (sort(@allcodes)) {
my $file_num=int($count/$number_per_page);
@@ -1079,6 +1208,7 @@ ENDPART
&mt('last assignment').' '.$fullname);
$flag_latex_header_remove = 'YES';
$count++;
+ if (&Apache::loncommon::connection_aborted($r)) { last; }
}
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= $print_array[0].' \end{document}';
@@ -1103,7 +1233,7 @@ ENDPART
if ($urlp =~ m|/home/([^/]+)/public_html|) {
$urlp =~ s|/home/([^/]*)/public_html|/~$1|;
} else {
- $urlp =~ s|^/home/httpd/html||;
+ $urlp =~ s|^$Apache::lonnet::perlvar{'lonDocRoot'}||;
}
my $texversion=&Apache::lonnet::ssi($urlp,%form);
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
@@ -1155,15 +1285,15 @@ ENDPART
$result .= '\end{document}';
}
#-------------------------------------------------------- corrections for the different page formats
- $result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'});
- $result = &latex_corrections($number_of_columns,$result);
- for (my $i=1;$i<=$#print_array;$i++) {$print_array[$i] = &latex_corrections($number_of_columns,$print_array[$i]);}
+ $result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'},$selectionmade);
+ $result = &latex_corrections($number_of_columns,$result,$selectionmade);
+ for (my $i=1;$i<=$#print_array;$i++) {$print_array[$i] = &latex_corrections($number_of_columns,$print_array[$i],$selectionmade);}
#changes page's parameters for the one column output
if ($numberofcolumns == 1) {
- $result =~ s/\\textwidth\s*=\s*\d*\.?\d*\s*(cm|mm|in)/\\textwidth= $helper->{'VARS'}->{'pagesize.width'} $helper->{'VARS'}->{'pagesize.widthunit'} /;
- $result =~ s/\\textheight\s*=\s*\d*\.?\d*\s*(cm|mm|in)/\\textheight $helper->{'VARS'}->{'pagesize.height'} $helper->{'VARS'}->{'pagesize.heightunit'} /;
- $result =~ s/\\evensidemargin\s*=\s*\d*\.?\d*\s*(cm|mm|in)/\\evensidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /;
- $result =~ s/\\oddsidemargin\s*=\s*\d*\.?\d*\s*(cm|mm|in)/\\oddsidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /;
+ $result =~ s/\\textwidth\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\textwidth= $helper->{'VARS'}->{'pagesize.width'} $helper->{'VARS'}->{'pagesize.widthunit'} /;
+ $result =~ s/\\textheight\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\textheight $helper->{'VARS'}->{'pagesize.height'} $helper->{'VARS'}->{'pagesize.heightunit'} /;
+ $result =~ s/\\evensidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\evensidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /;
+ $result =~ s/\\oddsidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\oddsidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /;
}
#-- writing .tex file in prtspool
my $temp_file;
@@ -1218,7 +1348,7 @@ ENDPART
my $URLback=''; #link to original document
if ($helper->{'VARS'}->{'construction'} ne '1') {
#prints published resource
- $URLback=$helper->{'VARS'}->{'postdata'};
+ $URLback=&Apache::lonnet::escape('/adm/flip?postdata=return:');
} else {
#prints resource from the construction space
$URLback='/'.$helper->{'VARS'}->{'filename'};
@@ -1231,6 +1361,7 @@ ENDPART
&Apache::lonnet::appenv('cgi.'.$identifier.'.file' => $filename,
'cgi.'.$identifier.'.layout' => $laystyle,
'cgi.'.$identifier.'.numcol' => $numberofcolumns,
+ 'cgi.'.$identifier.'.paper' => $papersize,
'cgi.'.$identifier.'.selection' => $selectionmade,
'cgi.'.$identifier.'tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'},
'cgi.'.$identifier.'tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'},
@@ -1240,7 +1371,9 @@ ENDPART
'cgi.'.$identifier.'backref' => $URLback,);
$r->print(<
+Continue