--- loncom/interface/lonprintout.pm 2002/09/09 20:20:40 1.58 +++ loncom/interface/lonprintout.pm 2002/09/19 18:33:20 1.71 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.58 2002/09/09 20:20:40 sakharuk Exp $ +# $Id: lonprintout.pm,v 1.71 2002/09/19 18:33:20 sakharuk Exp $ # # Copyright Michigan State University Board of Trustees # @@ -48,7 +48,12 @@ use Apache::inputtags; use Apache::grades; use Apache::edit; use Apache::File(); +use Apache::lonnavmaps; use POSIX qw(strftime); +use GDBM_File; + + +my %hash; sub headerform { @@ -60,38 +65,49 @@ sub headerform {
-$ENV{'form.postdata'}

ENDHEADER + if ($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) { + $r->print(<Path to current document: $ENV{'form.postdata'}

+ENDHEADER1 +} } sub menu_for_output { my $r = shift; + my ($title_for_single_resource,$title_for_sequence,$title_for_main_map) = &details_for_menu; + if ($title_for_single_resource ne '') {$title_for_single_resource = '"'.$title_for_single_resource.'"';} + if ($title_for_sequence ne '') {$title_for_sequence = '"'.$title_for_sequence.'"';} + if ($title_for_main_map ne '') {$title_for_main_map = '"'.$title_for_main_map.'"';} + my $subdir_to_print = $ENV{'form.postdata'}; + $subdir_to_print =~ m/\/([^\/]+)$/; + $subdir_to_print =~ s/$1//; $r->print(<What do you want to print? Make a choice.
- Current document -(you will print what you see on the screen)
+ Current document $title_for_single_resource +(prints what you just saw on the screen)
ENDMENUOUT1 if ((not $ENV{'request.role'}=~m/^au\./) and (not $ENV{'request.role'}=~m/^ca\./)) { $r->print(< All problems from the primary sequence
- The whole primary sequence (problems plus all html and xml files)
- All problems from the top level sequence
-
+ All problems from $title_for_sequence
+ All problems plus any pages or html/xml files from $title_for_sequence
ENDMENUOUT2 } if ($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) { $r->print(< Print assignment (all problems from the primary sequence) for group of students

+ All problems in this course (warning: this may be time consuming)
+
+ All problems from $title_for_sequence for selected students

ENDMENUOUT6 } my $subdirtoprint = &Apache::lonnet::filelocation("",$ENV{'form.url'}); $subdirtoprint =~ s/\/[^\/]+$//; if (&Apache::lonnet::allowed('bre',$subdirtoprint) eq 'F') { $r->print(< All problems from current subdirectory (where this particular problem is)
+ Problems from current subdirectory $subdir_to_print
ENDMENUOUT4 } $r->print(<  Number of columns: + + Paper size (format [width x height]): +
@@ -170,8 +199,8 @@ sub problem_choice_menu { } } -  - +  +

ENDMENUOUT1 my $i; @@ -233,10 +262,10 @@ ENDMENUOUT1 } } -  - +  +   - +

ENDDISHEADER my $i = 0; @@ -316,10 +345,12 @@ ENDPART my $numberofcolumns = $ENV{'form.numberofcolumns'}; my $laystyle = 'book'; my $result = ''; - my $number_of_columns = 1; + my $number_of_columns = 1; #used only for pages to determine the width of the cell + my $selectionmade = ''; if ($choice eq 'Standard LaTeX output for current document') { #-- single document - problem, page, html, xml + $selectionmade = 1; my %moreenv; $moreenv{'form.grade_target'}='tex'; if ($ENV{'request.role'}=~m/^au\./ or $ENV{'request.role'}=~m/^ca\./) { @@ -330,7 +361,6 @@ ENDPART my $texversion=&Apache::lonnet::ssi($ENV{'form.url'}); &Apache::lonnet::delenv('form.grade_target'); $result .= $texversion; - $result = &additional_cleanup($result); if ($ENV{'form.url'}=~m/\.page\s*$/) { ($result,$number_of_columns) = &page_cleanup($result); } @@ -339,89 +369,62 @@ ENDPART #-- minimal sequence to which the current document belongs #-- where is the primary sequence containing file? my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'}); - $_ = $symbolic; - m/([^_]+)_/; - my $primary_sequence = '/res/'.$1; - #-- open and analyses the primary sequence - my $sequence_file=&Apache::lonnet::filelocation("",$primary_sequence); - my $sequencefilecontents=&Apache::lonnet::getfile($sequence_file); - my @master_seq = &content_map($sequencefilecontents); + $symbolic =~ m/([^_]+)_/; + my $primary_sequence = '/res/'.$1; + my @master_seq = &coming_from_hash($primary_sequence); #-- produce an output string + my $flag_latex_header_remove = 'NO'; + my $flag_page_in_sequence = 'NO'; for (my $i=0;$i<=$#master_seq;$i++) { - $_ = $master_seq[$i]; - m/\"(.*)\"/; - $_ = $1; - my $urlp = $1; + my ($urlp,$symb) = split /&&/, $master_seq[$i]; if ($choice eq 'Standard LaTeX output for the primary sequence') { - if ($urlp =~ m/\.(problem|exam|quiz|assess|survey|form|library)/) { + $selectionmade = 2; + if ($urlp =~ m/\.(problem|exam|quiz|assess|survey|form|library)/) { my %moreenv; $moreenv{'form.grade_target'}='tex'; &Apache::lonnet::appenv(%moreenv); - my $texversion=&Apache::lonnet::ssi($urlp); + my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb)); &Apache::lonnet::delenv('form.grade_target'); + 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'; } } elsif ($urlp =~ /\S+/) { + $selectionmade = 3; my %moreenv; $moreenv{'form.grade_target'}='tex'; &Apache::lonnet::appenv(%moreenv); - my $texversion=&Apache::lonnet::ssi($urlp); + my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb)); &Apache::lonnet::delenv('form.grade_target'); - $result .= $texversion; + 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'; } - } - $result = &additional_cleanup($result); + } + 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 = '/res/'.$ENV{'request.course.uri'}; - my $file=&Apache::lonnet::filelocation("",$main_seq); - my $filecontents=&Apache::lonnet::getfile($file); - my @file_seq = &content_map($filecontents); - for (my $iu=0;$iu<=$#file_seq;$iu++) { - $file_seq[$iu]=~s/^"//; - $file_seq[$iu]=~s/"$//; - if ($file_seq[$iu]=~m/\S+/) { - $file_seq[$iu]=&Apache::lonnet::filelocation("",$file_seq[$iu]); - } else { - $file_seq[$iu]= 'REMOVE IT PLEASE'; - } - } - my $i=0; - my $limit = $#file_seq; - while ($i<=$limit) { - unless ($file_seq[$i]=~m/\.(problem|page)/) { - if ($file_seq[$i]=~m/\.sequence/) { - my $filecontents=&Apache::lonnet::getfile($file_seq[$i]); - my @newfile_seq = &content_map($filecontents); - for (my $iu=0;$iu<=$#newfile_seq;$iu++) { - $newfile_seq[$iu]=~s/^"//; - $newfile_seq[$iu]=~s/"$//; - if ($newfile_seq[$iu]=~m/\S+/) { - $newfile_seq[$iu]=&Apache::lonnet::filelocation("",$newfile_seq[$iu]); - } else { - $newfile_seq[$iu]= 'REMOVE IT PLEASE'; - } - } - splice @file_seq,$i,1,@newfile_seq; - $i=0; - $limit = $#file_seq; - } else { - splice @file_seq,$i,1,'REMOVE IT PLEASE'; - } - } - $i++; - } - for (my $iu=0;$iu<=$#file_seq;$iu++) { - if ($file_seq[$iu]=~m/REMOVE IT PLEASE/) { - splice @file_seq,$iu,1; - } - } - if ($file_seq[-1]=~m/REMOVE IT PLEASE/) { - pop @file_seq; - } + my @file_seq = &coming_from_hash($main_seq); #-- produce an output string for (my $i=0;$i<=$#file_seq;$i++) { - my $urlp = $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; @@ -435,6 +438,7 @@ ENDPART $result = &additional_cleanup($result); } elsif ($choice eq 'All class print') { #-- prints assignments for whole class or for selected students + $selectionmade = 5; my (@students,@st_output) = ((),()); for (my $i=0; $i<$ENV{'form.numberofstudents'};$i++) { if ($ENV{'form.whomtoprint'.$i}=~/:/) { @@ -445,21 +449,18 @@ ENDPART my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'}); $symbolic =~ m/([^_]+)_/; my $primary_sequence = '/res/'.$1; - #opens and analyses the primary sequence file, produces the array of resources - my $sequence_file=&Apache::lonnet::filelocation("",$primary_sequence); - my $sequencefilecontents=&Apache::lonnet::getfile($sequence_file); - my @master_seq = &content_map($sequencefilecontents); - #loop over students + my @master_seq = &coming_from_hash($primary_sequence); + #loop over students foreach my $person (@students) { my $current_output = ''; my ($usersection,$username,$userdomain) = split /:/,$person; my $fullname = &Apache::grades::get_fullname($username,$userdomain); #goes through all resources, checks if they are available for current student, and produces output - foreach my $curres (@master_seq) { + foreach my $curresline (@master_seq) { + my ($curres,$symb) = split /&&/, $curresline; $curres =~ s/^"//; $curres =~ s/"$//; if ($curres=~/\w+/) { - my $symb = &Apache::lonnet::symbread($curres); my ($map,$id,$res_url) = split(/___/,$symb); if (&Apache::lonnet::allowed('bre',$res_url)) { my $rendered = &Apache::loncommon::get_student_view($symb,$username,$userdomain, @@ -474,10 +475,10 @@ ENDPART $result = &additional_cleanup($result); } 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}=~/^\//) { -# $result.= $ENV{'form.whattoprint'.$i}.' FFF '; push @list_of_files,$ENV{'form.whattoprint'.$i}; } } @@ -496,21 +497,22 @@ ENDPART $result .= $texversion; } } - $result = &additional_cleanup($result); - - + $result = &additional_cleanup($result); } #-- corrections for the different page formats if ($layout eq 'CBI' and $numberofcolumns eq '1') { + $result =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{-40pt}\\setlength{\\evensidemargin}{-60pt}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{4\.4in}\\setlength{\\textheight}{6\.8in}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt} \\begin{document}/; + $result =~ s/\$number_of_columns/$number_of_columns/g; + $laystyle = 'album'; } elsif ($layout eq 'CBI' and $numberofcolumns eq '2') { $result =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{-40pt}\\setlength{\\evensidemargin}{-60pt}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{4\.4in}\\setlength{\\textheight}{6\.8in}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt} \\begin{document}/; + $result =~ s/\$number_of_columns/$number_of_columns/g; $laystyle = 'album'; } elsif ($layout eq 'CAPA') { my $courseidinfo = $ENV{'request.role'}; $_ = $courseidinfo; m/.*\/(.*)/; $courseidinfo = $ENV{'course.physnet_'.$1.'.description'}; -# $result =~ s/\\documentclass\[letterpaper\]{article}/\\documentclass\[twocolumn\]{article}/; $result =~ s/\\documentclass\[letterpaper\]{article}/\\documentclass{article}/; if ($choice ne 'All class print') { $result =~ s/\\begin{document}/\\textheight 25\.9cm\\oddsidemargin = -0\.57in\\evensidemargin = -0\.57in\\textwidth= 9cm\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\begin{document}\\voffset=-1\.8cm\\setcounter{page}{1}\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$ENV{'environment.firstname'} $ENV{'environment.lastname'}}}\\hskip 1\.4in $courseidinfo} \\vskip 5 mm /; @@ -529,6 +531,9 @@ ENDPART #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'}/; } #-- LaTeX corrections my $first_comment = index($result,'