Jenkins fails (run 287) on a test in t/db_dependent/Letters/TemplateToolkit.t:
With the historical syntax:
# Your request for an article from tQYRS (c3Av58O0P5xkkIGu) has been canceled for the following reason:
With the TT syntax:
# Your request for an article from tQYRS_ (c3Av58O0P5xkkIGu) has been canceled for the following reason:
The last character of the biblio's title has been removed because it's a punctuation character.
It comes from: C4::Letters::_parseletter
893 $val =~ s/\p{P}$// if $val && $table=~/biblio/;
The same replacement is done for patron's attributes too.
Test plan:
- Confirm that the new tests pass. That should be enough to confirm this change make sense.
Test plan (manual):
- Create a biblio with a title ending with a punctuation (like "with_punctuation_"), or any other fields of biblio/biblioitem
- Generate a notice which will display this field (CHECKIN for instance)
Use the historical syntax and the TT syntax, both should display the title without the punctuation character at the end
CHECKIN historical:
The following items have been checked in:
----
<<biblio.title>>
----
CHECKIN TT syntax:
The following items have been checked in:
----
[% biblio.title %]
----
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
(cherry picked from commit
f5be2d525f7540a4833c14759bdc0de2ba5657db)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
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();
plural => 'biblios',
pk => 'biblionumber',
},
+ biblioitems => {
+ module => 'Koha::Biblioitems',
+ singular => 'biblioitem',
+ plural => 'biblioitems',
+ pk => 'biblioitemnumber',
+ },
borrowers => {
module => 'Koha::Patrons',
singular => 'borrower',
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__
--- /dev/null
+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 <http://www.gnu.org/licenses>.
+
+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;
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
-use Test::More tests => 17;
+use Test::More tests => 18;
use Test::Warn;
use MARC::Record;
};
};
+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};