You are here

function clientside_validation_field_validation_regular in Clientside Validation 7

2 calls to clientside_validation_field_validation_regular()
clientside_validation_field_validation_after_build_recurse in clientside_validation_field_validation/clientside_validation_field_validation.module
clientside_validation_field_validation_clientside_validation_form_alter in clientside_validation_field_validation/clientside_validation_field_validation.module
Implements hook_clientside_validation_form_alter().

File

clientside_validation_field_validation/clientside_validation_field_validation.module, line 136
Add clientside validation support for Field Validation

Code

function clientside_validation_field_validation_regular($form_id, $element, $rule, &$js_rules) {
  if (!empty($rule['disabled'])) {
    return;
  }
  if (isset($rule['col']) && $rule['col'] !== '') {
    $parent_last = end($element['#parents']);
    reset($element['#parents']);
    if ($element['#type'] !== 'select' && $parent_last !== FALSE && $parent_last !== $rule['col']) {
      return;
    }
    elseif ($element['#type'] == 'select' && isset($element['#value_key']) && $element['#value_key'] !== $rule['col']) {
      return;
    }
  }
  $el_name = $element['#name'];
  if (isset($element['#multiple']) && $element['#multiple']) {
    $el_name .= '[]';
  }
  $el_title = $el_name;
  if (isset($element['#title'])) {
    $el_title = $element['#title'];
  }
  switch ($rule['validator']) {
    case 'regex':
    case 'field_validation_regex_validator':
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : t('Invalid value for !name', array(
        '!name' => variable_get('clientside_validation_prefix', '') . $el_title . variable_get('clientside_validation_suffix', ''),
      ));

      // Field Validation 1.x and 2.x
      $data = isset($rule['data']) ? $rule['data'] : $rule['settings']['data'];
      _clientside_validation_set_regex($el_name, $el_title, $js_rules, $data, $message);
      break;
    case 'min_length':
      $message = isset($rule['error_message']) ? $rule['error_message'] : t('!name field has a minimum length of !minl characters.', array(
        '!name' => variable_get('clientside_validation_prefix', '') . $el_title . variable_get('clientside_validation_suffix', ''),
        '!minl' => $rule['data'],
      ));
      _clientside_validation_set_minmaxlength($el_name, $el_title, $rule['data'], '', $js_rules, $message);
      break;
    case 'max_length':
      $message = isset($rule['error_message']) ? $rule['error_message'] : t('!name field has a maximum length of !maxl characters.', array(
        '!name' => variable_get('clientside_validation_prefix', '') . $el_title . variable_get('clientside_validation_suffix', ''),
        '!maxl' => $rule['data'],
      ));
      _clientside_validation_set_minmaxlength($el_name, $el_title, '', $rule['data'], $js_rules, $message);
      break;

    // Field Validation 2.x
    case 'field_validation_length_validator':
      $message = '';
      $rule['settings']['min'] = isset($rule['settings']['min']) ? $rule['settings']['min'] : '';
      $rule['settings']['max'] = isset($rule['settings']['max']) ? $rule['settings']['max'] : '';
      if (isset($rule['error_message'])) {
        $message = $rule['error_message'];
      }
      else {
        if (!empty($rule['settings']['min'])) {
          $message = t('!name field has a minimum length of !minl characters.', array(
            '!name' => variable_get('clientside_validation_prefix', '') . $el_title . variable_get('clientside_validation_suffix', ''),
            '!minl' => $rule['settings']['min'],
          ));
        }
        if (!empty($rule['settings']['max'])) {
          $message = empty($message) ? t('!name field has a maximum length of !maxl characters.', array(
            '!name' => variable_get('clientside_validation_prefix', '') . $el_title . variable_get('clientside_validation_suffix', ''),
            '!maxl' => $rule['settings']['max'],
          )) : $message . ' ' . t('and a maximum length of !maxl characters', array(
            '!maxl' => $rule['settings']['maxl'],
          ));
        }
      }
      _clientside_validation_set_minmaxlength($el_name, $el_title, $rule['settings']['min'], $rule['settings']['max'], $js_rules, $message);
      break;
    case 'min_words':
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';
      _clientside_validation_set_minmax_words($el_name, $el_title, $rule['data'], '', $js_rules, $message);
      break;
    case 'max_words':
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';
      _clientside_validation_set_minmax_words($el_name, $el_title, '', $rule['data'], $js_rules, $message);
      break;

    // Field Validation 2.x
    case 'field_validation_words_validator':
      $message = '';
      $rule['settings']['min'] = isset($rule['settings']['min']) ? $rule['settings']['min'] : '';
      $rule['settings']['max'] = isset($rule['settings']['max']) ? $rule['settings']['max'] : '';
      if (isset($rule['error_message'])) {
        $message = $rule['error_message'];
      }
      else {
        if (!empty($rule['settings']['min'])) {
          $message = t('!name field has a minimum length of !minl words.', array(
            '!name' => variable_get('clientside_validation_prefix', '') . $el_title . variable_get('clientside_validation_suffix', ''),
            '!minl' => $rule['settings']['min'],
          ));
        }
        if (!empty($rule['settings']['max'])) {
          $message = empty($message) ? t('!name field has a maximum length of !maxl words.', array(
            '!name' => variable_get('clientside_validation_prefix', '') . $el_title . variable_get('clientside_validation_suffix', ''),
            '!maxl' => $rule['settings']['max'],
          )) : $message . ' ' . t('and a maximum length of !maxl words', array(
            '!maxl' => $rule['settings']['maxl'],
          ));
        }
      }
      _clientside_validation_set_minmax_words($el_name, $el_title, $rule['settings']['min'], $rule['settings']['max'], $js_rules, $message);
      break;
    case 'plain_text':
    case 'field_validation_plain_text_validator':
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';

      // Field Validation 1.x and 2.x
      $data = isset($rule['data']) ? $rule['data'] : '';
      _clientside_validation_set_plain_text($el_name, $el_title, $data, $js_rules, $message);
      break;
    case 'must_be_empty':
    case 'field_validation_must_be_empty_validator':
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';
      _clientside_validation_set_specific_value($el_name, $el_title, '', $js_rules, $message);
      break;
    case 'blacklist':
    case 'field_validation_blacklist_validator':
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';

      // Field Validation 1.x
      if (isset($rule['data'])) {
        $blacklist = explode(',', $rule['data']);
      }
      else {
        $blacklist = explode(',', $rule['settings']['data']);
      }
      $blacklist = array_map('trim', $blacklist);
      _clientside_validation_set_blacklist($el_name, $el_title, $blacklist, $js_rules, $message);
      break;
    case 'numeric':
    case 'field_validation_numeric2_validator':
      $range = array(
        'min' => NULL,
        'max' => NULL,
      );
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';

      // Field Validation 1.x
      if (isset($rule['data'])) {
        $data = $rule['data'];
        if (strpos($data, '|') !== FALSE) {
          list($min, $max) = explode('|', $data);
          if ($min != '' && is_numeric($min)) {
            $range['min'] = (int) $min;
          }
          if ($max != '' && is_numeric($max)) {
            $range['max'] = (int) $max;
          }
        }
        else {
          if ($data != '' && is_numeric($data)) {
            $range['min'] = (int) $data;
          }
        }
      }
      else {
        $range['min'] = isset($rule['settings']['min']) ? $rule['settings']['min'] : '';
        $range['max'] = isset($rule['settings']['max']) ? $rule['settings']['max'] : '';
      }
      if (!empty($range['min']) || !empty($range['max'])) {
        _clientside_validation_set_minmax($el_name, $el_title, $range['min'], $range['max'], $js_rules, $message);
      }
      else {
        _clientside_validation_set_number_decimal($el_name, $el_title, '.', $js_rules, $message);
      }
      break;
    case 'specific_value':
    case 'field_validation_specific_value_validator':

      // Field Validation 1.x and 2.x
      $value = isset($rule['data']) ? explode(',', $rule['data']) : explode(',', $rule['settings']['data']);
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';
      _clientside_validation_set_specific_value($el_name, $el_title, $value, $js_rules, $message);
      break;
    case 'select_min':
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';
      _clientside_validation_set_minmaxlength_select($el_name, $el_title, $rule['data'], '', $js_rules, $message);
      break;
    case 'select_max':
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';
      _clientside_validation_set_minmaxlength_select($el_name, $el_title, '', $rule['data'], $js_rules, $message);
      break;
    case 'select_exact':
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : '';
      _clientside_validation_set_minmaxlength_select($el_name, $el_title, $rule['data'], $rule['data'], $js_rules, $message);
      break;
    case 'field_validation_number_of_selections_validator':
      $message = '';
      $rule['settings']['min'] = isset($rule['settings']['min']) ? $rule['settings']['min'] : '';
      $rule['settings']['max'] = isset($rule['settings']['max']) ? $rule['settings']['max'] : '';
      if (isset($rule['error_message'])) {
        $message = $rule['error_message'];
      }
      else {
        if (!empty($rule['settings']['min'])) {
          $message = t('You must select a minimum of !minl items for !name.', array(
            '!name' => _clientside_validation_set_title($el_title),
            '!minl' => $rule['settings']['min'],
          ));
        }
        if (!empty($rule['settings']['max'])) {
          $message = empty($message) ? t('You can\'t select more than !maxl items for !name.', array(
            '!name' => _clientside_validation_set_title($el_title),
            '!maxl' => $rule['settings']['max'],
          )) : $message . ' ' . t('and a maximum of !maxl', array(
            '!maxl' => $rule['settings']['maxl'],
          ));
        }
      }
      _clientside_validation_set_minmaxlength_select($el_name, $el_title, $rule['settings']['min'], $rule['settings']['max'], $js_rules, $message);
      break;
    case 'field_validation_email_validator':
      $message = isset($rule['error_message']) ? $rule['error_message'] : t('!name is not a valid email address', array(
        '!name' => _clientside_validation_set_title($el_title),
      ));
      _clientside_validation_set_email($el_name, $el_title, $js_rules, $message);
      break;
    case 'field_validation_url_validator':
      $message = isset($rule['error_message']) ? $rule['error_message'] : t('!name is not a valid url', array(
        '!name' => _clientside_validation_set_title($el_title),
      ));
      _clientside_validation_set_url($el_name, $el_title, $js_rules, $message);
      break;
    default:
      $message = isset($rule['error_message']) && !empty($rule['error_message']) ? $rule['error_message'] : t('Invalid value for !name', array(
        '!name' => _clientside_validation_set_title($el_title),
      ));
      $context = array(
        'type' => 'field_validation',
        'rule' => $rule,
        'message' => $message,
      );
      if (isset($element['#entity_type'])) {

        // Add an ajax based validation by default - but allow modules to alter
        // it using hook_clientside_validation_rule_alter().
        list($entity_id, $revision_id, $bundle) = entity_extract_ids($element['#entity_type'], $element['#entity']);
        $js_rules[$el_name]['fieldValidationAjax'][$rule['name']] = array(
          'language' => $element['#language'],
          'delta' => $element['#delta'],
          'entity_id' => $entity_id,
          'revision_id' => $revision_id,
        );
        $variables = array(
          'message' => $message,
          'error_type' => 'fieldValidationAjax',
          'element_name' => $el_name,
        );
        $js_rules[$el_name]['messages']['fieldValidationAjax'] = theme('clientside_error', $variables);
      }
      drupal_alter('clientside_validation_rule', $js_rules, $element, $context);
      break;
  }
}