--- loncom/interface/lonprintout.pm 2009/11/17 11:32:23 1.565
+++ loncom/interface/lonprintout.pm 2010/02/28 22:38:45 1.572
@@ -2,7 +2,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.565 2009/11/17 11:32:23 foxr Exp $
+# $Id: lonprintout.pm,v 1.572 2010/02/28 22:38:45 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1757,7 +1757,7 @@ sub recently_generated {
#
#
# use Data::Dumper;
-#sub dump_helper_vars {
+# sub dump_helper_vars {
# my ($helper) = @_;
# my $helpervars = Dumper($helper->{'VARS'});
# &Apache::lonnet::logthis("Dump of helper vars:\n $helpervars");
@@ -1772,6 +1772,122 @@ sub get_page_breaks {
}
return %page_breaks;
}
+#
+# Returns text to insert for any extra vskip prior to the resource.
+# Parameters:
+# helper - Reference to the helper object driving the printout.
+# resource - Identifies the resource about to be printed.
+#
+# This is done as follows:
+# POSSIBLE_RESOURCES has the list of possible resources.
+# EXTRASPACE has the list of extra space values.
+# EXTRASPACE_UNITS is the set of resources for which the units are
+# mm. All others are 'in'.
+#
+# The resource is found in the POSSIBLE_RESOURCES to get the index
+# of the EXTRASPACE value.
+#
+# In order to speed this up for lengthy printouts, the first time,
+# POSSIBLE_RESOURCES is turned into a look up hash and
+# EXTRASPACE is turned into an array.
+#
+
+
+my %possible_resources;
+my %extraspace_mm;
+my @extraspace;
+my $skips_loaded = 0;
+
+# Function to load the skips hash and array
+
+sub load_skips {
+
+ my ($helper) = @_;
+
+ # If this is the first time, unrap the resources and extra spaces:
+
+ if (!$skips_loaded) {
+ @extraspace = (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE'}));
+ my @resource_list = (split(/\|\|\|/, $helper->{'VARS'}->{'POSSIBLE_RESOURCES'}));
+ my $i = 0;
+ foreach my $resource (@resource_list) {
+ $possible_resources{$resource} = $i;
+ $i++;
+ }
+ foreach my $mm_resource (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE_UNITS'})) {
+ $extraspace_mm{$mm_resource} = 1;
+ }
+ $skips_loaded = 1;
+ }
+}
+
+sub get_extra_vspaces {
+ my ($helper, $resource) = @_;
+
+ &load_skips($helper);
+
+ # Lookup the resource in the possible resources hash.. that is the index
+ # into the extraspace array that gives us either an empty string or
+ # the number of mm to skip:
+
+ my $index = $possible_resources{$resource};
+ my $skip = $extraspace[$index];
+
+ my $result = '';
+ if ($skip ne '') {
+ my $units = 'in';
+ if (defined($extraspace_mm{$resource})) {
+ $units = 'mm';
+ }
+ $result = '\vskip '.$skip.' '.$units;
+ }
+
+
+ return $result;
+
+
+}
+
+#
+# The resource chooser part of the helper needs more than just
+# the value of the extraspaces var to recover the value into a text
+# field option. This sub produces the required format for the saved var:
+# specifically
+# ||| separated fields of the form resourcename=value
+#
+# Parameters:
+# $helper - Refers to the helper we are configuring
+# Implicit input:
+# $helper->{'VARS'}->{'EXTRASPACE'} - the spaces helper var has the text field
+# value.
+# $helper->{'VARS'}->{'EXTRASPACE_UNITS'} - units for the skips (checkboxes).
+# $helper->{'VARS'}->{'POSSIBLE_RESOURCES'} - has the list of resources. |||
+# separated of course.
+# Implicit outputs:
+# $env{'form.extraspace'}
+# $env{'form.extraspace_units'}
+#
+sub set_form_extraspace {
+ my ($helper) = @_;
+
+ # the most convenient way to do this is to drive from the skips arrays/hash.
+ # may not be the fastest, but this is once per print request so it's not so
+ # speed critical:
+
+ &load_skips($helper);
+
+ my $result = '';
+
+ foreach my $resource (keys(%possible_resources)) {
+ my $vskip = $extraspace[$possible_resources{$resource}];
+ $result .= $resource .'=' . $vskip . '|||';
+ }
+
+ $env{'form.extraspace'} = $result;
+ $env{'form.extraspace_units'} = $helper->{'VARS'}->{'EXTRASPACE_UNITS'};
+ return $result;
+
+}
# Output a sequence (recursively if neeed)
# from construction space.
@@ -1943,11 +2059,13 @@ ENDPART
# indexed by symb and contains 1's for each break.
$env{'form.pagebreaks'} = $helper->{'VARS'}->{'FINISHPAGE'};
+ &set_form_extraspace($helper);
$env{'form.lastprinttype'} = $helper->{'VARS'}->{'PRINT_TYPE'};
&Apache::loncommon::store_course_settings('print',
{'pagebreaks' => 'scalar',
+ 'extraspace' => 'scalar',
+ 'extraspace_units' => 'scalar',
'lastprinttype' => 'scalar'});
-
my %page_breaks = &get_page_breaks($helper);
my $format_from_helper = $helper->{'VARS'}->{'FORMAT'};
@@ -2108,7 +2226,6 @@ ENDPART
$currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;
-# $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
$result .= &print_construction_sequence($currentURL, $helper, %form,
$LaTeXwidth);
$result .= '\end{document}';
@@ -2120,8 +2237,7 @@ ENDPART
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;}
$resources_printed .= $currentURL.':';
- my $texversion = &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
- $texversion .= &ssi_with_retries($currentURL, $ssi_retry_count, %form);
+ my $texversion = &ssi_with_retries($currentURL, $ssi_retry_count, %form);
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
my $annotation = &annotate($currentURL);
$texversion =~ s/(\\end{document})/$annotation$1/;
@@ -2154,7 +2270,6 @@ ENDPART
} else {
- &Apache::lonnet::logthis("Unsupported type handler");
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'},
$helper->{'VARS'}->{'symb'});
}
@@ -2214,6 +2329,7 @@ ENDPART
$result.="\\newpage\n";
}
}
+ $result .= &get_extra_vspaces($helper, $master_seq[$i]);
my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
$urlp=&Apache::lonnet::clutter($urlp);
$form{'symb'}=$master_seq[$i];
@@ -2227,7 +2343,10 @@ ENDPART
&& $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
$resources_printed .= $urlp.':';
&Apache::lonxml::remember_problem_counter();
- $texversion.=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); # RF
+ if ($flag_latex_header_remove eq 'NO') {
+ $texversion.=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); # RF
+ $flag_latex_header_remove = 'YES';
+ }
$texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form);
if ($urlp=~/\.page$/) {
($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
@@ -2301,8 +2420,7 @@ ENDPART
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
if ($urlp=~/\/syllabus$/) {$urlp=~s/\/res//;}
$resources_printed .= $urlp.':';
- my $texversion = &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
- $texversion .= &ssi_with_retries($urlp, $ssi_retry_count, %form);
+ my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form);
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
my $annotation = &annotate($urlp);
$texversion =~ s/(\\end{document)/$annotation$1/;
@@ -2806,13 +2924,14 @@ sub print_resources {
# so we will just rely on prntout.pl to strip ENDOFSTUDENTSTAMP from the
# postscript. Each ENDOFSTUDENTSTAMP will go on a line by itself.
#
-
+ my $syllabus_first = 0;
foreach my $curresline (@{$master_seq}) {
if (defined $page_breaks{$curresline}) {
if($i != 0) {
$current_output.= "\\newpage\n";
}
}
+ $current_output .= &get_extra_vspaces($helper, $curresline);
$i++;
if ( !($type eq 'problems' &&
@@ -2865,6 +2984,9 @@ sub print_resources {
}
$current_output .= $rendered;
} elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
+ if ($i == 1) {
+ $syllabus_first = 1;
+ }
$printed .= $curresline.':';
my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
@@ -2909,8 +3031,11 @@ sub print_resources {
my $header_start = ($columns_in_format == 1) ? '\lhead'
: '\fancyhead[LO]';
$header_line = $header_start.'{'.$header_line.'}';
- if ($current_output=~/\\documentclass/) {
+ if ($current_output=~/\\documentclass/ && (!$syllabus_first)) {
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /;
+ } elsif ($syllabus_first) {
+
+ $current_output =~ s/\\\\ Last updated:/Last updated:/
} else {
my $blankpages =
'\clearpage\strut\clearpage'x$helper->{'VARS'}->{'EMPTY_PAGES'};
@@ -3054,19 +3179,21 @@ sub printHelper {
$helper->declareVar('PRINT_TYPE');
$helper->declareVar("showallfoils");
$helper->declareVar("STUDENTS");
-
+ $helper->declareVar("EXTRASPACE");
- # The page breaks can get loaded initially from the course environment:
+ # The page breaks and extra spaces
+ # can get loaded initially from the course environment:
# But we only do this in the initial state so that they are allowed to change.
#
- # $helper->{VARS}->{FINISHPAGE} = '';
&Apache::loncommon::restore_course_settings('print',
{'pagebreaks' => 'scalar',
+ 'extraspace' => 'scalar',
+ 'extraspace_units' => 'scalar',
'lastprinttype' => 'scalar'});
# This will persistently load in the data we want from the
@@ -3076,10 +3203,15 @@ sub printHelper {
if (!defined ($env{"form.CURRENT_STATE"})) {
$helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
+ $helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'};
+ $helper->{VARS}->{EXTRASPACE_UNITS} = $env{'form.extraspace_units'};
} else {
my $state = $env{"form.CURRENT_STATE"};
if ($state eq "START") {
$helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
+ $helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'};
+ $helper->{VARS}->{EXTRASPACE_UNITS} = $env{'form.extraspace_units'};
+
}
}
@@ -3198,7 +3330,16 @@ sub printHelper {
if ($perm{'pav'}) {
$start_new_option =
"before selected').
- "' variable='FINISHPAGE' />";
+ "' variable='FINISHPAGE' />".
+ "before selected').
+ "' variable='EXTRASPACE' type='text' />" .
+ "".
+ "check for mm').
+ "' variable='EXTRASPACE_UNITS' type='checkbox' />"
+ ;
+
+
}
# If not construction space user can print the components of a page:
@@ -3376,7 +3517,7 @@ ALL_PROBLEMS
'multichoice="1" addstatus="1" closeallpages="1"',
'RESOURCES',
'PRINT_FORMATTING',
- '',
+ $map,
$isProblem, '', $symbFilter,
$start_new_option);
$resource_selector .= <Homework Problem
Exam ProblemSurvey question
+ ,choice computer="anonsurvey"Anonymous survey question
PROBTYPE
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag);