Bug 22007: Handle safe filtered output (KohaDates)
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 14 Dec 2018 20:29:18 +0000 (17:29 -0300)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 7 Jan 2019 15:13:31 +0000 (15:13 +0000)
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>
(cherry picked from commit 912fb42458a422248986c74fd8a1fd92df531fb5)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

t/lib/QA/TemplateFilters.pm
t/template_filters.t

index 467010e..c4ec77d 100644 (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
index be638e1..e469835 100644 (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,
+            }
+        ]
+    );
+
+};