Dokumentationsupdate: html2ps wird vom ReportGenerator schon nicht mehr unterstützt.
[kivitendo-erp.git] / SL / Template.pm
index c273d8f..99ca0f8 100644 (file)
@@ -79,13 +79,20 @@ sub uses_temp_file {
   return 0;
 }
 
-sub _get_loop_variable_value {
-  my $self    = shift;
-  my $var     = shift;
-  my @indices = @_;
+sub _get_loop_variable {
+  my $self      = shift;
+  my $var       = shift;
+  my $get_array = shift;
+  my @indices   = @_;
 
-  my $form    = $self->{form};
-  my $value   = $self->{form}->{$var};
+  my $form      = $self->{form};
+  my $value;
+
+  if (($get_array || @indices) && (ref $form->{TEMPLATE_ARRAYS} eq 'HASH') && (ref $form->{TEMPLATE_ARRAYS}->{$var} eq 'ARRAY')) {
+    $value = $form->{TEMPLATE_ARRAYS}->{$var};
+  } else {
+    $value = $form->{$var};
+  }
 
   for (my $i = 0; $i < scalar(@indices); $i++) {
     last unless (ref($value) eq "ARRAY");
@@ -104,7 +111,7 @@ sub substitute_vars {
     my ($tag_pos, $tag_len) = ($-[0], $+[0] - $-[0]);
     my ($var, @options)     = split(/\s+/, $1);
 
-    my $value               = $self->_get_loop_variable_value($var, @indices);
+    my $value               = $self->_get_loop_variable($var, 0, @indices);
     $value                  = $self->format_string($value) unless (grep(/^NOESCAPE$/, @options));
 
     substr($text, $tag_pos, $tag_len, $value);
@@ -160,11 +167,7 @@ sub parse_foreach {
 
   my ($form, $new_contents) = ($self->{"form"}, "");
 
-  my $ary = $form->{$var};
-  for (my $i = 0; $i < scalar(@indices); $i++) {
-    last unless (ref($ary) eq "ARRAY");
-    $ary = $ary->[$indices[$i]];
-  }
+  my $ary = $self->_get_loop_variable($var, 1, @indices);
 
   my $sum = 0;
   my $current_page = 1;
@@ -220,9 +223,9 @@ sub parse_foreach {
       $sum += $form->parse_amount($self->{"myconfig"},
                                   $form->{"linetotal"}->[$i]);
     }
-    
+
     $form->{"cumulatelinetotal"}[$i] = $form->format_amount($self->{"myconfig"}, $sum, 2);
-    
+
     my $new_text = $self->parse_block($text, (@indices, $i));
     return undef unless (defined($new_text));
     $new_contents .= $start_tag . $new_text . $end_tag;
@@ -347,7 +350,11 @@ sub parse_block {
         return undef;
       }
 
-      my $value = $self->{"form"}->{$var};
+      my $form = $self->{form};
+      $form = $form->{TEMPLATE_ARRAYS} if @indices
+                                       && ref $form->{TEMPLATE_ARRAYS} eq 'HASH'
+                                       && ref $form->{TEMPLATE_ARRAYS}->{$var} eq 'ARRAY';
+      my $value = $form->{$var};
       for (my $i = 0; $i < scalar(@indices); $i++) {
         last unless (ref($value) eq "ARRAY");
         $value = $value->[$indices[$i]];
@@ -516,8 +523,10 @@ sub convert_to_postscript {
 
   $form->{tmpfile} =~ s/\Q$userspath\E\///g;
 
+  my $latex = $self->_get_latex_path();
+
   for (my $run = 1; $run <= 2; $run++) {
-    system("latex --interaction=nonstopmode $form->{tmpfile} " .
+    system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
            "> $form->{tmpfile}.err");
     if ($?) {
       $self->{"error"} = $form->cleanup();
@@ -555,8 +564,10 @@ sub convert_to_pdf {
 
   $form->{tmpfile} =~ s/\Q$userspath\E\///g;
 
+  my $latex = $self->_get_latex_path();
+
   for (my $run = 1; $run <= 2; $run++) {
-    system("pdflatex --interaction=nonstopmode $form->{tmpfile} " .
+    system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
            "> $form->{tmpfile}.err");
     if ($?) {
       $self->{"error"} = $form->cleanup();
@@ -570,6 +581,10 @@ sub convert_to_pdf {
   $self->cleanup();
 }
 
+sub _get_latex_path {
+  return $main::latex_bin || 'pdflatex';
+}
+
 sub get_mime_type() {
   my ($self) = @_;
 
@@ -786,11 +801,7 @@ sub parse_foreach {
 
   my ($form, $new_contents) = ($self->{"form"}, "");
 
-  my $ary = $form->{$var};
-  for (my $i = 0; $i < scalar(@indices); $i++) {
-    last unless (ref($ary) eq "ARRAY");
-    $ary = $ary->[$indices[$i]];
-  }
+  my $ary = $self->_get_loop_variable($var, 1, @indices);
 
   for (my $i = 0; $i < scalar(@{$ary}); $i++) {
     $form->{"__first__"} = $i == 0;
@@ -1366,7 +1377,7 @@ sub uses_temp_file {
 ####
 ##########################################################
 
-package XMLTemplate; 
+package XMLTemplate;
 
 use vars qw(@ISA);