-
Notifications
You must be signed in to change notification settings - Fork 821
/
CurrencyField.php
executable file
·134 lines (118 loc) · 3.74 KB
/
CurrencyField.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
/**
* Currency field.
* @package forms
* @subpackage fields-formattedinput
*/
class CurrencyField extends TextField {
/**
* allows the value to be set ( not including $ signs and number format...)
*/
function setValue($val) {
$this->value = '$' . number_format(ereg_replace('[^0-9.]',"",$val), 2);
}
/**
* Overwrite the datavalue before saving to the db ;-)
*/
function dataValue() {
if($this->value){
return preg_replace('/[^0-9.]/',"", $this->value);
}else{
return 0.00;
}
}
/**
* Create a new class for this field
*/
function performReadonlyTransformation() {
$field = new CurrencyField_Readonly($this->name, $this->title, $this->value);
$field -> addExtraClass($this->extraClass());
return $field;
/*
$this is-a object and cant be passed as_a string of the first parameter of formfield constructor.
return new CurrencyField_Readonly($this);
*/
}
/**
* @see http://regexlib.com/REDetails.aspx?regexp_id=126
*/
function jsValidation() {
$formID = $this->form->FormName();
$error = _t('CurrencyField.VALIDATIONJS', 'Please enter a valid currency.');
$jsFunc =<<<JS
Behaviour.register({
"#$formID": {
validateCurrency: function(fieldName) {
var el = _CURRENT_FORM.elements[fieldName];
if(!el || !el.value) return true;
var value = \$F(el);
if(value.length > 0 && !value.match(/^\s*\\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?\s*\$/)) {
validationError(el,"$error","validation",false);
return false;
}
return true;
}
}
});
JS;
Requirements::customScript($jsFunc, 'func_validateCurrency_' .$formID);
return <<<JS
if(\$('$formID')) \$('$formID').validateCurrency('$this->name');
JS;
}
function validate($validator) {
if(!empty ($this->value) && !preg_match('/^\s*\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?\s*$/', $this->value)) {
$validator->validationError($this->name, _t('Form.VALIDCURRENCY', "Please enter a valid currency."), "validation", false);
return false;
}
return true;
}
}
/**
* Readonly version of a {@link CurrencyField}.
* @package forms
* @subpackage fields-formattedinput
*/
class CurrencyField_Readonly extends ReadonlyField{
/**
* overloaded to display the correctly formated value for this datatype
*/
function Field() {
if($this->value){
$val = $this->dontEscape ? ($this->reserveNL?Convert::raw2xml($this->value):$this->value) : Convert::raw2xml($this->value);
$val = _t('CurrencyField.CURRENCYSYMBOL', '$') . number_format(preg_replace('/[^0-9.]/',"",$val), 2);
}else {
$val = '<i>'._t('CurrencyField.CURRENCYSYMBOL', '$').'0.00</i>';
}
$valforInput = $this->value ? Convert::raw2att($val) : "";
return "<span class=\"readonly ".$this->extraClass()."\" id=\"" . $this->id() . "\">$val</span><input type=\"hidden\" name=\"".$this->name."\" value=\"".$valforInput."\" />";
}
/**
* This already is a readonly field.
*/
function performReadonlyTransformation() {
return clone $this;
}
}
/**
* Readonly version of a {@link CurrencyField}.
* @package forms
* @subpackage fields-formattedinput
*/
class CurrencyField_Disabled extends CurrencyField{
protected $disabled = true;
/**
* overloaded to display the correctly formated value for this datatype
*/
function Field() {
if($this->value){
$val = $this->dontEscape ? ($this->reserveNL?Convert::raw2xml($this->value):$this->value) : Convert::raw2xml($this->value);
$val = _t('CurrencyField.CURRENCYSYMBOL', '$') . number_format(preg_replace('/[^0-9.]/',"",$val), 2);
}else {
$val = '<i>'._t('CurrencyField.CURRENCYSYMBOL', '$').'0.00</i>';
}
$valforInput = $this->value ? Convert::raw2att($val) : "";
return "<input class=\"text\" type=\"text\" disabled=\"disabled\" name=\"".$this->name."\" value=\"".$valforInput."\" />";
}
}
?>