| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | <?php/** * Validates an integer. * @note While this class was modeled off the CSS definition, no currently *       allowed CSS uses this type.  The properties that do are: widows, *       orphans, z-index, counter-increment, counter-reset.  Some of the *       HTML attributes, however, find use for a non-negative version of this. */class HTMLPurifier_AttrDef_Integer extends HTMLPurifier_AttrDef{    /**     * Whether or not negative values are allowed.     * @type bool     */    protected $negative = true;    /**     * Whether or not zero is allowed.     * @type bool     */    protected $zero = true;    /**     * Whether or not positive values are allowed.     * @type bool     */    protected $positive = true;    /**     * @param $negative Bool indicating whether or not negative values are allowed     * @param $zero Bool indicating whether or not zero is allowed     * @param $positive Bool indicating whether or not positive values are allowed     */    public function __construct($negative = true, $zero = true, $positive = true)    {        $this->negative = $negative;        $this->zero = $zero;        $this->positive = $positive;    }    /**     * @param string $integer     * @param HTMLPurifier_Config $config     * @param HTMLPurifier_Context $context     * @return bool|string     */    public function validate($integer, $config, $context)    {        $integer = $this->parseCDATA($integer);        if ($integer === '') {            return false;        }        // we could possibly simply typecast it to integer, but there are        // certain fringe cases that must not return an integer.        // clip leading sign        if ($this->negative && $integer[0] === '-') {            $digits = substr($integer, 1);            if ($digits === '0') {                $integer = '0';            } // rm minus sign for zero        } elseif ($this->positive && $integer[0] === '+') {            $digits = $integer = substr($integer, 1); // rm unnecessary plus        } else {            $digits = $integer;        }        // test if it's numeric        if (!ctype_digit($digits)) {            return false;        }        // perform scope tests        if (!$this->zero && $integer == 0) {            return false;        }        if (!$this->positive && $integer > 0) {            return false;        }        if (!$this->negative && $integer < 0) {            return false;        }        return $integer;    }}// vim: et sw=4 sts=4
 |