diff --git a/C4/Letters.pm b/C4/Letters.pm index cd1b7b16ff..dd3ff29ce4 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -1469,7 +1469,8 @@ sub _process_tt { my $tt_params = { %{ _get_tt_params( $tables ) }, %{ _get_tt_params( $loops, 'is_a_loop' ) } }; - $content = qq|[% USE KohaDates %]$content|; + $content = add_tt_filters( $content ); + $content = qq|[% USE KohaDates %][% USE Remove_MARC_punctuation %]$content|; my $output; $template->process( \$content, $tt_params, \$output ) || croak "ERROR PROCESSING TEMPLATE: " . $template->error(); @@ -1496,6 +1497,12 @@ sub _get_tt_params { plural => 'biblios', pk => 'biblionumber', }, + biblioitems => { + module => 'Koha::Biblioitems', + singular => 'biblioitem', + plural => 'biblioitems', + pk => 'biblioitemnumber', + }, borrowers => { module => 'Koha::Patrons', singular => 'borrower', @@ -1628,6 +1635,22 @@ sub _get_tt_params { return $params; } +=head3 add_tt_filters + +$content = add_tt_filters( $content ); + +Add TT filters to some specific fields if needed. + +For now we only add the Remove_MARC_punctuation TT filter to biblio and biblioitem fields + +=cut + +sub add_tt_filters { + my ( $content ) = @_; + $content =~ s|\[%\s*biblio\.(.*?)\s*%\]|[% biblio.$1 \| \$Remove_MARC_punctuation %]|gxms; + $content =~ s|\[%\s*biblioitem\.(.*?)\s*%\]|[% biblioitem.$1 \| \$Remove_MARC_punctuation %]|gxms; + return $content; +} 1; __END__ diff --git a/Koha/Template/Plugin/Remove_MARC_punctuation.pm b/Koha/Template/Plugin/Remove_MARC_punctuation.pm new file mode 100644 index 0000000000..19c6740a51 --- /dev/null +++ b/Koha/Template/Plugin/Remove_MARC_punctuation.pm @@ -0,0 +1,31 @@ +package Koha::Template::Plugin::Remove_MARC_punctuation; + +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use Template::Plugin::Filter; +use base qw( Template::Plugin::Filter ); + +our $DYNAMIC = 1; + +sub filter { + my ( $self, $value ) = @_; + $value =~ s/\p{P}$//; + return $value; +} + +1; diff --git a/t/db_dependent/Letters/TemplateToolkit.t b/t/db_dependent/Letters/TemplateToolkit.t index b83c2b6274..893b2f6c2e 100644 --- a/t/db_dependent/Letters/TemplateToolkit.t +++ b/t/db_dependent/Letters/TemplateToolkit.t @@ -19,7 +19,7 @@ # along with Koha; if not, see . use Modern::Perl; -use Test::More tests => 17; +use Test::More tests => 18; use Test::Warn; use MARC::Record; @@ -506,6 +506,46 @@ subtest 'loops' => sub { }; }; +subtest 'add_tt_filters' => sub { + plan tests => 1; + my $code = "TEST"; + my $module = "TEST"; + + my $patron = $builder->build_object( + { + class => 'Koha::Patrons', + value => { surname => "with_punctuation_" } + } + ); + my $biblio = $builder->build_object( + { class => 'Koha::Biblios', value => { title => "with_punctuation_" } } + ); + my $biblioitem = $builder->build_object( + { + class => 'Koha::Biblioitems', + value => { + biblionumber => $biblio->biblionumber, + isbn => "with_punctuation_" + } + } + ); + + my $template = q|patron=[% borrower.surname %];biblio=[% biblio.title %];biblioitems=[% biblioitem.isbn %]|; + reset_template( { template => $template, code => $code, module => $module } ); + my $letter = GetPreparedLetter( + module => $module, + letter_code => $code, + tables => { + borrowers => $patron->borrowernumber, + biblio => $biblio->biblionumber, + biblioitems => $biblioitem->biblioitemnumber + } + ); + my $expected_letter = q|patron=with_punctuation_;biblio=with_punctuation;biblioitems=with_punctuation|; + is( $letter->{content}, $expected_letter, "Pre-processing should call TT plugin to remove punctuation if table is biblio or biblioitems"); +}; + + sub reset_template { my ( $params ) = @_; my $template = $params->{template};