From: Moritz Bunkus Date: Mon, 27 Dec 2010 12:12:35 +0000 (+0100) Subject: Vor dem Ausführen von (pdf)latex das HOME auf das users-Verzeichnis setzen X-Git-Tag: release-2.6.2beta1~64^2~42 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=ce2cccd9e6bf7dca9087912e2421aa2d3adb1be9;p=kivitendo-erp.git Vor dem Ausführen von (pdf)latex das HOME auf das users-Verzeichnis setzen Es gibt Situationen, in denen (pdf)latex Fontdateien für bestimmte Schriftgrößen on the fly erzeugen muss. Diese werden in ~/.texmf-var gespeichert. Deshalb muss das Verzeichnis, das (pdf)latex für HOME hält, vom Webserver schreibbar sein. Verhält sich analog zur Situation mit Umwandlung von OpenDocument-Vorlagen nach PDF; da muss OpenOffice nach ~/.openoffice.org schreiben. --- diff --git a/SL/Template/LaTeX.pm b/SL/Template/LaTeX.pm index 4bfef01f7..6b18ad038 100644 --- a/SL/Template/LaTeX.pm +++ b/SL/Template/LaTeX.pm @@ -4,6 +4,8 @@ use parent qw(SL::Template::Simple); use strict; +use Cwd; + sub new { my $type = shift; @@ -374,11 +376,14 @@ sub convert_to_postscript { $form->{tmpfile} =~ s/\Q$userspath\E\///g; my $latex = $self->_get_latex_path(); + my $old_home = $ENV{HOME}; + $ENV{HOME} = $userspath =~ m|^/| ? $userspath : getcwd() . "/" . $userspath; for (my $run = 1; $run <= 2; $run++) { system("${latex} --interaction=nonstopmode $form->{tmpfile} " . "> $form->{tmpfile}.err"); if ($?) { + $ENV{HOME} = $old_home; $self->{"error"} = $form->cleanup(); $self->cleanup(); return 0; @@ -388,6 +393,8 @@ sub convert_to_postscript { $form->{tmpfile} =~ s/tex$/dvi/; system("dvips $form->{tmpfile} -o -q > /dev/null"); + $ENV{HOME} = $old_home; + if ($?) { $self->{"error"} = "dvips : $!"; $self->cleanup(); @@ -415,17 +422,21 @@ sub convert_to_pdf { $form->{tmpfile} =~ s/\Q$userspath\E\///g; my $latex = $self->_get_latex_path(); + my $old_home = $ENV{HOME}; + $ENV{HOME} = $userspath =~ m|^/| ? $userspath : getcwd() . "/" . $userspath; for (my $run = 1; $run <= 2; $run++) { system("${latex} --interaction=nonstopmode $form->{tmpfile} " . "> $form->{tmpfile}.err"); if ($?) { + $ENV{HOME} = $old_home; $self->{"error"} = $form->cleanup(); $self->cleanup(); return 0; } } + $ENV{HOME} = $old_home; $form->{tmpfile} =~ s/tex$/pdf/; $self->cleanup();