5use InvalidArgumentException;
10use Wikimedia\Timestamp\ConvertibleTimestamp;
20 public const INFINITY_VALS = [
'infinite',
'indefinite',
'infinity',
'never' ];
35 public function validate( $name, $value, array $settings, array $options ) {
40 }
catch ( InvalidArgumentException $e ) {
41 $this->
failure(
'badexpiry', $name, $value, $settings, $options );
44 if ( $expiry !==
'infinity' && $expiry < ConvertibleTimestamp::now( TS_ISO_8601 ) ) {
45 $this->
failure(
'badexpiry-past', $name, $value, $settings, $options );
50 if ( self::expiryExceedsMax( $expiry, $max ) ) {
51 $dontUseMax = empty( $settings[self::PARAM_USE_MAX] );
53 $msg = DataMessageValue::new(
55 ?
'paramvalidator-badexpiry-duration'
56 :
'paramvalidator-badexpiry-duration-max',
59 $this->
failure( $msg, $name, $value, $settings, $options, $dontUseMax );
67 public function getHelpInfo( $name, array $settings, array $options ) {
68 $info = parent::getHelpInfo( $name, $settings, $options );
75 array_map(
static function ( $val ) {
77 }, self::INFINITY_VALS )
94 public static function normalizeExpiry( ?
string $expiry =
null, ?
int $style =
null ) {
95 if ( $expiry ===
null ) {
98 if ( in_array( $expiry, self::INFINITY_VALS,
true ) ) {
103 $unix = strtotime( $expiry, ConvertibleTimestamp::time() );
104 if ( $unix ===
false ) {
106 throw new InvalidArgumentException(
"Invalid expiry value: {$expiry}" );
112 $expiryConvertibleTimestamp =
new ConvertibleTimestamp( $unix === 0 ?
'00' : $unix );
114 if ( $style !==
null ) {
115 return $expiryConvertibleTimestamp->getTimestamp( $style );
118 return $expiryConvertibleTimestamp;
131 if ( self::expiryExceedsMax( $expiry, $maxExpiryDuration ) ) {
137 public function checkSettings(
string $name, $settings, array $options, array $ret ): array {
138 $ret = parent::
checkSettings( $name, $settings, $options, $ret );
153 private static function expiryExceedsMax( ?
string $expiry, ?
string $max =
null ): bool {
154 $expiry = self::normalizeExpiry( $expiry );
155 $max = self::normalizeExpiry( $max );
157 if ( !$max || !$expiry || $expiry ===
'infinity' ) {
162 return $expiry > $max;