You are here

function clientside_validation_webform_add_webform_validation in Clientside Validation 6

Same name and namespace in other branches
  1. 7 clientside_validation_webform/clientside_validation_webform.module \clientside_validation_webform_add_webform_validation()

Support webform_validation

1 call to clientside_validation_webform_add_webform_validation()
clientside_validation_webform_clientside_validation_webform_alter in clientside_validation_webform/clientside_validation_webform.module
@file Adds clientside validation support for the webform module

File

clientside_validation_webform/clientside_validation_webform.module, line 109
Adds clientside validation support for the webform module

Code

function clientside_validation_webform_add_webform_validation($form_id, &$form, &$form_state, &$js_rules) {
  if ($webform_validation_rules = _clientside_validation_webform_webform_validation($form_state['values']['details']['nid'], $form)) {
    $checkboxrules = array();
    foreach ($webform_validation_rules as $webform_validation_rule) {
      switch ($webform_validation_rule['validator']) {
        case 'min_length':
          foreach ($webform_validation_rule['components'] as $component) {
            $message = t('!title field has a minimum length of !minl characters.', array(
              '!title' => variable_get('clientside_validation_prefix', '') . $component['element_title'] . variable_get('clientside_validation_suffix', ''),
              '!minl' => $webform_validation_rule['data'],
            ));
            _clientside_validation_set_minmaxlength($component['element_name'], $component['element_title'], $webform_validation_rule['data'], '', $js_rules, $message);
          }
          break;
        case 'max_length':
          foreach ($webform_validation_rule['components'] as $component) {
            $message = t('!title field has a maximum length of !maxl characters.', array(
              '!title' => variable_get('clientside_validation_prefix', '') . $component['element_title'] . variable_get('clientside_validation_suffix', ''),
              '!maxl' => $webform_validation_rule['data'],
            ));
            _clientside_validation_set_minmaxlength($component['element_name'], $component['element_title'], '', $webform_validation_rule['data'], $js_rules, $message);
          }
          break;
        case 'min_words':
          foreach ($webform_validation_rule['components'] as $component) {
            $message = t('!name field must have at least !min words.', array(
              '!name' => variable_get('clientside_validation_prefix', '') . $component['element_title'] . variable_get('clientside_validation_suffix', ''),
              '!min' => $webform_validation_rule['data'],
            ));
            _clientside_validation_set_minmax_words($component['element_name'], $component['element_title'], $webform_validation_rule['data'], "", $js_rules);
          }
          break;
        case 'max_words':
          foreach ($webform_validation_rule['components'] as $component) {
            $message = t('!name field can not have more than !max words.', array(
              '!name' => variable_get('clientside_validation_prefix', '') . $component['element_title'] . variable_get('clientside_validation_suffix', ''),
              '!max' => $webform_validation_rule['data'],
            ));
            _clientside_validation_set_minmax_words($component['element_name'], $component['element_title'], "", $webform_validation_rule['data'], $js_rules);
          }
          break;
        case 'numeric':
          $data = $webform_validation_rule['data'];
          $range = array(
            'min' => NULL,
            'max' => NULL,
          );
          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;
            }
          }
          foreach ($webform_validation_rule['components'] as $component) {
            if (!empty($range['min']) || !empty($range['max'])) {
              _clientside_validation_set_minmax($component['element_name'], $component['element_title'], $range['min'], $range['max'], $js_rules);
            }
            else {
              _clientside_validation_set_number($component['element_name'], $component['element_title'], $js_rules);
            }
          }
          break;
        case 'oneofseveral':
        case 'oneoftwo':
          foreach ($webform_validation_rule['components'] as $component) {
            $names[] = $component['element_name'];
            $titles[] = variable_get('clientside_validation_prefix', '') . $component['element_title'] . variable_get('clientside_validation_suffix', '');
          }
          _clientside_validation_set_require_oneof($names, $titles, "", $js_rules);
          break;
        case 'plain_text':
          foreach ($webform_validation_rule['components'] as $component) {
            _clientside_validation_set_plain_text($component['element_name'], $component['element_title'], "", $js_rules);
          }
          break;
        case 'blacklist':
          $message = isset($webform_validation_rule['error_message']) && !empty($webform_validation_rule['error_message']) ? $webform_validation_rule['error_message'] : '';
          $blacklist = explode(',', $webform_validation_rule['data']);
          $blacklist = array_map('trim', $blacklist);
          foreach ($webform_validation_rule['components'] as $component) {
            _clientside_validation_set_blacklist($component['element_name'], $component['element_title'], $blacklist, $js_rules, $message);
          }
          break;
        case 'equal':
          $others = $webform_validation_rule['components'];
          $firstone = array_shift($others);
          $firstone['form_key'] = implode('][', webform_component_parent_keys(node_load($firstone['nid']), $firstone));
          foreach ($others as $component) {
            _clientside_validation_set_equal($component['element_name'], $component['element_title'], $firstone, $js_rules);
          }
          break;
        case 'unique':
          $all = $webform_validation_rule['components'];
          while (count($all) > 1) {
            $firstone = array_shift($all);
            foreach ($all as $component) {
              $message = isset($webform_validation_rule['error_message']) && !empty($webform_validation_rule['error_message']) ? $webform_validation_rule['error_message'] : '';
              _clientside_validation_set_not_equal($component['element_name'], $component['element_title'], $firstone, $js_rules, $message, TRUE);
            }
          }
          break;
        case 'specific_value':
          foreach ($webform_validation_rule['components'] as $component) {
            $value = explode(',', $webform_validation_rule['data']);
            $message = isset($webform_validation_rule['error_message']) && !empty($webform_validation_rule['error_message']) ? $webform_validation_rule['error_message'] : '';
            _clientside_validation_set_specific_value($component['element_name'], $component['element_title'], $value, $js_rules, $message);
          }
          break;
        case 'select_min':
          foreach ($webform_validation_rule['components'] as $component) {
            $parent_keys = webform_component_parent_keys($form['#node'], $component);
            $form_element = $form['submitted'];
            foreach ($parent_keys as $parent_key) {
              $form_element = $form_element[$parent_key];
            }
            if (in_array($form_element['#type'], array(
              'checkbox',
              'checkboxes',
            ))) {
              $checkboxrules[$component['element_name']]['title'] = $component['element_title'];
              $checkboxrules[$component['element_name']]['id'] = '#' . $form_element['#id'] . '-wrapper';
              $checkboxrules[$component['element_name']]['min'] = $webform_validation_rule['data'];
            }
            else {
              _clientside_validation_set_minmaxlength($component['element_name'], $component['element_title'], $webform_validation_rule['data'], '', $js_rules);
            }
          }
          break;
        case 'select_max':
          foreach ($webform_validation_rule['components'] as $component) {
            $parent_keys = webform_component_parent_keys($form['#node'], $component);
            $form_element = $form['submitted'];
            foreach ($parent_keys as $parent_key) {
              $form_element = $form_element[$parent_key];
            }
            if (in_array($form_element['#type'], array(
              'checkbox',
              'checkboxes',
            ))) {
              $checkboxrules[$component['element_name']]['title'] = $component['element_title'];
              $checkboxrules[$component['element_name']]['id'] = '#' . $form_element['#id'] . '-wrapper';
              $checkboxrules[$component['element_name']]['max'] = $webform_validation_rule['data'];
            }
            else {
              _clientside_validation_set_minmaxlength($component['element_name'], $component['element_title'], '', $webform_validation_rule['data'], $js_rules);
            }
          }
          break;
        case 'select_exact':
          foreach ($webform_validation_rule['components'] as $component) {
            _clientside_validation_set_minmaxlength($component['element_name'], $component['element_title'], $webform_validation_rule['data'], $webform_validation_rule['data'], $js_rules);
          }
          break;
        case 'validEAN':
          foreach ($webform_validation_rule['components'] as $component) {
            $message = isset($webform_validation_rule['error_message']) && !empty($webform_validation_rule['error_message']) ? $webform_validation_rule['error_message'] : 'Not a valid EAN number.';
            _clientside_validation_set_ean($component['element_name'], $component['element_title'], $js_rules, $message);
          }
          break;
        case 'regex':
          foreach ($webform_validation_rule['components'] as $component) {
            $message = $webform_validation_rule['error_message'];
            $expression = $webform_validation_rule['data'];
            _clientside_validation_set_regex($component['element_name'], $component['element_title'], $js_rules, $expression, $message);
          }
          break;
        case 'must_be_empty':
          foreach ($webform_validation_rule['components'] as $component) {
            $message = t('!name field must be empty.', array(
              '!name' => variable_get('clientside_validation_prefix', '') . $component['element_title'] . variable_get('clientside_validation_suffix', ''),
            ));
            _clientside_validation_set_specific_value($component['element_name'], $component['element_title'], array(
              "",
            ), $js_rules, $message);
          }
          break;
        default:
          foreach ($webform_validation_rule['components'] as $component) {
            $message = isset($webform_validation_rule['error_message']) && !empty($webform_validation_rule['error_message']) ? $webform_validation_rule['error_message'] : t('Invalid value for !title', array(
              '!title' => variable_get('clientside_validation_prefix', '') . $component['element_title'] . variable_get('clientside_validation_suffix', ''),
            ));
            $context = array(
              'type' => 'webform',
              'rule' => $webform_validation_rule,
              'message' => $message,
            );
            drupal_alter('clientside_validation_rule', $js_rules, $component, $context);
          }
          break;
      }
    }
    if (!empty($checkboxrules)) {
      foreach ($checkboxrules as $name => $args) {
        if (!isset($args['min'])) {
          $args['min'] = 1;
        }
        if (!isset($args['max'])) {
          $args['max'] = 99;
        }
        _clientside_validation_set_checkboxgroup_minmax($name, $args['title'], $args['id'], $js_rules, $args['min'], $args['max']);
      }
    }
  }
}