function clientside_validation_regular in Clientside Validation 7
Same name and namespace in other branches
- 6 clientside_validation_form/clientside_validation_form.module \clientside_validation_regular()
1 call to clientside_validation_regular()
- clientside_validation_form_after_build_recurse in clientside_validation_form/
clientside_validation_form.module
File
- clientside_validation_form/
clientside_validation_form.module, line 41 - Add clientside validation to regular forms
Code
function clientside_validation_regular($form_id, $element, &$js_rules, $form_state) {
static $multiples = array();
$skipvalidation = FALSE;
if (isset($element['#instance'])) {
$field_info = $element['#instance'];
}
elseif (isset($element['#entity_type']) && isset($element['#field_name']) && isset($element['#bundle'])) {
$field_info = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']);
}
if (isset($field_info['exclude_cv']) && $field_info['exclude_cv'] == '1') {
$skipvalidation = TRUE;
}
elseif (isset($element['#exclude_cv']) && $element['#exclude_cv']) {
//skip validation if defined so by form element
$skipvalidation = TRUE;
}
if (isset($element['#name']) && !$skipvalidation) {
$el_name = $element['#name'];
$el_title = $el_name;
if (isset($element['#title'])) {
$el_title = $element['#title'];
}
$is_multiple = FALSE;
if (isset($element['#multiple'])) {
$is_multiple = $element['#multiple'];
}
$required_error = isset($element['#required_error']) ? $element['#required_error'] : '';
if ((empty($el_title) || $el_title == $el_name) && isset($field_info)) {
$el_title = $field_info['label'];
}
switch ($element['#type']) {
case 'textfield':
case 'password':
case 'textarea':
case 'file':
case 'managed_file':
if ($element['#type'] == 'managed_file') {
$el_name = $element['upload']['#name'];
}
if ($is_multiple) {
// Only first field is required
if (!isset($multiples[$form_id][$el_name])) {
_clientside_validation_set_required($el_name, $el_title, isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $required_error);
$multiples[$form_id][$el_name] = 1;
}
}
else {
_clientside_validation_set_required($el_name, $el_title, isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $required_error);
}
if (isset($element['#maxlength']) && $element['#maxlength'] > 0) {
_clientside_validation_set_minmaxlength($el_name, $el_title, '', $element['#maxlength'], $js_rules);
}
if (isset($element['#number_type'])) {
$separator = ".";
if (isset($element['#entity_type'])) {
$field = field_widget_field($element, $form_state);
$instance = field_widget_instance($element, $form_state);
$min = '';
$max = '';
if (isset($instance['settings']['min'])) {
$min = $instance['settings']['min'];
}
if (isset($instance['settings']['max'])) {
$max = $instance['settings']['max'];
}
if ($min !== '' || $max !== '') {
$decimal_separator = '.';
if (isset($field['settings']['decimal_separator'])) {
$decimal_separator = $field['settings']['decimal_separator'];
}
_clientside_validation_set_minmax($el_name, $el_title, $min, $max, $js_rules, '', $decimal_separator);
}
if (isset($field['settings']['decimal_separator'])) {
$separator = $field['settings']['decimal_separator'];
}
}
switch ($element['#number_type']) {
case 'decimal':
case 'float':
_clientside_validation_set_number_decimal($el_name, $el_title, $separator, $js_rules);
break;
case 'integer':
_clientside_validation_set_number($el_name, $el_title, $js_rules);
break;
}
}
if (isset($element['#clientside_validation_type'])) {
switch ($element['#clientside_validation_type']) {
case 'email':
_clientside_validation_set_email($el_name, $el_title, $js_rules);
break;
case 'phone':
$info = field_info_field($element['#field_name']);
_clientside_validation_set_phone($el_name, $el_title, $info['settings']['country'], $js_rules);
}
}
break;
case 'select':
if ($is_multiple) {
// is this a field or a form api element?
$el_name .= '[]';
$min = $element['#required'] ? 1 : 0;
$max = count($element['#options']);
if (isset($element['#entity_type'])) {
$field = field_widget_field($element, $form_state);
// If field cardinality equals 1, then $is_multiple == FALSE. If field cardinality is unlimited, it is set to -1.
if ($field['cardinality'] > 1) {
$max = $field['cardinality'];
}
}
_clientside_validation_set_minmaxlength($el_name, $el_title, $min, $max, $js_rules);
}
_clientside_validation_set_required($el_name, $el_title, isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $required_error);
if ($element['#required']) {
// @see http://drupal.org/node/1585554
$error = isset($js_rules[$el_name]['messages']['required']) ? $js_rules[$el_name]['messages']['required'] : NULL;
_clientside_validation_set_blacklist($el_name, $el_title, array(
'_none',
), $js_rules, $error);
}
break;
case 'radio':
case 'radios':
_clientside_validation_set_required($el_name, $el_title, isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $required_error);
break;
case 'checkbox':
case 'checkboxes':
$is_multiple = isset($element['#options']) && count($element['#options']) > 1;
if ($is_multiple && $element['#required']) {
$id = '#' . $element['#id'];
if (isset($element['#entity_type'])) {
$field = field_widget_field($element, $form_state);
$max = $field['cardinality'] > 1 ? $field['cardinality'] : 99;
}
else {
$max = count($element['#options']);
}
_clientside_validation_set_checkboxgroup_minmax($element['#name'], $el_title, $id, $js_rules, $required_error, 1, $max);
}
else {
_clientside_validation_set_required($el_name, $el_title, isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $required_error);
}
break;
case 'link_field':
_clientside_validation_set_url($element['url']['#name'], $el_title, $js_rules);
break;
case 'telfield':
_clientside_validation_set_phone($el_name, $el_title, '', $js_rules);
break;
case 'hierarchical_select':
foreach (element_children($element['hierarchical_select']['selects']) as $child) {
if ($element['#config']['enforce_deepest'] || $child < 1) {
$child_name = $element['hierarchical_select']['selects'][$child]['#name'];
_clientside_validation_set_required($child_name, $el_title, isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $required_error);
if ($element['#required']) {
$error = isset($js_rules[$child_name]['messages']['required']) ? $js_rules[$child_name]['messages']['required'] : NULL;
_clientside_validation_set_blacklist($child_name, $el_title, array(
'label_' . $child,
'none',
'_none',
), $js_rules, $error);
}
}
}
_clientside_validation_set_required($el_name, $el_title, isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $required_error);
break;
case 'checkbox_tree':
if ($element['#required']) {
_clientside_validation_set_checkboxgroup_minmax($el_name, $el_title, '#' . $element['#id'], $js_rules, $required_error);
}
break;
case 'date_popup':
case 'date_text':
$date_title = $element['#type'] == 'date_popup' || !isset($element['#date_title']) ? $element['date']['#title'] : $element['#date_title'];
if (isset($element['date'])) {
_clientside_validation_set_required($element['date']['#name'], $date_title, isset($element['#required']) ? $element['#required'] : FALSE, $js_rules);
$granularity = date_format_order($element['#date_format']);
$format = date_limit_format($element['#date_format'], array_intersect($granularity, array(
'month',
'day',
'year',
)));
_clientside_validation_set_date($element['date']['#name'], $date_title, $format, $js_rules);
}
if (isset($element['time']) && isset($element['time']['#name'])) {
_clientside_validation_set_required($element['time']['#name'], $element['time']['#title'], isset($element['#required']) ? $element['#required'] : FALSE, $js_rules);
}
break;
case 'captcha':
$settings = clientside_validation_settings_current_form();
if ($settings['validate_options']['captcha'] && isset($element['captcha_widgets'])) {
$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,
));
$case_sensitive = strpos($element['#captcha_validate'], 'insensitive') === FALSE;
_clientside_validation_set_captcha($element['captcha_widgets']['captcha_response']['#name'], $title, $element['#captcha_validate'], $js_rules, $message, $element['captcha_token']['#value']);
}
break;
}
if (!isset($js_rules[$el_name]['required'])) {
_clientside_validation_set_required($el_name, $el_title, isset($element['#required']) ? $element['#required'] : FALSE, $js_rules, $required_error);
}
}
}