Diff for /loncom/interface/lonprintout.pm between versions 1.568.4.4 and 1.575

version 1.568.4.4, 2010/12/05 19:46:04 version 1.575, 2010/04/19 10:29:40
Line 306  sub set_font_size { Line 306  sub set_font_size {
   
     my ($text) = @_;      my ($text) = @_;
   
     $text =~ s/\\begin{document}/\\begin{document}{\\$font_size/;      # There appear to be cases where the font directive is empty.. in which
       # case the first substituion would  insert a spurious \ oh happy day.
       # as this has been the cause of much mystery and hair pulling _sigh_
   
       if ($font_size ne '') {
   
    $text =~ s/\\begin{document}/\\begin{document}{\\$font_size/;
       }
     $text =~ s/\\end{document}/}\\end{document}/;      $text =~ s/\\end{document}/}\\end{document}/;
     return $text;      return $text;
   
Line 1309  sub page_format_transformation { Line 1316  sub page_format_transformation {
     $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{}\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1}  \\vskip 5 mm\n /;      $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{}\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1}  \\vskip 5 mm\n /;
  }   }
  if ($papersize eq 'a4') {   if ($papersize eq 'a4') {
     $text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/;      my $papersize_text;
       if ($perm{'pav'}) {
    $papersize_text = '\\special{papersize=210mm,297mm}';
       } else {
    $papersize_text = '\special{papersize=210mm,297mm}';
       }
       $text =~ s/(\\begin{document})/$1$papersize_text/;
  }   }
     }      }
     if ($tableofcontents eq 'yes') {$text=~s/(\\setcounter\{page\}\{1\})/$1 \\tableofcontents\\newpage /;}      if ($tableofcontents eq 'yes') {$text=~s/(\\setcounter\{page\}\{1\})/$1 \\tableofcontents\\newpage /;}
Line 1757  sub recently_generated { Line 1770  sub recently_generated {
 #  #
 #  #
 # use Data::Dumper;  # use Data::Dumper;
 #sub dump_helper_vars {  # sub dump_helper_vars {
 #    my ($helper) = @_;  #    my ($helper) = @_;
 #    my $helpervars = Dumper($helper->{'VARS'});  #    my $helpervars = Dumper($helper->{'VARS'});
 #    &Apache::lonnet::logthis("Dump of helper vars:\n $helpervars");  #    &Apache::lonnet::logthis("Dump of helper vars:\n $helpervars");
Line 1772  sub get_page_breaks  { Line 1785  sub get_page_breaks  {
     }      }
     return %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)  #  Output a sequence (recursively if neeed)
 #  from construction space.  #  from construction space.
Line 1890  sub print_construction_sequence { Line 2019  sub print_construction_sequence {
 }  }
   
 sub output_data {  sub output_data {
     my ($r,$helper,$rparmhash,$is_custom) = @_;      my ($r,$helper,$rparmhash) = @_;
     my %parmhash = %$rparmhash;      my %parmhash = %$rparmhash;
     $ssi_error = 0; # This will be set nonzero by failing ssi's.      $ssi_error = 0; # This will be set nonzero by failing ssi's.
     $resources_printed = '';      $resources_printed = '';
Line 1931  ENDPART Line 2060  ENDPART
                   {'href' => '',                    {'href' => '',
                    'text' => 'Preparing Printout'}];                     'text' => 'Preparing Printout'}];
   
     if ($is_custom) {  
         $brcrum = [{'href' => '',  
                    'text' => 'Preparing Printout'}];  
     }  
   
     my $start_page  = &Apache::loncommon::start_page('Preparing Printout',      my $start_page  = &Apache::loncommon::start_page('Preparing Printout',
                                                      $js,                                                       $js,
                                                      {'bread_crumbs' => $brcrum,});                                                       {'bread_crumbs' => $brcrum,});
Line 1948  ENDPART Line 2072  ENDPART
     # indexed by symb and contains 1's for each break.      # indexed by symb and contains 1's for each break.
   
     $env{'form.pagebreaks'}  = $helper->{'VARS'}->{'FINISHPAGE'};      $env{'form.pagebreaks'}  = $helper->{'VARS'}->{'FINISHPAGE'};
       &set_form_extraspace($helper);
     $env{'form.lastprinttype'} = $helper->{'VARS'}->{'PRINT_TYPE'};       $env{'form.lastprinttype'} = $helper->{'VARS'}->{'PRINT_TYPE'}; 
     &Apache::loncommon::store_course_settings('print',      &Apache::loncommon::store_course_settings('print',
       {'pagebreaks'    => 'scalar',        {'pagebreaks'    => 'scalar',
          'extraspace'    => 'scalar',
          'extraspace_units' => 'scalar',
        'lastprinttype' => 'scalar'});         'lastprinttype' => 'scalar'});
   
     my %page_breaks  = &get_page_breaks($helper);      my %page_breaks  = &get_page_breaks($helper);
   
     my $format_from_helper = $helper->{'VARS'}->{'FORMAT'};      my $format_from_helper = $helper->{'VARS'}->{'FORMAT'};
Line 1997  ENDPART Line 2123  ENDPART
  &Apache::lonnet::delenv('construct.style');   &Apache::lonnet::delenv('construct.style');
     }      }
   
   
     if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') {      if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') {
       #-- single document - problem, page, html, xml, ...        #-- single document - problem, page, html, xml, ...
  my ($currentURL,$cleanURL);   my ($currentURL,$cleanURL);
Line 2215  ENDPART Line 2342  ENDPART
     $result.="\\newpage\n";      $result.="\\newpage\n";
  }   }
     }      }
       $result .= &get_extra_vspaces($helper, $master_seq[$i]);
     my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);      my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
     $urlp=&Apache::lonnet::clutter($urlp);      $urlp=&Apache::lonnet::clutter($urlp);
     $form{'symb'}=$master_seq[$i];      $form{'symb'}=$master_seq[$i];
Line 2816  sub print_resources { Line 2944  sub print_resources {
  $current_output.= "\\newpage\n";   $current_output.= "\\newpage\n";
     }      }
  }   }
    $current_output .= &get_extra_vspaces($helper, $curresline);
  $i++;   $i++;
   
  if ( !($type eq 'problems' &&    if ( !($type eq 'problems' && 
Line 2942  sub handler { Line 3071  sub handler {
           
     &init_perm();      &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();      my $helper = printHelper($r);
         if (!defined($navmap)) {      if (!ref($helper)) {
             my $brcrum = [{'href' => '',   return $helper;
                            'text' => 'Preparing Printout'}];  
   
             my $start_page  =  
                 &Apache::loncommon::start_page('Preparing Printout','',  
                                                {'bread_crumbs' => $brcrum,});  
             my $endpage = &Apache::loncommon::end_page();  
   
             my $navmap_error = '<span class="LC_error">'.&mt('An error occurred retrieving information about the course.').'<br />'.&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.').'</span>';  
             $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;  
         }  
     }      }
      
   
     %parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'});      %parmhash=&Apache::lonnet::coursedescription($env{'request.course.id'});
    
   
   
   
     #  If a figure conversion queue file exists for this user.domain      #  If a figure conversion queue file exists for this user.domain
Line 3057  sub handler { Line 3090  sub handler {
   
     my $conversion_queuefile = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat";      my $conversion_queuefile = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat";
     if(-e $conversion_queuefile) {      if(-e $conversion_queuefile) {
         unlink $conversion_queuefile;   unlink $conversion_queuefile;
     }      }
       
   
       &output_data($r,$helper,\%parmhash);
     &output_data($r,$helper,\%parmhash,$is_custom);  
     return OK;      return OK;
 }  } 
   
 use Apache::lonhelper;  use Apache::lonhelper;
   
Line 3159  sub printHelper { Line 3192  sub printHelper {
     $helper->declareVar('PRINT_TYPE');      $helper->declareVar('PRINT_TYPE');
     $helper->declareVar("showallfoils");      $helper->declareVar("showallfoils");
     $helper->declareVar("STUDENTS");      $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.      # 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',      &Apache::loncommon::restore_course_settings('print',
  {'pagebreaks'  => 'scalar',   {'pagebreaks'  => 'scalar',
    'extraspace'  => 'scalar',
    'extraspace_units' => 'scalar',
          'lastprinttype' => 'scalar'});           'lastprinttype' => 'scalar'});
           
     # This will persistently load in the data we want from the      # This will persistently load in the data we want from the
Line 3181  sub printHelper { Line 3216  sub printHelper {
  if (!defined ($env{"form.CURRENT_STATE"})) {   if (!defined ($env{"form.CURRENT_STATE"})) {
           
     $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};      $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
       $helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'};
       $helper->{VARS}->{EXTRASPACE_UNITS} = $env{'form.extraspace_units'};
  } else {   } else {
     my $state = $env{"form.CURRENT_STATE"};      my $state = $env{"form.CURRENT_STATE"};
     if ($state eq "START") {      if ($state eq "START") {
  $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};   $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
    $helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'};
    $helper->{VARS}->{EXTRASPACE_UNITS} = $env{'form.extraspace_units'};
   
     }      }
  }   }
   
Line 3303  sub printHelper { Line 3343  sub printHelper {
     if ($perm{'pav'}) {      if ($perm{'pav'}) {
  $start_new_option =    $start_new_option = 
     "<option text='".&mt('Start new page<br />before selected').      "<option text='".&mt('Start new page<br />before selected').
     "' variable='FINISHPAGE' />";      "' variable='FINISHPAGE' />".
       "<option text='".&mt('Extra space<br />before selected').
       "' variable='EXTRASPACE' type='text' />" .
       "<option " .
       "' variable='POSSIBLE_RESOURCES' type='hidden' />".
       "<option text='".&mt('Space units<br />check for mm').
       "' variable='EXTRASPACE_UNITS' type='checkbox' />"
       ;
       
   
     }      }
   
     # If not construction space user can print the components of a page:      # If not construction space user can print the components of a page:
Line 4017  FONT_SELECTION Line 4066  FONT_SELECTION
    <choice computer="problem">Homework Problem</choice>     <choice computer="problem">Homework Problem</choice>
    <choice computer="exam">Exam Problem</choice>     <choice computer="exam">Exam Problem</choice>
    <choice computer="survey">Survey question</choice>     <choice computer="survey">Survey question</choice>
                      ,choice computer="anonsurvey"Anonymous survey question</choice>
  </dropdown>   </dropdown>
 PROBTYPE  PROBTYPE
             &Apache::lonxml::xmlparse($r, 'helper', $xmlfrag);              &Apache::lonxml::xmlparse($r, 'helper', $xmlfrag);

Removed from v.1.568.4.4  
changed lines
  Added in v.1.575


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>