PluginProbe
Fluent Booking – The Ultimate Appointments Scheduling, Events Booking, Events Calendar Solution / 1.5.0
Fluent Booking – The Ultimate Appointments Scheduling, Events Booking, Events Calendar Solution v1.5.0
2.4.0 2.3.0 2.2.5 2.2.0 2.1.2 2.1.1 trunk 1.10.0 1.10.01 1.10.02 1.5.0 1.5.01 1.5.02 1.5.1 1.5.10 1.5.20 1.5.21 1.5.22 1.5.23 1.5.24 1.5.25 1.6.0 1.7.0 1.7.1 1.7.2 All 33 releases
fluent-booking / vendor / wpfluent / framework / src / WPFluent / Support / Sanitizer.php

Sanitizer.php in Fluent Booking – The Ultimate Appointments Scheduling, Events Booking, Events Calendar Solution 1.5.0, at vendor/wpfluent/framework/src/WPFluent/Support/Sanitizer.php

503 lines 10.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentBooking\Framework\Support;
4
5 Class Sanitizer
6 {
7 /**
8 * Sanitize an email address.
9 *
10 * @param string $arg
11 * @return string
12 */
13 public static function sanitizeEmail($arg)
14 {
15 return sanitize_email($arg);
16 }
17
18 /**
19 * Sanitize a file name.
20 *
21 * @param string $arg
22 * @return string
23 */
24 public static function sanitizeFileName($arg)
25 {
26 return sanitize_file_name($arg);
27 }
28
29 /**
30 * Sanitize an HTML class.
31 *
32 * @param string $arg
33 * @return string
34 */
35 public static function sanitizeHtmlClass($arg)
36 {
37 return sanitize_html_class($arg);
38 }
39
40 /**
41 * Sanitize a key.
42 *
43 * @param string $arg
44 * @return string
45 */
46 public static function sanitizeKey($arg)
47 {
48 return sanitize_key($arg);
49 }
50
51 /**
52 * Sanitize meta data.
53 *
54 * @param string $arg
55 * @return string
56 */
57 public static function sanitizeMeta($arg)
58 {
59 return sanitize_meta($arg);
60 }
61
62 /**
63 * Sanitize a mime type.
64 *
65 * @param string $arg
66 * @return string
67 */
68 public static function sanitizeMimeType($arg)
69 {
70 return sanitize_mime_type($arg);
71 }
72
73 /**
74 * Sanitize an option.
75 *
76 * @param string $arg
77 * @return string
78 */
79 public static function sanitizeOption($arg)
80 {
81 return sanitize_option($arg);
82 }
83
84 /**
85 * Sanitize an SQL ORDER BY clause.
86 *
87 * @param string $arg
88 * @return string
89 */
90 public static function sanitizeSqlOrderby($arg)
91 {
92 return sanitize_sql_orderby($arg);
93 }
94
95 /**
96 * Sanitize a text field.
97 *
98 * @param string $arg
99 * @return string
100 */
101 public static function sanitizeTextField($arg)
102 {
103 return sanitize_text_field($arg);
104 }
105
106 /**
107 * Sanitize a title.
108 *
109 * @param string $arg
110 * @return string
111 */
112 public static function sanitizeTitle($arg)
113 {
114 return sanitize_title($arg);
115 }
116
117 /**
118 * Sanitize a title for a query.
119 *
120 * @param string $arg
121 * @return string
122 */
123 public static function sanitizeTitleForQuery($arg)
124 {
125 return sanitize_title_for_query($arg);
126 }
127
128 /**
129 * Sanitize a title with dashes.
130 *
131 * @param string $arg
132 * @return string
133 */
134 public static function sanitizeTitleWithDashes($arg)
135 {
136 return sanitize_title_with_dashes($arg);
137 }
138
139 /**
140 * Sanitize a username.
141 *
142 * @param string $arg
143 * @return string
144 */
145 public static function sanitizeUser($arg)
146 {
147 return sanitize_user($arg);
148 }
149
150 /**
151 * Filter content through kses for posts.
152 *
153 * @param string $arg
154 * @return string
155 */
156 public static function wpFilterPostKses($arg)
157 {
158 return wp_filter_post_kses($arg);
159 }
160
161 /**
162 * Filter content through kses for no HTML.
163 *
164 * @param string $arg
165 * @return string
166 */
167 public static function wpFilterNohtmlKses($arg)
168 {
169 return wp_filter_nohtml_kses($arg);
170 }
171
172 /**
173 * Escape HTML attribute.
174 *
175 * @param string $arg
176 * @return string
177 */
178 public static function escAttr($arg)
179 {
180 return esc_attr($arg);
181 }
182
183 /**
184 * Escape HTML.
185 *
186 * @param string $arg
187 * @return string
188 */
189 public static function escHtml($arg)
190 {
191 return esc_html($arg);
192 }
193
194 /**
195 * Escape JavaScript.
196 *
197 * @param string $arg
198 * @return string
199 */
200 public static function escJs($arg)
201 {
202 return esc_js($arg);
203 }
204
205 /**
206 * Escape textarea content.
207 *
208 * @param string $arg
209 * @return string
210 */
211 public static function escTextarea($arg)
212 {
213 return esc_textarea($arg);
214 }
215
216 /**
217 * Escape URL.
218 *
219 * @param string $arg
220 * @return string
221 */
222 public static function escUrl($arg)
223 {
224 return esc_url($arg);
225 }
226
227 /**
228 * Escape URL (raw).
229 *
230 * @param string $arg
231 * @return string
232 */
233 public static function escUrlRaw($arg)
234 {
235 return esc_url_raw($arg);
236 }
237
238 /**
239 * Escape XML.
240 *
241 * @param string $arg
242 * @return string
243 */
244 public static function escXml($arg)
245 {
246 return esc_xml($arg);
247 }
248
249 /**
250 * Kses (sanitization function).
251 *
252 * @param string $arg
253 * @return string
254 */
255 public static function kses($arg)
256 {
257 return wp_kses($arg);
258 }
259
260 /**
261 * Kses post content.
262 *
263 * @param string $arg
264 * @return string
265 */
266 public static function ksesPost($arg)
267 {
268 return wp_kses_post($arg);
269 }
270
271 /**
272 * Kses data.
273 *
274 * @param string $arg
275 * @return string
276 */
277 public static function ksesData($arg)
278 {
279 return wp_kses_data($arg);
280 }
281
282 /**
283 * Escape HTML with translation.
284 *
285 * @param string $arg
286 * @return string
287 */
288 public static function escHtml__($arg)
289 {
290 return esc_html__($arg);
291 }
292
293 /**
294 * Escape attribute with translation.
295 *
296 * @param string $arg
297 * @return string
298 */
299 public static function escAttr__($arg)
300 {
301 return esc_attr__($arg);
302 }
303
304 /**
305 * Escape HTML and echo.
306 *
307 * @param string $arg
308 * @return void
309 */
310 public static function escHtmlE($arg)
311 {
312 esc_html_e($arg);
313 }
314
315 /**
316 * Escape attribute and echo.
317 *
318 * @param string $arg
319 * @return void
320 */
321 public static function escAttrE($arg)
322 {
323 esc_attr_e($arg);
324 }
325
326 /**
327 * Escape HTML with context.
328 *
329 * @param string $arg
330 * @return string
331 */
332 public static function escHtmlX($arg)
333 {
334 return esc_html_x($arg);
335 }
336
337 /**
338 * Escape attribute with context.
339 *
340 * @param string $arg
341 * @return string
342 */
343 public static function escAttrX($arg)
344 {
345 return esc_attr_x($arg);
346 }
347
348 /**
349 * Sanitize data based on given rules.
350 *
351 * @param array $data
352 * @param array $rules
353 * @return array
354 */
355 public static function sanitize(array $data = [], array $rules = [])
356 {
357 $array = $result = [];
358
359 foreach ($rules as $key => $callbacks) {
360
361 if (!$callbacks) continue;
362
363 $callbacks = is_array($callbacks) ? $callbacks : [$callbacks];
364
365 $array[$key] = $callbacks;
366
367 if (str_contains($key, '*')) {
368 $array = static::substituteWildcardKeys($array, $key, $data);
369 }
370
371 foreach ($array as $k => $callbacks) {
372
373 $callbacks = static::mayBeFixCallbacks($callbacks);
374
375 if (($value = Arr::get($data, $k)) !== null) {
376 $callbacks = is_callable($callbacks) ? [$callbacks] : $callbacks;
377
378 while ($callback = static::getCallback(array_shift($callbacks))) {
379 if (is_array($value)) {
380 $value = array_map($callback, $value);
381 } else {
382 $value = $callback($value);
383 }
384 }
385
386 Arr::set($result, $k, $value);
387 }
388 }
389 }
390
391 return $result;
392 }
393
394 /**
395 * Normalize wildcard rules to dotted rule.
396 *
397 * @param array $array
398 * @param string $field
399 * @param array $data
400 * @return array
401 */
402 protected static function substituteWildcardKeys($array, $field, $data)
403 {
404 $callback = $array[$field];
405
406 $keys = array_map(function($v) {
407 return trim($v, '.');
408 }, explode('*', $field));
409
410 $key = array_shift($keys);
411
412 if ($key && ($val = Arr::get($data, $key)) && is_array($val)) {
413
414 $dotted = array_keys(Arr::dot($val, $key . '.'));
415
416 foreach ($dotted as $dottedField) {
417
418 $r = preg_replace('/[0-9]+/', '*', $dottedField);
419
420 if (preg_match("/{$field}/", $r)) {
421
422 $array[$dottedField] = $callback;
423
424 if (isset($array[$field])) {
425 unset($array[$field]);
426 }
427 }
428 }
429 }
430
431 return $array;
432 }
433
434 /**
435 * Check and fix if callbacks are given
436 * as: callback1|callback2\callback3.
437 *
438 * @param array|string $callbacks
439 * @return array
440 */
441 protected static function mayBeFixCallbacks($callbacks)
442 {
443 $nonFunctionCallables = $functionCallables = [];
444
445 foreach ($callbacks as $cb) {
446 if (is_callable($cb)) {
447 $nonFunctionCallables[] = $cb;
448 } elseif (is_string($cb)) {
449 $functionCallables[] = explode('|', $cb);
450 } elseif (is_array($cb) && !str_contains($cb[0], '::')) {
451 $functionCallables[] = $cb[0];
452 } elseif (is_array($cb) && str_contains($cb[0], '::')) {
453 $nonFunctionCallables[] = explode('::', $cb[0]);
454 }
455 }
456
457 $callbacks = array_merge(
458 Arr::flatten($functionCallables), $nonFunctionCallables
459 );
460
461 return $callbacks;
462 }
463
464 /**
465 * Get the callback function.
466 *
467 * @param callable|string $callback
468 * @return callable|null
469 */
470 protected static function getCallback($callback)
471 {
472 if ($callback) {
473
474 if ($cb = static::methodExists($callback)) {
475 $callback = $cb;
476 }
477 }
478
479 return $callback;
480 }
481
482 /**
483 * Check if the method exists.
484 *
485 * @param string $method
486 * @return callable|null
487 */
488 protected static function methodExists($method)
489 {
490 $suffix = '';
491
492 if (Str::endsWith($method, '__')) {
493 $suffix = '__';
494 }
495
496 $method = Str::camel($method) . $suffix;
497
498 if (method_exists(static::class, $method)) {
499 return [static::class, $method];
500 }
501 }
502 }
503