X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FTemplate.pm;h=7f4d27571bd827d31a9b9e093f59d8c2fd2451d7;hb=ad9563c88825c4810a1efa6f6290e6f1df17a282;hp=fe4b24893aa2ef84e505da043444add2657d4418;hpb=6d06b2c53d68b0b93ae96c112fb77fb2e9bda8f6;p=kivitendo-erp.git diff --git a/SL/Template.pm b/SL/Template.pm index fe4b24893..7f4d27571 100644 --- a/SL/Template.pm +++ b/SL/Template.pm @@ -5,9 +5,17 @@ # Web http://www.lx-office.org # #==================================================================== +# +# +# NOTE: strict checks are package global. don't check this file +# with perl -sc, it will only capture SimpleTemplate +# +# package SimpleTemplate; +use strict; + # Parameters: # 1. The template's file name # 2. A reference to the Form object @@ -219,6 +227,8 @@ use vars qw(@ISA); @ISA = qw(SimpleTemplate); +use strict; + sub new { my $type = shift; @@ -265,22 +275,25 @@ sub parse_foreach { $form->{TEMPLATE_ARRAYS}->{cumulatelinetotal} = []; + # forech block hasn't given us an array. ignore + return $new_contents unless ref $ary eq 'ARRAY'; + for (my $i = 0; $i < scalar(@{$ary}); $i++) { + # do magic markers $form->{"__first__"} = $i == 1; $form->{"__last__"} = ($i + 1) == scalar(@{$ary}); $form->{"__odd__"} = (($i + 1) % 2) == 1; $form->{"__counter__"} = $i + 1; - if (scalar @{$description_array} == scalar @{$ary} && $self->{"chars_per_line"} != 0) { + if ( ref $description_array eq 'ARRAY' + && scalar @{$description_array} == scalar @{$ary} + && $self->{"chars_per_line"} != 0) + { my $lines = int(length($description_array->[$i]) / $self->{"chars_per_line"}); my $lpp; $description_array->[$i] =~ s/(\\newline\s?)*$//; - my $_description = $description_array->[$i]; - while ($_description =~ /\\newline/) { - $lines++; - $_description =~ s/\\newline//; - } + $lines++ while ($description_array->[$i] =~ m/\\newline/g); $lines++; if ($current_page == 1) { @@ -290,7 +303,10 @@ sub parse_foreach { } # Yes we need a manual page break -- or the user has forced one - if ((($current_line + $lines) > $lpp) || ($description_array->[$i] =~ //) || ($longdescription_array->[$i] =~ //)) { + if ( (($current_line + $lines) > $lpp) + || ($description_array->[$i] =~ //) + || ( ref $longdescription_array eq 'ARRAY' + && $longdescription_array->[$i] =~ //)) { my $pb = $self->{"pagebreak_block"}; # replace the special variables <%sumcarriedforward%> @@ -310,7 +326,8 @@ sub parse_foreach { $current_line += $lines; } - if ($i < scalar(@{$linetotal_array})) { + if ( ref $linetotal_array eq 'ARRAY' + && $i < scalar(@{$linetotal_array})) { $sum += $form->parse_amount($self->{"myconfig"}, $linetotal_array->[$i]); } @@ -666,6 +683,8 @@ use vars qw(@ISA); @ISA = qw(LaTeXTemplate); +use strict; + sub new { my $type = shift; @@ -790,6 +809,8 @@ use vars qw(@ISA); @ISA = qw(LaTeXTemplate); +use strict; + sub new { my $type = shift; @@ -828,10 +849,12 @@ use IO::File; @ISA = qw(SimpleTemplate); +use strict; + sub new { my $type = shift; - $self = $type->SUPER::new(@_); + my $self = $type->SUPER::new(@_); foreach my $module (qw(Archive::Zip Text::Iconv)) { eval("use ${module};"); @@ -1040,7 +1063,7 @@ sub parse { } my $zip = Archive::Zip->new(); - if (Archive::Zip::AZ_OK != $zip->read($file_name)) { + if (Archive::Zip->AZ_OK != $zip->read($file_name)) { $self->{"error"} = "File not found/is not a OpenDocument file."; $main::lxdebug->leave_sub(); return 0; @@ -1117,7 +1140,7 @@ sub is_xvfb_running { my $dfname = $self->{"userspath"} . "/xvfb_display"; my $display; - $main::lxdebug->message(LXDebug::DEBUG2, " Looking for $dfname\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " Looking for $dfname\n"); if ((-f $dfname) && open(IN, $dfname)) { my $pid = ; chomp($pid); @@ -1127,10 +1150,10 @@ sub is_xvfb_running { chomp($xauthority); close(IN); - $main::lxdebug->message(LXDebug::DEBUG2, " found with $pid and $display\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " found with $pid and $display\n"); if ((! -d "/proc/$pid") || !open(IN, "/proc/$pid/cmdline")) { - $main::lxdebug->message(LXDebug::DEBUG2, " no/wrong process #1\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " no/wrong process #1\n"); unlink($dfname, $xauthority); $main::lxdebug->leave_sub(); return undef; @@ -1138,7 +1161,7 @@ sub is_xvfb_running { my $line = ; close(IN); if ($line !~ /xvfb/i) { - $main::lxdebug->message(LXDebug::DEBUG2, " no/wrong process #2\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " no/wrong process #2\n"); unlink($dfname, $xauthority); $main::lxdebug->leave_sub(); return undef; @@ -1147,7 +1170,7 @@ sub is_xvfb_running { $ENV{"XAUTHORITY"} = $xauthority; $ENV{"DISPLAY"} = $display; } else { - $main::lxdebug->message(LXDebug::DEBUG2, " not found\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " not found\n"); } $main::lxdebug->leave_sub(); @@ -1160,7 +1183,7 @@ sub spawn_xvfb { my ($self) = @_; - $main::lxdebug->message(LXDebug::DEBUG2, "spawn_xvfb()\n"); + $main::lxdebug->message(LXDebug->DEBUG2, "spawn_xvfb()\n"); my $display = $self->is_xvfb_running(); @@ -1174,18 +1197,18 @@ sub spawn_xvfb { $display++; } $display = ":${display}"; - $main::lxdebug->message(LXDebug::DEBUG2, " display $display\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " display $display\n"); my $mcookie = `mcookie`; die("Installation error: mcookie not found.") if ($? != 0); chomp($mcookie); - $main::lxdebug->message(LXDebug::DEBUG2, " mcookie $mcookie\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " mcookie $mcookie\n"); my $xauthority = "/tmp/.Xauthority-" . $$ . "-" . time() . "-" . int(rand(9999999)); $ENV{"XAUTHORITY"} = $xauthority; - $main::lxdebug->message(LXDebug::DEBUG2, " xauthority $xauthority\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " xauthority $xauthority\n"); system("xauth add \"${display}\" . \"${mcookie}\""); if ($? != 0) { @@ -1194,15 +1217,15 @@ sub spawn_xvfb { return undef; } - $main::lxdebug->message(LXDebug::DEBUG2, " about to fork()\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " about to fork()\n"); my $pid = fork(); if (0 == $pid) { - $main::lxdebug->message(LXDebug::DEBUG2, " Child execing\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " Child execing\n"); exec($main::xvfb_bin, $display, "-screen", "0", "640x480x8", "-nolisten", "tcp"); } sleep(3); - $main::lxdebug->message(LXDebug::DEBUG2, " parent dont sleeping\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " parent dont sleeping\n"); local *OUT; my $dfname = $self->{"userspath"} . "/xvfb_display"; @@ -1216,7 +1239,7 @@ sub spawn_xvfb { print(OUT "$pid\n$display\n$xauthority\n"); close(OUT); - $main::lxdebug->message(LXDebug::DEBUG2, " parent re-testing\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " parent re-testing\n"); if (!$self->is_xvfb_running()) { $self->{"error"} = "Conversion to PDF failed because OpenOffice could not be started."; @@ -1226,7 +1249,7 @@ sub spawn_xvfb { return undef; } - $main::lxdebug->message(LXDebug::DEBUG2, " spawn OK\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " spawn OK\n"); $main::lxdebug->leave_sub(); @@ -1239,7 +1262,7 @@ sub is_openoffice_running { system("./scripts/oo-uno-test-conn.py $main::openofficeorg_daemon_port " . "> /dev/null 2> /dev/null"); my $res = $? == 0; - $main::lxdebug->message(LXDebug::DEBUG2, " is_openoffice_running(): $?\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " is_openoffice_running(): $?\n"); $main::lxdebug->leave_sub(); @@ -1251,7 +1274,7 @@ sub spawn_openoffice { my ($self) = @_; - $main::lxdebug->message(LXDebug::DEBUG2, "spawn_openoffice()\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), "spawn_openoffice()\n"); my ($try, $spawned_oo, $res); @@ -1265,14 +1288,14 @@ sub spawn_openoffice { if (!$spawned_oo) { my $pid = fork(); if (0 == $pid) { - $main::lxdebug->message(LXDebug::DEBUG2, " Child daemonizing\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " Child daemonizing\n"); chdir('/'); open(STDIN, '/dev/null'); open(STDOUT, '>/dev/null'); my $new_pid = fork(); exit if ($new_pid); my $ssres = setsid(); - $main::lxdebug->message(LXDebug::DEBUG2, " Child execing\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " Child execing\n"); my @cmdline = ($main::openofficeorg_writer_bin, "-minimized", "-norestore", "-nologo", "-nolockcheck", "-headless", @@ -1281,7 +1304,7 @@ sub spawn_openoffice { exec(@cmdline); } - $main::lxdebug->message(LXDebug::DEBUG2, " Parent after fork\n"); + $main::lxdebug->message(LXDebug->DEBUG2(), " Parent after fork\n"); $spawned_oo = 1; sleep(3); } @@ -1386,6 +1409,8 @@ sub format_string { } sub get_mime_type() { + my ($self) = @_; + if ($self->{"form"}->{"format"} =~ /pdf/) { return "application/pdf"; } else { @@ -1410,6 +1435,8 @@ use vars qw(@ISA); @ISA = qw(HTMLTemplate); +use strict; + sub new { #evtl auskommentieren my $type = shift; @@ -1450,4 +1477,95 @@ sub uses_temp_file { return 1; } + +########################################################## +#### +#### ExcelTemplate +#### +########################################################## + +package ExcelTemplate; + +use vars qw(@ISA); + +@ISA = qw(SimpleTemplate); + +sub new { + my $type = shift; + + my $self = $type->SUPER::new(@_); + + return $self; +} +sub _init { + my $self = shift; + + $self->{source} = shift; + $self->{form} = shift; + $self->{myconfig} = shift; + $self->{userspath} = shift; + + $self->{error} = undef; + + $self->set_tag_style('<<', '>>'); +} + +sub get_mime_type() { + my ($self) = @_; + + return "application/msexcel"; +} + +sub uses_temp_file { + return 1; +} + +sub parse { + $main::lxdebug->enter_sub(); + + my $self = shift; + local *OUT = shift; + my $form = $self->{"form"}; + + open(IN, "$form->{templates}/$form->{IN}") or do { $self->{"error"} = "$!"; return 0; }; + my @lines = ; + close IN; + + my $contents = join("", @lines); + my @indices; + $contents =~ s{ + $self->{tag_start} [<]* (\s?) [<>\s]* ([\w\s]+) [<>\s]* $self->{tag_end} + }{ + $self->format_vars(align_right => $1 ne '', varstring => $2, length => length($&), indices => \@indices) + }egx; + + if (!defined($contents)) { + $main::lxdebug->leave_sub(); + return 0; + } + + print OUT $contents; + + $main::lxdebug->leave_sub(); + return 1; +} + +sub format_vars { + my ($self, %params) = @_; + my $form = $self->{"form"}; + my @indices = @{ $params{indices} }; + my $align_right = $params{align_right}; + my $varstring = $params{varstring}; + my $length = $params{length}; + + $varstring =~ s/(\w+)/ $self->_get_loop_variable($1, 0, @indices) /eg; + my $old_string=$varstring; + my $new_string = sprintf "%*s", ($align_right ? 1 : -1 ) * $length, $varstring; + if (!defined($new_string) || $new_string eq ''){ + $main::lxdebug->message(0, 'varstring' . $varstring . "old" . $old_string); + # return substr $varstring, ($align_right ? (0, $length) : -$length); + } + return substr $new_string, ($align_right ? (0, $length) : -$length); +} + 1;