summaryrefslogtreecommitdiff
path: root/modules/field
diff options
context:
space:
mode:
Diffstat (limited to 'modules/field')
-rw-r--r--modules/field/field.api.php9
-rw-r--r--modules/field/modules/number/number.module21
2 files changed, 24 insertions, 6 deletions
diff --git a/modules/field/field.api.php b/modules/field/field.api.php
index ac85ebf67..ba2ca1d13 100644
--- a/modules/field/field.api.php
+++ b/modules/field/field.api.php
@@ -397,6 +397,15 @@ function hook_field_validate($obj_type, $object, $field, $instance, $langcode, &
* $object->{$field['field_name']}[$langcode], or an empty array if unset.
*/
function hook_field_presave($obj_type, $object, $field, $instance, $langcode, &$items) {
+ if ($field['type'] == 'number_decimal') {
+ // Let PHP round the value to ensure consistent behavior across storage
+ // backends.
+ foreach ($items as $delta => $item) {
+ if (isset($item['value'])) {
+ $items[$delta]['value'] = round($item['value'], $field['settings']['scale']);
+ }
+ }
+ }
}
/**
diff --git a/modules/field/modules/number/number.module b/modules/field/modules/number/number.module
index cdc4cc6df..6b00fadfa 100644
--- a/modules/field/modules/number/number.module
+++ b/modules/field/modules/number/number.module
@@ -192,6 +192,21 @@ function number_field_validate($obj_type, $object, $field, $instance, $langcode,
}
/**
+ * Implements hook_field_presave().
+ */
+function number_field_presave($obj_type, $object, $field, $instance, $langcode, &$items) {
+ if ($field['type'] == 'number_decimal') {
+ // Let PHP round the value to ensure consistent behavior across storage
+ // backends.
+ foreach ($items as $delta => $item) {
+ if (isset($item['value'])) {
+ $items[$delta]['value'] = round($item['value'], $field['settings']['scale']);
+ }
+ }
+ }
+}
+
+/**
* Implement hook_content_is_empty().
*/
function number_field_is_empty($item, $field) {
@@ -349,12 +364,6 @@ function number_field_widget_validate($element, &$form_state) {
if ($type == 'decimal' || $type == 'float') {
$value = strtr($value, $field['settings']['decimal_separator'], '.');
}
- // Let PHP round the value to ensure consistent behavior across storage
- // backends.
- // @todo This should be done at field level.
- if ($type == 'decimal') {
- $value = round($value, $field['settings']['scale']);
- }
form_set_value($element, $value, $form_state);
}
}