1 package t::lib::QA::TemplateFilters;
32 my ( $use_raw, $has_use_raw );
35 for my $line ( split "\n", $content ) {
37 if ( $line =~ m{\[%[^%]+%\]} ) {
39 # handle exceptions first
41 if $line =~ m{|\s*\$raw}; # Is the file use the raw filter?
43 # Do we have Asset without the raw filter?
44 if ( $line =~ m{^\s*\[% Asset} ) {
45 push @errors, { error => 'asset_must_be_raw', line => $line, line_number => $line_number }
47 unless $line =~ m{\|\s*\$raw};
51 if $line =~ m{\[% USE raw %\]}; # Does [% Use raw %] exist?
57 (?<pre_chomp>(\s|\-|~)*)
59 (?<post_chomp>(\s|\-|~)*)
63 my $tt_block = $+{tt_block};
65 # It's a TT directive, no filters needed
66 next if grep { $tt_block =~ $_ } @tt_directives;
69 if $tt_block =~ m{\s?\|\s?\$KohaDates\s?$}
70 or $tt_block =~ m{\s?\|\s?\$Price\s?$}
71 ; # We could escape it but should be safe
72 next if $tt_block =~ m{^\#}; # Is a comment, skip it
74 push @errors, { error => 'missing_filter', line => $line, line_number => $line_number }
75 if $tt_block !~ m{\|\s?\$raw} # already escaped correctly with raw
76 && $tt_block !~ m{=} # assignment, maybe we should require to use SET (?)
77 && $tt_block !~ m{\|\s?ur(l|i)} # already has url or uri filter
78 && $tt_block !~ m{\|\s?html} # already has html filter
79 && $tt_block !~ m{^(?<before>\S+)\s+UNLESS\s+(?<after>\S+)} # Specific for [% foo UNLESS bar %]
92 t::lib::QA::TemplateFilters - Module used by tests and QA script to catch missing filters in template files
96 my $content = read_file($filename);
97 my @e = t::lib::QA::TemplateFilters::missing_filters($content);
101 The goal of this module is to make the subroutine reusable from the QA scripts
102 and to not duplicate the code.
106 =head2 missing_filters
108 Take a template content file in parameter and return an array of errors.
109 An error is a hashref with 2 keys, error and line.
111 asset_must_be_raw - When Asset is called without using raw
112 missing_filter - When a TT variable is displayed without filter
114 * line is the line where the error has been found.
118 Jonathan Druart <jonathan.druart@bugs.koha-community.org>
122 Copyright 2017 - Koha Development Team
126 This file is part of Koha.
128 Koha is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
129 the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
131 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.
133 You should have received a copy of the GNU General Public License along with Koha; if not, see <http://www.gnu.org/licenses>.