1.20.x number.module number_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element)

Implements hook_field_widget_form().

File

modules/field/modules/number/number.module, line 338
Defines numeric field types.

Code

function number_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
  $value = isset($items[$delta]['value']) ? $items[$delta]['value'] : '';

  $element += array(
    '#type' => 'number',
    '#default_value' => $value,
    '#max' => 1000000,
  );

  // Set the step for floating point and decimal numbers.
  switch ($field['type']) {
    case 'number_decimal':
      // Avoid small float as base in function pow() for better results
      // regarding floating point precision.
      $scale = (int) $field['settings']['scale'];
      $element['#step'] = 1 / pow(10, $scale);
      break;

    case 'number_float':
      $element['#step'] = 'any';
      break;
  }

  // Set minimum and maximum.
  if (is_numeric($instance['settings']['min'])) {
    $element['#min'] = $instance['settings']['min'];
  }
  if (is_numeric($instance['settings']['max'])) {
    $element['#max'] = $instance['settings']['max'];
  }

  // Add prefix and suffix.
  if (!empty($instance['settings']['prefix'])) {
    $prefixes = explode('|', $instance['settings']['prefix']);
    $element['#field_prefix'] = field_filter_xss(array_pop($prefixes));
  }
  if (!empty($instance['settings']['suffix'])) {
    $suffixes = explode('|', $instance['settings']['suffix']);
    $element['#field_suffix'] = field_filter_xss(array_pop($suffixes));
  }

  return array('value' => $element);
}