TemplateWrapper.php
4.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<?php
/*
* This file is part of Twig.
*
* (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace WPML\Core\Twig;
/**
* Exposes a template to userland.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
final class TemplateWrapper
{
private $env;
private $template;
/**
* This method is for internal use only and should never be called
* directly (use \\WPML\\Core\\Twig\\Environment::load() instead).
*
* @internal
*/
public function __construct(\WPML\Core\Twig\Environment $env, \WPML\Core\Twig\Template $template)
{
$this->env = $env;
$this->template = $template;
}
/**
* Renders the template.
*
* @param array $context An array of parameters to pass to the template
*
* @return string The rendered template
*/
public function render($context = [])
{
// using func_get_args() allows to not expose the blocks argument
// as it should only be used by internal code
return $this->template->render($context, \func_num_args() > 1 ? \func_get_arg(1) : []);
}
/**
* Displays the template.
*
* @param array $context An array of parameters to pass to the template
*/
public function display($context = [])
{
// using func_get_args() allows to not expose the blocks argument
// as it should only be used by internal code
$this->template->display($context, \func_num_args() > 1 ? \func_get_arg(1) : []);
}
/**
* Checks if a block is defined.
*
* @param string $name The block name
* @param array $context An array of parameters to pass to the template
*
* @return bool
*/
public function hasBlock($name, $context = [])
{
return $this->template->hasBlock($name, $context);
}
/**
* Returns defined block names in the template.
*
* @param array $context An array of parameters to pass to the template
*
* @return string[] An array of defined template block names
*/
public function getBlockNames($context = [])
{
return $this->template->getBlockNames($context);
}
/**
* Renders a template block.
*
* @param string $name The block name to render
* @param array $context An array of parameters to pass to the template
*
* @return string The rendered block
*/
public function renderBlock($name, $context = [])
{
$context = $this->env->mergeGlobals($context);
$level = \ob_get_level();
if ($this->env->isDebug()) {
\ob_start();
} else {
\ob_start(function () {
return '';
});
}
try {
$this->template->displayBlock($name, $context);
} catch (\Exception $e) {
while (\ob_get_level() > $level) {
\ob_end_clean();
}
throw $e;
} catch (\Throwable $e) {
while (\ob_get_level() > $level) {
\ob_end_clean();
}
throw $e;
}
return \ob_get_clean();
}
/**
* Displays a template block.
*
* @param string $name The block name to render
* @param array $context An array of parameters to pass to the template
*/
public function displayBlock($name, $context = [])
{
$this->template->displayBlock($name, $this->env->mergeGlobals($context));
}
/**
* @return Source
*/
public function getSourceContext()
{
return $this->template->getSourceContext();
}
/**
* @return string
*/
public function getTemplateName()
{
return $this->template->getTemplateName();
}
/**
* @internal
*
* @return Template
*/
public function unwrap()
{
return $this->template;
}
}
\class_alias('WPML\\Core\\Twig\\TemplateWrapper', 'WPML\\Core\\Twig_TemplateWrapper');