X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FTemplate%2FSimple.pm;h=35e6cc1e94edf4404da5065142c8adb8b5f64cfd;hb=2d0387d1624b5b7ed6b13b79b9d5a87ce9b6d12b;hp=8ad622043e92f4f2f8ce4c92f36cd05a2e2e6c68;hpb=8084ef359515031ec8429b49baf0ab09858f55d2;p=kivitendo-erp.git diff --git a/SL/Template/Simple.pm b/SL/Template/Simple.pm index 8ad622043..35e6cc1e9 100644 --- a/SL/Template/Simple.pm +++ b/SL/Template/Simple.pm @@ -30,12 +30,16 @@ sub new { } sub _init { - my $self = shift; + my ($self, %params) = @_; + + $params{myconfig} ||= \%::myconfig; + $params{userspath} ||= $::lx_office_conf{paths}->{userspath}; - $self->{source} = shift; - $self->{form} = shift; - $self->{myconfig} = shift; - $self->{userspath} = shift; + $self->{$_} = $params{$_} for keys %params; + + $self->{variable_content_types} ||= {}; + $self->{variable_content_types}->{$_} = lc $self->{variable_content_types}->{$_} for keys %{ $self->{variable_content_types} }; + $self->{default_variable_content_type} = 'text'; $self->{error} = undef; $self->{quot_re} = '"'; @@ -48,6 +52,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; @@ -56,6 +61,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) = @_; } @@ -85,27 +97,15 @@ 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/\./) { - $value = $form; - for my $part (split(m/\./, $var)) { - if (ref($value) =~ m/^(?:Form|HASH)$/) { - $value = $value->{$part}; - } elsif (blessed($value) && $value->can($part)) { - $value = $value->$part; - } else { - $value = ''; - last; - } - } - } elsif (($get_array || @indices) && (ref $form->{TEMPLATE_ARRAYS} eq 'HASH') && (ref $form->{TEMPLATE_ARRAYS}->{$var} eq 'ARRAY')) { + ($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}; } else { $value = $form->{$var}; @@ -116,6 +116,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; } @@ -126,10 +137,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, $var) unless $options{NOESCAPE}; substr($text, $tag_pos, $tag_len, $value); } @@ -149,43 +162,43 @@ sub _parse_block_if { $$new_contents .= $self->substitute_vars(substr($$contents, 0, $pos_if), @indices); substr($$contents, 0, $pos_if) = ""; - if ($$contents !~ m/^$self->{tag_start_qm}if + if ($$contents !~ m/^( $self->{tag_start_qm}if \s* - (not\b|\!)? # $1 -- Eventuelle Negierung + (not\b|\!)? # $2 -- Eventuelle Negierung \s+ - (\b.+?\b) # $2 -- Name der zu überprüfenden Variablen - ( # $3 -- Beginn des optionalen Vergleiches + (\b.+?\b) # $3 -- Name der zu überprüfenden Variablen + ( # $4 -- Beginn des optionalen Vergleiches \s* - ([!=]) # $4 -- Negierung des Vergleiches speichern - ([=~]) # $5 -- Art des Vergleiches speichern + ([!=]) # $5 -- Negierung des Vergleiches speichern + ([=~]) # $6 -- Art des Vergleiches speichern \s* - ( # $6 -- Gequoteter String oder Bareword + ( # $7 -- Gequoteter String oder Bareword $self->{quot_re} - (.*?)(?{quot_re} | - (\b.+?\b) # $8 -- Bareword -- als Index für $form benutzen + (\b.+?\b) # $9 -- Bareword -- als Index für $form benutzen ) )? \s* - $self->{tag_end_qm} + $self->{tag_end_qm} ) /x) { $self->{"error"} = "Malformed $self->{tag_start}if$self->{tag_end}."; $main::lxdebug->leave_sub(); return undef; } - 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" %> - my $bareword = $8; # undef, falls quoted string angegeben wurde; andernfalls "othervar" aus <%if var == othervar %> + my $not = $2; + my $var = $3; + my $comparison = $4; # Optionaler Match um $4..$8 + my $operator_neg = $5; # '=' oder '!' oder undef, wenn kein Vergleich erkannt + my $operator_type = $6; # '=' oder '~' für Stringvergleich oder Regex + my $quoted_word = $8; # nur gültig, wenn quoted string angegeben (siehe unten); dann "value" aus <%if var == "value" %> + my $bareword = $9; # undef, falls quoted string angegeben wurde; andernfalls "othervar" aus <%if var == othervar %> $not = !$not if ($operator_neg && $operator_neg eq '!'); - substr($$contents, 0, length($&)) = ""; + substr($$contents, 0, length($1)) = ""; my $block; ($block, $$contents) = $self->find_end($$contents, 0, "$var $comparison", $not); @@ -196,6 +209,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) {