X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FTemplate%2FSimple.pm;h=be5ba8b5db1beecc82178200fcdff44f9a030625;hb=21f24006746e89bd2481c5c9d14f04978b7403e3;hp=3baeaac2d32a3d8bce59abcc2762fb8aa09342c2;hpb=0fba3edda47fca21bedb14eb88e0f5f8d983bb38;p=kivitendo-erp.git diff --git a/SL/Template/Simple.pm b/SL/Template/Simple.pm index 3baeaac2d..be5ba8b5d 100644 --- a/SL/Template/Simple.pm +++ b/SL/Template/Simple.pm @@ -10,6 +10,8 @@ package SL::Template::Simple; use strict; +use Scalar::Util qw(blessed); + # Parameters: # 1. The template's file name # 2. A reference to the Form object @@ -46,6 +48,7 @@ sub set_tag_style { my $tag_start = shift; my $tag_end = shift; + $self->{custom_tag_style} = 1; $self->{tag_start} = $tag_start; $self->{tag_end} = $tag_end; $self->{tag_start_qm} = quotemeta $tag_start; @@ -54,6 +57,13 @@ sub set_tag_style { $self->{substitute_vars_re} = "$self->{tag_start_qm}(.+?)$self->{tag_end_qm}"; } +sub set_use_template_toolkit { + my $self = shift; + my $value = shift; + + $self->{use_template_toolkit} = $value; +} + sub cleanup { my ($self) = @_; } @@ -83,13 +93,13 @@ sub uses_temp_file { } sub _get_loop_variable { - my $self = shift; - my $var = shift; - my $get_array = shift; - my @indices = @_; - + my ($self, $var, $get_array, @indices) = @_; my $form = $self->{form}; - my $value; + my ($value, @methods); + + if ($var =~ m/\./) { + ($var, @methods) = split m/\./, $var; + } if (($get_array || @indices) && (ref $form->{TEMPLATE_ARRAYS} eq 'HASH') && (ref $form->{TEMPLATE_ARRAYS}->{$var} eq 'ARRAY')) { $value = $form->{TEMPLATE_ARRAYS}->{$var}; @@ -102,6 +112,17 @@ sub _get_loop_variable { $value = $value->[$indices[$i]]; } + for my $part (@methods) { + if (ref($value) =~ m/^(?:Form|HASH)$/) { + $value = $value->{$part}; + } elsif (blessed($value) && $value->can($part)) { + $value = $value->$part; + } else { + $value = ''; + last; + } + } + return $value; } @@ -112,10 +133,12 @@ sub substitute_vars { while ($text =~ /$self->{substitute_vars_re}/) { my ($tag_pos, $tag_len) = ($-[0], $+[0] - $-[0]); - my ($var, @options) = split(/\s+/, $1); + my ($var, @option_list) = split(/\s+/, $1); + my %options = map { ($_ => 1) } @option_list; my $value = $self->_get_loop_variable($var, 0, @indices); - $value = $self->format_string($value) unless (grep(/^NOESCAPE$/, @options)); + $value = $form->parse_amount({ numberformat => $::myconfig{output_numberformat} || $::myconfig{numberformat} }, $value) if $options{NOFORMAT}; + $value = $self->format_string($value) unless $options{NOESCAPE}; substr($text, $tag_pos, $tag_len, $value); } @@ -163,6 +186,7 @@ sub _parse_block_if { my $not = $1; my $var = $2; + my $comparison = $3; # Optionaler Match um $4..$8 my $operator_neg = $4; # '=' oder '!' oder undef, wenn kein Vergleich erkannt my $operator_type = $5; # '=' oder '~' für Stringvergleich oder Regex my $quoted_word = $7; # nur gültig, wenn quoted string angegeben (siehe unten); dann "value" aus <%if var == "value" %> @@ -173,7 +197,7 @@ sub _parse_block_if { substr($$contents, 0, length($&)) = ""; my $block; - ($block, $$contents) = $self->find_end($$contents, 0, $var, $not); + ($block, $$contents) = $self->find_end($$contents, 0, "$var $comparison", $not); if (!$block) { $self->{"error"} = "Unclosed $self->{tag_start}if$self->{tag_end}." unless ($self->{"error"}); $main::lxdebug->leave_sub(); @@ -181,6 +205,7 @@ sub _parse_block_if { } my $value = $self->_get_loop_variable($var, 0, @indices); + $value = scalar(@{ $value }) if (ref($value) || '') eq 'ARRAY'; my $hit = 0; if ($operator_type) {