--- loncom/interface/lonprintout.pm 2009/07/14 09:30:20 1.557.2.1 +++ loncom/interface/lonprintout.pm 2009/07/14 11:08:00 1.557.2.2 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.557.2.1 2009/07/14 09:30:20 foxr Exp $ +# $Id: lonprintout.pm,v 1.557.2.2 2009/07/14 11:08:00 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -197,7 +197,7 @@ sub include_pdf { # -# ssi_with_retries - Does the server side include of a resource. +# ssi_with_retries- Does the server side include of a resource. # if the ssi call returns an error we'll retry it up to # the number of times requested by the caller. # If we still have a proble, no text is appended to the @@ -943,7 +943,6 @@ sub old_character_chart { $result =~ s/&(ldquo|#8220);/\`\`/g; $result =~ s/&(rdquo|#8221);/\'\'/g; -&Apache::lonnet::logthis("After pass through old character chart: '$result'"); return $result; @@ -1307,13 +1306,38 @@ sub unsupported { return $result; } +# +# Map from helper layout style to the book/album: +# +sub map_laystyle { + my ($laystyle) = @_; + if ($laystyle eq 'L') { + $laystyle='album'; + } else { + $laystyle='book'; + } + return $laystyle; +} sub print_page_in_course { - my ($helper, $currentURL, $resources) = @_; + my ($helper, $rparmhash, $currentURL, $resources) = @_; + my %parmhash = %$rparmhash; my @page_resources = @$resources; my $mode = $helper->{'VARS'}->{'LATEX_TYPE'}; my $symb = $helper->{'VARS'}->{'symb'}; + + my $format_from_helper = $helper->{'VARS'}->{'FORMAT'}; + + + my @temporary_array=split /\|/,$format_from_helper; + my ($laystyle,$numberofcolumns,$papersize,$pdfFormFields)=@temporary_array; + $laystyle = &map_laystyle($laystyle); + my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle, + $numberofcolumns); + my $LaTeXwidth=&recalcto_mm($textwidth); + + if ($mode ne '') {$mode='\\'.$mode} my $result.= &print_latex_header($mode); if ($currentURL=~m|^(/adm/wrapper/)?ext/|) { @@ -1324,6 +1348,12 @@ sub print_page_in_course { } else { $result.=$currentURL; } + if ($helper->{'VARS'}->{'style_file'}=~/\w/) { + &Apache::lonnet::appenv({'construct.style' => + $helper->{'VARS'}->{'style_file'}}); + } elsif ($env{'construct.style'}) { + &Apache::lonnet::delenv('construct.style'); + } # First is theo verall page description. This is then followed by the # components of the page. Each of which must be printed independently. @@ -1332,15 +1362,111 @@ sub print_page_in_course { $result .= "URL: $currentURL " .'\\\\'; foreach my $resource (@page_resources) { - my $resource_src = $resource->src(); - my $resource_symb = $resource->symb(); - $resource_symb = &Apache::lonnet::clutter($resource_symb); - my $resource_kind = $resource->kind(); - my $resource_title = $resource->title(); - - $result .= &Apache::lonxml::latex_special_symbols("Src: $resource_src symb: $resource_symb "); - $result .= &Apache::lonxml::latex_special_symbols("Kind: $resource_kind Title: $resource_title"); - $result .= '\\\\'; + my $resource_src = $resource->src(); # Essentially the URL of the resource. + + # Recurse if a .page: + + if ($resource_src =~ /.page$/i) { + my $navmap = Apache::lonnavmaps::navmap->new(); + my @page_resources = $navmap->retrieveResources($resource_src); + $result .= &print_page_in_course($helper, $rparmhash, + $resource_src, \@page_resources); + } + # these resources go through the XML transformer: + + elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm\xhtml|xhtm)$/) { + my $urlp = &Apache::lonnet::clutter($resource_src); + my %form; + my %moreenv; + + &Apache::lonxml::remember_problem_counter(); + $moreenv{'request.filename'}=$urlp; + if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {$form{'problemtype'}='exam';} + + $form{'grade_target'} = 'tex'; + $form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); + $form{'pdfFormFiels'} = $pdfFormFields; # + $form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'}; + + $form{'problem_split'}=$parmhash{'problem_stream_switch'}; + $form{'suppress_tries'}=$parmhash{'suppress_tries'}; + $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; + $form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; + $form{'print_annotations'}=$helper->{'VARS'}->{'PRINT_ANNOTATIONS'}; + if (($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') || + ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) { + $form{'problem_split'}='yes'; + } + my $rndseed = time; + if ($helper->{'VARS'}->{'curseed'}) { + $rndseed=$helper->{'VARS'}->{'curseed'}; + } + $form{'rndseed'}=$rndseed; + &Apache::lonnet::appenv(\%moreenv); + + &Apache::lonxml::clear_problem_counter(); + + my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form); + + # current document with answers.. no need to encap in minipage + # since there's only one answer. + + if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || + ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { + $form{'problem_split'}=$parmhash{'problem_stream_switch'}; + $form{'grade_target'}='answer'; + $form{'answer_output_mode'}='tex'; + $form{'rndseed'}=$rndseed; + if ($helper->{'VARS'}->{'probstatus'} eq 'exam') { + $form{'problemtype'}='exam'; + } + $resources_printed .= $currentURL.':'; + my $answer=&ssi_with_retries($currentURL,$ssi_retry_count, %form); + + + if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { + $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; + } else { + $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); + if ($helper->{'VARS'}->{'construction'} ne '1') { + my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'}); + $title = &Apache::lonxml::latex_special_symbols($title); + $texversion.='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; + $texversion.=&path_to_problem($urlp,$LaTeXwidth); + } else { + $texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm '; + my $URLpath=$urlp; + $URLpath=~s/~([^\/]+)/public_html\/$1\/$1/; + $texversion.=&path_to_problem($URLpath,$LaTeXwidth); + } + $texversion.='\vskip 1 mm '.$answer.'\end{document}'; + } + + + + + + } + # Print annotations. + + + if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { + my $annotation .= &annotate($currentURL); + $texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; + } + + if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { + $texversion=&IndexCreation($texversion,$currentURL); + } + if ($helper->{'VARS'}->{'CONSTR_RESOURSE_URL'} eq 'yes') { + $texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$currentURL| \\strut\\\\\\strut /; + + } + $result .= $texversion; + if ($currentURL=~m/\.page\s*$/) { + ($result,$numberofcolumns) = &page_cleanup($result); + } + } } $result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}'; @@ -1614,11 +1740,8 @@ ENDPART my $number_of_columns = 1; #used only for pages to determine the width of the cell my @temporary_array=split /\|/,$format_from_helper; my ($laystyle,$numberofcolumns,$papersize,$pdfFormFields)=@temporary_array; - if ($laystyle eq 'L') { - $laystyle='album'; - } else { - $laystyle='book'; - } + + $laystyle = &map_laystyle($laystyle); my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns); my $assignment = $env{'form.assignment'}; my $LaTeXwidth=&recalcto_mm($textwidth); @@ -1812,7 +1935,8 @@ ENDPART my $navmap = Apache::lonnavmaps::navmap->new(); my @page_resources = $navmap->retrieveResources($cleanURL); - $result .= &print_page_in_course($helper, $cleanURL, \@page_resources); + $result .= &print_page_in_course($helper, $rparmhash, + $cleanURL, \@page_resources); } else { @@ -3789,12 +3913,8 @@ sub render { my ($laystyle, $cols, $papersize) = split(/\|/, $format); ($papersize) = split(/ /, $papersize); + $laystyle = &Apache::lonprintout::map_laystyle($laystyle); - if ($laystyle eq 'L') { - $laystyle = 'album'; - } else { - $laystyle = 'book'; - } my %size; @@ -3875,11 +3995,8 @@ sub preprocess { ($papersize) = split(/ /, $papersize); - if ($laystyle eq 'L') { - $laystyle = 'album'; - } else { - $laystyle = 'book'; - } + $laystyle = &map_laystyle($laystyle); + # Figure out some good defaults for the print out and set them: my %size;