You are here

function double_field_allowed_values_setting_validate in Double Field 7.2

Element validate callback; check that the entered values are valid.

1 string reference to 'double_field_allowed_values_setting_validate'
double_field_field_widget_settings_form in ./double_field.module
Implements hook_field_widget_settings_form().

File

./double_field.module, line 606
Defines "Double field" field type.

Code

function double_field_allowed_values_setting_validate($element, &$form_state) {
  $settings = $form_state['values']['field']['settings'][$element['#subfield']];
  $type = $settings['type'];
  $values = list_extract_allowed_values($element['#value'], 'list_text', FALSE);
  foreach ($values as $key => $value) {
    if ($type == 'varchar' && drupal_strlen($key) > $settings['maxlength']) {
      form_error($element, t('Allowed values list: each key must be a string at most !maxlength characters long.', array(
        '!maxlength' => $settings['maxlength'],
      )));
      break;
    }
    elseif ($type == 'int' && !preg_match('/^-?\\d+$/', $key)) {
      form_error($element, t('Allowed values list: keys must be integers.'));
      break;
    }
    elseif ($type == 'int' && !double_field_validate_integer_range($key, $settings['size'])) {
      form_error($element, t('Allowed values list: keys out of range.'));
      break;
    }
    elseif (($type == 'float' || $type == 'decimal') && !is_numeric($key)) {
      form_error($element, t('Allowed values list: each key must be a valid integer or float.'));
      break;
    }
    elseif ($type == 'decimal' && !double_field_validate_decimal_range($key, $settings['precision'], $settings['scale'])) {
      form_error($element, t('Allowed values list: keys out of range.'));
      break;
    }
  }
  if (!is_array($values)) {
    form_error($element, t('Allowed values list: invalid input.'));
  }
  form_set_value($element, $values, $form_state);
}