Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
65 / 65 |
|
100.00% |
15 / 15 |
CRAP | |
100.00% |
1 / 1 |
renderer | |
100.00% |
65 / 65 |
|
100.00% |
15 / 15 |
31 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
21 / 21 |
|
100.00% |
1 / 1 |
8 | |||
configure_mention_helper | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
configure_quote_helper | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
configure_smilies_path | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
configure_user | |
100.00% |
14 / 14 |
|
100.00% |
1 / 1 |
6 | |||
get_renderer | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
get_viewcensors | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
get_viewimg | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
get_viewsmilies | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
render | |
100.00% |
13 / 13 |
|
100.00% |
1 / 1 |
5 | |||
set_smilies_path | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
set_viewcensors | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
set_viewimg | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
set_viewsmilies | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
set_usemention | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 |
1 | <?php |
2 | /** |
3 | * |
4 | * This file is part of the phpBB Forum Software package. |
5 | * |
6 | * @copyright (c) phpBB Limited <https://www.phpbb.com> |
7 | * @license GNU General Public License, version 2 (GPL-2.0) |
8 | * |
9 | * For full copyright and license information, please see |
10 | * the docs/CREDITS.txt file. |
11 | * |
12 | */ |
13 | |
14 | namespace phpbb\textformatter\s9e; |
15 | |
16 | /** |
17 | * s9e\TextFormatter\Renderer adapter |
18 | */ |
19 | class renderer implements \phpbb\textformatter\renderer_interface |
20 | { |
21 | /** |
22 | * @var \s9e\TextFormatter\Plugins\Censor\Helper |
23 | */ |
24 | protected $censor; |
25 | |
26 | /** |
27 | * @var \phpbb\event\dispatcher_interface |
28 | */ |
29 | protected $dispatcher; |
30 | |
31 | /** |
32 | * @var mention_helper |
33 | */ |
34 | protected $mention_helper; |
35 | |
36 | /** |
37 | * @var quote_helper |
38 | */ |
39 | protected $quote_helper; |
40 | |
41 | /** |
42 | * @var \s9e\TextFormatter\Renderer |
43 | */ |
44 | protected $renderer; |
45 | |
46 | /** |
47 | * @var bool Status of the viewcensors option |
48 | */ |
49 | protected $viewcensors = false; |
50 | |
51 | /** |
52 | * @var bool Status of the viewimg option |
53 | */ |
54 | protected $viewimg = false; |
55 | |
56 | /** |
57 | * @var bool Status of the viewsmilies option |
58 | */ |
59 | protected $viewsmilies = false; |
60 | |
61 | /** |
62 | * @var bool Whether the user is allowed to use mentions |
63 | */ |
64 | protected $usemention = false; |
65 | |
66 | /** |
67 | * Constructor |
68 | * |
69 | * @param \phpbb\cache\driver\driver_interface $cache |
70 | * @param string $cache_dir Path to the cache dir |
71 | * @param string $key Cache key |
72 | * @param factory $factory |
73 | * @param \phpbb\event\dispatcher_interface $dispatcher |
74 | */ |
75 | public function __construct(\phpbb\cache\driver\driver_interface $cache, $cache_dir, $key, factory $factory, \phpbb\event\dispatcher_interface $dispatcher) |
76 | { |
77 | $renderer_data = $cache->get($key); |
78 | if ($renderer_data) |
79 | { |
80 | $class = $renderer_data['class']; |
81 | if (!class_exists($class, false)) |
82 | { |
83 | // Try to load the renderer class from its cache file |
84 | $cache_file = $cache_dir . $class . '.php'; |
85 | |
86 | if (file_exists($cache_file)) |
87 | { |
88 | include($cache_file); |
89 | } |
90 | } |
91 | if (class_exists($class, false)) |
92 | { |
93 | $renderer = new $class; |
94 | } |
95 | if (isset($renderer_data['censor'])) |
96 | { |
97 | $censor = $renderer_data['censor']; |
98 | } |
99 | } |
100 | if (!isset($renderer)) |
101 | { |
102 | $objects = $factory->regenerate(); |
103 | $renderer = $objects['renderer']; |
104 | } |
105 | |
106 | if (isset($censor)) |
107 | { |
108 | $this->censor = $censor; |
109 | } |
110 | $this->dispatcher = $dispatcher; |
111 | $this->renderer = $renderer; |
112 | $renderer = $this; |
113 | |
114 | /** |
115 | * Configure the renderer service |
116 | * |
117 | * @event core.text_formatter_s9e_renderer_setup |
118 | * @var \phpbb\textformatter\s9e\renderer renderer This renderer service |
119 | * @since 3.2.0-a1 |
120 | * @psalm-ignore-var |
121 | */ |
122 | $vars = ['renderer']; |
123 | extract($dispatcher->trigger_event('core.text_formatter_s9e_renderer_setup', compact($vars))); |
124 | } |
125 | |
126 | /** |
127 | * Configure the mention_helper object used to display extended information in mentions |
128 | * |
129 | * @param mention_helper $mention_helper |
130 | */ |
131 | public function configure_mention_helper(mention_helper $mention_helper) |
132 | { |
133 | $this->mention_helper = $mention_helper; |
134 | } |
135 | |
136 | /** |
137 | * Configure the quote_helper object used to display extended information in quotes |
138 | * |
139 | * @param quote_helper $quote_helper |
140 | */ |
141 | public function configure_quote_helper(quote_helper $quote_helper) |
142 | { |
143 | $this->quote_helper = $quote_helper; |
144 | } |
145 | |
146 | /** |
147 | * Automatically set the smilies path based on config |
148 | * |
149 | * @param \phpbb\config\config $config |
150 | * @param \phpbb\path_helper $path_helper |
151 | * @return void |
152 | */ |
153 | public function configure_smilies_path(\phpbb\config\config $config, \phpbb\path_helper $path_helper) |
154 | { |
155 | /** |
156 | * @see smiley_text() |
157 | */ |
158 | $root_path = $path_helper->get_web_root_path(); |
159 | |
160 | $this->set_smilies_path($root_path . $config['smilies_path']); |
161 | } |
162 | |
163 | /** |
164 | * Configure this renderer as per the user's settings |
165 | * |
166 | * Should set the locale as well as the viewcensor/viewimg/viewsmilies options. |
167 | * |
168 | * @param \phpbb\user $user |
169 | * @param \phpbb\config\config $config |
170 | * @param \phpbb\auth\auth $auth |
171 | * @return void |
172 | */ |
173 | public function configure_user(\phpbb\user $user, \phpbb\config\config $config, \phpbb\auth\auth $auth) |
174 | { |
175 | $censor = $user->optionget('viewcensors') || !$config['allow_nocensors'] || !$auth->acl_get('u_chgcensors'); |
176 | |
177 | $this->set_viewcensors($censor); |
178 | $this->set_viewimg($user->optionget('viewimg')); |
179 | $this->set_viewsmilies($user->optionget('viewsmilies')); |
180 | $this->set_usemention($config['allow_mentions'] && $auth->acl_get('u_mention')); |
181 | |
182 | // Set the stylesheet parameters |
183 | foreach (array_keys($this->renderer->getParameters()) as $param_name) |
184 | { |
185 | if (strpos($param_name, 'L_') === 0) |
186 | { |
187 | // L_FOO is set to $user->lang('FOO') |
188 | $this->renderer->setParameter($param_name, $user->lang(substr($param_name, 2))); |
189 | } |
190 | } |
191 | |
192 | // Set this user's style id and other parameters |
193 | $this->renderer->setParameters(array( |
194 | 'S_IS_BOT' => $user->data['is_bot'] ?? false, |
195 | 'S_REGISTERED_USER' => $user->data['is_registered'] ?? false, |
196 | 'S_USER_LOGGED_IN' => ($user->data['user_id'] != ANONYMOUS), |
197 | 'STYLE_ID' => $user->style['style_id'], |
198 | )); |
199 | } |
200 | |
201 | /** |
202 | * Return the instance of s9e\TextFormatter\Renderer used by this object |
203 | * |
204 | * @return \s9e\TextFormatter\Renderer |
205 | */ |
206 | public function get_renderer() |
207 | { |
208 | return $this->renderer; |
209 | } |
210 | |
211 | /** |
212 | * {@inheritdoc} |
213 | */ |
214 | public function get_viewcensors() |
215 | { |
216 | return $this->viewcensors; |
217 | } |
218 | |
219 | /** |
220 | * {@inheritdoc} |
221 | */ |
222 | public function get_viewimg() |
223 | { |
224 | return $this->viewimg; |
225 | } |
226 | |
227 | /** |
228 | * {@inheritdoc} |
229 | */ |
230 | public function get_viewsmilies() |
231 | { |
232 | return $this->viewsmilies; |
233 | } |
234 | |
235 | /** |
236 | * {@inheritdoc} |
237 | */ |
238 | public function render($text) |
239 | { |
240 | if (isset($this->mention_helper)) |
241 | { |
242 | $text = $this->mention_helper->inject_metadata($text); |
243 | } |
244 | |
245 | if (isset($this->quote_helper)) |
246 | { |
247 | $text = $this->quote_helper->inject_metadata($text); |
248 | } |
249 | |
250 | $renderer = $this; |
251 | |
252 | /** |
253 | * Modify a parsed text before it is rendered |
254 | * |
255 | * @event core.text_formatter_s9e_render_before |
256 | * @var \phpbb\textformatter\s9e\renderer renderer This renderer service |
257 | * @var string text The parsed text, in its XML form |
258 | * @since 3.2.0-a1 |
259 | * @psalm-ignore-var |
260 | */ |
261 | $vars = ['renderer', 'text']; |
262 | extract($this->dispatcher->trigger_event('core.text_formatter_s9e_render_before', compact($vars))); |
263 | |
264 | $html = $this->renderer->render($text); |
265 | if (isset($this->censor) && $this->viewcensors) |
266 | { |
267 | $html = $this->censor->censorHtml($html, true); |
268 | } |
269 | |
270 | /** |
271 | * Modify a rendered text |
272 | * |
273 | * @event core.text_formatter_s9e_render_after |
274 | * @var string html The rendered text's HTML |
275 | * @var \phpbb\textformatter\s9e\renderer renderer This renderer service |
276 | * @since 3.2.0-a1 |
277 | * @psalm-ignore-var |
278 | */ |
279 | $vars = ['html', 'renderer']; |
280 | extract($this->dispatcher->trigger_event('core.text_formatter_s9e_render_after', compact($vars))); |
281 | |
282 | return $html; |
283 | } |
284 | |
285 | /** |
286 | * {@inheritdoc} |
287 | */ |
288 | public function set_smilies_path($path) |
289 | { |
290 | $this->renderer->setParameter('T_SMILIES_PATH', $path); |
291 | } |
292 | |
293 | /** |
294 | * {@inheritdoc} |
295 | */ |
296 | public function set_viewcensors($value) |
297 | { |
298 | $this->viewcensors = $value; |
299 | $this->renderer->setParameter('S_VIEWCENSORS', $value); |
300 | } |
301 | |
302 | /** |
303 | * {@inheritdoc} |
304 | */ |
305 | public function set_viewimg($value) |
306 | { |
307 | $this->viewimg = $value; |
308 | $this->renderer->setParameter('S_VIEWIMG', $value); |
309 | } |
310 | |
311 | /** |
312 | * {@inheritdoc} |
313 | */ |
314 | public function set_viewsmilies($value) |
315 | { |
316 | $this->viewsmilies = $value; |
317 | $this->renderer->setParameter('S_VIEWSMILIES', $value); |
318 | } |
319 | |
320 | /** |
321 | * {@inheritdoc} |
322 | */ |
323 | public function set_usemention($value) |
324 | { |
325 | $this->usemention = $value; |
326 | $this->renderer->setParameter('S_VIEWMENTION', $value); |
327 | } |
328 | } |