--- loncom/interface/lonprintout.pm 2003/10/03 13:21:01 1.250 +++ loncom/interface/lonprintout.pm 2003/10/20 18:35:22 1.257 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.250 2003/10/03 13:21:01 sakharuk Exp $ +# $Id: lonprintout.pm,v 1.257 2003/10/20 18:35:22 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}'; } @@ -836,7 +828,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'; @@ -858,6 +851,8 @@ 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]); @@ -911,9 +906,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,7 +932,7 @@ 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, @@ -977,7 +976,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 +993,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'; @@ -1005,17 +1005,34 @@ ENDPART $urlp =~ s|^/home/httpd/html||; } my $texversion=&Apache::lonnet::ssi($urlp,%form); - if($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { + if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || + ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { my %form; $form{'grade_target'}='answer'; $form{'answer_output_mode'}='tex'; $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; $form{'rndseed'}=$rndseed; my $answer=&Apache::lonnet::ssi($urlp,%form); - $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; + 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.='\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); @@ -1046,22 +1063,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 @@ -1242,7 +1264,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'}); @@ -1268,9 +1290,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 = < @@ -1300,9 +1322,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?
@@ -1334,11 +1356,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