[LON-CAPA-cvs] cvs: loncom /interface lonprintout.pm

sakharuk lon-capa-cvs@mail.lon-capa.org
Mon, 21 Apr 2003 17:53:10 -0000


This is a MIME encoded message

--sakharuk1050947590
Content-Type: text/plain

sakharuk		Mon Apr 21 13:53:10 2003 EDT

  Modified files:              
    /loncom/interface	lonprintout.pm 
  Log:
  Now it's possible yo print problems with answers (currently only numerical ones). Waiting for Guy's response.
  
  
--sakharuk1050947590
Content-Type: text/plain
Content-Disposition: attachment; filename="sakharuk-20030421135310.txt"

Index: loncom/interface/lonprintout.pm
diff -u loncom/interface/lonprintout.pm:1.129 loncom/interface/lonprintout.pm:1.130
--- loncom/interface/lonprintout.pm:1.129	Thu Mar 13 13:35:12 2003
+++ loncom/interface/lonprintout.pm	Mon Apr 21 13:53:10 2003
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.129 2003/03/13 18:35:12 albertel Exp $
+# $Id: lonprintout.pm,v 1.130 2003/04/21 17:53:10 sakharuk Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -100,6 +100,11 @@
 <input type="radio" name="choice" value="Standard LaTeX output for whole primary sequence">  Problem(s) plus page(s) or html/xml file(s) from <b>$title_for_sequence</b><br />
 ENDMENUOUT2
     }
+    if ($ENV{'request.role.adv'}) {
+	$r->print(<<ENDMENUOUT27);
+<input type="radio" name="choice" value="Standard LaTeX output for the primary sequence with answers">  Problem(s) from <b>$title_for_sequence</b> with <font color="red"><b><i>answers</i></b></font><br />
+ENDMENUOUT27
+    }
     if (($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) and ($ENV{'form.postdata'}=~/\/res\//)) { 
 	$r->print(<<ENDMENUOUT6);
 <input type="radio" name="choice" value="Standard LaTeX output for the top level sequence">  All problems in this course (<b>warning:</b> this may be time consuming) <br />
@@ -504,7 +509,8 @@
 	  $result.=' \end{document}'
       }
     } elsif ($choice eq 'Standard LaTeX output for the primary sequence' or 
-             $choice eq 'Standard LaTeX output for whole primary sequence') {
+             $choice eq 'Standard LaTeX output for whole primary sequence' or 
+             $choice eq 'Standard LaTeX output for the primary sequence with answers') {
       #-- minimal sequence to which the current document belongs
         #-- where is the primary sequence containing file?
         my @master_seq = ();
@@ -526,10 +532,11 @@
 	   my %moreenv;
 	   $moreenv{'form.grade_target'}='tex';
 	   $moreenv{'form.textwidth'}=$LaTeXwidth;
+	   if ($choice eq 'Standard LaTeX output for the primary sequence with answers') {$moreenv{'form.texaward'}='SHOW_ANSWER';}
 	   &Apache::lonnet::appenv(%moreenv);
 	   #&Apache::lonnet::logthis("Trying to get $urlp with symb $symb");
 	   my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb));
-	   &Apache::lonnet::delenv('form.grade_target','form.textwidth');
+	   &Apache::lonnet::delenv('form.grade_target','form.textwidth','form.texaward');
 	   if ($urlp =~ m/\.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;} 
@@ -910,7 +917,7 @@
     $result =~ s/&\#153;/\\texttrademark /g;
     $result =~ s/&\#156;/\\oe/g;
     $result =~ s/&\#159;/\\\"Y/g;
-    $result =~ s/&(\#160|nbsp);//g;
+    $result =~ s/&(\#160|nbsp);?//g;
     $result =~ s/&(\#161|iexcl);/!\`/g;
     $result =~ s/&(\#162|cent);/\\textcent /g;
     $result =~ s/&(\#163|pound);/\\pounds /g; 
@@ -1223,17 +1230,17 @@
     my $r = shift;
 
     # A hook for me to work without disturbing Alex.
-    if (!$ENV{'form.jeremy'}) {
-        printWizard($r);
-        return OK;
+    if ($ENV{'form.jeremy'}) {
+	printWizard($r);
+	return OK;
     }
 
-    my $loaderror=&Apache::lonnet::overloaderror($r);
-    if ($loaderror) { return $loaderror; }
-    $loaderror=
-       &Apache::lonnet::overloaderror($r,
-         $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
-    if ($loaderror) { return $loaderror; }
+#    my $loaderror=&Apache::lonnet::overloaderror($r);
+#    if ($loaderror) { return $loaderror; }
+#    $loaderror=
+#       &Apache::lonnet::overloaderror($r,
+#         $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
+#    if ($loaderror) { return $loaderror; }
 
     $r->content_type('text/html');
     $r->send_http_header;
@@ -1256,6 +1263,8 @@
 	     &sequence_content_menu(0,$r);
 	 } elsif($ENV{'form.choice'} eq 'Standard LaTeX output for the primary sequence') {
 	     &sequence_content_menu(1,$r);
+	 } elsif($ENV{'form.choice'} eq 'Standard LaTeX output for the primary sequence with answers') {
+	     &sequence_content_menu(1,$r);
 	 } elsif($ENV{'form.choice'} eq 'All class print') {
 	     &additional_class_menu($r);
 	 } elsif($ENV{'form.choice'} eq 'Subdirectory print') {
@@ -1281,73 +1290,368 @@
    
 } 
 
+sub new_output_data {
+    my $r = shift;
+    $r->print(<<ENDPART);
+<html>
+<head>
+<title>LON-CAPA output for printing</title>
+</head>
+<body bgcolor="FFFFFF">
+<hr>
+ENDPART
+
+    my $choice = $ENV{'form.PRINT_TYPE'};
+    my $layout = $ENV{'form.FORMAT.layout'};
+    my $numberofcolumns = $ENV{'form.FORMAT.cols'};  
+    my $papersize = $ENV{'form.FORMAT.paper'};          
+    my $laystyle = 'book';
+    my $assignment =  $ENV{'form.assignment'};
+    if ($choice eq 'Subdirectory print') {
+	if ($ENV{'form.layout'} eq '') {$layout = 'CAPA';}
+	if ($ENV{'form.papersize'} eq '') {$papersize = 'Letter [8 1/2x11 in]';}
+	if ($ENV{'form.numberofcolumns'} eq '') {$numberofcolumns = 2;}
+    }
+    if (($choice eq 'current_document') && ($ENV{'form.url'}=~m|^/~|)) {
+	if ($ENV{'form.FORMAT.layout'} eq '') {$layout = 'CAPA';}
+	if ($ENV{'form.FORMAT.paper'} eq '') {$papersize = 'Letter [8 1/2x11 in]';}
+	if ($ENV{'form.FORMAT.cols'} eq '') {$numberofcolumns = 2;}
+    }
+    my $result = '';
+    my $number_of_columns = 1; #used only for pages to determine the width of the cell
+    my $selectionmade = '';
+    my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$layout,$numberofcolumns);
+    if ($numberofcolumns == 1) {
+	$textwidth=$ENV{'form.width'};
+	$textheight=$ENV{'form.height'};
+    }
+    my $LaTeXwidth; 
+    if ($textwidth=~/(\d+\s*cm)/) {
+	$LaTeXwidth = $1*10;
+    } elsif ($textwidth=~/(\d+\s*mm)/) {
+	$LaTeXwidth = $1;
+    }
+    if ($choice eq 'current_document') {
+      #-- single document - problem, page, html, xml, ...  
+      $selectionmade = 1;
+      if ($ENV{'form.url'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
+        my %moreenv;
+        $moreenv{'form.grade_target'}='tex';
+        if (&Apache::lonnet::allowed('bre',$ENV{'form.url'})) {
+	  $ENV{'form.url'}=~s/http:\/\/[^\/]+//;
+        }
+        $moreenv{'request.filename'}=$ENV{'form.url'};
+        $moreenv{'form.textwidth'}=$LaTeXwidth;
+        &Apache::lonnet::appenv(%moreenv);
+        my $texversion=&Apache::lonnet::ssi($ENV{'form.url'});
+        &Apache::lonnet::delenv('form.grade_target','form.textwidth','form.counter');
+        $result .= $texversion;
+        if ($ENV{'form.url'}=~m/\.page\s*$/) {
+	  ($result,$number_of_columns) = &page_cleanup($result);
+        }
+      } else {
+	  $result='\documentclass[letterpaper]{article}\usepackage{calc}\begin{document}Printout of this type of document is currently not supported: ';
+	  if ($ENV{'form.url'}=~/\/(aboutme|syllabus|bulletinboard|smppg)$/) {
+	      $result.=$1;
+	  } else {
+	      $result.=$ENV{'form.url'};
+	  }
+	  $result.=' \end{document}'
+      }
+    } elsif ($choice eq 'Standard LaTeX output for the primary sequence' or 
+             $choice eq 'Standard LaTeX output for whole primary sequence') {
+      #-- minimal sequence to which the current document belongs
+        #-- where is the primary sequence containing file?
+        my @master_seq = ();
+	for (my $i=0; $i<$ENV{'form.numberoffiles'};$i++) {
+	    if ($ENV{'form.whatfile'.$i}=~/\S/) {
+		push @master_seq,$ENV{'form.whatfile'.$i};
+	    }
+	}
+        #-- produce an output string
+	my $flag_latex_header_remove = 'NO';
+	my $flag_page_in_sequence = 'NO';
+	for (my $i=0;$i<=$#master_seq;$i++) {
+           my ($urlp,$symb) = split /&&/, $master_seq[$i];
+	    if ($choice eq 'Standard LaTeX output for the primary sequence') {
+              $selectionmade = 2;
+	    } elsif ($choice eq 'Standard LaTeX output for whole primary sequence') {
+              $selectionmade = 3;
+	    }
+	   my %moreenv;
+	   $moreenv{'form.grade_target'}='tex';
+	   $moreenv{'form.textwidth'}=$LaTeXwidth;
+	   &Apache::lonnet::appenv(%moreenv);
+	   #&Apache::lonnet::logthis("Trying to get $urlp with symb $symb");
+	   my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb));
+	   &Apache::lonnet::delenv('form.grade_target','form.textwidth');
+	   if ($urlp =~ m/\.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}/;
+	     $flag_page_in_sequence = 'YES';
+	   } 
+	   if ($flag_latex_header_remove ne 'NO') {
+	     $texversion = &latex_header_footer_remove($texversion);
+	   } else {
+	     $texversion =~ s/\\end{document}//;
+	   }
+	   $result .= $texversion;         
+	   $flag_latex_header_remove = 'YES';   
+	}
+	&Apache::lonnet::delenv('form.counter');
+	if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;}	
+	$result .= '\end{document}';
+    }  elsif ($choice eq 'Standard LaTeX output for the top level sequence') {
+        # where is the main sequence of the course?
+	$selectionmade = 4;
+	my $main_seq=&Apache::lonnet::clutter($ENV{'request.course.uri'});
+	my @file_seq = &coming_from_hash($main_seq);
+	for (my $i=0;$i<=$#file_seq;$i++) {
+	    my ($path,$title,$symb) = split /&&/,$file_seq[$i];
+	    $file_seq[$i] = $path.'&&'.$symb;
+	}
+	my $flag_latex_header_remove = 'NO';
+        #-- produce an output string
+	for (my $i=0;$i<=$#file_seq;$i++) {
+	   if (not $file_seq[$i]=~/^&&/) {
+	     my ($urlp,$symb) = split /&&/, $file_seq[$i];
+	     $urlp=~s/\/home\/httpd\/html//;	    
+	     if ($urlp=~m/\.(problem|exam|quiz|assess|survey|form|library)/) {
+		my %moreenv;
+		$moreenv{'form.grade_target'}='tex';
+		$moreenv{'form.textwidth'}=$LaTeXwidth;
+		&Apache::lonnet::appenv(%moreenv);
+		my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb));
+		&Apache::lonnet::delenv('form.grade_target','form.textwidth');		    
+		if ($flag_latex_header_remove ne 'NO') {
+		    $texversion = &latex_header_footer_remove($texversion);
+		} else {
+		    $texversion =~ s/\\end{document}//;
+		}
+		$result .= $texversion;  
+		$flag_latex_header_remove = 'YES';
+	     }		
+	   }
+	}	    
+	$result .= '\end{document}';
+    } elsif ($choice eq 'All class print') { 
+    #-- prints assignments for whole class or for selected students  
+	$selectionmade = 5;
+        my @students = ();
+	for (my $i=0; $i<$ENV{'form.numberofstudents'};$i++) {
+	    if ($ENV{'form.whomtoprint'.$i}=~/:/) {
+		push @students,$ENV{'form.whomtoprint'.$i};
+	    }
+	}
+	#where is the primary sequence containing current resource (the same for all students)?
+	my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'});
+	my @sequence = split('___',$symbolic);
+	my $primary_sequence;
+
+	$primary_sequence=&Apache::lonnet::clutter($sequence[0]);
+	my @master_seq = &coming_from_hash($primary_sequence); 
+	for (my $i=0;$i<=$#master_seq;$i++) {
+	    my ($path,$title,$symb) = split /&&/,$master_seq[$i];
+	    $master_seq[$i] = $path.'&&'.$symb;
+	}
+        #loop over students
+	my $flag_latex_header_remove = 'NO'; 
+	my %moreenv;
+	$moreenv{'form.textwidth'}=$LaTeXwidth;
+	&Apache::lonnet::appenv(%moreenv);
+	my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1);
+	foreach my $person (@students) {
+	    my $current_output = ''; 
+	    my ($usersection,$username,$userdomain) = split /:/,$person;
+	    my $fullname = &get_name($username,$userdomain);
+            #goes through all resources, checks if they are available for current student, and produces output   
+	    foreach my $curresline (@master_seq)  {
+		my ($curres,$symb) = split /&&/, $curresline;
+                if ($curres=~ m/\.(problem|exam|quiz|assess|survey|form|library)/) {
+		    my ($map,$id,$res_url) = split(/___/,$symb);
+		    if (&Apache::lonnet::allowed('bre',$res_url)) {
+			my $rendered = &Apache::loncommon::get_student_view($symb,$username,$userdomain,
+                                                                        $ENV{'request.course.id'},'tex');
+			if ($flag_latex_header_remove eq 'YES') {
+			    $rendered = &latex_header_footer_remove($rendered);
+			} else {
+			    $rendered =~ s/\\end{document}//;
+			}
+			$current_output .= $rendered;
+		    }
+		    $flag_latex_header_remove = 'YES';
+		}
+	    }
+	    my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
+	    if ($current_output=~/\\documentclass/) {
+		$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm}\\usepackage{fancyhdr}\\pagestyle{fancy}\\rhead{}\\chead{} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}} - $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}\\vskip 3 mm /;
+	    } else {
+		my $blanspages = '';
+		for (my $j=0;$j<$ENV{'form.addedpages'};$j++) {$blanspages.='\clearpage\strut\clearpage';}
+		$current_output = '\strut\\newline\\noindent\\makebox[\\textwidth/$number_of_columns][b]{\\hrulefill}\\newline\\noindent{\\tiny Printed from LON-CAPA\\copyright MSU{\\hfill} Licensed under GNU General Public License }\\newpage \\vskip 3mm'.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}} - '.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}\hskip 1.4in } \vskip 5 mm '.$current_output;
+	    }
+	    $result .= $current_output;
+	    &Apache::lonnet::delenv('form.counter');	    
+	    &Apache::lonxml::init_counter(); 
+	    &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
+						    'last student '.$fullname);
+	}
+	&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
+	$result .= '\end{document}';
+	&Apache::lonnet::delenv('form.textwidth');
+    } elsif ($choice eq 'Subdirectory print') {      
+    #prints selected problems from the subdirectory 
+	$selectionmade = 6;
+        my @list_of_files = ();
+	for (my $i=0; $i<$ENV{'form.numberofproblems'};$i++) {
+	    if ($ENV{'form.whattoprint'.$i}=~/^\//) {
+		push @list_of_files,$ENV{'form.whattoprint'.$i};
+	    }
+	}	
+	my $flag_latex_header_remove = 'NO';  
+	for (my $i=0;$i<=$#list_of_files;$i++) {
+	    my $urlp = $list_of_files[$i];
+	    if ($urlp=~/\//) {
+		my %moreenv;
+		$moreenv{'form.grade_target'}='tex';
+		$moreenv{'form.textwidth'}=$LaTeXwidth;
+		&Apache::lonnet::appenv(%moreenv);
+		if ($urlp =~ m|/home/([^/]+)/public_html|) {
+		    $urlp =~ s|/home/([^/]*)/public_html|/~$1|;
+		} else {
+		    $urlp =~ s|^/home/httpd/html||;
+		}
+		my $texversion=&Apache::lonnet::ssi($urlp);
+		&Apache::lonnet::delenv('form.grade_target','form.textwidth');
+                #this chunck is responsible for printing the path to problem
+		my $newurlp = '';
+		my $HowMany = length($urlp)*2;
+		if ($HowMany > $LaTeXwidth) {
+		    my @temporrary = split '/',$urlp;
+		    my $HowManyNew = 0;
+		    for (my $ii=0;$ii<=$#temporrary;$ii++) {
+			if ($temporrary[$ii] ne '') {
+			    $HowManyNew += length($temporrary[$ii])*2;
+			    if ($HowManyNew < $LaTeXwidth ) {
+				$newurlp .=  '/'.$temporrary[$ii];
+			    } else {
+				$HowManyNew = 0;
+				$newurlp .=  '|\vskip -1 mm \noindent \verb|';
+				$ii--;
+			    }
+			}
+		    }
+		}
+		$texversion =~ s/(\\begin{minipage}{\\textwidth})/$1 {\\small\\noindent\\verb|$newurlp\|\\vskip 0 mm}/;
+		if ($flag_latex_header_remove ne 'NO') {
+		    $texversion = &latex_header_footer_remove($texversion);
+		} else {
+		    $texversion =~ s/\\end{document}//;
+		}
+		$result .= $texversion;
+	    }
+	    $flag_latex_header_remove = 'YES';  
+	}
+	$result .= '\end{document}';      	
+    }
+#-------------------------------------------------------- corrections for the different page formats
+    $result = &page_format_transformation($papersize,$layout,$numberofcolumns,$choice,$result,$assignment);
+    if ($layout eq 'CBI') {
+        $laystyle = 'album';
+    }
+    $result = &latex_corrections($number_of_columns,$result);
+    #changes page's parameters for the one column output 
+    if ($ENV{'form.numberofcolumns'} == 1) {
+	$result =~ s/\\textwidth= 9cm/\\textwidth= $ENV{'form.width'}/;
+	$result =~ s/\\textheight 25\.9cm/\\textheight $ENV{'form.height'}/;
+	$result =~ s/\\evensidemargin = -0\.57in/\\evensidemargin= $ENV{'form.leftmargin'}/;
+	$result =~ s/\\oddsidemargin = -0\.57in/\\oddsidemargin= $ENV{'form.leftmargin'}/;
+    }
+#-- writing .tex file in prtspool 
+    my $temp_file;
+    my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout_".time."_".rand(10000000).".tex";
+    unless ($temp_file = Apache::File->new('>'.$filename)) {
+	$r->log_error("Couldn't open $filename for output $!");
+	return SERVER_ERROR; 
+    } 
+    print $temp_file $result;
+$r->print(<<FINALEND);
+<meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$filename&$laystyle&$numberofcolumns&$selectionmade">
+</body>
+</html>
+FINALEND
+}
+
+
+
+########################################################################################
+
 use Apache::lonwizard;
 
 sub printWizard {
     my $r = shift;
 
     if ($ENV{'request.course.id'}) {
-	my $fn=$ENV{'request.course.fn'};
-	tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640);
+      my $fn=$ENV{'request.course.fn'};
+      tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640);
     }
 
     if ($r->header_only) {
-        if ($ENV{'browser.mathml'}) {
-            $r->content_type('text/xml');
-        } else {
-            $r->content_type('text/html');
-        }
-        $r->send_http_header;
-        return OK;
+      if ($ENV{'browser.mathml'}) {
+        $r->content_type('text/xml');
+      } else {
+        $r->content_type('text/html');
+      }
+      $r->send_http_header;
+      return OK;
     }
 
-    # Send header, nocache
     if ($ENV{'browser.mathml'}) {
-        $r->content_type('text/xml');
+      $r->content_type('text/xml');
     } else {
-        $r->content_type('text/html');
+      $r->content_type('text/html');
     }
     &Apache::loncommon::no_cache($r);
     $r->send_http_header;
     $r->rflush();
 
     my ($resourceTitle,$sequenceTitle,$mapTitle) = &details_for_menu;
-    if (!$resourceTitle) { # if the resource doesn't have a title, use the filename
-        my $url = $ENV{'form.postdata'};
-        $resourceTitle = substr($url, rindex($url, '/') + 1);
+    #if the resource doesn't have a title, use the filename
+    if (!$resourceTitle) {
+      my $url = $ENV{'form.postdata'};
+      $resourceTitle = substr($url, rindex($url, '/') + 1);
     }
 
-    my $wizard = Apache::lonwizard->new("Printing Wizard", $ENV{QUERY_STRING});
-    # PRINT_TYPE: What the user wants to print (current docs,
-    #  whole sequence, etc.
-    $wizard->declareVars(['PRINT_TYPE', 'FORMAT', 'postdata', 'url',
-                          'symb', 'RESOURCES', 'FILES', 'STUDENTS']);
+    my $wizard = Apache::lonwizard->new("Printing Wizard", $ENV{QUERY_STRING});   
 
-    # Extract map
-    my $symb = $wizard->{VARS}->{'symb'};
-    my ($map, $id, $url) = split(/__/, $symb);
+    $wizard->declareVars(['PRINT_TYPE', 'FORMAT', 'url', 'symb', 'postdata' , 'RESOURCES', 'FILES', 'STUDENTS']);             
 
-    my $subdir = &Apache::lonnet::filelocation("", $ENV{'form.url'});
+    $wizard->{VARS}->{'postdata'} = $ENV{'form.postdata'}; 
+    $wizard->{VARS}->{'url'} = $ENV{'form.postdata'};                                
+    $wizard->{VARS}->{'symb'} = &Apache::lonnet::symbread($ENV{'form.postdata'}); 
 
-    # "Delete everything after the last slash."
+    my $subdir = &Apache::lonnet::filelocation("", $ENV{'form.postdata'});
     $subdir =~ s|/[^/]+$||;
 
-    # This really ought to be in some repository in loncommon or
-    # something where it can just be grabbed.
+    my $symb = $wizard->{VARS}->{'symb'};  # Extract map
+    my ($map, $id, $url) = split(/__/, $symb);
+
+
+    # This really ought to be in some repository in loncommon or something where it can just be grabbed.
     my $problemFilter = sub { 
         my $name = shift;
         return $name =~ m/^[^\.]+\.(problem|exam|quiz|assess|survey|form|library)$/;
     };
 
-    # What can be printed is a very dynamic decision based on
-    # lots of factors. So we need to dynamically build this list.
-    # To prevent security leaks, states are only added to the wizard
-    # if they can be reached, which ensures manipulating the querystring
-    # won't allow anyone to reach states they shouldn't have permission
-    # to reach.
+    # What can be printed is a very dynamic decision based on lots of factors. So we need to dynamically build this list.
+    # To prevent security leaks, states are only added to the wizard if they can be reached, which ensures manipulating the 
+    # querystring won't allow anyone to reach states they shouldn't have permission to reach.
+
     my $printChoices = []; 
+
     # We can always print the current screen.
-    push @{$printChoices}, ['current_document', "<b>$resourceTitle</b> (exactly what was on the screen)", 'CHOOSE_FORMAT'];
+    push @{$printChoices}, ['current_document', "Current resource \"<b>$resourceTitle</b>\" (prints what you just saw on the screen)", 'CHOOSE_FORMAT'];
 
     if ($ENV{'form.postdata'}=~ /\/res\//) {
         # Allow problems from sequence
@@ -1355,32 +1659,54 @@
         Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS", 'Select Problems', "Select problems to print from <b>$sequenceTitle</b>:", 'CHOOSE_FORMAT', 'RESOURCES', sub {my $res = shift; return $res->is_problem()}, undef, $map);
 
         # Allow all resources from sequence
-        push @{$printChoices}, ['map_problems_pages', "Problems and pages from <b>$sequenceTitle</b>", 'CHOOSE_PROBLEMS_HTML'];
+        push @{$printChoices}, ['map_problems_pages', "Problem(s) and page(s) or html/xml file(s) from \"<b>$sequenceTitle</b>\"", 'CHOOSE_PROBLEMS_HTML'];
         Apache::lonwizard::resource_multichoice->new($wizard, "CHOOSE_PROBLEMS_HTML", 'Select Resources', "Select resources to print from <b>$sequenceTitle</b>:", "CHOOSE_FORMAT", 'RESOURCES', sub {my $res = shift; return !$res->is_map()}, undef, $map);
     }
 
     # If the user is priviledged, allow them to print all 
     # problems in the course, optionally for selected students
     if (($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) and ($ENV{'form.postdata'}=~/\/res\//)) { 
-        push @{$printChoices}, ['all_problems', '<b>All problems</b> in course (may take a lot of time)', 'CHOOSE_FORMAT'];
+        push @{$printChoices}, ['all_problems', 'All problems in this course (<b>warning:</b> this may be time consuming)', 'CHOOSE_FORMAT'];
         push @{$printChoices}, ['problems_for_students', "Problems from <b>$sequenceTitle</b> for selected students", 'CHOOSE_STUDENTS'];
         Apache::lonwizard::choose_student->new($wizard, "CHOOSE_STUDENTS", "Choose Students", "Select the students you wish to print the problems for:", 'CHOOSE_FORMAT', 'STUDENTS', 1);
     }
 
     # FIXME: That RE should come from a library somewhere.
     if ((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($ENV{'form.postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) {    
-        push @{$printChoices}, ['problems_from_directory', "Problems from <b>$subdir</b>", 'CHOOSE_FROM_SUBDIR'];
+        push @{$printChoices}, ['problems_from_directory', "Problems from current subdirectory <br /><b><small>$subdir</small></b>", 'CHOOSE_FROM_SUBDIR'];
         Apache::lonwizard::choose_files->new($wizard, "CHOOSE_FROM_SUBDIR", "Select Files","Select problems you wish to print from <b>$subdir</b>:", 'CHOOSE_FORMAT', 'FILES', $subdir, $problemFilter);
     }
 
-    # Despite the appearance of states before here, this is the first state.
-    Apache::lonwizard::switch_state->new($wizard, "START", "Selecting Resources to Print", "PRINT_TYPE", $printChoices, "What do you want to print?");
-    Apache::lonprintout::page_format_state->new($wizard, "CHOOSE_FORMAT", "Page Format", "FORMAT");
 
-    $r->print($wizard->display());
+
+
+    # Despite the appearance of states before here, this is the first state. 
+    Apache::lonwizard::switch_state->new($wizard, "START", "What do you want to print? Make a choice.", "PRINT_TYPE", $printChoices, "", "");
+ 
+
+
+
+
+
+
+    Apache::lonprintout::page_format_state->new($wizard, "CHOOSE_FORMAT", "You can change page layout parameters here.", "FORMAT");   
+
+
+
+
+    if ($ENV{'form.printWizDone'} ne 1) {
+      $r->print($wizard->display());
+    } else {
+      &new_output_data($r);
+    }
+
+
+
+
 
     untie %hash;
 
+
     return OK;
 }
 
@@ -1447,20 +1773,21 @@
 <p>How should the printing be formatted?</p>
 <table cellpadding="3">
   <tr>
-    <td align="center"><b>Layout</b></td>
-    <td align="center"><b>Columns</b></td>
-    <td align="center"><b>Paper type</b></td>
+    <td align="center"><b>Orientation</b></td>
+    <td align="center"><b>Number of Columns</b></td>
+    <td align="center"><b>Paper size (<small>[width x height]</small>)</b></td>
   </tr>
   <tr>
     <td>
-      <input type="radio" name="${var}.layout" value="L" $landscapeChecked> Landscape<br />
-      <input type="radio" name="${var}.layout" value="P" $portraitChecked> Portrait
+      <input type="radio" name="${var}.layout" value="CBI" $landscapeChecked> Landscape<br />
+      <input type="radio" name="${var}.layout" value="CAPA" $portraitChecked> Portrait
     </td>
-    <td>
+    <td align="center">
       <select name="${var}.cols">
 STATEHTML
 
     my $i;
+    $cols = 2;
     for ($i = 1; $i <= $maxColumns; $i++) {
         if ($i == $cols) {
             $result .= "<option value='$i' selected>$i</option>\n";
@@ -1475,9 +1802,9 @@
     $i = 0;
     foreach (@paperSize) {
         if ($paper == $i) {
-            $result .= "<option selected value='$i'>" . $paperSize[$i] . "</option>\n";
+            $result .= "<option selected value='$paperSize[$i]'>" . $paperSize[$i] . "</option>\n";
         } else {
-            $result .= "<option value='$i'>" . $paperSize[$i] . "</option>\n";
+            $result .= "<option value='$paperSize[$i]'>" . $paperSize[$i] . "</option>\n";
         }
         $i++;
     }

--sakharuk1050947590--