--- loncom/interface/lonprintout.pm 2010/12/05 19:46:04 1.568.4.4
+++ 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.568.4.4 2010/12/05 19:46:04 raeburn 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.
@@ -1890,7 +2006,7 @@ sub print_construction_sequence {
}
sub output_data {
- my ($r,$helper,$rparmhash,$is_custom) = @_;
+ my ($r,$helper,$rparmhash) = @_;
my %parmhash = %$rparmhash;
$ssi_error = 0; # This will be set nonzero by failing ssi's.
$resources_printed = '';
@@ -1931,11 +2047,6 @@ ENDPART
{'href' => '',
'text' => 'Preparing Printout'}];
- if ($is_custom) {
- $brcrum = [{'href' => '',
- 'text' => 'Preparing Printout'}];
- }
-
my $start_page = &Apache::loncommon::start_page('Preparing Printout',
$js,
{'bread_crumbs' => $brcrum,});
@@ -1948,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'};
@@ -1997,6 +2110,7 @@ ENDPART
&Apache::lonnet::delenv('construct.style');
}
+
if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') {
#-- single document - problem, page, html, xml, ...
my ($currentURL,$cleanURL);
@@ -2215,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];
@@ -2816,6 +2931,7 @@ sub print_resources {
$current_output.= "\\newpage\n";
}
}
+ $current_output .= &get_extra_vspaces($helper, $curresline);
$i++;
if ( !($type eq 'problems' &&
@@ -2942,113 +3058,17 @@ sub handler {
&init_perm();
- my ($helper,$is_custom);
- if ((&Apache::loncommon::needs_gci_custom()) &&
- ($env{'request.role.domain'} =~ /^\w+citest$/)) {
- if ($r->header_only) {
- if ($env{'browser.mathml'}) {
- &Apache::loncommon::content_type($r,'text/xml');
- } else {
- &Apache::loncommon::content_type($r,'text/html');
- }
- $r->send_http_header;
- return OK;
- }
- # Send header, nocache
- if ($env{'browser.mathml'}) {
- &Apache::loncommon::content_type($r,'text/xml');
- } else {
- &Apache::loncommon::content_type($r,'text/html');
- }
- &Apache::loncommon::no_cache($r);
- $r->send_http_header;
- $r->rflush();
- my ($navmap_error,$resources,@master_seq);
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (!defined($navmap)) {
- my $brcrum = [{'href' => '',
- 'text' => 'Preparing Printout'}];
-
- my $start_page =
- &Apache::loncommon::start_page('Preparing Printout','',
- {'bread_crumbs' => $brcrum,});
- my $endpage = &Apache::loncommon::end_page();
-
- my $navmap_error = ''.&mt('An error occurred retrieving information about the course.').' '.&mt('It is recommended that you re-select the concept test by clicking on the "Review Questions" tab and then clicking on the "Manage Tests" tab again.').'';
- $r->print($start_page.$navmap_error.$endpage);
- return OK;
- } else {
- my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- my $sequence = &Apache::loncommon::get_citest_map($cdom);
- my @allres;
- if ($sequence) {
- @allres=$navmap->retrieveResources('/uploaded/'.$cdom.'/'.$cnum.'/'.$sequence);
- }
- foreach my $resource (@allres) {
- next if ($resource->is_map());
- my $symb = $resource->symb();
- push(@master_seq,$symb);
- }
- $resources = join('|||',@master_seq);
- my ($sequence,$middle_thingy,$urlp) =
- &Apache::lonnet::decode_symb($master_seq[0]);
-
- my $assignment = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header');
-
- $helper = {
- VARS => {
- ANON_CODE_STORAGE_NAME => '',
- ANSWER_TYPE => 'yes',
- CODE_OPTION => '',
- EMPTY_PAGES => '',
- FINISHPAGE => '',
- FORMAT => 'P|1|letter|no',
- LATEX_TYPE => 'batchmode',
- NUMBER_TO_PRINT_TOTAL => '',
- PRINT_ANNOTATIONS => 'no',
- PRINT_DISCUSSIONS => 'no',
- PRINT_TYPE => 'map_problems',
- RESOURCES => $resources,
- REUSE_OLD_CODES => '',
- SEQUENCE => '',
- SINGLE_CODE => '',
- SPLIT_PDFS => '',
- STUDENTS => '',
- TABLE_CONTENTS => 'no',
- TABLE_INDEX => 'no',
- assignment => $assignment,
- construction => '',
- curseed => '',
- filename => '',
- fontsize => 'normalsize',
- pagesize => '',
- 'pagesize.height' => '9.8',
- 'pagesize.heightunit' => 'in',
- 'pagesize.lmargin' => '-0.57',
- 'pagesize.lmarginunit' => 'in',
- 'pagesize.width' => '7.1',
- 'pagesize.widthunit' => 'in',
- postdata => $urlp,
- probstatus => '',
- showallfoils => '',
- student_sort => '',
- style_file => '',
- symb => $master_seq[0],
- }
- };
- $env{'form.assignment'} = $assignment;
- $is_custom = 1;
- }
- } else {
- $helper = printHelper($r);
- if (!ref($helper)) {
- return $helper;
- }
+
+ my $helper = printHelper($r);
+ if (!ref($helper)) {
+ return $helper;
}
+
%parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'});
+
+
# If a figure conversion queue file exists for this user.domain
@@ -3057,13 +3077,13 @@ sub handler {
my $conversion_queuefile = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat";
if(-e $conversion_queuefile) {
- unlink $conversion_queuefile;
+ unlink $conversion_queuefile;
}
+
-
- &output_data($r,$helper,\%parmhash,$is_custom);
+ &output_data($r,$helper,\%parmhash);
return OK;
-}
+}
use Apache::lonhelper;
@@ -3159,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
@@ -3181,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'};
+
}
}
@@ -3303,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:
@@ -4017,6 +4053,7 @@ FONT_SELECTION
Homework ProblemExam ProblemSurvey question
+ ,choice computer="anonsurvey"Anonymous survey question
PROBTYPE
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag);