--- loncom/interface/lonprintout.pm 2009/08/03 11:01:14 1.560 +++ loncom/interface/lonprintout.pm 2009/10/12 10:59:48 1.560.2.5 @@ -1,7 +1,10 @@ +# + + # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.560 2009/08/03 11:01:14 foxr Exp $ +# $Id: lonprintout.pm,v 1.560.2.5 2009/10/12 10:59:48 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -26,7 +29,6 @@ # # package Apache::lonprintout; - use strict; use Apache::Constants qw(:common :http); use Apache::lonxml; @@ -74,6 +76,105 @@ 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) = @_; + &Apache::lonnet::logthis("Student chooser next state: $next_state, this state: $this_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) = @_; + + &Apache::lonnet::logthis("Top URL = $top_url"); + 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; +} + + +#----------------------------------------------------------------------- + # Fetch the contents of a resource, uninterpreted. # This is used here to fetch a latex file to be included @@ -1343,7 +1444,7 @@ sub print_page_in_course { if ($mode ne '') {$mode='\\'.$mode} - my $result.= &print_latex_header($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); @@ -1413,9 +1514,6 @@ sub print_page_in_course { my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form); - # There seems to be an extraneous \vskip 1mm \\\\ : - - $texversion =~ s/^\\vskip 1mm \\\\\\\\//; # current document with answers.. no need to encap in minipage # since there's only one answer. @@ -1438,7 +1536,7 @@ sub print_page_in_course { if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; } else { - $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); + $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); @@ -1473,6 +1571,14 @@ sub print_page_in_course { $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); @@ -1560,7 +1666,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'}); @@ -1962,6 +2068,8 @@ ENDPART $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 @@ -1970,9 +2078,13 @@ 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')) + { + &Apache::lonnet::logthis("Selectionmade => 3"); $selectionmade = 3; } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') ) { @@ -2012,11 +2124,11 @@ ENDPART $result.="\\newpage\n"; } } - 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); $form{'symb'}=$master_seq[$i]; - + &Apache::lonnet::logthis("Element $i Sequence $sequence Middle $middle_thingy URLP $urlp"); 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;} @@ -2024,11 +2136,17 @@ ENDPART my $texversion=''; if ($urlp!~m|^/adm/| && $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { + &Apache::lonnet::logthis("Problem"); $resources_printed .= $urlp.':'; &Apache::lonxml::remember_problem_counter(); + &Apache::lonnet::logthis("Fetching tex for $urlp"); + my $debug = Dumper(%form); + &Apache::lonnet::logthis("Form: $debug"); + $texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form); + &Apache::lonnet::logthis("texversion so far: $texversion"); if ($urlp=~/\.page$/) { - + &Apache::lonnet::logthis("Special page actions"); ($texversion,my $number_of_columns_page) = &page_cleanup($texversion); if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} $texversion =~ s/\\end{document}\d*/\\end{document}/; @@ -2050,6 +2168,7 @@ ENDPART $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; } else { if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) { + &Apache::lonnet::logthis("problem printing"); $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); $texversion =~ s/\\begin{document}//; my $title = &Apache::lonnet::gettitle($master_seq[$i]); @@ -2071,7 +2190,9 @@ ENDPART } if ($flag_latex_header_remove ne 'NO') { + &Apache::lonnet::logthis("Removing header/footer 1"); $texversion = &latex_header_footer_remove($texversion); + &Apache::lonnet::logthis("With h/f removed we have: $texversion"); } else { $texversion =~ s/\\end{document}//; } @@ -2095,6 +2216,7 @@ ENDPART } } $result .= $texversion; + &Apache::lonnet::logthis("About to set rem header true with $result"); $flag_latex_header_remove = 'YES'; } elsif ($urlp=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) { $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; @@ -2107,6 +2229,7 @@ ENDPART } if ($flag_latex_header_remove ne 'NO') { + &Apache::lonnet::logthis("Removing header & footer 2"); $texversion = &latex_header_footer_remove($texversion); } else { $texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/; @@ -2134,6 +2257,7 @@ ENDPART $texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'}, $master_seq[$i]); if ($flag_latex_header_remove ne 'NO') { + &Apache::lonnet::logthis("Removing header/footer 3"); $texversion = &latex_header_footer_remove($texversion); } else { $texversion =~ s/\\end{document}//; @@ -2151,6 +2275,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')){ @@ -2158,6 +2283,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'; @@ -2195,9 +2321,11 @@ ENDPART $helper->{'VARS'}->{'NUMBER_TO_PRINT'} = $#students+1; } my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; + &Apache::lonnet::logthis("RESOURCES: ". $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); @@ -2396,6 +2524,7 @@ ENDPART $newurlp=&path_to_problem($newurlp,$LaTeXwidth); $texversion =~ s/(\\begin{minipage}{\\textwidth})/$1 $newurlp/; if ($flag_latex_header_remove ne 'NO') { + &Apache::lonnet::logthis("Removing header/footer: 4"); $texversion = &latex_header_footer_remove($texversion); } else { $texversion =~ s/\\end{document}//; @@ -2600,9 +2729,10 @@ 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. # - + &Apache::lonnet::logthis("In print_resources"); foreach my $curresline (@{$master_seq}) { + &Apache::lonnet::logthis("Res: $curresline"); if (defined $page_breaks{$curresline}) { if($i != 0) { $current_output.= "\\newpage\n"; @@ -2620,7 +2750,7 @@ sub print_resources { &Apache::lonxml::remember_problem_counter(); my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); - + &Apache::lonnet::logthis("student view: $rendered"); 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. @@ -2648,13 +2778,14 @@ sub print_resources { $rendered = $header.$body; } } - + &Apache::lonnet::logthis("After preprending header: $rendered"); if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') { my $url = &Apache::lonnet::clutter($res_url); my $annotation = &annotate($url); $rendered =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/; } if ($remove_latex_header eq 'YES') { + &Apache::lonnet::logthis("Removing header/footer: 5"); $rendered = &latex_header_footer_remove($rendered); } else { $rendered =~ s/\\end{document}//; @@ -2669,6 +2800,7 @@ sub print_resources { $annotation =~ s/(\\end{document})/$annotation$1/; } if ($remove_latex_header eq 'YES') { + &Apache::lonnet::logthis("Removing header/footer: 6"); $rendered = &latex_header_footer_remove($rendered); } else { $rendered =~ s/\\end{document}//; @@ -2678,12 +2810,14 @@ sub print_resources { my $url = &Apache::lonnet::clutter($res_url); my $rendered = &include_pdf($url); if ($remove_latex_header ne 'NO') { + &Apache::lonnet::logthis("Removing header/footer: 7"); $rendered = &latex_header_footer_remove($rendered); } $current_output .= $rendered; } else { my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},$curresline); if ($remove_latex_header ne 'NO') { + &Apache::lonnet::logthis("Removing header/footer: 8"); $rendered = &latex_header_footer_remove($rendered); } else { $rendered =~ s/\\end{document}//; @@ -2927,6 +3061,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'} = @@ -2934,9 +3070,9 @@ sub printHelper { } else { $url = $helper->{VARS}->{'postdata'}; $is_published=1; # From resource space. + &Apache::lonnet::logthis("Resource url $url"); } $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); @@ -2996,79 +3132,103 @@ 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(); + 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']; + &Apache::lonnet::logthis("Map url : $map"); + 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 @@ -3078,12 +3238,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', '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 = @@ -3098,20 +3301,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', + '', + $isProblem, , $symbFilter, + $start_new_option); + $resource_selector .= <
How should the results be printed?
@@ -3131,19 +3329,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'}; @@ -3269,7 +3479,6 @@ CHOOSE_ANON1 $resource_selector=< $randomly_ordered_warning - PRINT_FORMATTING
Select resources for the assignment
+ NUMBER_PER_PDF
How should the results be printed?