mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-06 01:31:22 +02:00
CHANGE Given that Config::inst is an implementation of the singleton pattern itself, I've removed the extra call to singleton(). A side effect of this is that it gets around a possibly nasty circular reference with the dependency injector (which relies on the config object); in future, this dependency structure should really be structured from the DI directly. MINOR Change singleton and strong_create to use dependency injector BUGFIX: Provide default constructor values for classes (fixes issues when used in 'singleton' scenario during dev/build in particular) MINOR Clear out injector state when resetting db schema during tests (a follow on from changing singleton() calls to use the injector underneath)
71 lines
1.8 KiB
PHP
71 lines
1.8 KiB
PHP
<?php
|
|
/**
|
|
* Represents a Decimal field.
|
|
* @package framework
|
|
* @subpackage model
|
|
*/
|
|
class Decimal extends DBField {
|
|
protected $wholeSize, $decimalSize, $defaultValue;
|
|
|
|
/**
|
|
* Create a new Decimal field.
|
|
*/
|
|
function __construct($name = null, $wholeSize = 9, $decimalSize = 2, $defaultValue = 0) {
|
|
$this->wholeSize = isset($wholeSize) ? $wholeSize : 9;
|
|
$this->decimalSize = isset($decimalSize) ? $decimalSize : 2;
|
|
$this->defaultValue = $defaultValue;
|
|
parent::__construct($name);
|
|
}
|
|
|
|
function Nice() {
|
|
return number_format($this->value,$this->decimalSize);
|
|
}
|
|
|
|
function Int() {
|
|
return floor( $this->value );
|
|
}
|
|
|
|
function requireField() {
|
|
$parts=Array('datatype'=>'decimal', 'precision'=>"$this->wholeSize,$this->decimalSize", 'default'=>(double)$this->defaultValue, 'arrayValue'=>$this->arrayValue);
|
|
$values=Array('type'=>'decimal', 'parts'=>$parts);
|
|
DB::requireField($this->tableName, $this->name, $values);
|
|
}
|
|
|
|
function saveInto($dataObject) {
|
|
$fieldName = $this->name;
|
|
if($fieldName) {
|
|
$dataObject->$fieldName = (float)preg_replace('/[^0-9.\-\+]/', '', $this->value);
|
|
} else {
|
|
user_error("DBField::saveInto() Called on a nameless '" . get_class($this) . "' object", E_USER_ERROR);
|
|
}
|
|
}
|
|
|
|
public function scaffoldFormField($title = null, $params = null) {
|
|
return new NumericField($this->name, $title);
|
|
}
|
|
|
|
public function nullValue() {
|
|
return "0.00";
|
|
}
|
|
|
|
/**
|
|
* Return an encoding of the given value suitable for inclusion in a SQL statement.
|
|
* If necessary, this should include quotes.
|
|
*/
|
|
function prepValueForDB($value) {
|
|
if($value === true) {
|
|
return 1;
|
|
} if(!$value || !is_numeric($value)) {
|
|
if(strpos($value, '[')===false)
|
|
return '0';
|
|
else
|
|
return Convert::raw2sql($value);
|
|
} else {
|
|
return Convert::raw2sql($value);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|