oont-contents/plugins/wp-optimize/vendor/rosell-dk/webp-convert/src/Options/IntegerOption.php
2025-02-10 13:57:45 +01:00

76 lines
2 KiB
PHP

<?php
namespace WebPConvert\Options;
use WebPConvert\Options\Option;
use WebPConvert\Options\Exceptions\InvalidOptionValueException;
/**
* Abstract option class
*
* @package WebPConvert
* @author Bjørn Rosell <it@rosell.dk>
* @since Class available since Release 2.0.0
*/
class IntegerOption extends Option
{
protected $typeId = 'int';
protected $schemaType = ['integer'];
protected $minValue;
protected $maxValue;
/**
* Constructor.
*
* @param string $id id of the option
* @param integer $defaultValue default value for the option
* @throws InvalidOptionValueException if the default value cannot pass the check
* @return void
*/
public function __construct($id, $defaultValue, $minValue = null, $maxValue = null)
{
$this->minValue = $minValue;
$this->maxValue = $maxValue;
parent::__construct($id, $defaultValue);
}
protected function checkMin()
{
if (!is_null($this->minValue) && $this->getValue() < $this->minValue) {
throw new InvalidOptionValueException(
'"' . $this->id . '" option must be set to minimum ' . $this->minValue . '. ' .
'It was however set to: ' . $this->getValue()
);
}
}
protected function checkMax()
{
if (!is_null($this->maxValue) && $this->getValue() > $this->maxValue) {
throw new InvalidOptionValueException(
'"' . $this->id . '" option must be set to max ' . $this->maxValue . '. ' .
'It was however set to: ' . $this->getValue()
);
}
}
protected function checkMinMax()
{
$this->checkMin();
$this->checkMax();
}
public function check()
{
$this->checkType('integer');
$this->checkMinMax();
}
public function getSchema()
{
$obj = parent::getSchema();
$obj['minimum'] = $this->minValue;
$obj['maximum'] = $this->maxValue;
return $obj;
}
}