You are here

function clientside_validation_webform_after_build_recurse in Clientside Validation 7

Same name and namespace in other branches
  1. 6 clientside_validation_webform/clientside_validation_webform.module \clientside_validation_webform_after_build_recurse()
1 call to clientside_validation_webform_after_build_recurse()
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 20
Adds clientside validation support for the webform module

Code

function clientside_validation_webform_after_build_recurse($form_id, &$form, &$form_state, &$js_rules) {
  if ($children = array_values(element_children($form))) {
    foreach ($children as $index => $item) {
      $element = $form[$item];
      $skipvalidation = FALSE;
      if (isset($element['#webform_component']['extra']['exclude_cv']) && $element['#webform_component']['extra']['exclude_cv'] == "1") {
        $skipvalidation = TRUE;
      }
      if (isset($element['#title']) && !$skipvalidation) {
        if (isset($element['#type'])) {
          if (isset($element['#webform_component']) && $element['#webform_component']['type'] == 'time' && isset($element['hour']['#name'])) {
            $message = t('Hour in !name field is required.', array(
              '!name' => variable_get('clientside_validation_prefix', '') . $element['#title'] . variable_get('clientside_validation_suffix', ''),
            ));
            _clientside_validation_set_required($element['hour']['#name'], $element['#title'], isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $message);
            $message = t('Minute in !name field is required.', array(
              '!name' => variable_get('clientside_validation_prefix', '') . $element['#title'] . variable_get('clientside_validation_suffix', ''),
            ));
            _clientside_validation_set_required($element['minute']['#name'], $element['#title'], isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $message);
          }
          elseif (isset($element['#webform_component']) && $element['#webform_component']['type'] == 'date') {
            $message = t('Month in !name field is required.', array(
              '!name' => variable_get('clientside_validation_prefix', '') . $element['#title'] . variable_get('clientside_validation_suffix', ''),
            ));
            _clientside_validation_set_required($element['#name'] . '[month]', $element['#title'], isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $message);
            $message = t('Day in !name field is required.', array(
              '!name' => variable_get('clientside_validation_prefix', '') . $element['#title'] . variable_get('clientside_validation_suffix', ''),
            ));
            _clientside_validation_set_required($element['#name'] . '[day]', $element['#title'], isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $message);
            $message = t('Year in !name field is required.', array(
              '!name' => variable_get('clientside_validation_prefix', '') . $element['#title'] . variable_get('clientside_validation_suffix', ''),
            ));
            _clientside_validation_set_required($element['#name'] . '[year]', $element['#title'], isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $message);
            if (isset($element['#year_start']) && isset($element['#year_end'])) {
              if (is_numeric($element['#year_start']) && is_numeric($element['#year_end'])) {
                $message = t('The entered date needs to be between the years @start and @end.', array(
                  '@start' => $element['#year_start'],
                  '@end' => $element['#year_end'],
                ));
                _clientside_validation_set_minmax($element['#name'] . '[year]', $element['#title'], $element['#year_start'], $element['#year_end'], $js_rules, $message);
              }
            }
            elseif (isset($element['#start_date']) || isset($element['#end_date'])) {
              if (isset($element['#start_date']) && isset($element['#end_date'])) {
                $message = t('The entered date needs to be between the dates @start and @end.', array(
                  '@start' => $element['#start_date'],
                  '@end' => $element['#end_date'],
                ));
                $start_date = explode('-', $element['#start_date']);
                $end_date = explode('-', $element['#end_date']);
              }
              elseif (isset($element['#start_date'])) {
                $message = t('The entered date needs to be before @start', array(
                  '@start' => $element['#start_date'],
                ));
                $start_date = explode('-', $element['#start_date']);
                $end_date = '';
              }
              else {
                $message = t('The entered date needs to be before @end', array(
                  '@end' => $element['#end_date'],
                ));
                $start_date = '';
                $end_date = explode('-', $element['#end_date']);
              }
              $id = 'webform-component-' . str_replace('_', '-', implode('--', array_slice($element['#parents'], 1)));
              _clientside_validation_set_minmax_date($id, $element['#title'], $start_date, $end_date, $js_rules, $message);
            }
          }
          elseif ($element['#type'] == 'checkboxes') {
            $id = '#' . $element['#id'];
            _clientside_validation_set_checkboxgroup_minmax($element['#name'], $element['#title'], $id, $js_rules, '', intval($element['#required']));
          }
          elseif ($element['#type'] == 'select' && $element['#multiple']) {
            _clientside_validation_set_required($element['#name'] . '[]', $element['#title'], isset($element['#required']) ? $element['#required'] : FALSE, $js_rules);
          }
          elseif (isset($element['#name'])) {
            _clientside_validation_set_required($element['#name'], $element['#title'], isset($element['#required']) ? $element['#required'] : FALSE, $js_rules);
          }
        }
        if (isset($element['#webform_component']) && $element['#webform_component']['type'] == 'file') {
          $file_children = element_children($element);
          if (count($file_children) > 0) {
            foreach ($file_children as $child) {
              $file_child = $element[$child];
              if (isset($file_child['#name']) && $file_child['#type'] == 'file') {
                $name = $file_child['#name'];
                _clientside_validation_set_required($name, $element['#title'], isset($element['#webform_component']['mandatory']) ? (bool) $element['#webform_component']['mandatory'] : FALSE, $js_rules);
                if (isset($element['#webform_component']['extra']['filtering']['types'])) {
                  $extensions = $element['#webform_component']['extra']['filtering']['types'];
                  _clientside_validation_set_extensions($name, $extensions, $js_rules);
                }
              }
            }
          }
        }
        if (isset($element['#maxlength']) && $element['#maxlength']) {
          $message = t('!name field has a max length of !maxl characters.', array(
            '!name' => variable_get('clientside_validation_prefix', '') . $element['#title'] . variable_get('clientside_validation_suffix', ''),
            '!maxl' => $element['#maxlength'],
          ));
          _clientside_validation_set_minmaxlength($element['#name'], $element['#title'], '', $element['#maxlength'], $js_rules, $message);
        }
        if (isset($element['#webform_component']) && $element['#webform_component']['type'] == 'email') {
          _clientside_validation_set_email($element['#name'], $element['#title'], $js_rules);
        }
        if (isset($element['#webform_component']) && $element['#webform_component']['type'] == 'number') {
          if (!$element['#webform_component']['extra']['integer']) {
            _clientside_validation_set_number_decimal($element['#name'], $element['#title'], $element['#webform_component']['extra']['point'], $js_rules);
          }
          else {
            _clientside_validation_set_number($element['#name'], $element['#title'], $js_rules);
          }
          if (module_exists('clientside_validation_html5')) {
            _clientside_validation_set_minmax_html5($element['#name'], $element['#title'], $element['#webform_component']['extra']['min'], $element['#webform_component']['extra']['max'], $element['#webform_component']['extra']['step'], $js_rules);
          }
          else {
            _clientside_validation_set_minmax($element['#name'], $element['#title'], $element['#webform_component']['extra']['min'], $element['#webform_component']['extra']['max'], $js_rules);
          }
        }
      }
      if (isset($element['#type']) && $element['#type'] == 'captcha') {
        $settings = clientside_validation_settings_current_form();
        if ($settings['validate_options']['captcha']) {
          $title = _clientside_validation_set_title(isset($element['captcha_widgets']['captcha_response']['#title']) ? $element['captcha_widgets']['captcha_response']['#title'] : $element['#name']);
          $message = t('Wrong answer for !title', array(
            '!title' => $title,
          ));
          if (isset($element['captcha_widgets'])) {
            _clientside_validation_set_captcha($element['captcha_widgets']['captcha_response']['#name'], $title, $element['#captcha_validate'], $js_rules, $message, $element['captcha_token']['#value']);
          }
        }
      }
      clientside_validation_webform_after_build_recurse($form_id, $element, $form_state, $js_rules);
    }
  }
}