*
* Copyright © 2008, Niklas Laxström
* Copyright © 2011, Antoine Musso
+ * Copyright © 2013, Bartosz Dziewoński
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
const STRING = 0;
/** Integer type, maps guessType() to WebRequest::getInt() */
const INT = 1;
+ /** Float type, maps guessType() to WebRequest::getFloat()
+ * @since 1.23 */
+ const FLOAT = 4;
/** Boolean type, maps guessType() to WebRequest::getBool() */
const BOOL = 2;
/** Integer type or null, maps to WebRequest::getIntOrNull()
return self::BOOL;
} elseif ( is_int( $data ) ) {
return self::INT;
+ } elseif ( is_float( $data ) ) {
+ return self::FLOAT;
} elseif ( is_string( $data ) ) {
return self::STRING;
} else {
}
/**
- * Validate and set an option integer value
- * The value will be altered to fit in the range.
+ * @see validateBounds()
+ */
+ public function validateIntBounds( $name, $min, $max ) {
+ $this->validateBounds( $name, $min, $max );
+ }
+
+ /**
+ * Constrain a numeric value for a given option to a given range. The value will be altered to fit
+ * in the range.
*
- * @param string $name option name
- * @param int $min minimum value
- * @param int $max maximum value
+ * @since 1.23
+ *
+ * @param string $name Option name
+ * @param int|float $min Minimum value
+ * @param int|float $max Maximum value
* @throws MWException If option is not of type INT
*/
- public function validateIntBounds( $name, $min, $max ) {
+ public function validateBounds( $name, $min, $max ) {
$this->validateName( $name, true );
+ $type = $this->options[$name]['type'];
- if ( $this->options[$name]['type'] !== self::INT ) {
- throw new MWException( "Option $name is not of type int" );
+ if ( $type !== self::INT && $type !== self::FLOAT ) {
+ throw new MWException( "Option $name is not of type INT or FLOAT" );
}
$value = $this->getValueReal( $this->options[$name] );
case self::INT:
$value = $r->getInt( $name, $default );
break;
+ case self::FLOAT:
+ $value = $r->getFloat( $name, $default );
+ break;
case self::STRING:
$value = $r->getText( $name, $default );
break;
: null;
}
+ /**
+ * Fetch a floating point value from the input or return $default if not set.
+ * Guaranteed to return a float; non-numeric input will typically
+ * return 0.
+ *
+ * @since 1.23
+ * @param $name String
+ * @param $default Float
+ * @return Float
+ */
+ public function getFloat( $name, $default = 0 ) {
+ return floatval( $this->getVal( $name, $default ) );
+ }
+
/**
* Fetch a boolean value from the input or return $default if not set.
* Guaranteed to return true or false, with normal PHP semantics for
$this->object->add( 'string1', 'string one' );
$this->object->add( 'string2', 'string two' );
$this->object->add( 'integer', 0 );
+ $this->object->add( 'float', 0.0 );
$this->object->add( 'intnull', 0, FormOptions::INTNULL );
}
private function assertGuessInt( $data ) {
$this->guess( FormOptions::INT, $data );
}
+ private function assertGuessFloat( $data ) {
+ $this->guess( FormOptions::FLOAT, $data );
+ }
private function assertGuessString( $data ) {
$this->guess( FormOptions::STRING, $data );
}
$this->assertGuessInt( 5 );
$this->assertGuessInt( 0x0F );
+ $this->assertGuessFloat( 0.0 );
+ $this->assertGuessFloat( 1.5 );
+ $this->assertGuessFloat( 1e3 );
+
$this->assertGuessString( 'true' );
$this->assertGuessString( 'false' );
$this->assertGuessString( '5' );
$this->assertGuessString( '0' );
+ $this->assertGuessString( '1.5' );
}
/**