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'}) {
+ !\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'} ) {
+
return "You need to specify the number of assignments to print";
}
+ if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) >= 1) &&
+ (\$helper->{'VARS'}{'SINGLE_CODE'} ne '') ) {
+ return 'Specifying number of codes to print and a specific code is not compatible';
+ }
return undef;
@@ -228,6 +372,8 @@ sub generate_code_selector {
!\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'},
\$helper->{'VARS'}{'CODE_OPTION'});
+ } elsif (\$helper->{'VARS'}{'SINGLE_CODE'} ne ''){
+ return 'Specifying a code name is incompatible with specifying number of codes.';
} else {
return undef; # Other forces control us.
}
@@ -249,6 +395,41 @@ CHOOSE_ANON1
return $result;
}
+sub generate_format_selector {
+ my ($helper,$title,$nextstate, $thisstate) = @_;
+ my $secpdfoption;
+ my $state = 'PRINT_FORMATTING';
+ if ($thisstate) {
+ $state = $thisstate;
+ }
+ unless (($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') ) {
+ $secpdfoption = 'Each PDF contains exactly one section';
+ }
+ return <
+ $nextstate
+ How should the results be printed?
+
+ Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)
+ Add one empty page/column after each student\'s assignment
+ Add two empty pages/column after each student\'s assignment
+ Add three empty pages/column after each student\'s assignment
+
+ PAGESIZE
+ How do you want assignments split into PDF files?
+
+ All assignments in a single PDF file
+ $secpdfoption
+ Each PDF contains exactly one assignment
+
+ Specify the number of assignments per PDF:
+
+
+RESOURCE_SELECTOR
+}
+
#-----------------------------------------------------------------------
@@ -306,7 +487,14 @@ sub set_font_size {
my ($text) = @_;
- $text =~ s/\\begin{document}/\\begin{document}{\\$font_size/;
+ # There appear to be cases where the font directive is empty.. in which
+ # case the first substituion would insert a spurious \ oh happy day.
+ # as this has been the cause of much mystery and hair pulling _sigh_
+
+ if ($font_size ne '') {
+
+ $text =~ s/\\begin{document}/\\begin{document}{\\$font_size/;
+ }
$text =~ s/\\end{document}/}\\end{document}/;
return $text;
@@ -1309,7 +1497,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 /;}
@@ -1540,7 +1734,9 @@ sub print_page_in_course {
my $title=&Apache::lonnet::gettitle($symb);
$title = &Apache::lonxml::latex_special_symbols($title);
} else {
- $result.=$currentURL;
+ my $esc_currentURL= $currentURL;
+ $esc_currentURL =~ s/_/\\_/g;
+ $result.=$esc_currentURL;
}
$result .= '\\\\';
@@ -1570,7 +1766,7 @@ sub print_page_in_course {
}
# these resources go through the XML transformer:
- elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm\xhtml|xhtm)$/) {
+ 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;
@@ -1581,7 +1777,7 @@ sub print_page_in_course {
$form{'grade_target'} = 'tex';
$form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth);
- $form{'pdfFormFiels'} = $pdfFormFields; #
+ $form{'pdfFormFields'} = $pdfFormFields; #
$form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'};
$form{'problem_split'}=$parmhash{'problem_stream_switch'};
@@ -1685,8 +1881,8 @@ sub print_page_in_course {
# 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);
@@ -1719,10 +1915,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').' | '
@@ -1730,11 +1926,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').' | '
@@ -1742,9 +1937,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;
}
#
@@ -1904,6 +2099,8 @@ sub set_form_extraspace {
#
sub print_construction_sequence {
my ($currentURL, $helper, %form, $LaTeXwidth) = @_;
+
+
my $result;
my $rndseed=time;
if ($helper->{'VARS'}->{'curseed'}) {
@@ -2005,12 +2202,45 @@ sub print_construction_sequence {
return $result;
}
+#
+# Top level for generating print output.
+#
+# May call print_resources if multiple resources will be printed.
+#
+# The main driver is $selectionmade which reflects the type of print out
+# requested:
+# Value Print type:
+# 1 Print resource that's being looked at.
+# 2 Print problems in a map or in a page.
+# 3 Print pages in a map or resources in a page.
+# 4 Print all problems or all resources.
+# 5 Print problems for seleted students.
+# 6 Print selected problems from a folder.
+# 7 Print print selected resources from some scope.
+# 8 Print resources for selected students.
+#
+#BZ 5209
+# 2 map_incomplete_problems_seq Print incomplete problems from the current
+# folder in student context.
+# 101 map_incomplete_problems_people_seq Print incomplete problems from the
+# current folder in privileged context.
+# 102 incomplete_problems_selpeople_course Print incomplete problems for
+# selected people from the entire course.
+#
+# Item 101 has much the same processing as 8,
+# Item 102 has much the same processing as 8.
+#
+# Differences: Item 101, 102 require per-student filtering of the resource
+# set so that only the incomplete resources are printed.
+# For item 100, filtering was done at the helper level.
+
sub output_data {
my ($r,$helper,$rparmhash) = @_;
my %parmhash = %$rparmhash;
$ssi_error = 0; # This will be set nonzero by failing ssi's.
$resources_printed = '';
$font_size = $helper->{'VARS'}->{'fontsize'};
+ my $print_type = $helper->{'VARS'}->{'PRINT_TYPE'}; # Allows textual simplification.
my $do_postprocessing = 1;
my $js = <
@@ -2060,7 +2290,7 @@ ENDPART
$env{'form.pagebreaks'} = $helper->{'VARS'}->{'FINISHPAGE'};
&set_form_extraspace($helper);
- $env{'form.lastprinttype'} = $helper->{'VARS'}->{'PRINT_TYPE'};
+ $env{'form.lastprinttype'} = $print_type;
&Apache::loncommon::store_course_settings('print',
{'pagebreaks' => 'scalar',
'extraspace' => 'scalar',
@@ -2110,8 +2340,7 @@ ENDPART
&Apache::lonnet::delenv('construct.style');
}
-
- if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') {
+ if ($print_type eq 'current_document') {
#-- single document - problem, page, html, xml, ...
my ($currentURL,$cleanURL);
@@ -2273,32 +2502,35 @@ ENDPART
$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
- ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences')
- ) {
-
+ } elsif (($print_type eq 'map_problems') or
+ ($print_type eq 'map_problems_in_page') or
+ ($print_type eq 'map_resources_in_page') or
+ ($print_type eq 'map_problems_pages') or
+ ($print_type eq 'all_problems') or
+ ($print_type eq 'all_resources') or # BUGBUG
+ ($print_type eq 'select_sequences') or
+ ($print_type eq 'map_incomplete_problems_seq')
+ ) {
+
#-- produce an output string
- if (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or
- ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') ) {
+ if (($print_type eq 'map_problems') or
+ ($print_type eq 'map_incomplete_problems_seq') or
+ ($print_type eq 'map_problems_in_page') ) {
$selectionmade = 2;
- } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or
- ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page'))
+ } elsif (($print_type eq 'map_problems_pages') or
+ ($print_type eq 'map_resources_in_page'))
{
$selectionmade = 3;
- } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')
+ } elsif (($print_type eq 'all_problems')
) {
$selectionmade = 4;
- } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_resources') { #BUGBUG
+ } elsif ($print_type eq 'all_resources') { #BUGBUG
$selectionmade = 4;
- } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences') {
+ } elsif ($print_type eq 'select_sequences') {
$selectionmade = 7;
}
+
$form{'problem_split'}=$parmhash{'problem_stream_switch'};
$form{'suppress_tries'}=$parmhash{'suppress_tries'};
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
@@ -2345,7 +2577,13 @@ ENDPART
&Apache::lonxml::remember_problem_counter();
if ($flag_latex_header_remove eq 'NO') {
$texversion.=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); # RF
- $flag_latex_header_remove = 'YES';
+ unless (($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') ||
+ (($i==0) &&
+ (($urlp=~/\.page$/) ||
+ ($print_type eq 'map_problems_in_page') ||
+ ($print_type eq 'map_resources_in_page')))) {
+ $flag_latex_header_remove = 'YES';
+ }
}
$texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form);
if ($urlp=~/\.page$/) {
@@ -2353,7 +2591,7 @@ ENDPART
if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;}
$texversion =~ s/\\end{document}\d*/\\end{document}/;
$flag_page_in_sequence = 'YES';
- }
+ }
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
@@ -2365,13 +2603,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}//; # FIXME
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 ';
@@ -2437,7 +2684,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';
@@ -2460,7 +2711,7 @@ ENDPART
}
$result .= $texversion;
$flag_latex_header_remove = 'YES';
- }
+ }
if (&Apache::loncommon::connection_aborted($r)) {
last;
}
@@ -2470,20 +2721,20 @@ ENDPART
$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;
}
$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')){
+ } elsif (($print_type eq 'problems_for_students') ||
+ ($print_type eq 'problems_for_students_from_page') ||
+ ($print_type eq 'all_problems_students') ||
+ ($print_type eq 'resources_for_students')){
#-- 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') ) {
+ if (($print_type eq 'problems_for_students') ||
+ ($print_type eq 'problems_for_students_from_page') ||
+ ($print_type eq 'all_problems_students') ) {
$selectionmade=5;
$type='problems';
- } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students') {
+ } elsif ($print_type eq 'resources_for_students') {
$selectionmade=8;
$type='resources';
}
@@ -2561,15 +2812,16 @@ ENDPART
$resources_printed .= ":";
$print_array[$i].=$output;
$student_names[$i].=$person.':'.$fullname.'_END_';
- &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname);
+# &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname);
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student');
$flag_latex_header_remove = 'YES';
if (&Apache::loncommon::connection_aborted($r)) { last; }
}
&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') ) {
+ } elsif (($print_type eq 'problems_for_anon') ||
+ ($print_type eq 'problems_for_anon_page') ||
+ ($print_type eq 'resources_for_anon') ) {
my $cdom =$env{'course.'.$env{'request.course.id'}.'.domain'};
my $cnum =$env{'course.'.$env{'request.course.id'}.'.num'};
my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'};
@@ -2631,11 +2883,12 @@ ENDPART
@allcodes=keys(%allcodes);
}
my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
- my ($type) = split(/_/,$helper->{'VARS'}->{'PRINT_TYPE'});
+ my ($type) = split(/_/,$print_type);
&adjust_number_to_print($helper);
my $number_per_page=$helper->{'VARS'}->{'NUMBER_TO_PRINT'};
- if ($number_per_page eq '0' || $number_per_page eq 'all') {
- $number_per_page=$num_todo;
+ if ($number_per_page eq '0' || $number_per_page eq 'all'
+ || $number_per_page eq 'section') {
+ $number_per_page=$num_todo > 0 ? $num_todo : 1;
}
my $flag_latex_header_remove = 'NO';
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline','75');
@@ -2661,7 +2914,7 @@ ENDPART
}
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
$result .= $print_array[0].' \end{document}';
- } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_from_directory') {
+ } elsif ($print_type eq 'problems_from_directory') {
#prints selected problems from the subdirectory
$selectionmade = 6;
my @list_of_files=split /\|\|\|/, $helper->{'VARS'}->{'FILES'};
@@ -2743,7 +2996,13 @@ ENDPART
# Only post process if that has not been turned off e.g. by a raw latex resource.
if ($do_postprocessing) {
- $result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'},$selectionmade);
+ $result = &page_format_transformation($papersize,
+ $laystyle,$numberofcolumns,
+ $print_type,$result,
+ $helper->{VARS}->{'assignment'},
+ $helper->{'VARS'}->{'TABLE_CONTENTS'},
+ $helper->{'VARS'}->{'TABLE_INDEX'},
+ $selectionmade);
$result = &latex_corrections($number_of_columns,$result,$selectionmade,
$helper->{'VARS'}->{'ANSWER_TYPE'});
#if ($numberofcolumns == 1) {
@@ -2904,6 +3163,7 @@ sub print_resources {
$namepostfix .="Name: ";
$fullname = "CODE - ".$moreenv->{'CODE'};
}
+
# Fullname may have special latex characters that need \ prefixing:
#
@@ -2933,9 +3193,8 @@ sub print_resources {
}
$current_output .= &get_extra_vspaces($helper, $curresline);
$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/|
@@ -2944,6 +3203,18 @@ 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);
+ 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.
@@ -2961,7 +3232,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 ';
@@ -3018,11 +3291,13 @@ sub print_resources {
}
}
$remove_latex_header = 'YES';
- }
+ }
if (&Apache::loncommon::connection_aborted($r)) { last; }
}
-
+ if ($syllabus_first) {
+ $current_output =~ s/\\\\ Last updated:/Last updated:/
+ }
my $courseidinfo = &get_course();
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header');
my $header_line =
@@ -3031,11 +3306,8 @@ sub print_resources {
my $header_start = ($columns_in_format == 1) ? '\lhead'
: '\fancyhead[LO]';
$header_line = $header_start.'{'.$header_line.'}';
- if ($current_output=~/\\documentclass/ && (!$syllabus_first)) {
+ if ($current_output=~/\\documentclass/) {
$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /;
- } elsif ($syllabus_first) {
-
- $current_output =~ s/\\\\ Last updated:/Last updated:/
} else {
my $blankpages =
'\clearpage\strut\clearpage'x$helper->{'VARS'}->{'EMPTY_PAGES'};
@@ -3108,6 +3380,11 @@ sub init_perm {
$perm{'pfo'}=&Apache::lonnet::allowed('pfo',
$env{'request.course.id'}.'/'.$env{'request.course.sec'});
}
+ $perm{'vgr'}=&Apache::lonnet::allowed('vgr',$env{'request.course.id'});
+ if (!$perm{'vgr'}) {
+ $perm{'vgr'}=&Apache::lonnet::allowed('vgr',
+ $env{'request.course.id'}.'/'.$env{'request.course.sec'});
+ }
}
sub get_randomly_ordered_warning {
@@ -3255,6 +3532,8 @@ sub printHelper {
my ($map, $id, $url);
my $subdir;
my $is_published=0; # True when printing from resource space.
+ my $res_printable = 1; # By default the current resource is printable.
+ my $userCanPrint = ($perm{'pav'} || $perm{'pfo'});
# Get the resource name from construction space
if ($helper->{VARS}->{'construction'}) {
@@ -3269,7 +3548,12 @@ sub printHelper {
($map, $id, $url) = &Apache::lonnet::decode_symb($symb);
$helper->{VARS}->{'postdata'} =
&Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url));
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ my $res = $navmap->getBySymb($symb);
+ $res_printable = $res->resprintable() || $userCanPrint; #printability in course context
} else {
+ # Resource space.
+
$url = $helper->{VARS}->{'postdata'};
$is_published=1; # From resource space.
}
@@ -3279,6 +3563,8 @@ sub printHelper {
$resourceTitle = substr($postdata, rindex($postdata, '/') + 1);
}
$subdir = &Apache::lonnet::filelocation("", $url);
+
+
}
if (!$helper->{VARS}->{'curseed'} && $env{'form.curseed'}) {
$helper->{VARS}->{'curseed'}=$env{'form.curseed'};
@@ -3308,18 +3594,29 @@ sub printHelper {
my $printChoices = [];
my $paramHash;
- if ($resourceTitle) {
+ # If there is a current resource and it is printable
+ # Give that as a choice.
+
+ if ($resourceTitle && $res_printable) {
push @{$printChoices}, ["$resourceTitle (".&mt('the resource you just saw on the screen').")", 'current_document', 'PAGESIZE'];
}
+
# Useful filter strings
- my $isProblem = '($res->is_problem()||$res->contains_problem||$res->is_practice()) ';
+
+ my $isPrintable = ' && $res->resprintable()';
+
+ my $isProblem = '(($res->is_problem()||$res->contains_problem() ||$res->is_practice()))';
+ $isProblem .= $isPrintable unless $userCanPrint;
$isProblem .= ' && !$res->randomout()' if !$userCanSeeHidden;
- my $isProblemOrMap = '$res->is_problem() || $res->contains_problem() || $res->is_sequence() || $res->is_practice()';
- my $isNotMap = '!$res->is_sequence()';
+ my $isProblemOrMap = '($res->is_problem() || $res->contains_problem() || $res->is_sequence() || $res->is_practice())';
+ $isProblemOrMap .= $isPrintable unless $userCanPrint;
+ my $isNotMap = '(!$res->is_sequence())';
+ $isNotMap .= $isPrintable unless $userCanPrint;
$isNotMap .= ' && !$res->randomout()' if !$userCanSeeHidden;
my $isMap = '$res->is_map()';
- my $symbFilter = '$res->shown_symb()';
+ $isMap .= $isPrintable unless $userCanPrint;
+ my $symbFilter = '$res->shown_symb() ';
my $urlValue = '$res->link()';
$helper->declareVar('SEQUENCE');
@@ -3399,6 +3696,34 @@ sub printHelper {
if (($helper->{'VAR'}->{'construction'} ne '1' ) &&
$helper->{VARS}->{'postdata'} &&
$helper->{VARS}->{'assignment'}) {
+
+ # BZ 5209 - Print incomplete problems from sequence:
+ # the exact form of this depends on whether or not we are privileged or a mere
+ # plebe of s student:
+
+ my $printSelector = 'map_incomplete_problems_seq';
+ my $nextState = 'CHOOSE_INCOMPLETE_SEQ';
+ my $textSuffix = '';
+
+ if ($userCanPrint) {
+ $printSelector = 'map_incomplete_problems_people_seq';
+ $nextState = 'CHOOSE_INCOMPLETE_PEOPLE_SEQ';
+ $textSuffix = ' for selected students';
+ my $helperStates =
+ &create_incomplete_folder_selstud_helper($helper, $map);
+ &Apache::lonxml::xmlparse($r, 'helper', $helperStates);
+ } else {
+ my $helperStates = &create_incomplete_folder_helper($helper, $map); # Create needed states for student.
+ &Apache::lonxml::xmlparse($r, 'helper', $helperStates);
+ }
+
+ push(@{$printChoices},
+ [&mt('Selected Incomplete [_1]Problems[_2] from folder [_3]' . $textSuffix,
+ '', '',
+ ''. $sequenceTitle . ''),
+ $printSelector,
+ $nextState]);
+
# Allow problems from sequence
push @{$printChoices},
[&mt('Selected [_1]Problems[_2] from folder [_3]','','',''.$sequenceTitle.''),
@@ -3433,9 +3758,21 @@ sub printHelper {
# 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 &&
($post_data=~/\/res\// || $post_data =~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) {
+ # BZ 5209 - incomplete problems from entire course:
+
+ push(@{$printChoices},
+ [&mtn('Selected incomplete Problems from entire course for selected people'),
+ 'incomplete_problems_selpeople_course', 'INCOMPLETE_PROBLEMS_COURSE_RESOURCES']);
+ my $helperFragment = &create_incomplete_course_helper($helper); # Create needed states.
+
+ &Apache::lonxml::xmlparse($r, 'helper', $helperFragment);
+
+ # Selected problems/resources from entire course:
+
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'];
@@ -3520,27 +3857,15 @@ ALL_PROBLEMS
$map,
$isProblem, '', $symbFilter,
$start_new_option);
- $resource_selector .= <
- How should the results be printed?
-
- Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)
- Add one empty page/column after each student\'s assignment
- Add two empty pages/column after each student\'s assignment
- Add three empty pages/column after each student\'s assignment
-
- PAGESIZE
- How do you want assignments split into PDF files?
-
- All assignments in a single PDF file
- Each PDF contains exactly one section
- Each PDF contains exactly one assignment
-
- Specify the number of assignments per PDF:
-
-
-RESOURCE_SELECTOR
- $resource_selector .= &generate_resource_chooser('CHOOSE_STUDENTS_PAGE',
+ my $secpdfoption;
+ unless (($helper->{'VARS'} eq 'problems_for_anon') ||
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_anon_page') ||
+ ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_anon') ) {
+ $secpdfoption = 'Each PDF contains exactly one section';
+ }
+ $resource_selector .= &generate_format_selector($helper,
+ 'How should results be printed?').
+ &generate_resource_chooser('CHOOSE_STUDENTS_PAGE',
'Select Problem(s) to print',
"multichoice='1' addstatus='1' closeallpages ='1'",
'RESOURCES',
@@ -3650,6 +3975,9 @@ RESOURCE_SELECTOR
if ($helper->{VARS}->{'assignment'}) {
+
+ # Assignment printing:
+
push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','','',''.$sequenceTitle.'','',''), 'resources_for_students', 'CHOOSE_STUDENTS1'];
push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','','',''.$sequenceTitle.'','',''), 'resources_for_anon', 'CHOOSE_ANON2'];
}
@@ -3668,28 +3996,12 @@ RESOURCE_SELECTOR
$start_new_option
-
-
- NUMBER_PER_PDF
- How should the results be printed?
-
- Start each student\'s assignment on a new page/column (add a pagefeed after each assignment)
- Add one empty page/column after each student\'s assignment
- Add two empty pages/column after each student\'s assignment
- Add three empty pages/column after each student\'s assignment
-
- PAGESIZE
- How do you want assignments split into PDF files?
-
- All assignments in a single PDF file
- Each PDF contains exactly one section
- Each PDF contains exactly one assignment
-
- Specify the number of assignments per PDF:
-
-
RESOURCE_SELECTOR
+ my $nextstate = 'NUMBER_PER_PDF';
+ $resource_selector .= &generate_format_selector($helper,
+ 'Format of the print job',
+ $nextstate);
&Apache::lonxml::xmlparse($r, 'helper', <
@@ -3710,7 +4022,7 @@ CHOOSE_STUDENTS1
Generate new CODEd Assignments
Number of CODEd assignments to print: |
-
+
if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) < 1) &&
!\$helper->{'VARS'}{'REUSE_OLD_CODES'} &&
@@ -3718,6 +4030,10 @@ CHOOSE_STUDENTS1
!\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
return "You need to specify the number of assignments to print";
}
+ if (((\$helper->{'VARS'}{'NUMBER_TO_PRINT_TOTAL'}+0) >= 1) &&
+ (\$helper->{'VARS'}{'SINGLE_CODE'} ne '') ) {
+ return 'Specifying number of codes to print and a specific code is not compatible';
+ }
return undef;
@@ -3741,6 +4057,8 @@ CHOOSE_STUDENTS1
!\$helper->{'VARS'}{'CODE_SELECTED_FROM_LIST'}) {
return &Apache::lonprintout::is_code_valid(\$helper->{'VARS'}{'SINGLE_CODE'},
\$helper->{'VARS'}{'CODE_OPTION'});
+ } elsif (\$helper->{'VARS'}{'SINGLE_CODE'} ne ''){
+ return 'Specifying a code name is incompatible specifying number of codes.';
} else {
return undef; # Other forces control us.
}
@@ -3841,7 +4159,7 @@ CHOOSE_FROM_ANY_SEQUENCE
my $startedTable = 0; # have we started an HTML table yet? (need
# to close it later)
- if (($perm{'pav'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or
+ if (($perm{'pav'} and $perm{'vgr'}) or
($helper->{VARS}->{'construction'} eq '1')) {
&addMessage(' '
.''.&mt('Print Options').''
@@ -4088,10 +4406,12 @@ PROBTYPE
return $helper;
}
- $r->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;
|
|