--- loncom/interface/lonprintout.pm 2009/06/23 10:22:38 1.556.2.1 +++ loncom/interface/lonprintout.pm 2010/11/13 01:57:14 1.568.2.10 @@ -1,7 +1,8 @@ +# # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.556.2.1 2009/06/23 10:22:38 foxr Exp $ +# $Id: lonprintout.pm,v 1.568.2.10 2010/11/13 01:57:14 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -26,7 +27,6 @@ # # package Apache::lonprintout; - use strict; use Apache::Constants qw(:common :http); use Apache::lonxml; @@ -74,6 +74,183 @@ my $ssi_retry_count = 5; # Some arbitrar my $font_size = 'normalsize'; # Default is normalsize... +#---------------------------- Helper helpers. ------------------------- + +# Returns the text needd for a student chooser. +# that text must still be parsed by the helper xml parser. +# Parameters: +# this_state - State name of the chooser. +# sort_choice - variable to hold the sorting choice. +# variable - Name of variable to hold students. +# next_state - State after chooser. + + +sub generate_student_chooser { + my ($this_state, + $sort_choice, + $variable, + $next_state) = @_; + my $result = < + Select sorting order of printout + + + Sort by section then student + Sort by students across sections. + + +


+ + + +CHOOSE_STUDENTS + + return $result; +} + +# Generate the text needed for a resource chooser given the top level of +# the sequence/page +# +# Parameters: +# this_state - State name of the chooser. +# prompt_text - Text to use to prompt user. +# resource_options - Resource tag options e.g. +# "multichoice='1', toponly='1', addstatus='1'" +# that control the selection and appearance of the +# resource selector. +# variable - Name of the variable to hold the choice +# next_state - Name of the next state the helper should transition +# to +# top_url - Top level URL within which to make the selector. +# If empty the top level sequence is shown. +# filter - How to filter the resources. +# value_func - function. +# choice_func - If not empty generates a with this function. +# start_new_option +# - Fragment appended after valuefunc. +# +# +sub generate_resource_chooser { + my ($this_state, + $prompt_text, + $resource_options, + $variable, + $next_state, + $top_url, + $filter, + $choice_func, + $value_func, + $start_new_option) = @_; + + my $result = < + + $next_state + return $filter; +CHOOSE_RESOURCES + if ($choice_func ne '') { + $result .= "return $choice_func;"; + } + if ($top_url ne '') { + $result .= "$top_url"; + } + $result .= <return $value_func; + $start_new_option + + +CHOOSE_RESOURCES + + return $result; +} +# +# Generate the helper XML for a code choice helper dialog: +# +# Paramters: +# $helper - Reference to the helper. +# $state - Name of the state for the chooser. +# $next_state - Name fo the state to follow the chooser. +# $bubble_types - Populates the bubble sheet type dropt down. +# $code_selections - Provides set of code choices that have been used +# $saved_codes - Provides the list of saved codes. +# +# Returns; +# The Xml of the code chooser. +# +sub generate_code_selector { + my ($helper, + $state, + $next_state, + $bubble_types, + $code_selections, + $saved_codes) = @_; # Unpack the parameters. + + my $result = < + $next_state +

Fill out one of the forms below

+


+

Generate new CODEd Assignments

+
Number of CODEd assignments to print: + + + if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) && + !\$helper->{'VARS'}{'REUSE_OLD_CODES'} && + !\$helper->{'VARS'}{'SINGLE_CODE'} && + !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) { + return "You need to specify the number of assignments to print"; + } + return undef; + + +
+ Names to save the CODEs under for later: + + +
+ Bubble sheet type: + + + $bubble_types + +
+
+

Print a Specific CODE


+
Enter a CODE to print: + + + if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'} && + !\$helper->{'VARS'}{'REUSE_OLD_CODES'} && + !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) { + return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'}, + \$helper->{'VARS'}{'CODE_OPTION'}); + } else { + return undef; # Other forces control us. + } + + +
+ $code_selections +
+

Reprint a Set of Saved CODEs

+ Select saved CODEs: + + + $saved_codes + +
+ +CHOOSE_ANON1 + + return $result; +} + +#----------------------------------------------------------------------- + # Fetch the contents of a resource, uninterpreted. # This is used here to fetch a latex file to be included @@ -104,7 +281,7 @@ sub fetch_raw_resource { sub annotate { my ($symb) = @_; - my $annotation_text = &Apache::admannotations::get_annotation($symb, 1); + my $annotation_text = &Apache::loncommon::get_annotation($symb, 1); my $result = ""; @@ -129,11 +306,16 @@ sub set_font_size { my ($text) = @_; - $text =~ s/\\begin{document}/\\begin{document}{\\$font_size/; - $text =~ s/\\end{document}/}\\end{document}/; - return $text; + # 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}/; + return $text; } # include_pdf - PDF files are included into the @@ -197,7 +379,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 @@ -230,6 +412,10 @@ sub include_pdf { sub ssi_with_retries { my ($resource, $retries, %form) = @_; + my $target = $form{'grade_target'}; + my $aom = $form{'answer_output_mode'}; + + my ($content, $response) = &Apache::loncommon::ssi_with_retries($resource, $retries, %form); if (!$response->is_success) { @@ -313,13 +499,13 @@ sub printf_style_subst { # %a - Assignment name. # %c - Course name. # %n - Student name. -# %s - The section if it is supplied. # sub format_page_header { - my ($width, $format, $assignment, $course, $student, $section) = @_; + my ($width, $format, $assignment, $course, $student) = @_; - $width = &recalcto_mm($width); # Get width in mm. + my $chars_per_line = int($width/2); # Character/textline. + # Default format? if ($format eq '') { @@ -333,48 +519,37 @@ sub format_page_header { # but only truncate the course. # - Allow the assignment to be 2 lines (wrapped). # - 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); + } - my $name_length = int($chars_per_line *3 /4); - my $sec_length = int($chars_per_line / 5); - - $format = "%$name_length".'n'; - - if ($section) { - $format .= ' - Sec: '."%$sec_length".'s'; - } - - $format .= '\\\\%c \\\\ %a'; - + $format = "\\textbf{$student} $course \\hfill \\thepage \\\\ \\textit{$assignment}"; - } - # 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 - # there is '\\ \\ ' in the page header. That's cause a error in LaTeX - if($format =~ /\\\\\s\\\\\s/) { - #TODO find sensible caption for page header - my $testPrintout = '\\\\'.&mt('Construction Space').' \\\\'.&mt('Test-Printout '); - $format =~ s/\\\\\s\\\\\s/$testPrintout/; + } else { + # 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); + + # 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!!! } - return $format; - } # @@ -944,6 +1119,7 @@ sub old_character_chart { $result =~ s/&(rdquo|#8221);/\'\'/g; + return $result; } @@ -1069,8 +1245,6 @@ sub get_course { my $courseidinfo; if (defined($env{'request.course.id'})) { $courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header'); - my $sec = $env{'request.course.sec'}; - } return $courseidinfo; } @@ -1081,9 +1255,9 @@ sub page_format_transformation { if ($selectionmade eq '4') { if ($choice eq 'all_problems') { - $assignment='Problems from the Whole Course'; + $assignment=&mt('Problems from the Whole Course'); } else { - $assignment='Resources from the Whole Course'; + $assignment=&mt('Resources from the Whole Course'); } } else { $assignment=&Apache::lonxml::latex_special_symbols($assignment,'header'); @@ -1093,6 +1267,7 @@ sub page_format_transformation { my $name = &get_name(); my $courseidinfo = &get_course(); + if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } my $header_text = $parmhash{'print_header_format'}; $header_text = &format_page_header($textwidth, $header_text, $assignment, $courseidinfo, $name); @@ -1113,7 +1288,13 @@ 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 /; } 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 /;} @@ -1305,13 +1486,195 @@ 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, $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/|) { + $currentURL=~s|^(/adm/wrapper/)?ext/|http://|; + my $title=&Apache::lonnet::gettitle($symb); + $title = &Apache::lonxml::latex_special_symbols($title); + } else { + my $esc_currentURL= $currentURL; + $esc_currentURL =~ s/_/\\_/g; + $result.=$esc_currentURL; + } + $result .= '\\\\'; + + 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 the overall page description. This is then followed by the + # components of the page. Each of which must be printed independently. + my $the_page = shift(@page_resources); + + + foreach my $resource (@page_resources) { + my $resource_src = $resource->src(); # Essentially the URL of the resource. + $result .= $resource->title() . '\\\\'; + + # 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|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{'pdfFormFields'} = 'no'; + $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')) { + my %answerform = %form; + + + $answerform{'problem_split'}=$parmhash{'problem_stream_switch'}; + $answerform{'grade_target'}='answer'; + $answerform{'answer_output_mode'}='tex'; + $answerform{'rndseed'}=$rndseed; + if ($helper->{'VARS'}->{'probstatus'} eq 'exam') { + $answerform{'problemtype'}='exam'; + } + $resources_printed .= $urlp.':'; + my $answer=&ssi_with_retries($urlp,$ssi_retry_count, %answerform); + + 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 /; + + } + $texversion = &latex_header_footer_remove($texversion); + + # the first remaining line is a comment from londefdef the second + # line seems to be an extraneous \vskip 1mm \\\\ : + # (imperfect removal from header_footer_remove? + + $texversion =~ s/\\vskip 1mm \\\\\\\\//; + + $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}'; + return $result; +} + # # List of recently generated print files # sub recently_generated { - my $r=shift; - my $prtspool=$r->dir_config('lonPrtDir'); + my ($prtspool) = @_; + my $output; + my $zip_result; my $pdf_result; opendir(DIR,$prtspool); @@ -1344,10 +1707,10 @@ sub recently_generated { if ($ext eq 'zip') { $zip_result .= $result; } } if ($zip_result || $pdf_result) { - $r->print('
'); + $output = '
'; } if ($zip_result) { - $r->print('

'.&mt('Recently generated printout zip files')."

\n" + $output .='

'.&mt('Recently generated printout zip files')."

\n" .&Apache::loncommon::start_data_table() .&Apache::loncommon::start_data_table_header_row() .''.&mt('Download').'' @@ -1355,11 +1718,10 @@ sub recently_generated { .''.&mt('File Size (Bytes)').'' .&Apache::loncommon::end_data_table_header_row() .$zip_result - .&Apache::loncommon::end_data_table() - ); + .&Apache::loncommon::end_data_table(); } if ($pdf_result) { - $r->print('

'.&mt('Recently generated printouts')."

\n" + $output .='

'.&mt('Recently generated printouts')."

\n" .&Apache::loncommon::start_data_table() .&Apache::loncommon::start_data_table_header_row() .''.&mt('Download').'' @@ -1367,9 +1729,9 @@ sub recently_generated { .''.&mt('File Size (Bytes)').'' .&Apache::loncommon::end_data_table_header_row() .$pdf_result - .&Apache::loncommon::end_data_table() - ); + .&Apache::loncommon::end_data_table(); } + return $output; } # @@ -1381,7 +1743,7 @@ sub recently_generated { # A reference to a page break hash. # # -#use Data::Dumper; +# use Data::Dumper; #sub dump_helper_vars { # my ($helper) = @_; # my $helpervars = Dumper($helper->{'VARS'}); @@ -1549,8 +1911,16 @@ sub output_data { ENDPART - - my $start_page = &Apache::loncommon::start_page('Preparing Printout',$js); + # Breadcrumbs + #FIXME: Choose better/different breadcrumbs?!? Links? + my $brcrum = [{'href' => '', + 'text' => 'Helper'}, #FIXME: Different origin possible than print out helper? + {'href' => '', + 'text' => 'Preparing Printout'}]; + + my $start_page = &Apache::loncommon::start_page('Preparing Printout', + $js, + {'bread_crumbs' => $brcrum,}); my $msg = &mt('Please stand by while processing your print request, this may take some time ...'); $r->print($start_page."\n

\n$msg\n

\n"); @@ -1572,11 +1942,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); @@ -1592,7 +1959,7 @@ ENDPART my %form; $form{'grade_target'} = 'tex'; $form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); - $form{'pdfFormFields'} = $pdfFormFields; + $form{'pdfFormFields'} = 'no'; # If form.showallfoils is set, then request all foils be shown: # privilege will be enforced both by not allowing the @@ -1725,8 +2092,9 @@ ENDPART } elsif ($cleanURL!~m|^/adm/| && $currentURL=~/\.(sequence|page)$/ && $helper->{'VARS'}->{'construction'} eq '1') { #printing content of sequence from the construction space + + $currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|; -# $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); $result .= &print_construction_sequence($currentURL, $helper, %form, $LaTeXwidth); $result .= '\end{document}'; @@ -1738,7 +2106,7 @@ ENDPART $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;} $resources_printed .= $currentURL.':'; - my $texversion=&ssi_with_retries($currentURL, $ssi_retry_count, %form); + my $texversion = &ssi_with_retries($currentURL, $ssi_retry_count, %form); if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { my $annotation = &annotate($currentURL); $texversion =~ s/(\\end{document})/$annotation$1/; @@ -1760,11 +2128,23 @@ ENDPART } elsif ($cleanURL =~ /\.pdf$/i) { $result .= &include_pdf($cleanURL); $result .= '\end{document}'; + } elsif ($cleanURL =~ /\.page$/i) { # Print page in non construction space contexts. + + # Determine the set of resources in the map of the page: + + my $navmap = Apache::lonnavmaps::navmap->new(); + my @page_resources = $navmap->retrieveResources($cleanURL); + $result .= &print_page_in_course($helper, $rparmhash, + $cleanURL, \@page_resources); + + } else { $result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, $helper->{'VARS'}->{'symb'}); } } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') or + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page') or ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') or ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources') or # BUGBUG @@ -1773,9 +2153,12 @@ ENDPART #-- produce an output string - if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') { + if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') ) { $selectionmade = 2; - } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') { + } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page')) + { $selectionmade = 3; } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') ) { @@ -1819,7 +2202,6 @@ ENDPART $urlp=&Apache::lonnet::clutter($urlp); $form{'symb'}=$master_seq[$i]; - my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #title of the assignment which contains this problem if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;} @@ -1829,6 +2211,17 @@ ENDPART && $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { $resources_printed .= $urlp.':'; &Apache::lonxml::remember_problem_counter(); + if ($flag_latex_header_remove eq 'NO') { + $texversion.=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); # RF + unless (($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') || + (($i==0) && + (($urlp=~/\.page$/) || + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') || + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page')))) { + + $flag_latex_header_remove = 'YES'; + } + } $texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form); if ($urlp=~/\.page$/) { ($texversion,my $number_of_columns_page) = &page_cleanup($texversion); @@ -1848,12 +2241,22 @@ ENDPART &Apache::lonxml::restore_problem_counter(); my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform); + if ($urlp =~ /\.page$/) { + $answer =~ s/\\end{document}(\d*)$//; + } if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { - $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; + if ($urlp =~ /\.page$/) { + my @probs = split(/\\keephidden{ENDOFPROBLEM}/,$texversion); + my $lastprob = pop(@probs); + $texversion = join('\keephidden{ENDOFPROBLEM}',@probs). + $answer.'\keephidden{ENDOFPROBLEM}'.$lastprob; + } else { + $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; + } } else { - if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) { + if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/) { $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); - $texversion =~ s/\\begin{document}//; +# $texversion =~ s/\\begin{document}//; my $title = &Apache::lonnet::gettitle($master_seq[$i]); $title = &Apache::lonxml::latex_special_symbols($title); my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; @@ -1883,6 +2286,7 @@ ENDPART if (($selectionmade == 4) and ($assignment ne $prevassignment)) { my $name = &get_name(); my $courseidinfo = &get_course(); + if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } $prevassignment=$assignment; my $header_text = $parmhash{'print_header_format'}; $header_text = &format_page_header($textwidth, $header_text, @@ -1902,7 +2306,7 @@ ENDPART $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; if ($urlp=~/\/syllabus$/) {$urlp=~s/\/res//;} $resources_printed .= $urlp.':'; - my $texversion=&ssi_with_retries($urlp, $ssi_retry_count, %form); + my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form); if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { my $annotation = &annotate($urlp); $texversion =~ s/(\\end{document)/$annotation$1/; @@ -1919,7 +2323,11 @@ ENDPART if ($i > 0) { $result .= '\cleardoublepage'; } - $result .= &include_pdf($urlp); + my $texfrompdf = &include_pdf($urlp); + if ($flag_latex_header_remove ne 'NO') { + $texfrompdf = &latex_header_footer_remove($texfrompdf); + } + $result .= $texfrompdf; if ($i != $#master_seq) { if ($numberofcolumns eq '1') { $result .= '\newpage'; @@ -1953,6 +2361,7 @@ ENDPART } $result .= '\end{document}'; } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') || + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students_from_page') || ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') || ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')){ @@ -1960,6 +2369,7 @@ ENDPART #-- prints assignments for whole class or for selected students my $type; if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') || + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students_from_page') || ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems_students') ) { $selectionmade=5; $type='problems'; @@ -1999,7 +2409,8 @@ ENDPART my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; #loop over students - my $flag_latex_header_remove = 'NO'; + + my $flag_latex_header_remove = 'NO'; my %moreenv; $moreenv{'instructor_comments'}='hide'; $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); @@ -2047,6 +2458,7 @@ ENDPART &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); $result .= $print_array[0].' \end{document}'; } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon') || + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon_page') || ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon') ) { my $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'}; my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'}; @@ -2402,8 +2814,7 @@ sub print_resources { # so we will just rely on prntout.pl to strip ENDOFSTUDENTSTAMP from the # postscript. Each ENDOFSTUDENTSTAMP will go on a line by itself. # - - + my $syllabus_first = 0; foreach my $curresline (@{$master_seq}) { if (defined $page_breaks{$curresline}) { if($i != 0) { @@ -2413,17 +2824,27 @@ sub print_resources { $i++; if ( !($type eq 'problems' && - ($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library)$/)) ) { + ($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) ) { my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline); if (&Apache::lonnet::allowed('bre',$res_url)) { if ($res_url!~m|^ext/| && $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { $printed .= $curresline.':'; - &Apache::lonxml::remember_problem_counter(); my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); - + if ($res_url =~ /\.page$/) { + if ($remove_latex_header eq 'NO') { + if (!($rendered =~ /\\begin\{document\}/)) { + $rendered = &print_latex_header().$rendered; + } + } + if ($remove_latex_header eq 'YES') { + $rendered = &latex_header_footer_remove($rendered); + } else { + $rendered =~ s/\\end{document}\d*//; + } + } if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { # Use a copy of the hash so we don't pervert it on future loop passes. @@ -2441,7 +2862,9 @@ sub print_resources { my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); - $header =~ s/\\begin{document}//; #<<<<< + unless ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') { + $header =~ s/\\begin{document}//; #<<<<< + } my $title = &Apache::lonnet::gettitle($curresline); $title = &Apache::lonxml::latex_special_symbols($title); my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; @@ -2451,12 +2874,12 @@ sub print_resources { $rendered = $header.$body; } } - if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { my $url = &Apache::lonnet::clutter($res_url); my $annotation = &annotate($url); $rendered =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; } + my $junk; if ($remove_latex_header eq 'YES') { $rendered = &latex_header_footer_remove($rendered); } else { @@ -2464,6 +2887,9 @@ sub print_resources { } $current_output .= $rendered; } elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { + if ($i == 1) { + $syllabus_first = 1; + } $printed .= $curresline.':'; my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { @@ -2499,12 +2925,16 @@ sub print_resources { if (&Apache::loncommon::connection_aborted($r)) { last; } } - + if ($syllabus_first) { + $current_output =~ s/\\\\ Last updated:/Last updated:/ + } 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 $header_line = &format_page_header($LaTeXwidth, $parmhash{'print_header_format'}, - $currentassignment, $courseidinfo, $fullname, $usersection); + $currentassignment, $courseidinfo, $fullname); my $header_start = ($columns_in_format == 1) ? '\lhead' : '\fancyhead[LO]'; $header_line = $header_start.'{'.$header_line.'}'; @@ -2730,6 +3160,8 @@ sub printHelper { $subdir = substr($helper->{VARS}->{'filename'}, 0, rindex($helper->{VARS}->{'filename'}, '/') + 1); } else { + # From course space: + if ($symb ne '') { ($map, $id, $url) = &Apache::lonnet::decode_symb($symb); $helper->{VARS}->{'postdata'} = @@ -2739,7 +3171,6 @@ sub printHelper { $is_published=1; # From resource space. } $url = &Apache::lonnet::clutter($url); - if (!$resourceTitle) { # if the resource doesn't have a title, use the filename my $postdata = $helper->{VARS}->{'postdata'}; $resourceTitle = substr($postdata, rindex($postdata, '/') + 1); @@ -2799,79 +3230,104 @@ sub printHelper { "' variable='FINISHPAGE' />"; } - if (($helper->{'VARS'}->{'construction'} ne '1' ) && + # If not construction space user can print the components of a page: + + my $page_ispage; + my $page_title; + if (!$helper->{VARS}->{'construction'}) { + my $varspostdata = $helper->{VARS}->{'postdata'}; + my $varsassignment = $helper->{VARS}->{'assignment'}; + my $page_navmap = Apache::lonnavmaps::navmap->new(); + if (defined($page_navmap)) { + my @page_resources = $page_navmap->retrieveResources($url); + if(defined($page_resources[0])) { + $page_ispage = $page_resources[0]->is_page(); + $page_title = $page_resources[0]->title(); + my $resourcesymb = $page_resources[0]->symb(); + my ($pagemap, $pageid, $pageurl) = &Apache::lonnet::decode_symb($symb); + if ($page_ispage) { + push @{$printChoices}, + [&mt('Selected [_1]Problems[_2] from page [_3]', '', '', ''.$page_title.''), + 'map_problems_in_page', + 'CHOOSE_PROBLEMS_PAGE']; + push @{$printChoices}, + [&mt('Selected [_1]Resources[_2] from page [_3]', '', '', ''.$page_title.''), + 'map_resources_in_page', + 'CHOOSE_RESOURCES_PAGE']; + } + my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE', + 'Select Problem(s) to print', + "multichoice='1' toponly='1' addstatus='1' closeallpages='1'", + 'RESOURCES', + 'PAGESIZE', + $url, + $isProblem, '', $symbFilter, + $start_new_option); + + + $helperFragment .= &generate_resource_chooser('CHOOSE_RESOURCES_PAGE', + 'Select Resource(s) to print', + 'multichoice="1" toponly="1" addstatus="1" closeallpages="1"', + 'RESOURCES', + 'PAGESIZE', + $url, + $isNotMap, '', $symbFilter, + $start_new_option); + + + + + + &Apache::lonxml::xmlparse($r, 'helper', $helperFragment); + + } + } + } + + if (($helper->{'VAR'}->{'construction'} ne '1' ) && $helper->{VARS}->{'postdata'} && $helper->{VARS}->{'assignment'}) { # Allow problems from sequence - push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3]','','',''.$sequenceTitle.''), 'map_problems', 'CHOOSE_PROBLEMS']; + push @{$printChoices}, + [&mt('Selected [_1]Problems[_2] from folder [_3]','','',''.$sequenceTitle.''), + 'map_problems', + 'CHOOSE_PROBLEMS']; # Allow all resources from sequence - push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','','',''.$sequenceTitle.''), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; - - my $helperFragment = < - - PAGESIZE - return $isProblem; - $map - return $symbFilter; - $start_new_option - - - - - - PAGESIZE - return $isNotMap; - $map - return $symbFilter; - $start_new_option - - -HELPERFRAGMENT + push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','','',''.$sequenceTitle.''), + 'map_problems_pages', + 'CHOOSE_PROBLEMS_HTML']; + my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS', + 'Select Problem(s) to print', + 'multichoice="1" toponly="1" addstatus="1" closeallpages="1"', + 'RESOURCES', + 'PAGESIZE', + $map, + $isProblem, '', + $symbFilter, + $start_new_option); + $helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML', + 'Select Resource(s) to print', + 'multichoice="1" toponly="1" addstatus="1" closeallpages="1"', + 'RESOURCES', + 'PAGESIZE', + $map, + $isNotMap, '', + $symbFilter, + $start_new_option); &Apache::lonxml::xmlparse($r, 'helper', $helperFragment); } # If the user has pfo (print for others) allow them to print all # problems and resources in the entire course, optionally for selected students + my $post_data = $helper->{VARS}->{'postdata'}; if ($perm{'pfo'} && !$is_published && - ($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { + ($post_data=~/\/res\// || $post_data =~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { push @{$printChoices}, [&mtn('Selected Problems from entire course'), 'all_problems', 'ALL_PROBLEMS']; push @{$printChoices}, [&mtn('Selected Resources from entire course'), 'all_resources', 'ALL_RESOURCES']; push @{$printChoices}, [&mtn('Selected Problems from entire course for selected people'), 'all_problems_students', 'ALL_PROBLEMS_STUDENTS']; - &Apache::lonxml::xmlparse($r, 'helper', < - - PAGESIZE - return $isProblemOrMap; - return $isNotMap; - return $symbFilter; - $start_new_option - - - - - PAGESIZE - return $isNotMap; - return $symbFilter; - $start_new_option - - - - - STUDENTS1 - return $isProblemOrMap; - return $isNotMap; - return $symbFilter; - $start_new_option - - +my $suffixXml = < Select sorting order of printout @@ -2881,12 +3337,55 @@ HELPERFRAGMENT


- ALL_PROBLEMS + &Apache::lonxml::xmlparse($r, 'helper', + &generate_resource_chooser('ALL_PROBLEMS', + 'SelectProblem(s) to print', + 'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"', + 'RESOURCES', + 'PAGESIZE', + '', + $isProblemOrMap, $isNotMap, + $symbFilter, + $start_new_option) . + &generate_resource_chooser('ALL_RESOURCES', + 'Select Resource(s) to print', + " toponly='0' multichoice='1' suppressEmptySequences='0' addstatus='1' closeallpages='1'", + 'RESOURCES', + 'PAGESIZE', + '', + $isNotMap,'',$symbFilter, + $start_new_option) . + &generate_resource_chooser('ALL_PROBLEMS_STUDENTS', + 'Select Problem(s) to print', + 'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"', + 'RESOURCES', + 'STUDENTS1', + '', + $isProblemOrMap,'' , $symbFilter, + $start_new_option) . + $suffixXml + ); if ($helper->{VARS}->{'assignment'}) { - push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]','','',''.$sequenceTitle.'','',''), 'problems_for_students', 'CHOOSE_STUDENTS']; - push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]','','',''.$sequenceTitle.'','',''), 'problems_for_anon', 'CHOOSE_ANON1']; + + # If we were looking at a page, allow a selection of problems from the page + # either for selected students or for coded assignments. + + if ($page_ispage) { + push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]selected people[_5]', + '', '', ''.$page_title.'', '', ''), + 'problems_for_students_from_page', 'CHOOSE_TGT_STUDENTS_PAGE']; + push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from page [_3] for [_4]CODEd assignments[_5]', + '', '', ''.$page_title.'', '', ''), + 'problems_for_anon_page', 'CHOOSE_ANON1_PAGE']; + } + push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]', + '','',''.$sequenceTitle.'','',''), + 'problems_for_students', 'CHOOSE_STUDENTS']; + push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]', + '','',''.$sequenceTitle.'','',''), + 'problems_for_anon', 'CHOOSE_ANON1']; } my $randomly_ordered_warning = @@ -2901,20 +3400,15 @@ ALL_PROBLEMS # with one state, and use REGEXPs at inclusion time to set state names # and next states for better mix and match capability # - my $resource_selector=< - $randomly_ordered_warning - - PRINT_FORMATTING -
Select resources for the assignment
- - return $isProblem; - $map - return $symbFilter; - $start_new_option - - + my $resource_selector= &generate_resource_chooser('SELECT_PROBLEMS', + 'Select resources to print', + 'multichoice="1" addstatus="1" closeallpages="1"', + 'RESOURCES', + 'PRINT_FORMATTING', + $map, + $isProblem, '', $symbFilter, + $start_new_option); + $resource_selector .= <
How should the results be printed?
@@ -2934,19 +3428,31 @@ ALL_PROBLEMS RESOURCE_SELECTOR + $resource_selector .= &generate_resource_chooser('CHOOSE_STUDENTS_PAGE', + 'Select Problem(s) to print', + "multichoice='1' addstatus='1' closeallpages ='1'", + 'RESOURCES', + 'PRINT_FORMATTING', + $url, + $isProblem, '', $symbFilter, + $start_new_option); + + +# Generate student choosers. + - &Apache::lonxml::xmlparse($r, 'helper', < - Select sorting order of printout - - Sort by section then student - Sort by students across sections. - -


- - - $resource_selector -CHOOSE_STUDENTS + + &Apache::lonxml::xmlparse($r, 'helper', + &generate_student_chooser('CHOOSE_TGT_STUDENTS_PAGE', + 'student_sort', + 'STUDENTS', + 'CHOOSE_STUDENTS_PAGE')); + &Apache::lonxml::xmlparse($r, 'helper', + &generate_student_chooser('CHOOSE_STUDENTS', + 'student_sort', + 'STUDENTS', + 'SELECT_PROBLEMS')); + &Apache::lonxml::xmlparse($r, 'helper', $resource_selector); my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; @@ -3004,63 +3510,31 @@ CHOOSE_STUDENTS if ($codechoice eq '') { $codechoice='Default'; } - &Apache::lonxml::xmlparse($r, 'helper', < - SELECT_PROBLEMS -

Fill out one of the forms below

-


-

Generate new CODEd Assignments

-
Number of CODEd assignments to print: - - - if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) && - !\$helper->{'VARS'}{'REUSE_OLD_CODES'} && - !\$helper->{'VARS'}{'SINGLE_CODE'} && - !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) { - return "You need to specify the number of assignments to print"; - } - return undef; - - -
- Names to save the CODEs under for later: - - -
- Bubble sheet type: - - - $codechoice - -
-
-

Print a Specific CODE


-
Enter a CODE to print: - - - if(!\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'} && - !\$helper->{'VARS'}{'REUSE_OLD_CODES'} && - !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) { - return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'}, - \$helper->{'VARS'}{'CODE_OPTION'}); - } else { - return undef; # Other forces control us. - } - - -
- $code_selection -
-

Reprint a Set of Saved CODEs

- Select saved CODEs: - - - $namechoice - -
- - $resource_selector -CHOOSE_ANON1 + my $anon1 = &generate_code_selector($helper, + 'CHOOSE_ANON1', + 'SELECT_PROBLEMS', + $codechoice, + $code_selection, + $namechoice) . $resource_selector; + + + &Apache::lonxml::xmlparse($r, 'helper',$anon1); + + my $anon_page = &generate_code_selector($helper, + 'CHOOSE_ANON1_PAGE', + 'SELECT_PROBLEMS_PAGE', + $codechoice, + $code_selection, + $namechoice) . + &generate_resource_chooser('SELECT_PROBLEMS_PAGE', + 'Select Problem(s) to print', + "multichoice='1' addstatus='1' closeallpages ='1'", + 'RESOURCES', + 'PRINT_FORMATTING', + $url, + $isProblem, '', $symbFilter, + $start_new_option); + &Apache::lonxml::xmlparse($r, 'helper', $anon_page); if ($helper->{VARS}->{'assignment'}) { @@ -3072,7 +3546,6 @@ CHOOSE_ANON1 $resource_selector=< $randomly_ordered_warning - PRINT_FORMATTING
Select resources for the assignment
+ NUMBER_PER_PDF
How should the results be printed?
@@ -3186,7 +3660,6 @@ CHOOSE_ANON2 )) && $helper->{VARS}->{'assignment'} eq "" ) { - my $pretty_dir = &Apache::lonnet::hreflocation($subdir); push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from current subdirectory [_3]','','',''.$pretty_dir.'','',''), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; my $xmlfrag = <print($helper->display()); + my $footer; if ($helper->{STATE} eq 'START') { - &recently_generated($r); + my $prtspool=$r->dir_config('lonPrtDir'); + $footer = &recently_generated($prtspool); } + $r->print($helper->display($footer)); &Apache::lonhelper::unregisterHelperTags(); return OK; @@ -3581,9 +4056,6 @@ sub render { my $PaperType=&mt('Paper type'); my $landscape=&mt('Landscape'); my $portrait=&mt('Portrait'); - my $pdfFormLabel=&mt('PDF-Formfields'); - my $with=&mt('with Formfields'); - my $without=&mt('without Formfields'); $result.='

'.&mt('Layout Options').'

' @@ -3592,7 +4064,6 @@ sub render { .''.$PageLayout.'' .''.$NumberOfColumns.'' .''.$PaperType.'' - .''.$pdfFormLabel.'' .&Apache::loncommon::end_data_table_header_row() .&Apache::loncommon::start_data_table_row() .'' @@ -3632,12 +4103,7 @@ sub render { } $result .= < - - - + HTML $result.=&Apache::loncommon::end_data_table_row() @@ -3731,12 +4197,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; @@ -3817,11 +4279,8 @@ sub preprocess { ($papersize) = split(/ /, $papersize); - if ($laystyle eq 'L') { - $laystyle = 'album'; - } else { - $laystyle = 'book'; - } + $laystyle = &Apache::lonprintout::map_laystyle($laystyle); + # Figure out some good defaults for the print out and set them: my %size;