Diff for /loncom/interface/lonprintout.pm between versions 1.545.2.3 and 1.552

version 1.545.2.3, 2008/12/22 22:28:18 version 1.552, 2009/05/02 22:16:09
Line 40  use Apache::lonnavmaps; Line 40  use Apache::lonnavmaps;
 use Apache::admannotations;  use Apache::admannotations;
 use Apache::lonenc;  use Apache::lonenc;
 use Apache::entities;  use Apache::entities;
   use Apache::londefdef;
   
   use File::Basename;
   
 use HTTP::Response;  use HTTP::Response;
   
Line 111  sub annotate { Line 114  sub annotate {
     return $result;      return $result;
 }  }
   
   # include_pdf - PDF files are included into the 
   # output as follows:
   #  - The PDF, if necessary, is replicated.
   #  - The PDF is added to the list of files to convert to postscript (along with the images).
   #  - The LaTeX is added to include the final converted postscript in the file as an included
   #    job.  The assumption is that the includedpsheader.ps header will be included.
   #
   # Parameters:
   #   pdf_uri   - URI of the PDF file to include.
   #   
   # Returns:
   #  The LaTeX to include.
   #
   # Assumptions:
   #    The uri is actually a PDF file
   #    The postscript will have the includepsheader.ps included.
   #
   #
   sub include_pdf {
       my ($pdf_uri) = @_;
   
       # Where is the file? If not local we'll need to repcopy it:'
   
       my $file = &Apache::lonnet::filelocation('', $pdf_uri);
       if (! -e $file) {
    &Apache::lonnet::repcopy($file);
    $file = &Apache::lonnet::filelocation('',$pdf_uri);
       }
   
       #  The file isn ow replicated locally.. or it did not exist in the first place
       # (unlikely).  If it did exist, add the pdf to the set of files/images that
       # need tob e converted for this print job:
   
       $file =~ s|(.*)/res/|/home/httpd/html/res/|;
   
       open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat");
       print FILE ("$file\n");
       close (FILE);
   
       # Construct the special to put out.  To do this we need to get the
       # resulting filename after conversion.  The file will have the same name
       # but will be in the user's spool directory with converted images.
   
       my $dirname = "/home/httpd/prtspool/$env{'user.name'}/";
       my ( $base, $path,  $ext) = &fileparse($file, '.pdf');
   #    my $destname = $dirname.'/'.$base.'.eps'; # Not really an eps but easier in printout.pl
       $base =~ s/ /\_/g;
   
   
       my $output = &print_latex_header();
       $output    .= '\special{ps: _begin_job_ ('
    .$base.'.pdf.eps'.
    ')run _end_job_}';
   
       return $output;
   
   
   }
   
   
 #  #
 #   ssi_with_retries - Does the server side include of a resource.  #   ssi_with_retries - Does the server side include of a resource.
Line 229  sub printf_style_subst { Line 291  sub printf_style_subst {
 #     %a    - Assignment name.  #     %a    - Assignment name.
 #     %c    - Course name.  #     %c    - Course name.
 #     %n    - Student name.  #     %n    - Student name.
   #     %s    - The section if it is supplied.
 #  #
 sub format_page_header {  sub format_page_header {
     my ($width, $format, $assignment, $course, $student) = @_;      my ($width, $format, $assignment, $course, $student, $section) = @_;
   
           
     $width = &recalcto_mm($width); # Get width in mm.      $width = &recalcto_mm($width); # Get width in mm.
     #  Default format?      #  Default format?
Line 249  sub format_page_header { Line 313  sub format_page_header {
  #   #
  my $chars_per_line = $width/2; # Character/textline.   my $chars_per_line = $width/2; # Character/textline.
   
         my $firstline = "$student $course";  
         if (length($firstline) > $chars_per_line) {  
             my $lastchar = $chars_per_line - length($student) - 1;  
             if ($lastchar > 0) {  
                 $course = substr($course, 0, $lastchar);  
             } else {            # Nothing left of course:  
                 $course = '';  
             }  
         }  
         if (length($assignment) > $chars_per_line) {  
             $assignment = substr($assignment, 0, $chars_per_line);  
         }  
   
         $format =  "\\textbf{$student} $course \\hfill \\thepage \\\\ \\textit{$assignment}";  
   
     } else {   my $name_length    = int($chars_per_line *3 /4);
         # An open question is how to handle long user formatted page headers...   my $sec_length     = int($chars_per_line / 5);
         # A possible future is to support e.g. %na so that the user can control  
         # the truncation of the elements that can appear in the header.   $format  = "%$name_length".'n';
         #  
         $format =  &printf_style_subst("a", $format, $assignment);   if ($section) {
         $format =  &printf_style_subst("c", $format, $course);      $format .=  ' - Sec: '."%$sec_length".'s';
         $format =  &printf_style_subst("n", $format, $student);   }
   
         # If the user put %'s in the format string, they  must be escaped   $format .= '\\\\%c \\\\ %a';
         # to \% else LaTeX will think they are comments and terminate          
         # the line.. which is bad!!!  
     }      }
       # An open question is how to handle long user formatted page headers...
       # A possible future is to support e.g. %na so that the user can control
       # the truncation of the elements that can appear in the header.
       #
       $format =  &printf_style_subst("a", $format, $assignment);
       $format =  &printf_style_subst("c", $format, $course);
       $format =  &printf_style_subst("n", $format, $student);
       $format =  &printf_style_subst("s", $format, $section);
       
       
       # If the user put %'s in the format string, they  must be escaped
       # to \% else LaTeX will think they are comments and terminate
       # the line.. which is bad!!!
           
     # If the user has role author, $course and $assignment are empty so      # If the user has role author, $course and $assignment are empty so
     # there is '\\ \\ ' in the page header. That's cause a error in LaTeX      # there is '\\ \\ ' in the page header. That's cause a error in LaTeX
Line 983  sub get_course { Line 1047  sub get_course {
     my $courseidinfo;      my $courseidinfo;
     if (defined($env{'request.course.id'})) {      if (defined($env{'request.course.id'})) {
  $courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header');   $courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header');
    my $sec = $env{'request.course.sec'};
       
     }      }
     return $courseidinfo;      return $courseidinfo;
 }  }
Line 1005  sub page_format_transformation { Line 1071  sub page_format_transformation {
   
     my $name = &get_name();      my $name = &get_name();
     my $courseidinfo = &get_course();      my $courseidinfo = &get_course();
     if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }  
     my $header_text  = $parmhash{'print_header_format'};      my $header_text  = $parmhash{'print_header_format'};
     $header_text     = &format_page_header($textwidth, $header_text, $assignment,      $header_text     = &format_page_header($textwidth, $header_text, $assignment,
    $courseidinfo, $name);     $courseidinfo, $name);
Line 1018  sub page_format_transformation { Line 1083  sub page_format_transformation {
  $fancypagestatement="\\rhead{}\\chead{}\\lhead{$header_text}";   $fancypagestatement="\\rhead{}\\chead{}\\lhead{$header_text}";
     }      }
     if ($layout eq 'album') {      if ($layout eq 'album') {
     $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 /;      $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\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /;
     } elsif ($layout eq 'book') {      } elsif ($layout eq 'book') {
  if ($choice ne 'All class print') {    if ($choice ne 'All class print') { 
     $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/;      $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\\usepackage{booktabs}\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/;
  } else {   } else {
     $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 /;      $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}/;      $text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/;
Line 1146  sub IndexCreation { Line 1211  sub IndexCreation {
   
 sub print_latex_header {  sub print_latex_header {
     my $mode=shift;      my $mode=shift;
     my $output='\documentclass[letterpaper,twoside]{article}\raggedbottom';  
     if (($mode eq 'batchmode') || (!$perm{'pav'})) {      return &Apache::londefdef::latex_header($mode);
  $output.='\batchmode';  
     }  
     $output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n".  
        '\usepackage{multirow}'."\n".  
      '\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n".  
      '\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n".  
      '\usepackage{wrapfig}'.  
      '\usepackage{picins}\usepackage{calc}'."\n".  
      '\usepackage[T1]{fontenc}'."\n".  
              '\usepackage{lmodern}'."\n".  
      '\usepackage[postscript]{ucs}'."\n".  
      '\usepackage[utf8x]{inputenc}'."\n".  
      '\usepackage{pifont}'  . "\n".  
      '\usepackage{latexsym}'."\n".  
      '\usepackage{amsmath}'.  
      '\usepackage{amssymb}'.  
      '\usepackage{amsfonts}'.  
      '\usepackage{amsthm}'.  
      '\usepackage{amscd}'.  
      '\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 {  sub path_to_problem {
Line 1440  sub print_construction_sequence { Line 1472  sub print_construction_sequence {
  $helper, %form,    $helper, %form, 
  $LaTeXwidth);   $LaTeXwidth);
     }      }
  }     }
    elsif ($urlp =~ /\.pdf$/i) {
       my $texversion;
       if ($member != 0) {
    $texversion .= '\cleardoublepage';
       }
   
       $texversion .= &include_pdf($urlp);
       $texversion = &latex_header_footer_remove($texversion);
       if ($member != $#order) {
    $texversion .= '\\ \cleardoublepage';
       }
       
       $result .= $texversion;
    }
     }      }
     if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;}      if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;}
     return $result;      return $result;
Line 1502  ENDPART Line 1548  ENDPART
     my ($result,$selectionmade) = ('','');      my ($result,$selectionmade) = ('','');
     my $number_of_columns = 1; #used only for pages to determine the width of the cell      my $number_of_columns = 1; #used only for pages to determine the width of the cell
     my @temporary_array=split /\|/,$format_from_helper;      my @temporary_array=split /\|/,$format_from_helper;
     my ($laystyle,$numberofcolumns,$papersize)=@temporary_array;      my ($laystyle,$numberofcolumns,$papersize,$pdfFormFields)=@temporary_array;
     if ($laystyle eq 'L') {      if ($laystyle eq 'L') {
  $laystyle='album';   $laystyle='album';
     } else {      } else {
Line 1523  ENDPART Line 1569  ENDPART
     my %form;      my %form;
     $form{'grade_target'} = 'tex';      $form{'grade_target'} = 'tex';
     $form{'textwidth'}    = &get_textwidth($helper, $LaTeXwidth);      $form{'textwidth'}    = &get_textwidth($helper, $LaTeXwidth);
       $form{'pdfFormFields'} = $pdfFormFields;
   
     # If form.showallfoils is set, then request all foils be shown:      # If form.showallfoils is set, then request all foils be shown:
     # privilege will be enforced both by not allowing the       # privilege will be enforced both by not allowing the 
Line 1539  ENDPART Line 1586  ENDPART
  &Apache::lonnet::appenv({'construct.style' =>   &Apache::lonnet::appenv({'construct.style' =>
  $helper->{'VARS'}->{'style_file'}});   $helper->{'VARS'}->{'style_file'}});
     } elsif ($env{'construct.style'}) {      } elsif ($env{'construct.style'}) {
  &Apache::lonnet::delenv('construct\\.style');   &Apache::lonnet::delenv('construct.style');
     }      }
   
   
Line 1630  ENDPART Line 1677  ENDPART
   
   
   
       
     }      }
     # Print annotations.      # Print annotations.
   
Line 1655  ENDPART Line 1703  ENDPART
  && $currentURL=~/\.sequence$/ && $helper->{'VARS'}->{'construction'} eq '1') {   && $currentURL=~/\.sequence$/ && $helper->{'VARS'}->{'construction'} eq '1') {
             #printing content of sequence from the construction space              #printing content of sequence from the construction space
     $currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;      $currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;
     $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});  #    $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
     $result .= &print_construction_sequence($currentURL, $helper, %form,      $result .= &print_construction_sequence($currentURL, $helper, %form,
     $LaTeXwidth);      $LaTeXwidth);
     $result .= '\end{document}';        $result .= '\end{document}';  
Line 1673  ENDPART Line 1721  ENDPART
     $texversion    =~ s/(\\end{document})/$annotation$1/;      $texversion    =~ s/(\\end{document})/$annotation$1/;
  }   }
  $result .= $texversion;   $result .= $texversion;
  } elsif ($cleanURL =~/.tex$/) {   } elsif ($cleanURL =~/\.tex$/) {
     # For this sort of print of a single LaTeX file,      # For this sort of print of a single LaTeX file,
     # We can just print the LaTeX file as it is uninterpreted in any way:      # We can just print the LaTeX file as it is uninterpreted in any way:
     #      #
Line 1686  ENDPART Line 1734  ENDPART
   
     $do_postprocessing = 0; # Don't massage the result.      $do_postprocessing = 0; # Don't massage the result.
   
    } elsif ($cleanURL =~ /\.pdf$/i) {
       $result .= &include_pdf($cleanURL);
       $result .= '\end{document}';
  } else {   } else {
     $result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'},      $result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'},
   $helper->{'VARS'}->{'symb'});    $helper->{'VARS'}->{'symb'});
Line 1779  ENDPART Line 1830  ENDPART
     } else {      } else {
  if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {   if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
     $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});      $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
       $texversion =~ s/\\begin{document}//;
     my $title = &Apache::lonnet::gettitle($master_seq[$i]);      my $title = &Apache::lonnet::gettitle($master_seq[$i]);
     $title = &Apache::lonxml::latex_special_symbols($title);      $title = &Apache::lonxml::latex_special_symbols($title);
     my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';      my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
Line 1808  ENDPART Line 1860  ENDPART
  if (($selectionmade == 4) and ($assignment ne $prevassignment)) {   if (($selectionmade == 4) and ($assignment ne $prevassignment)) {
     my $name = &get_name();      my $name = &get_name();
     my $courseidinfo = &get_course();      my $courseidinfo = &get_course();
     if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }  
     $prevassignment=$assignment;      $prevassignment=$assignment;
     my $header_text = $parmhash{'print_header_format'};      my $header_text = $parmhash{'print_header_format'};
     $header_text    = &format_page_header($textwidth, $header_text,      $header_text    = &format_page_header($textwidth, $header_text,
   $assignment,     $assignment, 
   $courseidinfo,     $courseidinfo, 
   $name);    $name);
   
     if ($numberofcolumns eq '1') {      if ($numberofcolumns eq '1') {
  $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm ';   $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm ';
     } else {      } else {
Line 1835  ENDPART Line 1887  ENDPART
   
  if ($flag_latex_header_remove ne 'NO') {   if ($flag_latex_header_remove ne 'NO') {
     $texversion = &latex_header_footer_remove($texversion);      $texversion = &latex_header_footer_remove($texversion);
  } else {   } else {
     $texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/;      $texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/;
  }   }
  $result .= $texversion;   $result .= $texversion;
  $flag_latex_header_remove = 'YES';    $flag_latex_header_remove = 'YES'; 
       } elsif ($urlp=~ /\.pdf$/i) {
    if ($i > 0) {
       $result .= '\cleardoublepage';
    }
    $result .= &include_pdf($urlp);
    if ($i != $#master_seq) {
       if ($numberofcolumns eq '1') {
    $result .= '\newpage';
       } else {
    # the \\'s seem to be needed to let LaTeX know there's something
    # on the page since LaTeX seems to not like to clear an empty page.
    #
    $result .= '\\ \cleardoublepage';
       }
    }
    $flag_latex_header_remove = 'YES';
   
     } else {      } else {
  $texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'},   $texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'},
  $master_seq[$i]);   $master_seq[$i]);
Line 1851  ENDPART Line 1920  ENDPART
  $result .= $texversion;   $result .= $texversion;
  $flag_latex_header_remove = 'YES';      $flag_latex_header_remove = 'YES';   
     }          }    
     if (&Apache::loncommon::connection_aborted($r)) { last; }      if (&Apache::loncommon::connection_aborted($r)) { 
    last; 
       }
  }   }
  &Apache::lonxml::clear_problem_counter();   &Apache::lonxml::clear_problem_counter();
  if ($flag_page_in_sequence eq 'YES') {   if ($flag_page_in_sequence eq 'YES') {
Line 1905  ENDPART Line 1976  ENDPART
  my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};   my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
   
  #loop over students   #loop over students
  my $flag_latex_header_remove = 'NO';    my $flag_latex_header_remove = 'NO';
  my %moreenv;   my %moreenv;
          $moreenv{'instructor_comments'}='hide';           $moreenv{'instructor_comments'}='hide';
  $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);   $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
Line 2342  sub print_resources { Line 2413  sub print_resources {
   
           
     my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});      my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
       $header =~ s/\\begin{document}//;     #<<<<<
     my $title = &Apache::lonnet::gettitle($curresline);      my $title = &Apache::lonnet::gettitle($curresline);
     $title = &Apache::lonxml::latex_special_symbols($title);      $title = &Apache::lonxml::latex_special_symbols($title);
     my $body   ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';      my $body   ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
Line 2377  sub print_resources { Line 2449  sub print_resources {
  $rendered =~ s/\\end{document}//;   $rendered =~ s/\\end{document}//;
     }      }
     $current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut ';      $current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut ';
    } elsif($res_url = ~/\.pdf$/) {
       my $url = &Apache::lonnet::clutter($res_url);
       my $rendered  = &include_pdf($url);
       if ($remove_latex_header ne 'NO') {
    $rendered = &latex_header_footer_remove($rendered);
       }
       $current_output .= $rendered;
  } else {   } else {
     my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},$curresline);      my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},$curresline);
     if ($remove_latex_header ne 'NO') {      if ($remove_latex_header ne 'NO') {
Line 2389  sub print_resources { Line 2467  sub print_resources {
  }   }
     }      }
     $remove_latex_header = 'YES';      $remove_latex_header = 'YES';
  }   } 
  if (&Apache::loncommon::connection_aborted($r)) { last; }   if (&Apache::loncommon::connection_aborted($r)) { last; }
     }      }
   
   
     my $courseidinfo = &get_course();      my $courseidinfo = &get_course();
     if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }  
     if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection}  
     my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header');      my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header');
     my $header_line =      my $header_line =
  &format_page_header($LaTeXwidth, $parmhash{'print_header_format'},   &format_page_header($LaTeXwidth, $parmhash{'print_header_format'},
     $currentassignment, $courseidinfo, $fullname);      $currentassignment, $courseidinfo, $fullname, $usersection);
     my $header_start = ($columns_in_format == 1) ? '\lhead'      my $header_start = ($columns_in_format == 1) ? '\lhead'
                                          : '\fancyhead[LO]';                                           : '\fancyhead[LO]';
     $header_line = $header_start.'{'.$header_line.'}';      $header_line = $header_start.'{'.$header_line.'}';
   
     if ($current_output=~/\\documentclass/) {      if ($current_output=~/\\documentclass/) {
  $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /;   $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /;
     } else {      } else {
Line 2500  sub get_randomly_ordered_warning { Line 2577  sub get_randomly_ordered_warning {
     return '<message type="warning">'.$message.'</message>';      return '<message type="warning">'.$message.'</message>';
         }          }
     } else {      } else {
         &Apache::lonnet::logthis('Retrieval of resources to check for folders set to be randomly ordered failed - could not create navmap object');  
         $message = "Retrieval of information about ordering of resources failed.";           $message = "Retrieval of information about ordering of resources failed."; 
         return '<message type="warning">'.$message.'</message>';          return '<message type="warning">'.$message.'</message>';
     }      }
Line 2580  sub printHelper { Line 2656  sub printHelper {
   
     }      }
   
   
     # Detect whether we're coming from construction space      # Detect whether we're coming from construction space
     if ($env{'form.postdata'}=~/^(?:http:\/\/[^\/]+\/|\/|)\~([^\/]+)\/(.*)$/) {      if ($env{'form.postdata'}=~/^(?:http:\/\/[^\/]+\/|\/|)\~([^\/]+)\/(.*)$/) {
         $helper->{VARS}->{'filename'} = "~$1/$2";          $helper->{VARS}->{'filename'} = "~$1/$2";
Line 2697  sub printHelper { Line 2772  sub printHelper {
     }      }
   
     if (($helper->{'VARS'}->{'construction'} ne '1' ) &&      if (($helper->{'VARS'}->{'construction'} ne '1' ) &&
   
  $helper->{VARS}->{'postdata'} &&   $helper->{VARS}->{'postdata'} &&
  $helper->{VARS}->{'assignment'}) {   $helper->{VARS}->{'assignment'}) {
         # Allow problems from sequence          # Allow problems from sequence
         push @{$printChoices}, [&mt('Selected <b>Problems</b> in folder <b><i>[_1]</i></b>',$sequenceTitle), 'map_problems', 'CHOOSE_PROBLEMS'];          push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), 'map_problems', 'CHOOSE_PROBLEMS'];
         # Allow all resources from sequence          # Allow all resources from sequence
         push @{$printChoices}, [&mt('Selected <b>Resources</b> in folder <b><i>[_1]</i></b>',$sequenceTitle), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];          push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>'), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML'];
   
         my $helperFragment = <<HELPERFRAGMENT;          my $helperFragment = <<HELPERFRAGMENT;
   <state name="CHOOSE_PROBLEMS" title="Select Problem(s) to print">    <state name="CHOOSE_PROBLEMS" title="Select Problem(s) to print">
Line 2732  HELPERFRAGMENT Line 2806  HELPERFRAGMENT
  &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);   &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);
     }      }
   
     # If the user has pfo (print for otheres) allow them to print all       # If the user has pfo (print for others) allow them to print all 
     # problems and resources  in the entier course, optionally for selected students      # problems and resources  in the entire course, optionally for selected students
     if ($perm{'pfo'} &&  !$is_published  &&      if ($perm{'pfo'} &&  !$is_published  &&
         ($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) {           ($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { 
   
Line 2783  HELPERFRAGMENT Line 2857  HELPERFRAGMENT
 ALL_PROBLEMS  ALL_PROBLEMS
   
  if ($helper->{VARS}->{'assignment'}) {   if ($helper->{VARS}->{'assignment'}) {
     push @{$printChoices}, [&mt("Selected <b>Problems</b> from folder <b><i>[_1]</i></b> for <b>selected people</b>",$sequenceTitle), 'problems_for_students', 'CHOOSE_STUDENTS'];      push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'problems_for_students', 'CHOOSE_STUDENTS'];
     push @{$printChoices}, [&mt("Selected <b>Problems</b> from folder <b><i>[_1]</i></b> for <b>CODEd assignments</b>",$sequenceTitle), 'problems_for_anon', 'CHOOSE_ANON1'];      push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'problems_for_anon', 'CHOOSE_ANON1'];
  }   }
   
  my $randomly_ordered_warning =    my $randomly_ordered_warning = 
Line 2962  CHOOSE_ANON1 Line 3036  CHOOSE_ANON1
   
   
  if ($helper->{VARS}->{'assignment'}) {   if ($helper->{VARS}->{'assignment'}) {
     push @{$printChoices}, [&mt("Selected <b>Resources</b> from folder <b><i>[_1]</i></b> for <b>selected people</b>",$sequenceTitle), 'resources_for_students', 'CHOOSE_STUDENTS1'];      push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_students', 'CHOOSE_STUDENTS1'];
     push @{$printChoices}, [&mt("Selected <b>Resources</b> from folder <b><i>[_1]</i></b> for <b>CODEd assignments</b>",$sequenceTitle), 'resources_for_anon', 'CHOOSE_ANON2'];      push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','<b>','</b>','<b><i>'.$sequenceTitle.'</i></b>','<b>','</b>'), 'resources_for_anon', 'CHOOSE_ANON2'];
  }   }
           
   
Line 3086  CHOOSE_ANON2 Line 3160  CHOOSE_ANON2
  ) {   ) {
   
  my $pretty_dir = &Apache::lonnet::hreflocation($subdir);   my $pretty_dir = &Apache::lonnet::hreflocation($subdir);
         push @{$printChoices}, [&mt("Selected <b>Problems</b> from current subdirectory <b><i>[_1]</i></b>",$pretty_dir), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];          push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from current subdirectory [_3]','<b>','</b>','<b><i>'.$pretty_dir.'</i></b>','<b>','</b>'), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR'];
         my $xmlfrag = <<CHOOSE_FROM_SUBDIR;          my $xmlfrag = <<CHOOSE_FROM_SUBDIR;
   <state name="CHOOSE_FROM_SUBDIR" title="Select File(s) from <b><small>$pretty_dir</small></b> to print">    <state name="CHOOSE_FROM_SUBDIR" title="Select File(s) from <b><small>$pretty_dir</small></b> to print">
   
Line 3453  sub render { Line 3527  sub render {
     my $PaperType=&mt('Paper type');      my $PaperType=&mt('Paper type');
     my $landscape=&mt('Landscape');      my $landscape=&mt('Landscape');
     my $portrait=&mt('Portrait');      my $portrait=&mt('Portrait');
       my $pdfFormLabel=&mt('PDF-Formfields');
       my $with=&mt('with Formfields');
       my $without=&mt('without Formfields');
     $result.='<h3>'.&mt('Layout Options').'</h3>'      $result.='<h3>'.&mt('Layout Options').'</h3>'
             .&Apache::loncommon::start_data_table()              .&Apache::loncommon::start_data_table()
             .&Apache::loncommon::start_data_table_header_row()              .&Apache::loncommon::start_data_table_header_row()
             .'<th>'.$PageLayout.'</th>'              .'<th>'.$PageLayout.'</th>'
             .'<th>'.$NumberOfColumns.'</th>'              .'<th>'.$NumberOfColumns.'</th>'
             .'<th>'.$PaperType.'</th>'              .'<th>'.$PaperType.'</th>'
               .'<th>'.$pdfFormLabel.'</th>'
             .&Apache::loncommon::end_data_table_header_row()              .&Apache::loncommon::end_data_table_header_row()
             .&Apache::loncommon::start_data_table_row()              .&Apache::loncommon::start_data_table_row()
     .'<td>'      .'<td>'
Line 3499  sub render { Line 3577  sub render {
     $result .= <<HTML;      $result .= <<HTML;
         </select>          </select>
     </td>      </td>
       <td align='center'>
           <select name='${var}.pdfFormFields'>
               <option selected value='no'>$without</option>
               <option value='yes'>$with</option>
           </select>
       </td>
 HTML  HTML
     $result.=&Apache::loncommon::end_data_table_row()      $result.=&Apache::loncommon::end_data_table_row()
             .&Apache::loncommon::end_data_table();              .&Apache::loncommon::end_data_table();
Line 3513  sub postprocess { Line 3597  sub postprocess {
     my $helper = Apache::lonhelper->getHelper();      my $helper = Apache::lonhelper->getHelper();
     $helper->{VARS}->{$var} =       $helper->{VARS}->{$var} = 
         $env{"form.$var.layout"} . '|' . $env{"form.$var.cols"} . '|' .          $env{"form.$var.layout"} . '|' . $env{"form.$var.cols"} . '|' .
         $env{"form.$var.paper"};          $env{"form.$var.paper"} . '|' . $env{"form.$var.pdfFormFields"};
     return 1;      return 1;
 }  }
   
Line 3625  sub render { Line 3709  sub render {
     }  else {      }  else {
  $size{'margin'} += 2.54;   $size{'margin'} += 2.54;
     }      }
     my %text = ('format' => 'How should each column be formatted?',      my %lt = &Apache::lonlocal::texthash(
  'width'  => 'Width:',          'format' => 'How should each column be formatted?',
  'height' => 'Height:',          'width'  => 'Width',
  'margin' => 'Left Margin:',);          'height' => 'Height',
     %text = &Apache::lonlocal::texthash(%text);          'margin' => 'Left Margin'
       );
     $result .= <<ELEMENTHTML;  
       $result .= '<p>'.$lt{'format'}.'</p>'
 <p>$text{'format'}</p>                .&Apache::lonhtmlcommon::start_pick_box()
                 .&Apache::lonhtmlcommon::row_title($lt{'width'})
 <table cellpadding='3'>                .'<input type="text" name="'.$var.'.width" value="'.$size{'width'}.'" size="4" />'
   <tr>                .'<select name="'.$var.'.widthunit">'
     <td align='right'><b>$text{'width'}</b></td>                .$size{'width_options'}
     <td align='left'><input type='text' name='$var.width' value="$size{'width'}" size='4' /></td>                .'</select>'
     <td align='left'>                .&Apache::lonhtmlcommon::row_closure()
       <select name='$var.widthunit'>                .&Apache::lonhtmlcommon::row_title($lt{'height'})
       $size{'width_options'}                .'<input type="text" name="'.$var.'.height" value="'.$size{'height'}.'" size="4" />'
       </select>                .'<select name="'.$var.'.heightunit">'
     </td>                .$size{'height_options'}
   </tr>                .'</select>'
   <tr>                .&Apache::lonhtmlcommon::row_closure()
     <td align='right'><b>$text{'height'}</b></td>                .&Apache::lonhtmlcommon::row_title($lt{'margin'})
     <td align='left'><input type='text' name="$var.height" value="$size{'height'}" size='4' /></td>                .'<input type="text" name="'.$var.'.lmargin" value="'.$size{'margin'}.'" size="4" />'
     <td align='left'>                .'<select name="'.$var.'.lmarginunit">'
       <select name='$var.heightunit'>                .$size{'margin_options'}
       $size{'height_options'}                .'</select>'
       </select>                .&Apache::lonhtmlcommon::row_closure(1)
     </td>                .&Apache::lonhtmlcommon::end_pick_box();
   </tr>      # <p>Hint: Some instructors like to leave scratch space for the student by
   <tr>      # making the width much smaller than the width of the page.</p>
     <td align='right'><b>$text{'margin'}</b></td>  
     <td align='left'><input type='text' name='$var.lmargin' value="$size{'margin'}" size='4' /></td>  
     <td align='left'>  
       <select name='$var.lmarginunit'>  
       $size{'margin_options'}  
       </select>  
     </td>  
   </tr>  
 </table>  
   
 <!--<p>Hint: Some instructors like to leave scratch space for the student by  
 making the width much smaller than the width of the page.</p>-->  
   
 ELEMENTHTML  
   
     return $result;      return $result;
 }  }

Removed from v.1.545.2.3  
changed lines
  Added in v.1.552


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