Files
2026-04-28 15:13:50 +02:00

82 lines
2.2 KiB
PHP

<?php
class WJECF_Sanitizer
{
protected static $_instance;
/**
* Singleton Instance.
*
* @static
*
* @return Singleton Instance
*/
public static function instance()
{
if (is_null(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* Sanitizes form input for database output.
*
* @param mixed $value
* @param string $requested_format The output format requested
* @param null|mixed $fallback_value Value to return in case of invalid value
*
* @return mixed Sanitized
*/
public function sanitize($value, $requested_format, $fallback_value = null)
{
switch ($requested_format) {
case '':
return (string) $value;
case 'html':
return wp_kses_post($value);
case 'clean':
// applies sanitize_text_field; or recursively if it's an array
return wc_clean($value);
case 'int,':
case 'int[]':
if (is_array($value)) {
$values = $value;
} elseif ('' === $value || is_null($value) || false === $value) {
$values = [];
} else {
$values = explode(',', $value); // int[] also accepts comma separated string
}
$retval = [];
foreach ($values as $value) {
$sane = $this->sanitize($value, 'int');
if (!is_null($sane)) {
$retval[] = $sane;
}
}
if ('int,' === $requested_format) {
return implode(',', $retval);
}
return $retval;
case 'int':
return is_numeric($value) ? intval($value) : $fallback_value;
case 'yesno':
return 'yes' === $value ? 'yes' : 'no';
case 'decimal':
$value = wc_format_decimal($value);
return ('' === $value || false === $value) ? $fallback_value : $value;
}
throw new Exception('Unknown sanitization rule '.$requested_format);
}
}