--- loncom/interface/lonprintout.pm 2005/02/07 12:00:13 1.356 +++ loncom/interface/lonprintout.pm 2005/03/22 11:59:26 1.370 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.356 2005/02/07 12:00:13 foxr Exp $ +# $Id: lonprintout.pm,v 1.370 2005/03/22 11:59:26 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,9 +42,6 @@ use Apache::lonratedt; use POSIX qw(strftime); use Apache::lonlocal; -my $LaTeXwidth = 0; - - # Compare two students by name. The students are in the form # returned by the helper: # user:domain:section:last, first:status @@ -698,7 +695,7 @@ sub IndexCreation { sub print_latex_header { my $mode=shift; my $output='\documentclass[letterpaper]{article}'; - if ($mode eq 'batchmode') { + if (($mode eq 'batchmode') || (!$ENV{'request.role.adv'})) { $output.='\batchmode'; } $output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n". @@ -726,7 +723,7 @@ sub path_to_problem { my $newurlp = ''; $colwidth=~s/\s*mm\s*$//; #characters average about 2 mm in width - if (length($urlp)*2 > $LaTeXwidth) { + if (length($urlp)*2 > $colwidth) { my @elements = split '/',$urlp; my $curlength=0; foreach my $element (@elements) { @@ -784,16 +781,36 @@ sub unsupported { } +# +# Retrieve the hash of page breaks. +# +# Inputs: +# helper - reference to helper object. +# Outputs +# A reference to a page break hash. +# +# + +sub get_page_breaks { + my ($helper) = @_; + my %page_breaks; + + foreach my $break (split /\|\|\|/, $helper->{'VARS'}->{'FINISHPAGE'}) { + $page_breaks{$break} = 1; + } + + return %page_breaks; +} + sub output_data { my ($r,$helper,$rparmhash) = @_; my %parmhash = %$rparmhash; + my $html=&Apache::lonxml::xmlbegin(); my $bodytag=&Apache::loncommon::bodytag('Preparing Printout'); $r->print(< - - LON-CAPA output for printing $bodytag Please stand by while processing your print request, this may take some time ... ENDPART - # Common settings for the %form has: - # In some cases these settings get overriddent by specific cases, but the - # settings are common enough to make it worthwhile factoring them out - # here. - # - my %form; - my $form{'grade_target'} = 'tex'; - my $form{'textwidth'} = &tget_textwidth($helper, $LaTeXwidth); + + # fetch the pagebreaks and store them in the course environment + # The page breaks will be pulled into the hash %page_breaks which is + # indexed by symb and contains 1's for each break. + + $ENV{'form.pagebreaks'} = $helper->{'VARS'}->{'FINISHPAGE'}; + $ENV{'form.lastprinttype'} = $helper->{'VARS'}->{'PRINT_TYPE'}; + &Apache::loncommon::store_course_settings('print', + {'pagebreaks' => 'scalar', + 'lastprinttype' => 'scalar'}); + + my %page_breaks = &get_page_breaks($helper); my $format_from_helper = $helper->{'VARS'}->{'FORMAT'}; my ($result,$selectionmade) = ('',''); @@ -848,6 +868,15 @@ ENDPART my $LaTeXwidth=&recalcto_mm($textwidth); my @print_array=(); my @student_names=(); + + # Common settings for the %form has: + # In some cases these settings get overriddent by specific cases, but the + # settings are common enough to make it worthwhile factoring them out + # here. + # + my %form; + $form{'grade_target'} = 'tex'; + $form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'current_document') { #-- single document - problem, page, html, xml, ... @@ -1017,10 +1046,6 @@ ENDPART my $flag_latex_header_remove = 'NO'; my $flag_page_in_sequence = 'NO'; my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; - my %page_breaks; - foreach my $break (split /\|\|\|/, $helper->{'VARS'}->{'FINISHPAGE'}) { - $page_breaks{$break} = 1; - } my $prevassignment=''; &Apache::lonnet::delenv('form.counter'); &Apache::lonxml::init_counter(); @@ -1157,6 +1182,7 @@ ENDPART $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); $moreenv{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; $moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; + $moreenv{'suppress_tries'} = $parmhash{'suppress_tries'}; if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';} my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$#students+1,'inline','75'); my $student_counter=-1; @@ -1172,7 +1198,8 @@ ENDPART my ($output,$fullname)=&print_resources($r,$helper, $person,$type, \%moreenv,\@master_seq, - $flag_latex_header_remove); + $flag_latex_header_remove, + $LaTeXwidth); $print_array[$i].=$output; $student_names[$i].=$person.':'.$fullname.'_END_'; &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname); @@ -1223,7 +1250,8 @@ ENDPART $moreenv{'CODE'}=&num_to_letters($code); my ($output,$fullname)= &print_resources($r,$helper,'anonymous',$type,\%moreenv, - \@master_seq,$flag_latex_header_remove); + \@master_seq,$flag_latex_header_remove, + $LaTeXwidth); $print_array[$file_num].=$output; &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, &mt('last assignment').' '.$fullname); @@ -1313,6 +1341,7 @@ ENDPART $result =~ s/\\evensidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\evensidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; $result =~ s/\\oddsidemargin\s*=\s*-?\d*\.?\d*\s*(cm|mm|in)/\\oddsidemargin= $helper->{'VARS'}->{'pagesize.lmargin'} $helper->{'VARS'}->{'pagesize.lmarginunit'} /; } + #-- writing .tex file in prtspool my $temp_file; my $identifier = &Apache::loncommon::get_cgi_id(); @@ -1420,7 +1449,8 @@ sub get_CODE { } sub print_resources { - my ($r,$helper,$person,$type,$moreenv,$master_seq,$remove_latex_header)=@_; + my ($r,$helper,$person,$type,$moreenv,$master_seq,$remove_latex_header, + $LaTeXwidth)=@_; my $current_output = ''; my ($username,$userdomain,$usersection) = split /:/,$person; my $fullname = &get_name($username,$userdomain); @@ -1429,15 +1459,14 @@ sub print_resources { $namepostfix="\\\\Name: "; $fullname = "CODE - ".$moreenv->{'CODE'}; } - my %page_breaks; - foreach my $break (split /\|\|\|/,$helper->{'VARS'}->{'FINISHPAGE'}) { - $page_breaks{$break} = 1; - } my $i = 0; #goes through all resources, checks if they are available for #current student, and produces output &Apache::lonnet::delenv('form.counter'); &Apache::lonxml::init_counter(); + + my %page_breaks = &get_page_breaks($helper); + foreach my $curresline (@{$master_seq}) { if (defined $page_breaks{$curresline}) { if($i != 0) { @@ -1557,7 +1586,14 @@ sub handler { # - + # If a figure conversion queue file exists for this user.domain + # we delete it since it can only be bad (if it were good, printout.pl + # would have deleted it the last time around. + + my $conversion_queuefile = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat"; + if(-e $conversion_queuefile) { + unlink $conversion_queuefile; + } &output_data($r,$helper,\%parmhash); return OK; } @@ -1611,6 +1647,27 @@ sub printHelper { $helper->declareVar('assignment'); $helper->declareVar('style_file'); $helper->declareVar('student_sort'); + $helper->declareVar('FINISHPAGE'); + $helper->declareVar('PRINT_TYPE'); + + # The page breaks can get loaded initially from the course environment: + + if((!defined($ENV{"form.CURRENT_STATE"})) || + ($ENV{'form.CURRENT_STATE'} == "START")) { + $helper->{VARS}->{FINISHPAGE} = ""; # In case they did a back e.g. + } + + + + &Apache::loncommon::restore_course_settings('print', + {'pagebreaks' => 'scalar', + 'lastprinttype' => 'scalar'}); + + + if("$helper->{VARS}->{PRINT_TYPE}" eq "$ENV{'form.lastprinttype'}") { + $helper->{VARS}->{FINISHPAGE} = $ENV{'form.pagebreaks'}; + } + # This will persistently load in the data we want from the # very first screen. @@ -1718,8 +1775,8 @@ sub printHelper { $helper->declareVar('SEQUENCE'); # Useful for debugging: Dump the help vars - #$r->print(Dumper($helper->{VARS})); - #$r->print($map); +# $r->print(Dumper($helper->{VARS})); +# $r->print($map); # If we're in a sequence... if (($helper->{'VARS'}->{'construction'} ne '1') && @@ -1785,7 +1842,6 @@ HELPERFRAGMENT suppressEmptySequences='0' addstatus='1' closeallpages='1'> PAGESIZE return $isNotMap; - $map return $symbFilter;