mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-08 18:51:12 +02:00
API Refactor ClassName into DBClassName API Update PolymorphicForeignKey to use new CompositeDBField and DBClassName CompositeDBField is now an interface to nested fields on an underlying dataobject, allowing field manipulation to be performed at the field and dataobject level without having to synchronise them manually.
73 lines
1.9 KiB
PHP
73 lines
1.9 KiB
PHP
<?php
|
|
/**
|
|
* Represents a decimal field containing a currency amount.
|
|
* The currency class only supports single currencies. For multi-currency support, use {@link Money}
|
|
*
|
|
*
|
|
* Example definition via {@link DataObject::$db}:
|
|
* <code>
|
|
* static $db = array(
|
|
* "Price" => "Currency",
|
|
* "Tax" => "Currency(5)",
|
|
* );
|
|
* </code>
|
|
*
|
|
* @package framework
|
|
* @subpackage model
|
|
*/
|
|
class Currency extends Decimal {
|
|
|
|
/**
|
|
* @config
|
|
* @var string
|
|
*/
|
|
private static $currency_symbol = '$';
|
|
|
|
public function __construct($name = null, $wholeSize = 9, $decimalSize = 2, $defaultValue = 0) {
|
|
parent::__construct($name, $wholeSize, $decimalSize, $defaultValue);
|
|
}
|
|
|
|
/**
|
|
* Returns the number as a currency, eg “$1,000.00”.
|
|
*/
|
|
public function Nice() {
|
|
// return "<span title=\"$this->value\">$" . number_format($this->value, 2) . '</span>';
|
|
$val = $this->config()->currency_symbol . number_format(abs($this->value), 2);
|
|
if($this->value < 0) return "($val)";
|
|
else return $val;
|
|
}
|
|
|
|
/**
|
|
* Returns the number as a whole-number currency, eg “$1,000”.
|
|
*/
|
|
public function Whole() {
|
|
$val = $this->config()->currency_symbol . number_format(abs($this->value), 0);
|
|
if($this->value < 0) return "($val)";
|
|
else return $val;
|
|
}
|
|
|
|
public function setValue($value, $record = null, $markChanged = true) {
|
|
$matches = null;
|
|
if(is_numeric($value)) {
|
|
$this->value = $value;
|
|
|
|
} else if(preg_match('/-?\$?[0-9,]+(.[0-9]+)?([Ee][0-9]+)?/', $value, $matches)) {
|
|
$this->value = str_replace(array('$',',',$this->config()->currency_symbol),'',$matches[0]);
|
|
|
|
} else {
|
|
$this->value = 0;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @deprecated 4.0 Use the "Currency.currency_symbol" config setting instead
|
|
* @param [type] $value [description]
|
|
*/
|
|
|
|
public static function setCurrencySymbol($value) {
|
|
Deprecation::notice('4.0', 'Use the "Currency.currency_symbol" config setting instead');
|
|
Currency::config()->currency_symbol = $value;
|
|
}
|
|
}
|
|
|