--- loncom/interface/lonprintout.pm	2019/02/06 01:10:09	1.627.2.26
+++ loncom/interface/lonprintout.pm	2014/02/08 23:49:12	1.639
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.627.2.26 2019/02/06 01:10:09 raeburn Exp $
+# $Id: lonprintout.pm,v 1.639 2014/02/08 23:49:12 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -157,7 +157,7 @@ sub create_incomplete_folder_selstud_hel
 
     my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_PEOPLE_SEQ',
 						      'Select problem(s) to print',
-						      'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1"',
+						      'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
 						      'RESOURCES',
 						      'CHOOSE_STUDENTS_INCOMPLETE',
 						      $map,
@@ -206,7 +206,7 @@ sub create_incomplete_course_helper {
     
     my $resource_chooser = &generate_resource_chooser('INCOMPLETE_PROBLEMS_COURSE_RESOURCES',
 						      'Select problem(s) to print',
-						      'multichoice = "1" suppressEmptySequences="0" addstatus="1" closeallpagtes="1" modallink="1"',
+						      'multichoice = "1" suppressEmptySequences="0" addstatus="1" closeallpagtes="1"',
 						      'RESOURCES',
 						      'INCOMPLETE_PROBLEMS_COURSE_STUDENTS',
 						      '',
@@ -252,7 +252,7 @@ sub create_incomplete_folder_helper {
 
     my $resource_chooser = &generate_resource_chooser('CHOOSE_INCOMPLETE_SEQ',
 						      'Select problem(s) to print',
-						      'multichoice="1", toponly ="1", addstatus="1", closeallpages="1" modallink="1"',
+						      'multichoice="1", toponly ="1", addstatus="1", closeallpages="1"',
 						      'RESOURCES',
 						      'PAGESIZE',
 						      $map,
@@ -306,8 +306,7 @@ CHOOSE_STUDENTS
 #     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',
-#                         modallink='1'"
+#                        "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
@@ -579,7 +578,6 @@ sub printable {
 #       date for printing checks printstartdate param first, then, if not set,
 #       opendate param, then, if not set, contentopen param.
 
-
 sub get_print_dates {
     my $res = shift;
     my $partsref = $res->parts();
@@ -702,12 +700,12 @@ sub incomplete {
     }
 }
 #
-#  When printing for students, the resources and order of the
+#  When printing for students, the resoures and order of the
 #  resources may need to be altered if there are folders with
 #  random selectiopn or random ordering (or both) enabled.
 #  This sub computes the set of resources to print for a student
 #  modified both by random ordering and selection and filtered
-#  to only those that are in the original set selected to be printed.
+#  to only those that are in the original set selcted to be printed.
 #
 # Parameters:
 #   $map - The URL of the folder being printed.
@@ -718,9 +716,6 @@ sub incomplete {
 #   $who   - Student/domain for whome the sequence will be generated.
 #   $code  - CODE being printed when printing Problems/Resources
 #            from folder for CODEd assignments
-#   $nohidemap - If true, parameter in map for hiddenresource will be
-#                ignored.  The user calling the routine should have
-#                both the pav and vgr privileges if this is set to true).
 #
 # Implicit inputs:
 #   $
@@ -742,12 +737,12 @@ sub master_seq_to_person_seq {
     my @output_seq;
 
     my $unhidden;
-    if ($nohidemap) {
+    if ($perm{'pav'} && $perm{'vgr'} && $nohidemap) {
         $unhidden = &Apache::lonnet::clutter($map);
     }
     
     my $navmap           = Apache::lonnavmaps::navmap->new($username, $userdomain,
-                                                           $code,$unhidden);
+                                                           $code, $unhidden);
     my ($start,$finish);
 
     if ($map) {
@@ -767,13 +762,13 @@ sub master_seq_to_person_seq {
     #  Iterate on the resource..select the items that are randomly selected
     #  and that are in the seq_has.  Presumably the iterator will take care
     # of the random ordering part of the deal.
+    #
     my $curres;
     while ($curres = $iterator->next()) {
 	#
 	#  Only process resources..that are not removed by randomout...
 	#  and are selected for printint as well.
 	#
-
         if (ref($curres) && ! $curres->randomout()) {
             my $currsymb = $curres->symb();
             if (exists($seq_hash{$currsymb})) {
@@ -847,9 +842,9 @@ sub set_font_size {
 
     if ($font_size ne '') {
 
-	$text =~ s/\\begin\{document}/\\begin{document}{\\$font_size/;
+	$text =~ s/\\begin{document}/\\begin{document}{\\$font_size/;
     }
-    $text =~ s/\\end\{document}/}\\end{document}/;
+    $text =~ s/\\end{document}/}\\end{document}/;
     return $text;
 
 
@@ -891,7 +886,7 @@ sub include_pdf {
     my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
     $file =~ s{(.*)/res/}{$londocroot/res/};
 
-    open(FILE,">>","$Apache::lonnet::perlvar{'lonPrtDir'}/$env{'user.name'}_$env{'user.domain'}_printout.dat");
+    open(FILE,">>$Apache::lonnet::perlvar{'lonPrtDir'}/$env{'user.name'}_$env{'user.domain'}_printout.dat");
     print FILE ("$file\n");
     close (FILE);
 
@@ -926,13 +921,13 @@ sub include_pdf {
 sub collect_languages {
     my $doc = shift;
     my %languages;
-    while ($doc =~ /\\selectlanguage\{(\w+)}/mg) {
+    while ($doc =~ /\\selectlanguage{(\w+)}/mg) {
 	$languages{$1} = 1;	# allows us to request each language exactly once.
     }
     my @lang_list = (keys(%languages)); # List of unique languages
     if (scalar @lang_list) {
 	my $babel_header = '\usepackage[' . join(',', @lang_list) .']{babel}'. "\n";
-	$doc =~ s/\\begin\{document}/$babel_header\\begin{document}/;
+	$doc =~ s/\\begin{document}/$babel_header\\begin{document}/;
     }
     return $doc;
 }
@@ -1060,12 +1055,12 @@ sub printf_style_subst {
 #     %s    - The section if it is supplied.
 #
 sub format_page_header {
-    my ($width, $format, $assignment, $course, $student) = @_;
+    my ($width, $format, $assignment, $course, $student, $section) = @_;
 
 
 
     $width = &recalcto_mm($width); # Get width in mm.
-    my $chars_per_line = int($width/2);   # Character/textline.
+    my $chars_per_line = int($width/1.6);   # Character/textline.
 
     #  Default format?
 
@@ -1081,38 +1076,34 @@ sub format_page_header {
 	# - Allow the assignment to be 2 lines (wrapped).
 	#
 
-        my $firstline = "$student $course";
-        if (length($firstline) > $chars_per_line) {
-            my $lastchar = $chars_per_line - length($student) - 1;
-            if ($lastchar > 0) {
-                $course = substr($course, 0, $lastchar);
-            } else {            # Nothing left of course:
-                $course = '';
-            }
-        }
-        if (length($assignment) > $chars_per_line) {
-            $assignment = substr($assignment, 0, $chars_per_line);
-        }
+	
 
-        $format =  "\\textbf{$student} $course \\hfill \\thepage \\\\ \\textit{$assignment}";
+	my $name_length    = int($chars_per_line *3 /4);
+	my $sec_length     = int($chars_per_line / 5);
 
-    } 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!!!
+	$format  = "%$name_length".'n';
 
-    }
+	if ($section) {
+	    $format .=  ' - Sec: '."%$sec_length".'s';
+	}
 
-    return $format;
+	$format .= '\\\\%c \\\\ %a';
+        
 
+    }
+    # 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
@@ -1240,7 +1231,6 @@ sub is_code_valid {
     my ($code_type, $code_length) = ('letter', 6);	# defaults.
     my @lines = &Apache::grades::get_scantronformat_file();
     foreach my $line (@lines) {
-        next if (($line =~ /^\#/) || ($line eq ''));
 	my ($name, $type, $length) = (split(/:/, $line))[0,2,4];
 	if($name eq $code_option) {
 	    $code_length = $length;
@@ -1334,8 +1324,8 @@ sub compare_names {
 
 sub latex_header_footer_remove {
     my $text = shift;
-    $text =~ s/\\end\{document}//;
-    $text =~ s/\\documentclass([^&]*)\\begin\{document}//;
+    $text =~ s/\\end{document}//;
+    $text =~ s/\\documentclass([^&]*)\\begin{document}//;
     return $text;
 }
 #
@@ -1849,6 +1839,8 @@ 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;
 }
@@ -1871,7 +1863,6 @@ 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);
@@ -1884,12 +1875,12 @@ sub page_format_transformation {
 	$fancypagestatement="\\rhead{}\\chead{}\\lhead{$header_text}";
     }
     if ($layout eq 'album') {
-	    $text =~ s/\\begin\{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /;
+	    $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /;
     } elsif ($layout eq 'book') {
 	if ($choice ne 'All class print') { 
-	    $text =~ s/\\begin\{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/;
+	    $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/;
 	} else {
-	    $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 /;
+	    $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') {
 	    my $papersize_text;
@@ -1898,13 +1889,13 @@ sub page_format_transformation {
 	    } else {
 		$papersize_text = '\special{papersize=210mm,297mm}';
 	    }
-	    $text =~ s/(\\begin\{document})/$1$papersize_text/;
+	    $text =~ s/(\\begin{document})/$1$papersize_text/;
 	}
     }
     if ($tableofcontents eq 'yes') {$text=~s/(\\setcounter\{page\}\{1\})/$1 \\tableofcontents\\newpage /;}
     if ($indexlist eq 'yes') {
-	$text=~s/(\\begin\{document})/\\makeindex $1/;
-	$text=~s/(\\end\{document})/\\strut\\\\\\strut\\printindex $1/;
+	$text=~s/(\\begin{document})/\\makeindex $1/;
+	$text=~s/(\\end{document})/\\strut\\\\\\strut\\printindex $1/;
     }
     return $text;
 }
@@ -1913,12 +1904,12 @@ sub page_format_transformation {
 sub page_cleanup {
     my $result = shift;	
  
-    $result =~ m/\\end\{document}(\d*)$/;
+    $result =~ m/\\end{document}(\d*)$/;
     my $number_of_columns = $1;
     my $insert = '{';
     for (my $id=1;$id<=$number_of_columns;$id++) { $insert .='l'; }
     $insert .= '}';
-    $result =~ s/(\\begin\{longtable})INSERTTHEHEADOFLONGTABLE\\endfirsthead\\endhead/$1$insert/g;
+    $result =~ s/(\\begin{longtable})INSERTTHEHEADOFLONGTABLE\\endfirsthead\\endhead/$1$insert/g;
     $result =~ s/&\s*REMOVETHEHEADOFLONGTABLE\\\\/\\\\/g;
     return $result,$number_of_columns;
 }
@@ -1954,16 +1945,16 @@ my $end_of_student = "\n".'\special{ps:E
 
 sub latex_corrections {
     my ($number_of_columns,$result,$selectionmade,$answer_mode) = @_;
-#    $result =~ s/\\includegraphics\{/\\includegraphics\[width=\\minipagewidth\]{/g;
+#    $result =~ s/\\includegraphics{/\\includegraphics\[width=\\minipagewidth\]{/g;
     my $copyright = &copyright_line();
     if ($selectionmade eq '1' || $answer_mode eq 'only') {
-	$result =~ s/(\\end\{document})/\\strut\\vskip 0 mm $copyright $end_of_student $1/;
+	$result =~ s/(\\end{document})/\\strut\\vskip 0 mm $copyright $end_of_student $1/;
     } else {
-	$result =~ s/(\\end\{document})/\\strut\\vspace\*{-4 mm}\\newline $copyright $end_of_student $1/;
+	$result =~ s/(\\end{document})/\\strut\\vspace\*{-4 mm}\\newline $copyright $end_of_student $1/;
     }
     $result =~ s/\$number_of_columns/$number_of_columns/g;
-    $result =~ s/(\\end\{longtable}\s*)(\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]\{\\hrulefill})/$2$1/g;
-    $result =~ s/(\\end\{longtable}\s*)\\strut\\newline/$1/g;
+    $result =~ s/(\\end{longtable}\s*)(\\strut\\newline\\noindent\\makebox\[\\textwidth\/$number_of_columns\]\[b\]{\\hrulefill})/$2$1/g;
+    $result =~ s/(\\end{longtable}\s*)\\strut\\newline/$1/g;
 #-- LaTeX corrections     
     my $first_comment = index($result,'<!--',0);
     while ($first_comment != -1) {
@@ -1982,8 +1973,8 @@ sub latex_corrections {
     if ($result =~ m/&(\w+|#\d+);/) {
 	$result = &character_chart($result);
     }
-    $result =~ s/(\\end\{tabular})\s*\\vskip 0 mm/$1/g;
-    $result =~ s/(\\begin\{enumerate})\s*\\noindent/$1/g;
+    $result =~ s/(\\end{tabular})\s*\\vskip 0 mm/$1/g;
+    $result =~ s/(\\begin{enumerate})\s*\\noindent/$1/g;
     return $result;
 }
 
@@ -2178,7 +2169,7 @@ sub print_page_in_course {
 
 	    $form{'grade_target'}  = 'tex';
 	    $form{'textwidth'}    = &get_textwidth($helper, $LaTeXwidth);
-	    $form{'pdfFormFields'} = 'no'; # 
+	    $form{'pdfFormFields'} = $pdfFormFields; # 
 	    $form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'};    
 	    
 	    $form{'problem_split'}=$parmhash{'problem_stream_switch'};
@@ -2221,7 +2212,7 @@ sub print_page_in_course {
 		my $answer=&ssi_with_retries($urlp,$ssi_retry_count, %answerform);
 
 		if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
-		    $texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/;
+		    $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
 		} else {
 		    $texversion= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
 		    if ($helper->{'VARS'}->{'construction'} ne '1') {
@@ -2247,7 +2238,7 @@ sub print_page_in_course {
 
 	    if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
 		my $annotation .= &annotate($currentURL);
-		$texversion =~ s/(\\keephidden\{ENDOFPROBLEM})/$annotation$1/;
+		$texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/;
 	    }
 	    
 	    if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') {
@@ -2539,7 +2530,7 @@ sub print_construction_sequence {
 		$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/;
+		    $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
 		} else {
 		    # If necessary, encapsulate answer in minipage:
 		    
@@ -2592,7 +2583,7 @@ sub print_construction_sequence {
 	    $result .= $texversion;
 	}
     }
-    if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin\{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;}
+    if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;}
     return $result;
 }
 
@@ -2714,7 +2705,7 @@ ENDPART
     my %form;
     $form{'grade_target'} = 'tex';
     $form{'textwidth'}    = &get_textwidth($helper, $LaTeXwidth);
-    $form{'pdfFormFields'} = 'no';
+    $form{'pdfFormFields'} = $pdfFormFields;
 
     # If form.showallfoils is set, then request all foils be shown:
     # privilege will be enforced both by not allowing the 
@@ -2749,7 +2740,7 @@ ENDPART
 	    $cleanURL=$currentURL;
 	}
 	$selectionmade = 1;
-
+      
 	if ($cleanURL!~m|^/adm/|
 	    && $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) {
 	    my $rndseed=time;
@@ -2802,7 +2793,7 @@ ENDPART
 		
 
 		if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
-		    $texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/;
+		    $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
 		} else {
 		    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
 		    if ($helper->{'VARS'}->{'construction'} ne '1') {
@@ -2829,7 +2820,7 @@ ENDPART
 
 	    if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
 		my $annotation .= &annotate($currentURL);
-		$texversion =~ s/(\\keephidden\{ENDOFPROBLEM})/$annotation$1/;
+		$texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/;
 	    }
 
 
@@ -2860,7 +2851,7 @@ ENDPART
 		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/;
+		    $texversion    =~ s/(\\end{document})/$annotation$1/;
 		}
 		$result .= $texversion;
 	} elsif ($cleanURL =~/\.tex$/) {
@@ -2871,7 +2862,7 @@ ENDPART
 	    $result = &fetch_raw_resource($currentURL);
 	    if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
 		my $annotation = &annotate($currentURL);
-		$result =~ s/(\\end\{document})/$annotation$1/;
+		$result =~ s/(\\end{document})/$annotation$1/;
 	    }
 
 	    $do_postprocessing = 0; # Don't massage the result.
@@ -2937,6 +2928,7 @@ ENDPART
 
 	&Apache::lonxml::clear_problem_counter();
 
+	my $pbreakresources = keys %page_breaks;
 	for (my $i=0;$i<=$#master_seq;$i++) {
 
 	    &Apache::lonenc::reset_enc();
@@ -2962,7 +2954,6 @@ ENDPART
 	    my $texversion='';
 	    if ($urlp!~m|^/adm/|
 		&& $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
-                my $extension = $1;
 		$resources_printed .= $urlp.':';
 		&Apache::lonxml::remember_problem_counter();
 		if ($flag_latex_header_remove eq 'NO') {
@@ -2971,7 +2962,7 @@ ENDPART
                             (($i==0) &&
                              (($urlp=~/\.page$/) ||
                               ($print_type eq 'map_problems_in_page') ||
-                              (($print_type eq 'map_resources_in_page') && ($extension !~ /^x?html?$/))))) {
+                              ($print_type eq 'map_resources_in_page')))) {
                         $flag_latex_header_remove = 'YES';
                     }
 		}
@@ -2979,7 +2970,7 @@ ENDPART
 		if ($urlp=~/\.page$/) {
 		    ($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}/;
+		    $texversion =~ s/\\end{document}\d*/\\end{document}/;
 		    $flag_page_in_sequence = 'YES';
 		}
 
@@ -2994,21 +2985,21 @@ ENDPART
 		    &Apache::lonxml::restore_problem_counter();
 		    my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform);
                     if ($urlp =~ /\.page$/) {
-                        $answer =~ s/\\end\{document}(\d*)$//;
+                        $answer =~ s/\\end{document}(\d*)$//;
                     }
 		    if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
                         if ($urlp =~ /\.page$/) {
-                            my @probs = split(/\\keephidden\{ENDOFPROBLEM}/,$texversion);
+                            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/;
+                            $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
                         }
 		    } else {
 			if ($urlp=~/$LONCAPA::assess_page_re/) {
 			    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
-#			    $texversion =~ s/\\begin\{document}//; # FIXME
+#			    $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 ';
@@ -3024,13 +3015,13 @@ ENDPART
 		}
 		if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
 		    my $annotation .= &annotate($urlp);
-		    $texversion =~ s/(\\keephidden\{ENDOFPROBLEM})/$annotation$1/;
+		    $texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/;
 		}
 
 		if ($flag_latex_header_remove ne 'NO') {
 		    $texversion = &latex_header_footer_remove($texversion);
 		} else {
-		    $texversion =~ s/\\end\{document}//;
+		    $texversion =~ s/\\end{document}//;
 		}
 		if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') {
 		    $texversion=&IndexCreation($texversion,$urlp);
@@ -3038,7 +3029,6 @@ 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,
@@ -3060,13 +3050,13 @@ ENDPART
 		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/;
+		    $texversion =~ s/(\\end{document)/$annotation$1/;
 		}
 
 		if ($flag_latex_header_remove ne 'NO') {
 		    $texversion = &latex_header_footer_remove($texversion);
 		} else {	
-		    $texversion =~ s/\\end\{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/;
+		    $texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/;
 		}
 		$result .= $texversion;
 		$flag_latex_header_remove = 'YES'; 
@@ -3097,7 +3087,7 @@ ENDPART
 		if ($flag_latex_header_remove ne 'NO') {
 		    $texversion = &latex_header_footer_remove($texversion);
 		} else {
-		    $texversion =~ s/\\end\{document}//;
+		    $texversion =~ s/\\end{document}//;
 		}
 		$result .= $texversion;
 		$flag_latex_header_remove = 'YES';   
@@ -3108,7 +3098,7 @@ ENDPART
 	}
 	&Apache::lonxml::clear_problem_counter();
 	if ($flag_page_in_sequence eq 'YES') {
-	    $result =~ s/\\usepackage\{calc}/\\usepackage{calc}\\usepackage{longtable}/;
+	    $result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;
 	}	
 	$result .= '\end{document}';
      } elsif (($print_type eq 'problems_for_students')           ||
@@ -3189,10 +3179,6 @@ ENDPART
 	 my $student_counter=-1;
 	 my $i = 0;
 	 my $last_section = (split(/:/,$students[0]))[2];
-         my $nohidemap;
-         if ($perm{'pav'} && $perm{'vgr'}) {
-             $nohidemap = 1;
-         }
 	 foreach my $person (@students) {
              my $duefile="/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.due";
 	     if (-e $duefile) {
@@ -3210,7 +3196,7 @@ ENDPART
 		 $i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'});
 	     }
 	     my $actual_seq = master_seq_to_person_seq($map, \@master_seq,
-                                                       $person, undef, $nohidemap);
+                                                       $person, undef, 1);
 	     my ($output,$fullname, $printed)=&print_resources($r,$helper,
 						     $person,$type,
 						     \%moreenv,  $actual_seq,
@@ -3228,7 +3214,7 @@ ENDPART
 	 $result .= $print_array[0].'  \end{document}';
      } elsif (($print_type eq 'problems_for_anon')      ||
 	      ($print_type eq 'problems_for_anon_page') ||
-	      ($print_type eq 'resources_for_anon')  ) {
+	      ($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'};
@@ -3298,8 +3284,6 @@ ENDPART
 		 $moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,$code_length,
 					    $code_type);
 	     }
-             $code_name =~ s/^\s+//;
-             $code_name =~ s/\s+$//;
 	     if ($code_name) {
 		 &Apache::lonnet::put('CODEs',
 				      {
@@ -3321,10 +3305,6 @@ ENDPART
 	 my $flag_latex_header_remove = 'NO'; 
 	 my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$num_todo);
 	 my $count=0;
-         my $nohidemap;
-         if ($perm{'pav'} && $perm{'vgr'}) {
-             $nohidemap = 1; 
-         }
 	 foreach my $code (sort(@allcodes)) {
 	     my $file_num=int($count/$number_per_page);
 	     if ($code_type eq 'number') { 
@@ -3337,7 +3317,7 @@ ENDPART
                  $env{'form.CODE'} = $moreenv{'CODE'};
                  $actual_seq = master_seq_to_person_seq($map, \@master_seq,
                                                         undef,
-                                                        $moreenv{'CODE'}, $nohidemap);
+                                                        $moreenv{'CODE'}, 1);
                  delete($env{'form.CODE'});
              }
 	     my ($output,$fullname, $printed)=
@@ -3354,7 +3334,7 @@ ENDPART
 	 }
 	 &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
 	 $result .= $print_array[0].'  \end{document}';
-     } elsif ($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'};
@@ -3387,7 +3367,7 @@ ENDPART
 		    $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/;
+			$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
 		    } else {
 			$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
 			if ($helper->{'VARS'}->{'construction'} ne '1') {
@@ -3404,11 +3384,11 @@ ENDPART
                 #this chunk is responsible for printing the path to problem
 
 		my $newurlp=&path_to_problem($urlp,$LaTeXwidth);
-		$texversion =~ s/(\\begin\{minipage}\{\\textwidth})/$1 $newurlp/;
+		$texversion =~ s/(\\begin{minipage}{\\textwidth})/$1 $newurlp/;
 		if ($flag_latex_header_remove ne 'NO') {
 		    $texversion = &latex_header_footer_remove($texversion);
 		} else {
-		    $texversion =~ s/\\end\{document}//;
+		    $texversion =~ s/\\end{document}//;
 		}
 		if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') {
 		    $texversion=&IndexCreation($texversion,$urlp);
@@ -3446,22 +3426,13 @@ ENDPART
 	#}
     }
 
-    # Set URLback so we can provide a link back to the resource and to change options.
-    # (Since the browser back button does not currently work with https,
-    # the back link is useful even when there is an easy-to-miss LON-CAPA back button.)
+    # Set URLback if this is a construction space print so we can provide
+    # a link to the resource being edited.
+    #
 
     my $URLback=''; #link to original document
     if ($helper->{'VARS'}->{'construction'} eq '1') {
 	$URLback=$helper->{'VARS'}->{'filename'};
-    } elsif ($helper->{VARS}{'symb'}) {
-        my ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}{'symb'});
-        $url = &Apache::lonnet::clutter($url);
-        if ($env{'request.enc'}) {
-            $url = &Apache::lonenc::encrypted($url);
-        }
-        if ($url ne '') {
-            $URLback = $url.(($url =~ /\?/) ? '&amp;':'?').'symb='.$helper->{VARS}{'symb'};
-        }
     }
     #
     # Final adjustment of the font size:
@@ -3545,7 +3516,7 @@ ENDPART
 				'cgi.'.$identifier.'.role' => $perm{'pav'},
 				'cgi.'.$identifier.'.numberoffiles' => $#print_array,
 				'cgi.'.$identifier.'.studentnames' => $student_names,
-				'cgi.'.$identifier.'.backref' => &escape($URLback),});
+				'cgi.'.$identifier.'.backref' => $URLback,});
     &Apache::lonnet::appenv({"cgi.$identifier.user"    => $env{'user.name'},
 				"cgi.$identifier.domain"  => $env{'user.domain'},
 				"cgi.$identifier.courseid" => $cnum, 
@@ -3641,12 +3612,10 @@ sub print_resources {
     #
 
     my $syllabus_first = 0;
+    my $assessment_first = 0;
     my $current_assignment = "";
     my $assignment;
     my $courseidinfo = &get_course();
-    my $possprint = scalar(@{$master_seq});
-    if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
-    if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection}
 
     foreach my $curresline (@{$master_seq})  {
 	if (defined $page_breaks{$curresline}) {
@@ -3665,6 +3634,9 @@ sub print_resources {
 	    if ($print_incomplete && !&incomplete($username, $userdomain, $res_url)) {
 		next;
 	    }
+            if ((!$actually_printed) && ($curresline =~ m/$LONCAPA::assess_re/)) {
+                $assessment_first = 1;
+            }
 	    $actually_printed++; # we're going to print one.
 
 	    if (&Apache::lonnet::allowed('bre',$res_url)) {
@@ -3684,7 +3656,7 @@ sub print_resources {
                         if ($remove_latex_header eq 'YES') {
                             $rendered = &latex_header_footer_remove($rendered);
                         } else {
-                            $rendered =~ s/\\end\{document}\d*//;
+                            $rendered =~ s/\\end{document}\d*//;
                         }
                     }
 		    if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
@@ -3701,13 +3673,13 @@ sub print_resources {
 			my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv);
 
 			if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
-			    $rendered=~s/(\\keephidden\{ENDOFPROBLEM})/$ansrendered$1/;
+			    $rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/;
 			} else {
 
 			    
 			    my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
                             unless ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') {
-                                $header =~ s/\\begin\{document}//;     #<<<<<
+                                $header =~ s/\\begin{document}//;     #<<<<<
                             }
 			    my $title = &Apache::lonnet::gettitle($curresline);
 			    $title = &Apache::lonxml::latex_special_symbols($title);
@@ -3721,13 +3693,13 @@ sub print_resources {
 		    if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
 			my $url = &Apache::lonnet::clutter($res_url);
 			my $annotation = &annotate($url);
-			$rendered =~  s/(\\keephidden\{ENDOFPROBLEM})/$annotation$1/;
+			$rendered =~  s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/;
 		    }
 		    my $junk;
 		    if ($remove_latex_header eq 'YES') {
 			$rendered = &latex_header_footer_remove($rendered);
 		    } else {
-			$rendered =~ s/\\end\{document}//;
+			$rendered =~ s/\\end{document}//;
 		    }
 		    $current_output .= $rendered;		    
 		} elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
@@ -3739,12 +3711,12 @@ sub print_resources {
 		    if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
 			my $url = &Apache::lonnet::clutter($res_url);
 			my $annotation = &annotate($url);
-			$annotation    =~ s/(\\end\{document})/$annotation$1/;
+			$annotation    =~ s/(\\end{document})/$annotation$1/;
 		    }
 		    if ($remove_latex_header eq 'YES') {
 			$rendered = &latex_header_footer_remove($rendered);
 		    } else {
-			$rendered =~ s/\\end\{document}//;
+			$rendered =~ s/\\end{document}//;
 		    }
 		    $current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut ';
 		} elsif($res_url = ~/\.pdf$/) {
@@ -3759,7 +3731,7 @@ sub print_resources {
 		    if ($remove_latex_header ne 'NO') {
 			$rendered = &latex_header_footer_remove($rendered);
 		    } else {
-			$rendered =~ s/\\end\{document}//;
+			$rendered =~ s/\\end{document}//;
 		    }
 		    $current_output .= $rendered;
 		}
@@ -3771,7 +3743,7 @@ sub print_resources {
 	if (($assignment ne $current_assignment) && ($assignment ne "")) {
 	    my $header_line = &format_page_header($LaTeXwidth, $parmhash{'print_header_format'},
 						  $assignment, $courseidinfo, 
-						  $fullname);
+						  $fullname, $usersection);
 	    my $header_start = ($columns_in_format == 1) ? '\lhead'
 		: '\fancyhead[LO]';
 	    $header_line = $header_start.'{'.$header_line.'}';
@@ -3788,24 +3760,7 @@ sub print_resources {
     #
 
     if ($actually_printed == 0) {
-        my $message = &mt('No resources to print');
-        if (!$possprint) {
-            if ($perm{'pav'} || $perm{'pfo'}) {
-                $message = &mt('There are no unhidden resources to print.')."\n\n".
-                           &mt('The most likely reason is one of the following: ')."\n".
-                           '\begin{itemize}'."\n".
-                           '\item '.&mt("The 'Resource hidden from students' parameter is set for the folder being printed.")."\n".
-                           '\item '.&mt("'Hidden' is checked in the Course Editor individually for each resource in the folder being printed.")."\n".
-                           '\end{itemize}'."\n\n".
-                           &mt("Note: to print a bubblesheet exam which you want to hide from students, ".
-                               "use the Course Editor to check the 'Hidden' checkbox for the exam folder itself.")."\n";
-            }
-        } elsif ($print_incomplete) {
-            $message = &mt('No incomplete resources');
-        }
-        if ($message) {
-            $current_output  = &encapsulate_minipage("\\vskip -10mm \n$message\n \\vskip 100 mm { }\n");
-        }
+	$current_output  = &encapsulate_minipage("\\vskip -10mm \nNo incomplete resources\n \\vskip 100 mm { }\n");
 	if ($remove_latex_header eq "NO") {
 	    $current_output = &print_latex_header() . $current_output;
 	} else {
@@ -3816,15 +3771,19 @@ sub print_resources {
     if ($syllabus_first) {
         $current_output =~ s/\\\\ Last updated:/Last updated:/
     }
-    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);
-    my $header_start = ($columns_in_format == 1) ? '\lhead' : '\fancyhead[LO]';
-    my $newheader = $header_start.'{'.$header_line.'}';
-
+    my $newheader;
+    unless ($assessment_first) {
+	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);
+	my $header_start = ($columns_in_format == 1) ? '\lhead'
+	    : '\fancyhead[LO]';
+	$newheader = $header_start.'{'.$header_line.'}';
+    }
     if ($current_output=~/\\documentclass/) {
-	$current_output =~ s/\\begin\{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$newheader$namepostfix}\\vskip 5 mm /;
+	$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$newheader$namepostfix}\\vskip 5 mm /;
+
     } else {
 	my $blankpages = 
 	    '\clearpage\strut\clearpage'x$helper->{'VARS'}->{'EMPTY_PAGES'};
@@ -3833,6 +3792,7 @@ sub print_resources {
 	    &copyright_line().' \newpage '.$blankpages.$end_of_student.
 	    '\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent'.
 	    $newheader.$namepostfix. '} \vskip 5 mm '.$current_output;
+
     }
     #
     #  Close the student bracketing.
@@ -4065,10 +4025,8 @@ sub printHelper {
         $helper->{VARS}->{'symb'} = &Apache::lonnet::symbread($helper->{VARS}->{'postdata'});
 
     }
-    if ($helper->{VARS}->{'symb'} ne '') {
-        $helper->{VARS}->{'symb'}=
-	    &Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'});
-    }
+    $helper->{VARS}->{'symb'}=
+	&Apache::lonenc::check_encrypt($helper->{VARS}->{'symb'});
     my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu($helper);
     if ($sequenceTitle ne '') {$helper->{VARS}->{'assignment'}=$sequenceTitle;}
 
@@ -4079,7 +4037,6 @@ sub printHelper {
     my $subdir;
     my $is_published=0;		# True when printing from resource space.
     my $res_printable = 1;	# By default the current resource is printable.    
-    my $res_error;
     my $userCanPrint = ($perm{'pav'} || $perm{'pfo'});
     my $res_printstartdate;
     my $res_printenddate;
@@ -4101,22 +4058,13 @@ sub printHelper {
 	    ($map, $id, $url) = &Apache::lonnet::decode_symb($symb);
 	    $helper->{VARS}->{'postdata'} = 
 		&Apache::lonenc::check_encrypt(&Apache::lonnet::clutter($url));
-            if (!$userCanPrint) {
-	        my $navmap = Apache::lonnavmaps::navmap->new();
-                if (ref($navmap)) {
-	            my $res = $navmap->getBySymb($symb);
-                    if (ref($res)) {
-	                $res_printable = $res->resprintable(); #printability in course context
-	                ($res_printstartdate, $res_printenddate) = &get_print_dates($res);
-	                ($course_open, $course_close) = &course_print_dates($res);
-	                ($map_open, $map_close) = &map_print_dates($res);
-                    } else {
-                        $res_error = 1;
-                    }
-                } else {
-                    $res_error = 1;
-                }
-            }
+	    my $navmap = Apache::lonnavmaps::navmap->new();
+	    my $res   = $navmap->getBySymb($symb);
+	    $res_printable  = $res->resprintable() || $userCanPrint; #printability in course context
+	    ($res_printstartdate, $res_printenddate) = 	&get_print_dates($res);
+	    ($course_open, $course_close) = &course_print_dates($res);
+	    ($map_open, $map_close)       = &map_print_dates($res);
+
 	} else {
 	    # Resource space.
 
@@ -4232,7 +4180,7 @@ sub printHelper {
 		}
         my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS_PAGE',
 							'Select Problem(s) to print',
-							"multichoice='1' toponly='1' addstatus='1' closeallpages='1' modallink='1'",
+							"multichoice='1' toponly='1' addstatus='1' closeallpages='1'",
 							'RESOURCES',
 							'PAGESIZE',
 							$url,
@@ -4242,7 +4190,7 @@ sub printHelper {
 
       $helperFragment .= &generate_resource_chooser('CHOOSE_RESOURCES_PAGE',
 						    'Select Resource(s) to print',
-						    'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1"',
+						    'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
 						    'RESOURCES',
 						    'PAGESIZE',
 						    $url,
@@ -4307,7 +4255,7 @@ sub printHelper {
 				    'CHOOSE_PROBLEMS_HTML'];
 	    my $helperFragment = &generate_resource_chooser('CHOOSE_PROBLEMS',
 							    'Select Problem(s) to print',
-							    'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1"',
+							    'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
 							    'RESOURCES',
 							    'PAGESIZE',
 							    $map,
@@ -4316,7 +4264,7 @@ sub printHelper {
 							    $start_new_option);
 	    $helperFragment .= &generate_resource_chooser('CHOOSE_PROBLEMS_HTML',
 							  'Select Resource(s) to print',
-							  'multichoice="1" toponly="1" addstatus="1" closeallpages="1" modallink="1"',
+							  'multichoice="1" toponly="1" addstatus="1" closeallpages="1"',
 							  'RESOURCES',
 							  'PAGESIZE',
 							  $map,
@@ -4364,7 +4312,7 @@ ALL_PROBLEMS
          &Apache::lonxml::xmlparse($r, 'helper', 
 				   &generate_resource_chooser('ALL_PROBLEMS',
 							      'Select Problem(s) to print',
-							      'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1" modallink="1"',
+							      'multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',
 							      'RESOURCES',
 							      'PAGESIZE',
 							      '',
@@ -4373,7 +4321,7 @@ ALL_PROBLEMS
 							      $start_new_option) .
 				   &generate_resource_chooser('ALL_RESOURCES',
 							      'Select Resource(s) to print',
-							      " toponly='0' multichoice='1' suppressEmptySequences='0' addstatus='1' closeallpages='1' modallink='1'",
+							      " toponly='0' multichoice='1' suppressEmptySequences='0' addstatus='1' closeallpages='1'",
 							      'RESOURCES',
 							      'PAGESIZE',
 							      '',
@@ -4381,7 +4329,7 @@ ALL_PROBLEMS
 							      $start_new_option) .
 				   &generate_resource_chooser('ALL_PROBLEMS_STUDENTS',
 							      'Select Problem(s) to print',
-							      'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1" modallink="1"',
+							      'toponly="0" multichoice="1" suppressEmptySequences="0" addstatus="1" closeallpages="1"',
 							      'RESOURCES',
 							      'STUDENTS1',
 							      '',
@@ -4425,7 +4373,7 @@ ALL_PROBLEMS
 	#
 	my $resource_selector= &generate_resource_chooser('SELECT_PROBLEMS',
 							  'Select resources to print',
-							  'multichoice="1" addstatus="1" closeallpages="1" modallink="1"',
+							  'multichoice="1" addstatus="1" closeallpages="1"',
 							  'RESOURCES', 
 							  'PRINT_FORMATTING',
 							  $map,
@@ -4436,7 +4384,7 @@ ALL_PROBLEMS
                                                          'PRINT_FORMATTING').
                                &generate_resource_chooser('CHOOSE_STUDENTS_PAGE',
 							'Select Problem(s) to print',
-							"multichoice='1' addstatus='1' closeallpages ='1' modallink='1'",
+							"multichoice='1' addstatus='1' closeallpages ='1'",
 							'RESOURCES',
 							'PRINT_FORMATTING',
 							$url,
@@ -4506,6 +4454,7 @@ ALL_PROBLEMS
         my @lines = &Apache::grades::get_scantronformat_file();
 	my $codechoice='';
 	foreach my $line (@lines) {
+            next if (($line =~ /^\#/) || ($line eq ''));
 	    my ($name,$description,$code_type,$code_length)=
 		(split(/:/,$line))[0,1,2,4];
 	    if ($code_length > 0 && 
@@ -4534,7 +4483,7 @@ ALL_PROBLEMS
 						$namechoice) .
 			&generate_resource_chooser('SELECT_PROBLEMS_PAGE',
 						   'Select Problem(s) to print',
-						   "multichoice='1' addstatus='1' closeallpages ='1' modallink='1'",
+						   "multichoice='1' addstatus='1' closeallpages ='1'",
 						   'RESOURCES',
 						   'PRINT_FORMATTING',
 						   $url,
@@ -4558,7 +4507,7 @@ ALL_PROBLEMS
     <nextstate>PRINT_FORMATTING</nextstate>
     <message><br /><big><i><b>Select resources for the assignment</b></i></big><br /></message>
     <resource variable="RESOURCES" multichoice="1" addstatus="1" 
-              closeallpages="1" modallink="1">
+              closeallpages="1">
       <filterfunc>return $isNotMap;</filterfunc>
       <mapurl>$map</mapurl>
       <valuefunc>return $symbFilter;</valuefunc>
@@ -4703,7 +4652,7 @@ CHOOSE_FROM_SUBDIR
   <state name="CHOOSE_FROM_ANY_SEQUENCE" title="Select Resources To Print">
     <message>(mark desired resources then click "next" button) <br /></message>
     <resource variable="RESOURCES" multichoice="1" toponly='1' addstatus="1"
-              closeallpages="1" modallink="1">
+              closeallpages="1">
       <nextstate>PAGESIZE</nextstate>
       <filterfunc>return $isNotMap</filterfunc>
       <mapurl evaluate='1'>return '$escapedSequenceName';</mapurl>
@@ -4714,54 +4663,35 @@ CHOOSE_FROM_SUBDIR
 CHOOSE_FROM_ANY_SEQUENCE
 }
 
-    my $numchoices = 0;
-    if (ref($printChoices) eq 'ARRAY') {
-        $numchoices = @{$printChoices};
-    }
-    # Early out if nothing to print
-    if (!$numchoices) {
-        $r->print(&Apache::loncommon::start_page('Printing Helper').
-                  '<h2>'.&mt('Unable to determine print context').'</h2>'.
-                  '<p>'.&mt('Please display a resource, and then click the "Print" button/icon').'</p>');
-        my $prtspool=$r->dir_config('lonPrtDir');
-        my $footer = &recently_generated($prtspool);
-        $r->print($footer.&Apache::loncommon::end_page());
-        return OK;
-    }
-
     # Generate the first state, to select which resources get printed.
     Apache::lonhelper::state->new("START", "Select Printing Options:");
     if (!$res_printable) {
+        my $now = time;
+        my $shownprintstart = &Apache::lonlocal::locallocaltime($res_printstartdate);
+        my $shownprintend = &Apache::lonlocal::locallocaltime($res_printenddate);
         my $noprintmsg;
-        if ($res_error) {
-            $noprintmsg = &mt('Print availability for current resource could not be determined');
-        } else {
-            my $now = time;
-            my $shownprintstart = &Apache::lonlocal::locallocaltime($res_printstartdate);
-            my $shownprintend = &Apache::lonlocal::locallocaltime($res_printenddate);
-            if (($res_printenddate) && ($res_printenddate < $now)) {
+        if (($res_printenddate) && ($res_printenddate < $now)) {
                 $noprintmsg = &mt('Printing for current resource no longer available (ended: [_1])',
                                   $shownprintend);
-            } else {
-                if (($res_printstartdate) && ($res_printstartdate > $now)) {
-                    if (($res_printenddate) && ($res_printenddate > $now) && ($res_printenddate > $res_printstartdate)) {
-                        $noprintmsg = &mt('Printing for current resource is only possible between [_1] and [_2]',
-                                          $shownprintstart,$shownprintend);
-                    } elsif (!$res_printenddate) {
-                        $noprintmsg = &mt('Printing for current resource will only be possible starting [_1]',
-                                          $shownprintstart);
-                    } else {
-                        $noprintmsg = &mt('Printing for current resource is unavailable');
-                    }
+        } else {
+            if (($res_printstartdate) && ($res_printstartdate > $now)) {
+                if (($res_printenddate) && ($res_printenddate > $now) && ($res_printenddate > $res_printstartdate)) {
+                    $noprintmsg = &mt('Printing for current resource is only possible between [_1] and [_2]',
+                                  $shownprintstart,$shownprintend);
+                } elsif (!$res_printenddate) {
+                    $noprintmsg = &mt('Printing for current resource will only be possible starting [_1]',
+                                      $shownprintstart);
+                } else {
+                    $noprintmsg = &mt('Printing for current resource is unavailable');
                 }
             }
         }
 
         if ($noprintmsg) {
             $paramHash = Apache::lonhelper::getParamHash();
-            $paramHash->{MESSAGE_TEXT} =
+	    $paramHash->{MESSAGE_TEXT} = 
                 '<p class="LC_info">'.$noprintmsg.'</p>';
-            Apache::lonhelper::message->new();
+	    Apache::lonhelper::message->new();
         }
     }
     $paramHash = Apache::lonhelper::getParamHash();
@@ -4986,7 +4916,7 @@ FONT_SELECTION
 		      return "$helper->{VARS}->{'probstatus'}";
                    </defaultvalue>
 		   <choice computer="problem">Homework Problem</choice>
-		   <choice computer="exam">Exam Problem</choice>
+		   <choice computer="exam">Bubblesheet Exam Problem</choice>
 		   <choice computer="survey">Survey question</choice>
                    ,choice computer="anonsurvey"Anonymous survey question</choice>
 		</dropdown>
@@ -5104,6 +5034,9 @@ 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.='<h3>'.&mt('Layout Options').'</h3>'
@@ -5112,6 +5045,7 @@ sub render {
             .'<th>'.$PageLayout.'</th>'
             .'<th>'.$NumberOfColumns.'</th>'
             .'<th>'.$PaperType.'</th>'
+            .'<th>'.$pdfFormLabel.'</th>'
             .&Apache::loncommon::end_data_table_header_row()
             .&Apache::loncommon::start_data_table_row()
     .'<td>'
@@ -5152,6 +5086,12 @@ sub render {
     $result .= <<HTML;
         </select>
     </td>
+    <td align='center'>
+        <select name='${var}.pdfFormFields'>
+            <option selected="selected" value="no">$without</option>
+            <option value="yes">$with</option>
+        </select>
+    </td>
 HTML
     $result.=&Apache::loncommon::end_data_table_row()
             .&Apache::loncommon::end_data_table();