wiki.techinc.nl/includes/htmlform/fields/HTMLFloatField.php
Bartosz Dziewoński 485f66f174 Use PHP 7 '??' operator instead of '?:' with 'isset()' where convenient
Find: /isset\(\s*([^()]+?)\s*\)\s*\?\s*\1\s*:\s*/
Replace with: '\1 ?? '

(Everywhere except includes/PHPVersionCheck.php)
(Then, manually fix some line length and indentation issues)

Then manually reviewed the replacements for cases where confusing
operator precedence would result in incorrect results
(fixing those in I478db046a1cc162c6767003ce45c9b56270f3372).

Change-Id: I33b421c8cb11cdd4ce896488c9ff5313f03a38cf
2018-05-30 18:06:13 -07:00

46 lines
1 KiB
PHP

<?php
/**
* A field that will contain a numeric value
*/
class HTMLFloatField extends HTMLTextField {
public function getSize() {
return $this->mParams['size'] ?? 20;
}
public function validate( $value, $alldata ) {
$p = parent::validate( $value, $alldata );
if ( $p !== true ) {
return $p;
}
$value = trim( $value );
# https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers
# with the addition that a leading '+' sign is ok.
if ( !preg_match( '/^((\+|\-)?\d+(\.\d+)?(E(\+|\-)?\d+)?)?$/i', $value ) ) {
return $this->msg( 'htmlform-float-invalid' );
}
# The "int" part of these message names is rather confusing.
# They make equal sense for all numbers.
if ( isset( $this->mParams['min'] ) ) {
$min = $this->mParams['min'];
if ( $min > $value ) {
return $this->msg( 'htmlform-int-toolow', $min );
}
}
if ( isset( $this->mParams['max'] ) ) {
$max = $this->mParams['max'];
if ( $max < $value ) {
return $this->msg( 'htmlform-int-toohigh', $max );
}
}
return true;
}
}