summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2014-04-30 19:44:50 +0200
committerAndreas Gohr <andi@splitbrain.org>2014-04-30 19:44:50 +0200
commit6920d2fd3e30c9cb3abd500fe18273974da7182f (patch)
treed5af0b9f0311f24a2a87630604f545811fdd34e9
parent7a7b77ef2f397e944e30abb47e0d348639e1b821 (diff)
downloadrpg-6920d2fd3e30c9cb3abd500fe18273974da7182f.tar.gz
rpg-6920d2fd3e30c9cb3abd500fe18273974da7182f.tar.bz2
add new valid() method to $INPUT #667
-rw-r--r--_test/tests/inc/input.test.php18
-rw-r--r--inc/Input.class.php20
2 files changed, 38 insertions, 0 deletions
diff --git a/_test/tests/inc/input.test.php b/_test/tests/inc/input.test.php
index 59b5ea4b9..bedfcfdba 100644
--- a/_test/tests/inc/input.test.php
+++ b/_test/tests/inc/input.test.php
@@ -214,6 +214,24 @@ class input_test extends DokuWikiTest {
$this->assertEquals('bla',$test);
}
+ public function test_valid(){
+ $_REQUEST = $this->data;
+ $_POST = $this->data;
+ $_GET = $this->data;
+ $INPUT = new Input();
+
+ $valids = array(17, 'foo');
+ $this->assertSame(null, $INPUT->valid('nope', $valids));
+ $this->assertSame('bang', $INPUT->valid('nope', $valids, 'bang'));
+ $this->assertSame(17, $INPUT->valid('int', $valids));
+ $this->assertSame('foo', $INPUT->valid('string', $valids));
+
+ $valids = array(true);
+ $this->assertSame(true, $INPUT->valid('string', $valids));
+ $this->assertSame(true, $INPUT->valid('one', $valids));
+ $this->assertSame(null, $INPUT->valid('zero', $valids));
+ }
+
public function test_extract(){
$_REQUEST = $this->data;
$_POST = $this->data;
diff --git a/inc/Input.class.php b/inc/Input.class.php
index de8bf5b97..e7eef1c29 100644
--- a/inc/Input.class.php
+++ b/inc/Input.class.php
@@ -144,6 +144,26 @@ class Input {
}
/**
+ * Access a request parameter and make sure it is has a valid value
+ *
+ * Please note that comparisons to the valid values are not done typesafe (request vars
+ * are always strings) however the function will return the correct type from the $valids
+ * array when an match was found.
+ *
+ * @param string $name Parameter name
+ * @param array $valids Array of valid values
+ * @param mixed $default Default to return if parameter isn't set or not valid
+ * @return null|mixed
+ */
+ public function valid($name, $valids, $default = null) {
+ if(!isset($this->access[$name])) return $default;
+ if(is_array($this->access[$name])) return $default; // we don't allow arrays
+ $found = array_search($this->access[$name], $valids);
+ if($found !== false) return $valids[$found]; // return the valid value for type safety
+ return $default;
+ }
+
+ /**
* Access a request parameter as bool
*
* Note: $nonempty is here for interface consistency and makes not much sense for booleans