diff options
author | Dries Buytaert <dries@buytaert.net> | 2009-11-12 21:03:36 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2009-11-12 21:03:36 +0000 |
commit | 2218f528d531f59b9330899e34f4be588668622e (patch) | |
tree | 34b69ab115ef16a94572df6852cd5ec5f122ac4b | |
parent | c62f56c892919d00384458937b511f84d78e53c1 (diff) | |
download | brdo-2218f528d531f59b9330899e34f4be588668622e.tar.gz brdo-2218f528d531f59b9330899e34f4be588668622e.tar.bz2 |
- Patch #631048 by yched: number rounding should not be done by widgets.
-rw-r--r-- | modules/field/field.api.php | 9 | ||||
-rw-r--r-- | modules/field/modules/number/number.module | 21 |
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); } } |