Skip to content

Commit

Permalink
fix: Fix deprecation notice since twig 3.10 to now use EscaperRuntime…
Browse files Browse the repository at this point in the history
… instead of EscaperExtension (#2997)
  • Loading branch information
Levdbas committed May 14, 2024
1 parent 8a30865 commit 295349b
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/Twig.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
use Timber\Factory\TermFactory;
use Twig\Environment;
use Twig\Extension\CoreExtension;
use Twig\Extension\EscaperExtension;
use Twig\Runtime\EscaperRuntime;
use Twig\TwigFilter;
use Twig\TwigFunction;

Expand Down Expand Up @@ -553,13 +555,20 @@ public function add_timber_escapers($twig)
return \esc_js($string);
};

if (\class_exists('Twig\Extension\EscaperExtension')) {
$escaper_extension = $twig->getExtension('Twig\Extension\EscaperExtension');
if (\class_exists(EscaperRuntime::class)) {
$escaper_extension = $twig->getRuntime(EscaperRuntime::class);
$escaper_extension->setEscaper('esc_url', '\esc_url');
$escaper_extension->setEscaper('wp_kses_post', '\wp_kses_post');
$escaper_extension->setEscaper('esc_html', '\esc_html');
$escaper_extension->setEscaper('esc_js', '\esc_js');
} elseif ($twig->hasExtension(EscaperExtension::class)) {
$escaper_extension = $twig->getExtension(EscaperExtension::class);
$escaper_extension->setEscaper('esc_url', $esc_url);
$escaper_extension->setEscaper('wp_kses_post', $wp_kses_post);
$escaper_extension->setEscaper('esc_html', $esc_html);
$escaper_extension->setEscaper('esc_js', $esc_js);
}

return $twig;
}

Expand Down
19 changes: 19 additions & 0 deletions tests/test-timber-escapers.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,23 @@ public function testDoubleEscaper()

$this->assertEquals($native, $result);
}

public function testOldEscaper()
{
$dirty_url = 'https://example.com/?foo=1&bar=2';
$other_protocol_url = 'ftp://example.com/?foo=1&bar=2';

$native = esc_url($dirty_url);
$other_protocol_native = esc_url($other_protocol_url);
$result = Timber::compile_string('<a href="{{ url|e("esc_url") }}">', [
'url' => $dirty_url,
]);

$other_protocol_result = Timber::compile_string('{{ url|e("esc_url") }}', [
'url' => $other_protocol_url,
]);

$this->assertEquals('<a href="' . $native . '">', $result);
$this->assertEquals($other_protocol_native, $other_protocol_result);
}
}

0 comments on commit 295349b

Please sign in to comment.