From 6f9177ef43ee469f9f3b33ef5ff5d9b9a80d10cc Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Mon, 18 Jan 2010 00:56:29 +0000 Subject: [PATCH] MINOR fixed validation on CurrencyField. Will no longer parse non-numeric characters out of input. Added test coverage. git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@97057 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- forms/CurrencyField.php | 10 ++++++---- tests/forms/CurrencyFieldTest.php | 25 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 tests/forms/CurrencyFieldTest.php diff --git a/forms/CurrencyField.php b/forms/CurrencyField.php index 90d9ad328..d921168a1 100755 --- a/forms/CurrencyField.php +++ b/forms/CurrencyField.php @@ -9,17 +9,19 @@ */ class CurrencyField extends TextField { /** - * allows the value to be set ( not including $ signs and number format...) + * allows the value to be set. removes the first character + * if it is not a number (probably a currency symbol) */ function setValue($val) { - $this->value = '$' . number_format(ereg_replace('[^0-9.]',"",$val), 2); + $this->value = preg_replace('/^[^\d]/', '', $val); } /** * Overwrite the datavalue before saving to the db ;-) + * return 0.00 if no value, or value is non-numeric */ function dataValue() { - if($this->value){ - return preg_replace('/[^0-9.]/',"", $this->value); + if($this->value && is_numeric($this->value)){ + return $this->value; }else{ return 0.00; } diff --git a/tests/forms/CurrencyFieldTest.php b/tests/forms/CurrencyFieldTest.php new file mode 100644 index 000000000..39bc668e3 --- /dev/null +++ b/tests/forms/CurrencyFieldTest.php @@ -0,0 +1,25 @@ +setValue('$10.23'); + $this->assertTrue($field->validate($vr)); + + $field->setValue('$1a0.23'); + $this->assertFalse($field->validate($vr)); + } + + function testDataValues() { + $field = new CurrencyField('cf'); + + $field->setValue('$10.34'); + $this->assertEquals($field->dataValue(), '10.34'); + + $field->setValue('$1s0.34'); + $this->assertEquals($field->dataValue(), '0.00'); + } +} +?> \ No newline at end of file