friendica/vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Input.php

57 lines
1.6 KiB
PHP
Raw Normal View History

2010-09-09 05:14:17 +02:00
<?php
/**
* Performs miscellaneous cross attribute validation and filtering for
* input elements. This is meant to be a post-transform.
*/
2016-02-09 11:06:17 +01:00
class HTMLPurifier_AttrTransform_Input extends HTMLPurifier_AttrTransform
{
/**
* @type HTMLPurifier_AttrDef_HTML_Pixels
*/
2010-09-09 05:14:17 +02:00
protected $pixels;
2016-02-09 11:06:17 +01:00
public function __construct()
{
2010-09-09 05:14:17 +02:00
$this->pixels = new HTMLPurifier_AttrDef_HTML_Pixels();
}
2016-02-09 11:06:17 +01:00
/**
* @param array $attr
* @param HTMLPurifier_Config $config
* @param HTMLPurifier_Context $context
* @return array
*/
public function transform($attr, $config, $context)
{
if (!isset($attr['type'])) {
$t = 'text';
} else {
$t = strtolower($attr['type']);
}
2010-09-09 05:14:17 +02:00
if (isset($attr['checked']) && $t !== 'radio' && $t !== 'checkbox') {
unset($attr['checked']);
}
if (isset($attr['maxlength']) && $t !== 'text' && $t !== 'password') {
unset($attr['maxlength']);
}
if (isset($attr['size']) && $t !== 'text' && $t !== 'password') {
$result = $this->pixels->validate($attr['size'], $config, $context);
2016-02-09 11:06:17 +01:00
if ($result === false) {
unset($attr['size']);
} else {
$attr['size'] = $result;
}
2010-09-09 05:14:17 +02:00
}
if (isset($attr['src']) && $t !== 'image') {
unset($attr['src']);
}
if (!isset($attr['value']) && ($t === 'radio' || $t === 'checkbox')) {
$attr['value'] = '';
}
return $attr;
}
}
// vim: et sw=4 sts=4