--- loncom/interface/lonprintout.pm 2010/12/05 17:25:10 1.568.4.3 +++ 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.3 2010/12/05 17:25:10 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,112 +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 @@ -3056,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; @@ -3158,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 @@ -3180,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'}; + } } @@ -3302,7 +3330,16 @@ sub printHelper { if ($perm{'pav'}) { $start_new_option = "