--- loncom/interface/lonprintout.pm 2003/10/03 13:38:21 1.251 +++ loncom/interface/lonprintout.pm 2003/10/29 18:30:07 1.260 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.251 2003/10/03 13:38:21 sakharuk Exp $ +# $Id: lonprintout.pm,v 1.260 2003/10/29 18:30:07 sakharuk Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,17 +25,6 @@ # # http://www.lon-capa.org/ # -# (Internal Server Error Handler -# -# (Login Screen -# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, -# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer) -# -# 3/1/1 Gerd Kortemeyer) -# -# 3/1 Gerd Kortemeyer -# -# 9/17 Alex Sakharuk # package Apache::lonprintout; @@ -51,6 +40,7 @@ use Apache::File(); use Apache::lonnavmaps; use Apache::lonratedt; use POSIX qw(strftime); +use Apache::lonlocal; use GDBM_File; @@ -656,6 +646,8 @@ sub path_to_problem { } } } + } else { + $newurlp=$urlp; } return '{\small\noindent\verb|'.$newurlp.'|\vskip 0 mm}'; } @@ -823,6 +815,13 @@ ENDPART } if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;} $result .= '\end{document}'; + } elsif ($currentURL=~/\/smppg$/) { + my %form; + $form{'grade_target'}='tex'; + $form{'textwidth'}=$LaTeXwidth; + $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; + my $texversion=&Apache::lonnet::ssi($currentURL,%form); + $result .= $texversion; } else { $result.='\documentclass[letterpaper]{article}\usepackage{calc}\begin{document}Printout of this type of document is currently not supported: '; if ($currentURL=~/\/(aboutme|syllabus|bulletinboard|smppg)$/) { @@ -836,7 +835,8 @@ ENDPART } } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or - ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems')) { + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') or + ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences')) { #-- produce an output string my %form=(); $form{'grade_target'}='tex'; @@ -847,7 +847,6 @@ ENDPART my $flag_page_in_sequence = 'NO'; my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; my $prevassignment=''; - &Apache::lonnet::delenv('form.counter'); &Apache::lonxml::init_counter(); for (my $i=0;$i<=$#master_seq;$i++) { my (undef,undef,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]); @@ -858,25 +857,34 @@ ENDPART $selectionmade = 3; } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') { $selectionmade = 4; + } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences') { + $selectionmade = 7; } $form{'symb'}=$master_seq[$i]; my ($sequence)=&Apache::lonnet::decode_symb($master_seq[$i]); my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #tittle of the assignment which contains this problem if ($i==0) {$prevassignment=$assignment;} #&Apache::lonnet::logthis("Trying to get $urlp with symb $master_seq[$i]"); - my $texversion=&Apache::lonnet::ssi($urlp,%form); + my $texversion.=&Apache::lonnet::ssi($urlp,%form); 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}/; $flag_page_in_sequence = 'YES'; } + my $lonidsdir=$r->dir_config('lonIDsDir'); + my $envfile=$ENV{'user.environment'}; + $envfile=~/\/([^\/]+)\.id$/; + $envfile=$1; + &Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile); + my $current_counter=$ENV{'form.counter'}; if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { my %form; $form{'grade_target'}='answer'; $form{'answer_output_mode'}='tex'; my $answer=&Apache::lonnet::ssi($urlp,%form); + &Apache::lonnet::appenv(('form.counter' => $current_counter)); if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; } else { @@ -911,9 +919,13 @@ ENDPART &Apache::lonnet::delenv('form.counter'); if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;} $result .= '\end{document}'; - } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') { + } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') || ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')) { #-- prints assignments for whole class or for selected students - $selectionmade=5; + if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students') { + $selectionmade=5; + } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students') { + $selectionmade=8; + } my @students=split /\|\|\|/, $helper->{'VARS'}->{'STUDENTS'}; my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; #loop over students @@ -933,17 +945,24 @@ ENDPART &Apache::lonnet::delenv('form.counter'); &Apache::lonxml::init_counter(); foreach my $curresline (@master_seq) { - if ($curresline=~ m/\.(problem|exam|quiz|assess|survey|form|library)$/) { + if ((($curresline=~ m/\.(problem|exam|quiz|assess|survey|form|library)$/) && ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_for_students')) || ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'resources_for_students')) { my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline); if (&Apache::lonnet::allowed('bre',$res_url)) { my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain, $ENV{'request.course.id'},'tex'); + my $lonidsdir=$r->dir_config('lonIDsDir'); + my $envfile=$ENV{'user.environment'}; + $envfile=~/\/([^\/]+)\.id$/; + $envfile=$1; + &Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile); + my $current_counter=$ENV{'form.counter'}; if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { my %form; $form{'answer_output_mode'}='tex'; $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$ENV{'request.course.id'},%form); + &Apache::lonnet::appenv(('form.counter' => $current_counter)); if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/; } else { @@ -977,7 +996,7 @@ ENDPART &Apache::lonnet::delenv('form.counter'); &Apache::lonxml::init_counter(); &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, - 'last student '.$fullname); + &mt('last student').' '.$fullname); } &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); $result .= '\end{document}'; @@ -994,6 +1013,7 @@ ENDPART } for (my $i=0;$i<=$#list_of_files;$i++) { my $urlp = $list_of_files[$i]; + $urlp=~s|//|/|; if ($urlp=~/\//) { my %form; $form{'grade_target'}='tex'; @@ -1006,7 +1026,7 @@ ENDPART } my $texversion=&Apache::lonnet::ssi($urlp,%form); if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || - ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { + ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { my %form; $form{'grade_target'}='answer'; $form{'answer_output_mode'}='tex'; @@ -1016,21 +1036,23 @@ ENDPART if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; } else { - $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); - if ($helper->{'VARS'}->{'construction'} ne '1') { - $texversion.='\vskip 0 mm \noindent '; - $texversion.=&path_to_problem ($urlp,$LaTeXwidth); - } else { - $texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm '; - my $URLpath=$urlp; - $URLpath=~s/~([^\/]+)/public_html\/$1\/$1/; - $texversion.=&path_to_problem ($URLpath,$LaTeXwidth); + $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); + if ($helper->{'VARS'}->{'construction'} ne '1') { + $texversion.='\vskip 0 mm \noindent '; + $texversion.=&path_to_problem ($urlp,$LaTeXwidth); + } else { + $texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm '; + my $URLpath=$urlp; + $URLpath=~s/~([^\/]+)/public_html\/$1\/$1/; + $texversion.=&path_to_problem ($URLpath,$LaTeXwidth); + } + $texversion.='\vskip 1 mm '.$answer.'\end{document}'; } - $texversion.='\vskip 1 mm '.$answer.'\end{document}'; - } } #this chunck is responsible for printing the path to problem - my $newurlp=&path_to_problem($urlp,$LaTeXwidth); + my $newurlp=$urlp; + if ($newurlp=~/~/) {$newurlp=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|;} + $newurlp=&path_to_problem($newurlp,$LaTeXwidth); $texversion =~ s/(\\begin{minipage}{\\textwidth})/$1 $newurlp/; if ($flag_latex_header_remove ne 'NO') { $texversion = &latex_header_footer_remove($texversion); @@ -1061,22 +1083,27 @@ ENDPART $result =~ s/\\evensidemargin = -0\.57in/\\evensidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; $result =~ s/\\oddsidemargin = -0\.57in/\\oddsidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; } - if ($helper->{'VARS'}->{'TABLE_CONTENTS'} eq 'yes') {$selectionmade*=10;} - if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') { - if ($selectionmade<10) {$selectionmade*=100;} else {$selectionmade*=10;} - } - if ($ENV{'request.role.adv'}) {$selectionmade*=10000;} #-- 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; - } + } + + my $identifier = time.'_'.int(rand(1000)); + &Apache::lonnet::appenv('cgi.'.$identifier.'.file' => $filename, + 'cgi.'.$identifier.'.layout' => $laystyle, + 'cgi.'.$identifier.'.numcol' => $numberofcolumns, + 'cgi.'.$identifier.'.selection' => $selectionmade, + 'cgi.'.$identifier.'tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'}, + 'cgi.'.$identifier.'tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'}, + 'cgi.'.$identifier.'role' => $ENV{'request.role.adv'}); + print $temp_file $result; $r->print(< + FINALEND @@ -1257,7 +1284,7 @@ sub printHelper { my $paramHash; if ($resourceTitle) { - push @{$printChoices}, ["$resourceTitle (what you just saw on the screen)", 'current_document', 'PAGESIZE']; + push @{$printChoices}, ["$resourceTitle (what you just saw on the screen)", 'current_document', 'PAGESIZE']; } # $r->print($helper->{VARS}->{'postdata'}); @@ -1283,9 +1310,9 @@ sub printHelper { $helper->{VARS}->{'postdata'} && $helper->{VARS}->{'assignment'}) { # Allow problems from sequence - push @{$printChoices}, ["Problems in $sequenceTitle", 'map_problems', 'CHOOSE_PROBLEMS']; + push @{$printChoices}, ["Problems in $sequenceTitle", 'map_problems', 'CHOOSE_PROBLEMS']; # Allow all resources from sequence - push @{$printChoices}, ["Resources in $sequenceTitle", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; + push @{$printChoices}, ["Resources in $sequenceTitle", 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; my $helperFragment = < @@ -1315,9 +1342,9 @@ HELPERFRAGMENT # If the user is priviledged, allow them to print all # problems in the course, optionally for selected students if ($userPriviledged && ($helper->{VARS}->{'postdata'}=~/\/res\//)) { - push @{$printChoices}, ['Problems from entire course', 'all_problems', 'ALL_PROBLEMS']; + push @{$printChoices}, ['Problems from entire course', 'all_problems', 'ALL_PROBLEMS']; if ($helper->{VARS}->{'assignment'}) { - push @{$printChoices}, ["Problems from $sequenceTitle for selected students", 'problems_for_students', 'CHOOSE_STUDENTS']; + push @{$printChoices}, ["Problems from $sequenceTitle for selected students", 'problems_for_students', 'CHOOSE_STUDENTS']; } &Apache::lonxml::xmlparse($r, 'helper', <
Select resources for the assignment
- return $isProblem + return $isProblem; $map - return $symbFilter + return $symbFilter;
How should the results be printed?
@@ -1349,11 +1376,34 @@ HELPERFRAGMENT CHOOSE_STUDENTS + + if ($helper->{VARS}->{'assignment'}) { + push @{$printChoices}, ["Resources from $sequenceTitle for selected students", 'resources_for_students', 'CHOOSE_STUDENTS1']; + } + &Apache::lonxml::xmlparse($r, 'helper', < + +
Select resources for the assignment
+ + return $isNotMap; + $map + return $symbFilter; + +
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 + + +CHOOSE_STUDENTS1 + } # FIXME: That RE should come from a library somewhere. if ((((&Apache::lonnet::allowed('bre',$subdir) eq 'F') and ($helper->{VARS}->{'postdata'}=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)/)) or defined $helper->{'VARS'}->{'construction'}) and $ENV{'request.role.adv'} and $subdir ne '/home/httpd/html/res/') { - push @{$printChoices}, ["Problems from current subdirectory $subdir", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; + push @{$printChoices}, ["Problems from current subdirectory $subdir", 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; my $f = '$filename'; my $xmlfrag = <{VARS}->{'construction'}) { - push @$printChoices, ["Resources from selected sequence in course", + push @$printChoices, ["Resources from selected sequence in course", 'select_sequences', 'CHOOSE_SEQUENCE']; my $escapedSequenceName = $helper->{VARS}->{'SEQUENCE'}; #Escape apostrophes and backslashes for Perl