--- loncom/interface/lonprintout.pm 2004/03/15 20:27:57 1.270.2.2 +++ loncom/interface/lonprintout.pm 2004/02/13 21:13:21 1.276 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.270.2.2 2004/03/15 20:27:57 albertel Exp $ +# $Id: lonprintout.pm,v 1.276 2004/02/13 21:13:21 sakharuk Exp $ # # Copyright Michigan State University Board of Trustees # @@ -710,7 +710,10 @@ ENDPART } my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns); my $assignment = $ENV{'form.assignment'}; - my $LaTeXwidth=&recalcto_mm($textwidth); + my $LaTeXwidth=&recalcto_mm($textwidth); + my @print_array=(); + my @student_names=(); + if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') { #-- single document - problem, page, html, xml, ... my $currentURL; @@ -979,22 +982,24 @@ ENDPART $selectionmade=8; } my @students=split /\|\|\|/, $helper->{'VARS'}->{'STUDENTS'}; + if ($helper->{'VARS'}->{'NUMBER_TO_PRINT'} eq '0') {$helper->{'VARS'}->{'NUMBER_TO_PRINT'}=$#students+1;} my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; #loop over students my $flag_latex_header_remove = 'NO'; my %moreenv; if ($helper->{'VARS'}->{'pagesize.width'}=~/\d+/ && $helper->{'VARS'}->{'pagesize.widthunit'}=~/\w+/) { - $moreenv{'form.textwidth'}=&recalcto_mm($helper->{'VARS'}->{'pagesize.width'}.' '.$helper->{'VARS'}->{'pagesize.widthunit'}); + $moreenv{'textwidth'}=&recalcto_mm($helper->{'VARS'}->{'pagesize.width'}.' '.$helper->{'VARS'}->{'pagesize.widthunit'}); } else { - $moreenv{'form.textwidth'}=$LaTeXwidth; + $moreenv{'textwidth'}=$LaTeXwidth; } &Apache::lonnet::appenv(%moreenv); my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1); + my $student_counter=-1; foreach my $person (@students) { + $student_counter++; my $current_output = ''; -# my ($usersection,$username,$userdomain) = split /:/,$person; - my ($username,$userdomain) = split /:/,$person; + my ($username,$userdomain,$usersection) = split /:/,$person; my $fullname = &get_name($username,$userdomain); if ($parmhash{'anonymous_quiz'}=~/yes/) {$fullname=' ';} #put here something reasonable for anonymous exams or quiz @@ -1041,6 +1046,7 @@ ENDPART } my $courseidinfo = &get_course(); if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } + if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection} my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); if ($current_output=~/\\documentclass/) { $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\lhead{\\textit{\\textbf{$fullname}}$courseidinfo \\hfill \\thepage \\\\ \\textit{$currentassignment}}\\vskip 3 mm /; @@ -1049,14 +1055,15 @@ ENDPART for (my $j=0;$j<$helper->{'VARS'}->{'EMPTY_PAGES'};$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 '.$blanspages.'\setcounter{page}{1}\noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$fullname.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$currentassignment.'}}} \vskip -5 mm '.$current_output; } - $result .= $current_output; + $print_array[int($student_counter/$helper->{'VARS'}->{'NUMBER_TO_PRINT'})].=$current_output; + $student_names[int($student_counter/$helper->{'VARS'}->{'NUMBER_TO_PRINT'})].=$person.':'.$fullname.'_END_'; &Apache::lonnet::delenv('form.counter'); &Apache::lonxml::init_counter(); &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, &mt('last student').' '.$fullname); } &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); - $result .= '\end{document}'; + $result .= $print_array[0].' \end{document}'; &Apache::lonnet::delenv('form.textwidth'); } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'problems_from_directory') { #prints selected problems from the subdirectory @@ -1138,6 +1145,7 @@ ENDPART #-------------------------------------------------------- corrections for the different page formats $result = &page_format_transformation($papersize,$laystyle,$numberofcolumns,$helper->{'VARS'}->{'PRINT_TYPE'},$result,$helper->{VARS}->{'assignment'},$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'}); $result = &latex_corrections($number_of_columns,$result); + for (my $i=1;$i<=$#print_array;$i++) {$print_array[$i] = &latex_corrections($number_of_columns,$print_array[$i]);} #changes page's parameters for the one column output if ($numberofcolumns == 1) { $result =~ s/\\textwidth\s*=\s*\d*\.?\d*\s*(cm|mm|in)/\\textwidth= $helper->{'VARS'}->{'pagesize.width'} $helper->{'VARS'}->{'pagesize.widthunit'} /; @@ -1152,6 +1160,41 @@ ENDPART $r->log_error("Couldn't open $filename for output $!"); return SERVER_ERROR; } + print $temp_file $result; + my $begin=index($result,'\begin{document}',0); + my $inc=substr($result,0,$begin+16); + if ($#print_array>0) { + for (my $i=1;$i<=$#print_array;$i++) { + my $anobegin=index($print_array[$i],'\setcounter{page}',0); + substr($print_array[$i],0,$anobegin)=''; + $print_array[$i]=$inc.$print_array[$i].'\end{document}'; + my $temp_file; + my $newfilename=$filename; + $newfilename =~s/\.tex$/_add$i\.tex/; + unless ($temp_file = Apache::File->new('>'.$newfilename)) { + $r->log_error("Couldn't open $newfilename for output $!"); + return SERVER_ERROR; + } + print $temp_file $print_array[$i]; + } + + } + my $student_names=''; + if ($#print_array>0) { + for (my $i=0;$i<=$#print_array;$i++) { + $student_names.=$student_names[$i].'_ENDPERSON_'; + } + } + + my $URLback=''; #link to original document + if ($helper->{'VARS'}->{'construction'} ne '1') { + #prints published resource + $URLback=$helper->{'VARS'}->{'postdata'}; + } else { + #prints resource from the construction space + $URLback='/'.$helper->{'VARS'}->{'filename'}; + if ($URLback=~/([^?]+)/) {$URLback=$1;} + } my $identifier = time.'_'.int(rand(1000)); &Apache::lonnet::appenv('cgi.'.$identifier.'.file' => $filename, @@ -1160,10 +1203,11 @@ ENDPART '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'}); + 'cgi.'.$identifier.'role' => $ENV{'request.role.adv'}, + 'cgi.'.$identifier.'numberoffiles' => $#print_array, + 'cgi.'.$identifier.'studentnames' => $student_names, + 'cgi.'.$identifier.'backref' => $URLback,); - print $temp_file $result; - $r->print(< @@ -1412,7 +1456,6 @@ HELPERFRAGMENT if ($helper->{VARS}->{'assignment'}) { push @{$printChoices}, ["Problems from $sequenceTitle for selected students", 'problems_for_students', 'CHOOSE_STUDENTS']; } - &Apache::lonxml::xmlparse($r, 'helper', < (mark them then click "next" button)
@@ -1443,10 +1486,16 @@ HELPERFRAGMENT CHOOSE_STUDENTS + addMessage("
Number of assignments printed at the same time: "); + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{'variable'} = 'NUMBER_TO_PRINT'; + $helper->declareVar('NUMBER_TO_PRINT'); + addMessage("
"); + 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
@@ -1465,6 +1514,11 @@ CHOOSE_STUDENTS CHOOSE_STUDENTS1 + addMessage("
Number of assignments printed at the same time: "); + $paramHash = Apache::lonhelper::getParamHash(); + $paramHash->{'variable'} = 'NUMBER_TO_PRINT'; + $helper->declareVar('NUMBER_TO_PRINT'); + addMessage("
"); } # FIXME: That RE should come from a library somewhere.