--- number.module 2007-01-25 21:16:01.000000000 +0100 +++ number.module.decimal_3 2007-01-26 11:26:00.000000000 +0100 @@ -11,8 +11,11 @@ */ function number_field_info() { return array( - 'number_integer' => array('label' => 'Integer'), - 'number_decimal' => array('label' => 'Decimal'), + 'number_integer' => array('label' => 'Integer'), + 'number_float' => array('label' => 'Float'), + 'number_double' => array('label' => 'Double'), + 'number_decimal' => array('label' => 'old Decimal (actually Float)'), + 'number_decimal_10_2' => array('label' => 'Decimal(10,2)'), ); } @@ -52,6 +55,24 @@ function number_field_settings($op, $fie '#default_value' => isset($field['suffix']) ? $field['suffix'] : '', '#description' => t('Define a string that should suffixed to the value, like m², m/s², kb/s. Leave blank for none. Separate singular and plural values with a pipe (pound|pounds). '), ); +// $form['advanced_datatype_settings'] = array( +// '#type' => 'fieldset', +// '#title' => 'Advanced datatype settings', +// '#collapsible' => TRUE, +// '#collapsed' => TRUE, +// ); +// $form['advanced_datatype_settings']['db_length'] = array( +// '#type' => 'textfield', +// '#title' => 'Length', +// '#default_value' => isset($field['db_length']) ? $field['db_length'] : '', +// '#description' => 'Define the length "M,D" of the Numberic type. Depends on the selected number type [Integer(M), Float(M,D), Decimal(M,D)]. E.g. if you want to setup a monetary field, "10,2" is a good choice. This would allow you monetary values ranging from -99.999.999,99€ to 99.999.999,99€. See your database documentation for further information.', +// ); +// $form['advanced_datatype_settings']['db_unsigned'] = array( +// '#type' => 'checkbox', +// '#title' => 'Unsigned', +// '#default_value' => isset($field['db_unsigned']) ? $field['db_unsigned'] : '', +// '#description' => 'If selected, disallows negative values', +// ); $form['allowed_values'] = array( '#type' => 'textarea', '#title' => t('Allowed values list'), @@ -77,25 +98,81 @@ function number_field_settings($op, $fie case 'validate': if ($field['min'] && !is_numeric($field['min'])) { - form_set_error('rows', t('"Minimum" must be a number.')); + form_set_error('min', t('"Minimum" must be a number.')); } if ($field['max'] && !is_numeric($field['max'])) { - form_set_error('rows', t('"Maximum" must be a number.')); + form_set_error('max', t('"Maximum" must be a number.')); + } + // validate the db_length field + if ($field['db_length']) { + $length = explode(',', $field['db_length'], 2); + if ( ($length[0] && !is_numeric($length[0])) || ($length[1] && !is_numeric($length[1])) ) { + form_set_error('db_length', t('"Length" in "Advanced datatype settings" must be of the format "M,D", wheras M and D are numeric.')); + } } break; case 'save': - return array('prefix', 'suffix', 'append_position', 'min', 'max', 'allowed_values', 'allowed_values_php'); + return array('prefix', 'suffix', 'append_position', 'db_length', 'db_unsigned', 'min', 'max', 'allowed_values', 'allowed_values_php'); case 'database columns': if ($field['type'] == 'number_integer') { return array( - 'value' => array('type' => 'int', 'not null' => FALSE, 'default' => NULL, 'sortable' => TRUE), + 'value' => array( + 'type' => 'int', +// 'length' => $field['db_length'], +// 'unsigned' => $field['db_unsigned'], + 'not null' => FALSE, + 'default' => NULL, + 'sortable' => TRUE + ), + ); + } + if ($field['type'] == 'number_float') { + return array( + 'value' => array( + 'type' => 'float', +// 'length' => $field['db_length'], +// 'unsigned' => $field['db_unsigned'], + 'not null' => FALSE, + 'default' => NULL, + 'sortable' => TRUE + ), + ); + } + if ($field['type'] == 'number_double') { + return array( + 'value' => array( + 'type' => 'double', +// 'length' => $field['db_length'], +// 'unsigned' => $field['db_unsigned'], + 'not null' => FALSE, + 'default' => NULL, + 'sortable' => TRUE + ), ); } - if ($field['type'] == 'number_decimal') { +// if ($field['type'] == 'number_decimal') { +// return array( +// 'value' => array( +// 'type' => 'decimal', +// 'length' => $field['db_length'], +// 'unsigned' => $field['db_unsigned'], +// 'not null' => FALSE, +// 'default' => NULL, +// 'sortable' => TRUE +// ), +// ); +// } + if ($field['type'] == 'number_decimal_10_2') { return array( - 'value' => array('type' => 'float', 'not null' => FALSE, 'default' => NULL, 'sortable' => TRUE), + 'value' => array( + 'type' => 'decimal', + 'length' => '10,2', + 'not null' => FALSE, + 'default' => NULL, + 'sortable' => TRUE + ), ); } @@ -143,6 +220,9 @@ function number_field($op, &$node, $fiel if (count($allowed_values) && !array_key_exists($item['value'], $allowed_values)) { form_set_error($error_field, t('Illegal value for %name.', array('%name' => t($field['widget']['label'])))); } +// if ($field['db_unsigned'] && $item['value'] < 0) { +// form_set_error($error_field, t('Illegal value for %name. No negative values allowed.', array('%name' => t($field['widget']['label'])))); +// } } } } @@ -156,17 +236,17 @@ function number_field($op, &$node, $fiel function number_field_formatter_info() { return array( - 'default' => array('label' => '9999', 'field types' => array('number_integer', 'number_decimal')), - 'us_0' => array('label' => '9,999', 'field types' => array('number_integer', 'number_decimal')), - 'us_1' => array('label' => '9,999.9', 'field types' => array('number_decimal')), - 'us_2' => array('label' => '9,999.99', 'field types' => array('number_decimal')), - 'be_0' => array('label' => '9.999', 'field types' => array('number_integer', 'number_decimal')), - 'be_1' => array('label' => '9.999, 9', 'field types' => array('number_decimal')), - 'be_2' => array('label' => '9.999, 99', 'field types' => array('number_decimal')), - 'fr_0' => array('label' => '9 999', 'field types' => array('number_integer', 'number_decimal')), - 'fr_1' => array('label' => '9 999, 9', 'field types' => array('number_decimal')), - 'fr_2' => array('label' => '9 999, 99', 'field types' => array('number_decimal')), - 'unformatted' => array('label' => 'unformatted', 'field types' => array('number_integer', 'number_decimal')), + 'default' => array('label' => 'default', 'field types' => array('number_integer', 'number_float', 'number_double', 'number_decimal_10_2')), + 'us_0' => array('label' => '9,999', 'field types' => array('number_integer', 'number_float', 'number_double', 'number_decimal_10_2')), + 'us_1' => array('label' => '9,999.9', 'field types' => array( 'number_float', 'number_double', 'number_decimal_10_2')), + 'us_2' => array('label' => '9,999.99', 'field types' => array( 'number_float', 'number_double', 'number_decimal_10_2')), + 'be_0' => array('label' => '9.999', 'field types' => array('number_integer', 'number_float', 'number_double', 'number_decimal_10_2')), + 'be_1' => array('label' => '9.999, 9', 'field types' => array( 'number_float', 'number_double', 'number_decimal_10_2')), + 'be_2' => array('label' => '9.999, 99', 'field types' => array( 'number_float', 'number_double', 'number_decimal_10_2')), + 'fr_0' => array('label' => '9 999', 'field types' => array('number_integer', 'number_float', 'number_double', 'number_decimal_10_2')), + 'fr_1' => array('label' => '9 999, 9', 'field types' => array( 'number_float', 'number_double', 'number_decimal_10_2')), + 'fr_2' => array('label' => '9 999, 99', 'field types' => array( 'number_float', 'number_double', 'number_decimal_10_2')), + 'unformatted' => array('label' => 'unformatted', 'field types' => array('number_integer', 'number_float', 'number_double', 'number_decimal_10_2')), ); } @@ -220,7 +300,7 @@ function number_field_formatter($field, $value = number_format($item['value'], 2, ', ', ' '); break; default: - $value = number_format($item['value']); + $value = $item['value']; break; } $prefixes = explode('|', $field['prefix']); @@ -252,7 +332,7 @@ function number_widget_info() { return array( 'number' => array( 'label' => 'Text Field', - 'field types' => array('number_integer', 'number_decimal'), + 'field types' => array('number_integer', 'number_float', 'number_double', 'number_decimal_10_2'), ), ); } @@ -300,7 +380,7 @@ function number_widget($op, &$node, $fie '#default_value' => $data['value'], '#required' => ($delta == 0) ? $field['required'] : FALSE, '#size' => 20, - '#maxlength' => 11, + '#maxlength' => 17, '#attributes' => array('class' => 'number'), '#field_prefix' => $prefix, '#field_suffix' => $suffix, @@ -315,7 +395,7 @@ function number_widget($op, &$node, $fie '#default_value' => '', '#required' => ($delta == 0) ? $field['required'] : FALSE, '#size' => 20, - '#maxlength' => 11, + '#maxlength' => 17, '#attributes' => array('class' => 'number'), '#field_prefix' => $prefix, '#field_suffix' => $suffix, @@ -330,7 +410,7 @@ function number_widget($op, &$node, $fie '#required' => $field['required'], '#description' => $field['widget']['description'], '#size' => 20, - '#maxlength' => 11, + '#maxlength' => 17, '#attributes' => array('class' => 'number'), '#field_prefix' => $prefix, '#field_suffix' => $suffix, @@ -341,7 +421,7 @@ function number_widget($op, &$node, $fie case 'process form values': // Don't save empty fields. foreach ($items as $delta => $item) { - $items[$delta]['value'] = preg_replace('@[^0-9\.]@','',$items[$delta]['value']); + $items[$delta]['value'] = preg_replace('@[^-0-9\.]@','',$items[$delta]['value']); } if ($field['multiple']) { foreach ($items as $delta => $item) {