X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fio.pl;h=e25f963a86ce170996a64755e978aa7e9bf86700;hb=4a01a26b54aa6a5b97617a8d3fb2dc9b86ceb4c3;hp=022f039ee5106dda5168e6c3bcda2cbbfed544a3;hpb=2c6997eca202daacb743c80d1d65c6faed61ad35;p=kivitendo-erp.git diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl index 022f039ee..e25f963a8 100644 --- a/bin/mozilla/io.pl +++ b/bin/mozilla/io.pl @@ -38,6 +38,7 @@ use Carp; use CGI; +use List::MoreUtils qw(uniq); use List::Util qw(min max first); use SL::CVar; @@ -1504,14 +1505,8 @@ sub print_form { push @template_files, "$form->{formname}$form->{language}$printer_code.$extension"; push @template_files, "$form->{formname}.$extension"; push @template_files, "default.$extension"; - - $form->{IN} = undef; - for my $filename (@template_files) { - if (-f "$myconfig{templates}/$filename") { - $form->{IN} = $filename; - last; - } - } + @template_files = uniq @template_files; + $form->{IN} = first { -f "$myconfig{templates}/$_" } @template_files; if (!defined $form->{IN}) { $::form->error($::locale->text('Cannot find matching template for this print request. Please contact your template maintainer. I tried these: #1.', join ', ', map { "'$_'"} @template_files)); @@ -1540,22 +1535,31 @@ sub print_form { my %queued = map { s|.*/|| } split / /, $form->{queued}; my $filename; + my $suffix = ($form->{postscript}) ? '.ps' : '.pdf'; if ($filename = $queued{ $form->{formname} }) { $form->{queued} =~ s/\Q$form->{formname} $filename\E//; unlink $::lx_office_conf{paths}->{spool} . "/$filename"; $filename =~ s/\..*$//g; + $filename .= $suffix; + $form->{OUT} = $::lx_office_conf{paths}->{spool} . "/$filename"; + $form->{OUT_MODE} = '>'; } else { - $filename = time; - $filename .= $$; + my $temp_fh; + ($temp_fh, $filename) = File::Temp::tempfile( + 'kivitendo-spoolXXXXXX', + SUFFIX => "$suffix", + DIR => $::lx_office_conf{paths}->{spool}, + ); + close $temp_fh; + $form->{OUT} = "$filename"; + # use >> for OUT_MODE because file is already created by File::Temp + $form->{OUT_MODE} = '>>'; + # strip directory so that only filename is stored in table status + ($filename) = $filename =~ /^$::lx_office_conf{paths}->{spool}\/(.*)/; } - $filename .= ($form->{postscript}) ? '.ps' : '.pdf'; - $form->{OUT} = $::lx_office_conf{paths}->{spool} . "/$filename"; - $form->{OUT_MODE} = '>'; - # add type $form->{queued} .= " $form->{formname} $filename"; - $form->{queued} =~ s/^ //; } my $queued = $form->{queued};