Bugzilla – Attachment 59529 Details for
Bug 17971
TT syntax for notices - Add support for plurals
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[SIGNED-OFF] Bug 17971: TT syntax for notices - Add support for plurals
SIGNED-OFF-Bug-17971-TT-syntax-for-notices---Add-s.patch (text/plain), 6.58 KB, created by
Josef Moravec
on 2017-01-24 19:58:46 UTC
(
hide
)
Description:
[SIGNED-OFF] Bug 17971: TT syntax for notices - Add support for plurals
Filename:
MIME Type:
Creator:
Josef Moravec
Created:
2017-01-24 19:58:46 UTC
Size:
6.58 KB
patch
obsolete
>From 72f5ca96563053d685e40cdd5b88d7b57af0d6cc Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Sat, 21 Jan 2017 14:26:27 +0100 >Subject: [PATCH] [SIGNED-OFF] Bug 17971: TT syntax for notices - Add support > for plurals > >On of the awesome things we will be able to do with the TT syntax is the support of plurals. > >For instance we will be able to send a list of items, checkouts, etc. to the notice template. >That way we will get rid of our custom syntax like <<items.content>> or <item></item> for instance. > >The existing code already has the playground for that but it is not used. > >Basically the idea is to add a "loops" key which can contain a list of >object to retrieve from the DB and send to the template. >For instance: > loops => { overdues => [ $itemnumber_1, .., $itemnumber_N ] } > >will send a variable "overdues" to the template. It will contain the >Koha::Checkout objects relative to the id passed. > >There is one quite big inconvenient to this approach so far: since we >are still supporting the historical syntax, the objects can be fetch by >a script, then the script will send the id to GetPreparedLetter which >will refetch them. >This must be improved, but I suggest to do that later. > >Test plan: > prove t/db_dependent/Letters/TemplateToolkit.t >should return green > >Signed-off-by: Josef Moravec <josef.moravec@gmail.com> >--- > C4/Letters.pm | 21 ++++++++++++---- > t/db_dependent/Letters/TemplateToolkit.t | 42 +++++++++++++++++++++++++++++++- > 2 files changed, 57 insertions(+), 6 deletions(-) > >diff --git a/C4/Letters.pm b/C4/Letters.pm >index 0415854..cbcdbb1 100644 >--- a/C4/Letters.pm >+++ b/C4/Letters.pm >@@ -691,9 +691,10 @@ sub GetPreparedLetter { > > my $tables = $params{tables} || {}; > my $substitute = $params{substitute} || {}; >+ my $loops = $params{loops} || {}; # loops is not supported for history syntax > my $repeat = $params{repeat}; >- %$tables || %$substitute || $repeat >- or carp( "ERROR: nothing to substitute - both 'tables' and 'substitute' are empty" ), >+ %$tables || %$substitute || $repeat || %$loops >+ or carp( "ERROR: nothing to substitute - both 'tables', 'loops' and 'substitute' are empty" ), > return; > my $want_librarian = $params{want_librarian}; > >@@ -770,6 +771,7 @@ sub GetPreparedLetter { > { > content => $letter->{content}, > tables => $tables, >+ loops => $loops, > } > ); > >@@ -1440,6 +1442,7 @@ sub _process_tt { > > my $content = $params->{content}; > my $tables = $params->{tables}; >+ my $loops = $params->{loops}; > > my $use_template_cache = C4::Context->config('template_cache_dir') && defined $ENV{GATEWAY_INTERFACE}; > my $template = Template->new( >@@ -1454,7 +1457,7 @@ sub _process_tt { > } > ) or die Template->error(); > >- my $tt_params = _get_tt_params( $tables ); >+ my $tt_params = { %{ _get_tt_params( $tables ) }, %{ _get_tt_params( $loops, 'is_a_loop' ) } }; > > my $output; > $template->process( \$content, $tt_params, \$output ) || croak "ERROR PROCESSING TEMPLATE: " . $template->error(); >@@ -1463,9 +1466,10 @@ sub _process_tt { > } > > sub _get_tt_params { >- my ($tables) = @_; >+ my ($tables, $is_a_loop) = @_; > > my $params; >+ $is_a_loop ||= 0; > > my $config = { > biblio => { >@@ -1546,7 +1550,14 @@ sub _get_tt_params { > my $pk = $config->{$table}->{pk}; > my $fk = $config->{$table}->{fk}; > >- if ( $ref eq q{} || $ref eq 'HASH' ) { >+ if ( $is_a_loop ) { >+ unless ( ref( $tables->{$table} ) eq 'ARRAY' ) { >+ croak "ERROR processing table $table. Wrong API call."; >+ } >+ my $objects = $module->search( { $pk => { -in => $tables->{$table} } } ); >+ $params->{ $config->{$table}->{plural} } = $objects; >+ } >+ elsif ( $ref eq q{} || $ref eq 'HASH' ) { > my $id = ref $ref eq 'HASH' ? $tables->{$table}->{$pk} : $tables->{$table}; > my $object; > if ( $fk ) { # Using a foreign key for lookup >diff --git a/t/db_dependent/Letters/TemplateToolkit.t b/t/db_dependent/Letters/TemplateToolkit.t >index bdcfb96..5c24b49 100644 >--- a/t/db_dependent/Letters/TemplateToolkit.t >+++ b/t/db_dependent/Letters/TemplateToolkit.t >@@ -3,6 +3,7 @@ > # This file is part of Koha. > # > # Copyright (C) 2016 ByWater Solutions >+# Copyright (C) 2017 Koha Development Team > # > # Koha is free software; you can redistribute it and/or modify it > # under the terms of the GNU General Public License as published by >@@ -18,7 +19,7 @@ > # along with Koha; if not, see <http://www.gnu.org/licenses>. > > use Modern::Perl; >-use Test::More tests => 15; >+use Test::More tests => 16; > use Test::Warn; > > use MARC::Record; >@@ -39,6 +40,7 @@ use Koha::Serial; > use Koha::Subscription; > use Koha::Suggestion; > use Koha::Checkout; >+use Koha::Notice::Templates; > use Koha::Patron::Modification; > > my $schema = Koha::Database->schema; >@@ -279,3 +281,41 @@ $prepared_letter = GetPreparedLetter( > ) > ); > is( $prepared_letter->{content}, $modification->id(), 'Patron modification object used correctly' ); >+ >+subtest 'loops' => sub { >+ plan tests => 1; >+ my $code = "TEST"; >+ my $module = "TEST"; >+ >+ subtest 'primary key is AI' => sub { >+ plan tests => 1; >+ my $patron_1 = $builder->build({ source => 'Borrower' }); >+ my $patron_2 = $builder->build({ source => 'Borrower' }); >+ >+ my $template = q|[% FOREACH patron IN borrowers %][% patron.surname %][% END %]|; >+ reset_template( { template => $template, code => $code, module => $module } ); >+ my $letter = GetPreparedLetter( module => $module, letter_code => $code, loops => { borrowers => [ $patron_1->{borrowernumber}, $patron_2->{borrowernumber} ] } ); >+ my $expected_letter = join '', ( $patron_1->{surname}, $patron_2->{surname} ); >+ is( $letter->{content}, $expected_letter, ); >+ }; >+}; >+ >+sub reset_template { >+ my ( $params ) = @_; >+ my $template = $params->{template}; >+ my $code = $params->{code}; >+ my $module = $params->{module} || 'test_module'; >+ >+ Koha::Notice::Templates->search( { code => $code } )->delete; >+ Koha::Notice::Template->new( >+ { >+ module => $module, >+ code => $code, >+ branchcode => '', >+ name => $code, >+ title => $code, >+ message_transport_type => 'email', >+ content => $template >+ } >+ )->store; >+} >-- >2.1.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 17971
:
59426
|
59427
|
59529
|
59530
|
60987
|
60988
|
61710
|
61711
|
61712