Bug 22007: Handle safe filtered output (KohaDates)

Signed-off-by: Owen Leonard <oleonard@myacpl.org>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
Jonathan Druart 2018-12-14 17:29:18 -03:00 committed by Nick Clemens
parent 5d49ea039c
commit 912fb42458
2 changed files with 57 additions and 4 deletions

View file

@ -133,14 +133,13 @@ sub process_tt_block {
# Already escaped with a special filter
# We could escape it but should be safe
or $tt_block =~ m{\s?\|\s?\$KohaDates\s?$}
or $tt_block =~ m{\s?\|\s?\$Price\s?$}
or $tt_block =~ m{\s?\|\s?\$KohaDates[^\|]*$}
# Already escaped correctly with raw
or $tt_block =~ m{\|\s?\$raw}
# Assignment, maybe we should require to use SET (?)
or $tt_block =~ m{=}
or ( $tt_block =~ m{=} and not $tt_block =~ m{\s\|\s} )
# Already has url or uri filter
or $tt_block =~ m{\|\s?ur(l|i)}
@ -166,6 +165,21 @@ sub process_tt_block {
: q| |
: q| |;
if ( $tt_block =~ m{\s?\|\s?\$KohaDates[^\|]*\|.*$}
) {
$tt_block =~
s/\s*\|\s*(uri|url|html)\s*$//; # Could be another filter...
$line =~ s{
\[%
\s*$pre_chomp\s*
\Q$tt_block\E\s*\|\s*(uri|url|html)
\s*$post_chomp\s*
%\]
}{[%$pre_chomp$tt_block$post_chomp%]}xms;
return ( $line, 'extra_filter_not_needed' );
}
if (
# Use the uri filter is needed
# If html filtered or not filtered

View file

@ -16,7 +16,7 @@
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use Test::More tests => 5;
use Test::More tests => 6;
use t::lib::QA::TemplateFilters;
subtest 'Asset must use raw' => sub {
@ -260,3 +260,42 @@ INPUT
@missing_filters = t::lib::QA::TemplateFilters::missing_filters($input);
is_deeply( \@missing_filters, [], 'html_entity is a valid filter for href' );
};
subtest 'Do not escape KohaDates output' => sub {
plan tests => 2;
my $input = <<INPUT;
[% var | \$KohaDates %]
[% var | \$KohaDates with_hours => 1 %]
[% var | \$KohaDates | html %]
[% var | \$KohaDates with_hours => 1 | html %]
INPUT
my $expected = <<EXPECTED;
[% var | \$KohaDates %]
[% var | \$KohaDates with_hours => 1 %]
[% var | \$KohaDates %]
[% var | \$KohaDates with_hours => 1 %]
EXPECTED
my $new_content = t::lib::QA::TemplateFilters::fix_filters($input);
is( $new_content . "\n", $expected, );
my @missing_filters = t::lib::QA::TemplateFilters::missing_filters($input);
is_deeply(
\@missing_filters,
[
{
error => "extra_filter_not_needed",
line => "[% var | \$KohaDates | html %]",
line_number => 3,
},
{
error => "extra_filter_not_needed",
line => "[% var | \$KohaDates with_hours => 1 | html %]",
line_number => 4,
}
]
);
};