| 
<?phpdeclare(strict_types=1);
 namespace ParagonIE\Ionizer\Filter;
 
 use ParagonIE\Ionizer\InputFilter;
 use ParagonIE\Ionizer\InvalidDataException;
 
 /**
 * Class IntFilter
 * @package ParagonIE\Ionizer\Filter
 */
 class IntFilter extends InputFilter
 {
 /**
 * @var mixed
 */
 protected $default = 0;
 
 /**
 * @var int|null
 */
 protected $max = null;
 
 /**
 * @var int|null
 */
 protected $min = null;
 
 /**
 * @var string
 */
 protected $type = 'int';
 
 /**
 * @param mixed|null $value
 * @return self
 * @throws \TypeError
 */
 public function setMaximumValue($value = null): self
 {
 if (\is_null($value)) {
 $this->max = $value;
 return $this;
 }
 if (!\is_int($value)) {
 throw new \TypeError('An integer was expected. ' . \gettype($value) . ' given.');
 }
 $this->max = (int) $value;
 return $this;
 }
 
 /**
 * @param mixed|null $value
 * @return self
 * @throws \TypeError
 */
 public function setMinimumValue($value = null): self
 {
 if (\is_null($value)) {
 $this->min = $value;
 return $this;
 }
 if (!\is_int($value)) {
 throw new \TypeError('An integer was expected. ' . \gettype($value) . ' given.');
 }
 $this->min = (int) $value;
 return $this;
 }
 
 /**
 * Process data using the filter rules.
 *
 * @param mixed $data
 * @return int
 * @throws \TypeError
 * @throws InvalidDataException
 */
 public function process($data = null)
 {
 if (\is_array($data)) {
 throw new \TypeError(
 \sprintf('Unexpected array for integer filter (%s).', $this->index)
 );
 }
 if (\is_int($data) || \is_float($data)) {
 $data = (int) $data;
 } elseif (\is_null($data) || $data === '') {
 $data = null;
 } elseif (\is_string($data) && \preg_match('#^\-?[0-9]+$#', $data)) {
 $data = (int) $data;
 } else {
 throw new \TypeError(
 \sprintf('Expected an integer (%s).', $this->index)
 );
 }
 
 if (!\is_null($this->min) && !\is_null($data)) {
 if ($data < $this->min) {
 $data = null;
 }
 }
 if (!\is_null($this->max) && !\is_null($data)) {
 if ($data > $this->max) {
 $data = null;
 }
 }
 
 return (int) parent::process($data);
 }
 }
 
 |