Commit 7276a38c authored by Kyle M Hall's avatar Kyle M Hall

Bug 14757 - Allow the use of Template Toolkit syntax for slips and notices

This bug is the beginning of a conversion from our current bespoke
syntax for slips and notices to Template Toolkit syntax.

This patch is the initial seed which will evolve over time.
With this addition, we can take advantage of our Koha Objects
to greatly simplify the processing of Slips and Notices over time.

Test Plan:
1) Apply this patch
2) Ensure you have the default CHECKOUT notice
3) Check out and return an item for a patron
4) Note the text of the CHECKOUT notice
5) Replace your CHECKOUT notice with the following:

The following items have been checked out:
----
[% biblio.title %]
----
Thank you for visiting [% branch.branchname %].

6) Repeat step 3
7) Note the CHECKOUT notice text matches the previous CHECKOUT notice text
Signed-off-by: Bernardo Gonzalez Kriegel's avatarBernardo Gonzalez Kriegel <bgkriegel@gmail.com>
New notice syntax works, no koha-qa errors
Signed-off-by: default avatarSean McGarvey <seanm@pascolibraries.org>

Bug 14757 [QA Followup] - Change method type() to _type() for Koha objects
Signed-off-by: default avatarSean McGarvey <seanm@pascolibraries.org>

Bug 14757 [QA Followup] - Change all references to Koha::Borrower to Koha::Patron
Signed-off-by: default avatarSean McGarvey <seanm@pascolibraries.org>
Signed-off-by: joubu's avatarJonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: default avatarKyle M Hall <kyle@bywatersolutions.com>
parent 9e1542eb
......@@ -22,6 +22,11 @@ use warnings;
use MIME::Lite;
use Mail::Sendmail;
use Date::Calc qw( Add_Delta_Days );
use Encode;
use Carp;
use Template;
use Module::Load::Conditional qw(can_load);
use C4::Koha qw(GetAuthorisedValueByCode);
use C4::Members;
......@@ -33,11 +38,8 @@ use C4::Debug;
use Koha::DateUtils;
use Koha::SMS::Providers;
use Date::Calc qw( Add_Delta_Days );
use Encode;
use Carp;
use Koha::Email;
use Koha::DateUtils qw( format_sqldatetime );
use Koha::DateUtils qw( format_sqldatetime dt_from_string );
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
......@@ -704,8 +706,14 @@ sub GetPreparedLetter {
}
}
$letter->{content} = _process_tt(
{
content => $letter->{content},
tables => $tables,
}
);
$letter->{content} =~ s/<<\S*>>//go; #remove any stragglers
# $letter->{content} =~ s/<<[^>]*>>//go;
return $letter;
}
......@@ -1363,6 +1371,151 @@ sub _set_message_status {
return $result;
}
sub _process_tt {
my ( $params ) = @_;
my $content = $params->{content};
my $tables = $params->{tables};
my $use_template_cache = C4::Context->config('template_cache_dir') && defined $ENV{GATEWAY_INTERFACE};
my $template = Template->new(
{
EVAL_PERL => 1,
ABSOLUTE => 1,
PLUGIN_BASE => 'Koha::Template::Plugin',
COMPILE_EXT => $use_template_cache ? '.ttc' : '',
COMPILE_DIR => $use_template_cache ? C4::Context->config('template_cache_dir') : '',
FILTERS => {},
ENCODING => 'UTF-8',
}
) or die Template->error();
my $tt_params = _get_tt_params( $tables );
my $output;
$template->process( \$content, $tt_params, \$output ) || croak "ERROR PROCESSING TEMPLATE: " . $template->error();
return $output;
}
sub _get_tt_params {
my ($tables) = @_;
my $params;
my $config = {
biblio => {
module => 'Koha::Biblios',
singular => 'biblio',
plural => 'biblios',
pk => 'biblionumber',
},
borrowers => {
module => 'Koha::Patrons',
singular => 'borrower',
plural => 'borrowers',
pk => 'borrowernumber',
},
branches => {
module => 'Koha::Libraries',
singular => 'branch',
plural => 'branches',
pk => 'branchcode',
},
items => {
module => 'Koha::Items',
singular => 'item',
plural => 'items',
pk => 'itemnumber',
},
opac_news => {
module => 'Koha::News',
singular => 'news',
plural => 'news',
pk => 'idnew',
},
reserves => {
module => 'Koha::Holds',
singular => 'hold',
plural => 'holds',
fk => [ 'borrowernumber', 'biblionumber' ],
},
serial => {
module => 'Koha::Serials',
singular => 'serial',
plural => 'serials',
pk => 'serialid',
},
subscription => {
module => 'Koha::Subscriptions',
singular => 'subscription',
plural => 'subscriptions',
pk => 'subscriptionid',
},
suggestions => {
module => 'Koha::Suggestions',
singular => 'suggestion',
plural => 'suggestions',
pk => 'suggestionid',
},
issues => {
module => 'Koha::Checkouts',
singular => 'checkout',
plural => 'checkouts',
fk => 'itemnumber',
},
borrower_modifications => {
module => 'Koha::Patron::Modifications',
singular => 'patron_modification',
plural => 'patron_modifications',
fk => 'verification_token',
},
};
foreach my $table ( keys %$tables ) {
next unless $config->{$table};
my $ref = ref( $tables->{$table} ) || q{};
my $module = $config->{$table}->{module};
if ( can_load( modules => { $module => undef } ) ) {
my $pk = $config->{$table}->{pk};
my $fk = $config->{$table}->{fk};
if ( $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
$object = $module->search( { $fk => $id } )->next();
} else { # using the table's primary key for lookup
$object = $module->find($id);
}
$params->{ $config->{$table}->{singular} } = $object;
}
else { # $ref eq 'ARRAY'
my $object;
if ( @{ $tables->{$table} } == 1 ) { # Param is a single key
$object = $module->search( { $pk => $tables->{$table} } )->next();
}
else { # Params are mutliple foreign keys
my @values = @{ $tables->{$table} };
my @keys = @{ $config->{$table}->{fk} };
my %params = map { $_ => shift(@values) } @keys;
$object = $module->search( \%params )->next();
}
$params->{ $config->{$table}->{singular} } = $object;
}
}
else {
croak "ERROR LOADING MODULE $module: $Module::Load::Conditional::ERROR";
}
}
$params->{today} = dt_from_string();
return $params;
}
1;
__END__
package Koha::Checkout;
# Copyright ByWater Solutions 2015
#
# 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use Modern::Perl;
use Carp;
use Koha::Database;
use base qw(Koha::Object);
=head1 NAME
Koha::Checkout - Koha Checkout object class
=head1 API
=head2 Class Methods
=cut
=head3 type
=cut
sub _type {
return 'Issue';
}
=head1 AUTHOR
Kyle M Hall <kyle@bywatersolutions.com>
=cut
1;
package Koha::Checkouts;
# Copyright ByWater Solutions 2015
#
# 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use Modern::Perl;
use Carp;
use Koha::Database;
use Koha::Checkout;
use base qw(Koha::Objects);
=head1 NAME
Koha::Checkouts - Koha Checkout object set class
=head1 API
=head2 Class Methods
=cut
=head3 type
=cut
sub _type {
return 'Issue';
}
=head3 object_class
=cut
sub object_class {
return 'Koha::Checkout';
}
=head1 AUTHOR
Kyle M Hall <kyle@bywatersolutions.com>
=cut
1;
package Koha::News;
# Copyright ByWater Solutions 2015
#
# 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use Modern::Perl;
use Carp;
use Koha::Database;
use Koha::NewsItem;
use base qw(Koha::Objects);
=head1 NAME
Koha::News - Koha News object set class
=head1 API
=head2 Class Methods
=cut
=head3 type
=cut
sub _type {
return 'OpacNews';
}
=head3 object_class
=cut
sub object_class {
return 'Koha::NewsItem';
}
=head1 AUTHOR
Kyle M Hall <kyle@bywatersolutions.com>
=cut
1;
package Koha::NewsItem;
# Copyright ByWater Solutions 2015
#
# 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use Modern::Perl;
use Carp;
use Koha::Database;
use base qw(Koha::Object);
=head1 NAME
Koha::NewsItem - Koha News Item object class
Koha::NewsItem represents a single piece of news from the opac_news table
=head1 API
=head2 Class Methods
=cut
=head3 type
=cut
sub _type {
return 'OpacNews';
}
=head1 AUTHOR
Kyle M Hall <kyle@bywatersolutions.com>
=cut
1;
package Koha::Patron::Modification;
# Copyright ByWater Solutions 2014
#
# 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use Modern::Perl;
use Carp;
use Koha::Database;
use base qw(Koha::Object);
=head1 NAME
Koha::Item - Koha Item object class
=head1 API
=head2 Class Methods
=cut
=head3 type
=cut
sub _type {
return 'BorrowerModification';
}
=head1 AUTHOR
Kyle M Hall <kyle@bywatersolutions.com>
=cut
1;
......@@ -27,10 +27,18 @@ use Modern::Perl;
use C4::Context;
use C4::Debug;
use base qw(Koha::Objects);
sub new {
my ( $class, %args ) = @_;
my ( $self, %args ) = @_;
$self = $self->SUPER::new(@_);
foreach my $key ( keys %args ) {
$self->{$key} = $args{$key};
}
return bless( \%args, $class );
return $self;
}
=head2 AddModifications
......@@ -304,4 +312,16 @@ sub GetModifications {
return $data;
}
sub _type {
return 'BorrowerModification';
}
=head3 object_class
=cut
sub object_class {
return 'Koha::Patron::Modification';
}
1;
package Koha::Suggestion;
# Copyright ByWater Solutions 2015
#
# 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use Modern::Perl;
use Carp;
use Koha::Database;
use base qw(Koha::Object);
=head1 NAME
Koha::Suggestion - Koha Suggestion object class
=head1 API
=head2 Class Methods
=cut
=head3 type
=cut
sub _type {
return 'Suggestion';
}
=head1 AUTHOR
Kyle M Hall <kyle@bywatersolutions.com>
=cut
1;
package Koha::Suggestions;
# Copyright ByWater Solutions 2015
#
# 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use Modern::Perl;
use Carp;
use Koha::Database;
use Koha::Suggestion;
use base qw(Koha::Objects);
=head1 NAME
Koha::Suggestions - Koha Suggestion object set class
=head1 API
=head2 Class Methods
=cut
=head3 type
=cut
sub _type {
return 'Suggestion';
}
=head3 object_class
=cut
sub object_class {
return 'Koha::Suggestion';
}
=head1 AUTHOR
Kyle M Hall <kyle@bywatersolutions.com>
=cut
1;
......@@ -259,6 +259,7 @@ sub add_validate {
my @content = $input->multi_param('content');
for my $mtt ( @mtt ) {
my $is_html = $input->param("is_html_$mtt");
my $is_tt = $input->param("is_tt_$mtt") ? 1 : 0;
my $title = shift @title;
my $content = shift @content;
my $letter = C4::Letters::getletter( $oldmodule, $code, $branchcode, $mtt);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment