clientside_validation.module 20.6 KB
Newer Older
Peter Droogmans's avatar
Peter Droogmans committed
1
<?php
Jelle's avatar
Jelle committed
2
// $Id$
Peter Droogmans's avatar
Peter Droogmans committed
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
 * @file
 * Add client side validation to a webform.
 */

/**
 * Implementation of hook_form_alter().
 */
function clientside_validation_form_alter(&$form, &$form_state, $form_id) {
  if (strpos($form_id, 'webform_client_form') !== FALSE) {
    $form['#after_build'][] = 'clientside_validation_webform_after_build';
  } 
  else {
    switch ($form['#id']) {
      case 'node-form':
      case 'webform-component-edit-form':
        $form['#after_build'][] = 'clientside_validation_form_after_build';
        break;
      default:
        $form['#after_build'][] = 'clientside_validation_form_after_build';
        break;
    }
  }
}

/**
29
 * Webform.
Peter Droogmans's avatar
Peter Droogmans committed
30
31
32
 */
function clientside_validation_webform_after_build(&$form, &$form_state) {
  $js_rules = array();
33
34
35
36
37
38
39
40
41
42
43
44
45
46
  clientside_validation_webform_after_build_recurse($form['#id'], $form, $form_state, $js_rules);
    if ($webform_validation_rules = clientside_validation_webform_validation($form_state['values']['details']['nid'])) {
    dpm($webform_validation_rules);
    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('!name field has a minimum length of !minl characters.', array('!name' => $component['name'], '!minl' => $webform_validation_rule['data']));
           _clientside_validation_set_minmaxlength('submitted[' . $component['form_key'] . ']', $component['name'], $webform_validation_rule['data'], '', $js_rules, $message);
          }
          break;
        case 'max_length':
          foreach ($webform_validation_rule['components'] as $component) {
            $message = t('!name field has a maximum length of !maxl characters.', array('!name' => $component['name'], '!maxl' => $webform_validation_rule['data']));
Jelle's avatar
Jelle committed
47
            _clientside_validation_set_minmaxlength('submitted[' . $component['form_key'] . ']', $component['name'], '', $webform_validation_rule['data'], $js_rules, $message);
Peter Droogmans's avatar
Peter Droogmans committed
48

49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
          }
          break;
        case 'numeric':
          foreach ($webform_validation_rule['components'] as $component) {
            $range = explode('-', $webform_validation_rule['data']);
            if (!empty($range[0]) && $range[0] != '0') {
              if (!isset($range[1])) {
                $range[1] = $range[0];
                $range[0] = 0;
              }
              _clientside_validation_set_minmax('submitted[' . $component['form_key'] . ']', $component['name'], $range[0], $range[1], $js_rules);
            }
          }
          break;
        case 'equal':
          $others = $webform_validation_rule['components'];
          $firstone = array_shift($others);
          foreach ($others as $component) {
            _clientside_validation_set_equal('submitted[' . $component['form_key'] . ']', $component['name'], $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('submitted[' . $component['form_key'] . ']', $component['name'], $firstone, $js_rules, $message);
            }
          }
          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('submitted[' . $component['form_key'] . ']', $component['name'], $value, $js_rules, $message);
          }
          break;
        case 'select_min':
          foreach ($webform_validation_rule['components'] as $component) {
Jelle's avatar
Jelle committed
89
            _clientside_validation_set_minmaxlength('submitted[' . $component['form_key'] . ']', $component['name'], $webform_validation_rule['data'], '', $js_rules);
90
91
92
93
          }
          break;
        case 'select_max':
          foreach ($webform_validation_rule['components'] as $component) {
Jelle's avatar
Jelle committed
94
            _clientside_validation_set_minmaxlength('submitted[' . $component['form_key'] . ']', $component['name'], '', $webform_validation_rule['data'], $js_rules);
95
96
97
98
          }
          break;
        case 'select_exact':
          foreach ($webform_validation_rule['components'] as $component) {
Jelle's avatar
Jelle committed
99
            _clientside_validation_set_minmaxlength('submitted[' . $component['form_key'] . ']', $component['name'], $webform_validation_rule['data'], $webform_validation_rule['data'], $js_rules);
100
101
102
103
104
105
106
107
108
109
110
          }
          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'] : '';
            _clientside_validation_set_ean('submitted[' . $component['form_key'] . ']', $component['name'], $js_rules, $message);
          }
          break;
      }
    }
  }
Peter Droogmans's avatar
Peter Droogmans committed
111
  if (!empty($js_rules)) {
Jelle's avatar
Jelle committed
112
    $settings['clientsideValidation']['general'] = array(
Peter Droogmans's avatar
Peter Droogmans committed
113
114
115
116
117
118
119
      "errorClass" => "error",
      "wrapper" => "li",
    );
    $settings['clientsideValidation']['forms'][$form['#id']]['settings'] = array(
      "errorContainer" => "#formerrors-" . $form['#id'],
      "errorLabelContainer" => "#formerrors-" . $form['#id'] . " ul",
    );
Jelle's avatar
Jelle committed
120
    foreach ($js_rules as $key => $rule) {
Peter Droogmans's avatar
Peter Droogmans committed
121
122
      $settings['clientsideValidation']['forms'][$form['#id']]['rules'][$key] = $rule;
    }
Peter Droogmans's avatar
Peter Droogmans committed
123
124
    drupal_add_js(drupal_get_path('module', 'clientside_validation') . '/jquery-validate/jquery.validate.js');
    drupal_add_js(drupal_get_path('module', 'clientside_validation') . '/clientside_validation.js');
Peter Droogmans's avatar
Peter Droogmans committed
125
126
127
128
129
130
131
132
133
134
135
136
    drupal_add_js($settings, 'setting');
  }
  return $form;
}

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];
      if (isset($element['#title'])) {
        if ($element['#required']) {
          if (isset($element['#webform_component']) && $element['#webform_component']['type'] == 'time' && isset($element['hour']['#name'])) {
137
138
139
140
            $message = t('Hour in !name field is required.', array('!name' => $element['#title']));
            _clientside_validation_set_required($element['hour']['#name'], $element['#title'], TRUE, $js_rules, $message);
            $message = t('Minute in !name field is required.', array('!name' => $element['#title']));
            _clientside_validation_set_required($element['minute']['#name'], $element['#title'], TRUE, $js_rules, $message);
Peter Droogmans's avatar
Peter Droogmans committed
141
          }
Jelle's avatar
Jelle committed
142
          elseif (isset($element['#webform_component']) && $element['#webform_component']['type'] == 'date') {
143
144
145
146
147
148
            $message = t('Month in !name field is required.', array('!name' => $element['#title']));
            _clientside_validation_set_required($element['#name'] . '[month]', $element['#title'], TRUE, $js_rules, $message);
            $message = t('Day in !name field is required.', array('!name' => $element['#title']));
            _clientside_validation_set_required($element['#name'] . '[day]', $element['#title'], TRUE, $js_rules, $message);
            $message = t('Year in !name field is required.', array('!name' => $element['#title']));
            _clientside_validation_set_required($element['#name'] . '[year]', $element['#title'], TRUE, $js_rules, $message);
Peter Droogmans's avatar
Peter Droogmans committed
149
            if (is_numeric($element['#year_start']) && is_numeric($element['#year_end'])) {
150
151
152
              $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);
            }
Peter Droogmans's avatar
Peter Droogmans committed
153
          }
Jelle's avatar
Jelle committed
154
          elseif ($element['#type'] == 'checkboxes') {
Peter Droogmans's avatar
Peter Droogmans committed
155
156
            $count = 0;
            foreach ($element['#options'] as $key => $value) {
157
158
              _clientside_validation_set_checkboxgroup_minmax($element[$key]['#name'], $element['#title'], '#webform-component-' . end($element['#parents']), $count, $js_rules);
              $count++;
Peter Droogmans's avatar
Peter Droogmans committed
159
160
            }
          }
Jelle's avatar
Jelle committed
161
          elseif ($element['#type'] == 'select' && $element['#multiple']) {
162
            _clientside_validation_set_required($element['#name'] . '[]', $element['#title'], TRUE, $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
163
          }
Jelle's avatar
Jelle committed
164
          elseif (isset($element['#type'])) {
165
            _clientside_validation_set_required($element['#name'], $element['#title'], TRUE, $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
166
167
168
          }
        }
        if (isset($element['#webform_component']) && $element['#webform_component']['type'] == 'file' && $element['#webform_component']['mandatory'] == "1") {
169
           _clientside_validation_set_required($element['#name'], $element['#title'], TRUE, $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
170
171
          if (isset($element['#webform_component']['extra']['filtering']['types'])) {
            $extensions = $element['#webform_component']['extra']['filtering']['types'];
172
            _clientside_validation_set_extensions($element['#name'], $extensions, $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
173
174
          }
        }
Peter Droogmans's avatar
Peter Droogmans committed
175
        if (isset($element['#maxlength']) && $element['#maxlength']) {
176
177
          $message = t('!name field has a max length of !maxl characters.', array('!name' => $element['#title'], '!maxl' => $element['#maxlength']));
          _clientside_validation_set_minmaxlength($element['#name'], $element['#title'], '', $element['#maxlength'], $js_rules, $message);
Peter Droogmans's avatar
Peter Droogmans committed
178
        }
179
        
Peter Droogmans's avatar
Peter Droogmans committed
180
        if (isset($element['#webform_component']) && $element['#webform_component']['type'] == 'email') {
181
          _clientside_validation_set_email($element['#name'], $element['#title'], $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
182
183
184
185
186
187
188
        }
      }
      clientside_validation_webform_after_build_recurse($form_id, $element, $form_state, $js_rules);
    }
  }
}

189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
/**
 * Implements hook_webform_validation().
 */
function clientside_validation_webform_validation($nid) {
  static $webform_validation_rules;
  if (!isset($webform_validation_rules[$nid])) {
    if (module_exists('webform_validation')) {
      $webform_validation_rules[$nid] = webform_validation_get_node_rules($nid);
    }
    else {
      $webform_validation_rules[$nid] = NULL;
    }
  }
  return $webform_validation_rules[$nid];
}

Peter Droogmans's avatar
Peter Droogmans committed
205
206
207
208
209
/**
 * Regular form + CCK
 */
function clientside_validation_form_after_build(&$form, &$form_state) {
  static $js_rules = array();
210
  clientside_validation_form_after_build_recurse($form['#id'], $form, $form_state, $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
211
  if (!empty($js_rules)) {
Jelle's avatar
Jelle committed
212
    $settings['clientsideValidation']['general'] = array(
Peter Droogmans's avatar
Peter Droogmans committed
213
214
215
216
217
218
219
      "errorClass" => "error",
      "wrapper" => "li",
    );
    $settings['clientsideValidation']['forms'][$form['#id']]['settings'] = array(
      "errorContainer" => "#formerrors-" . $form['#id'],
      "errorLabelContainer" => "#formerrors-" . $form['#id'] . " ul",
    );
Jelle's avatar
Jelle committed
220
    foreach ($js_rules as $key => $rule) {
Peter Droogmans's avatar
Peter Droogmans committed
221
222
      $settings['clientsideValidation']['forms'][$form['#id']]['rules'][$key] = $rule;
    }
Peter Droogmans's avatar
Peter Droogmans committed
223
224
    drupal_add_js(drupal_get_path('module', 'clientside_validation') . '/jquery-validate/jquery.validate.js');
    drupal_add_js(drupal_get_path('module', 'clientside_validation') . '/clientside_validation.js');
Peter Droogmans's avatar
Peter Droogmans committed
225
226
227
228
229
230
231
232
233
234
    drupal_add_js($settings, 'setting');
  }
  
  return $form;
}

function clientside_validation_form_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];
235
236
237
238
      $types = array(
        'textfield', 'textarea', 'select', 'radio', 'checkbox', 'password', 'file', 'radios', 'checkboxes',
      );
      if (isset($element['#type']) && in_array($element['#type'], $types)) {
Jelle's avatar
Jelle committed
239
        clientside_validation_regular($form_id, $element, $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
240
241
242
243
244
245
      }
      clientside_validation_form_after_build_recurse($form_id, $element, $form_state, $js_rules);
    }
  }
}

Jelle's avatar
Jelle committed
246
function clientside_validation_regular($form_id, $element, &$js_rules) {
Peter Droogmans's avatar
Peter Droogmans committed
247
248
249
  static $multiples = array();
  if (isset($element['#name']) && !isset($js_rules[$element['#name']])) {
    $el_name = $element['#name'];
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
    $el_title = $el_name;
    if (isset($element['#title'])) {
      $el_title = $element['#title'];
    }
    $is_multiple = FALSE;
    if (isset($element['#multiple'])) {
      $is_multiple = $element['#multiple'];
    }
    switch ($element['#type']) {
      case 'textfield':
      case 'password':
      case 'textarea':
      case 'file':
        if ($is_multiple) {
          // Only first field is required
          if (!isset($multiples[$form_id][$el_name])) {
Jelle's avatar
Jelle committed
266
            _clientside_validation_set_required($el_name, $el_title, $element['#required'], $js_rules);
267
268
            $multiples[$form_id][$el_name] = 1;
          }
Peter Droogmans's avatar
Peter Droogmans committed
269
        }
270
        else {
Jelle's avatar
Jelle committed
271
          _clientside_validation_set_required($el_name, $el_title, $element['#required'], $js_rules);
272
273
        }
        if (isset($element['max_length']) && $element['max_length'] > 0) {
Jelle's avatar
Jelle committed
274
          _clientside_validation_set_minmaxlength($el_name, $el_title, '', $element['max_length'], $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
275
276
        }
        break;
277
278
279
      case 'select':
        if ($is_multiple) {
          $el_name .= '[]';
Jelle's avatar
Jelle committed
280
          if (!isset($element['#minlength'])) {
281
282
            $element['#minlength'] = 0;
          }
Jelle's avatar
Jelle committed
283
          _clientside_validation_set_minmaxlength($el_name, $el_title, $element['#minlength'], $is_multiple, $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
284
        }
Jelle's avatar
Jelle committed
285
        _clientside_validation_set_required($el_name, $el_title, $element['#required'], $js_rules);
Peter Droogmans's avatar
Peter Droogmans committed
286
        break;
287
288
      case 'radio':
      case 'radios':
Jelle's avatar
Jelle committed
289
        _clientside_validation_set_required($el_name, $el_title, $element['#required'], $js_rules);
290
291
292
293
294
295
296
297
        break;
      case 'checkbox':
      case 'checkboxes':
        $is_multiple = (isset($element['#options']) && count($element['#options']>1));
        if ($is_multiple) {
          $count = 0;
          foreach ($element['#options'] as $key => $value) {
            $id = '#edit-' . str_replace('_', '-', $element['#parents'][0]);
Jelle's avatar
Jelle committed
298
            _clientside_validation_set_checkboxgroup_minmax($element[$key]['#name'], $el_title, $id, $count, $js_rules);
299
300
301
302
            $count++;
          }
        }
        else {
Jelle's avatar
Jelle committed
303
          _clientside_validation_set_required($el_name, $el_title, $element['#required'], $js_rules);
304
        }
Peter Droogmans's avatar
Peter Droogmans committed
305
306
307
308
309
        break;
    }
  }
}

310
311
312
/**
 * Set validation rule for required fields.
 */
Jelle's avatar
Jelle committed
313
function _clientside_validation_set_required($name, $title, $required, &$js_rules, $message = '') {
Peter Droogmans's avatar
Peter Droogmans committed
314
315
  if ($required) {
    $js_rules[$name]['required'] = TRUE;
316
    $js_rules[$name]['messages']['required'] = (empty($message)) ? t('!name field is required.', array('!name' => $title)) : $message;
Peter Droogmans's avatar
Peter Droogmans committed
317
318
319
  }
}

320
321
322
/**
 * Set validation rule for number fields.
 */
Jelle's avatar
Jelle committed
323
function _clientside_validation_set_number($name, $title, $decimalpoint, &$js_rules) {
Peter Droogmans's avatar
Peter Droogmans committed
324
325
326
327
  $js_rules[$name]['digits_negative'] = TRUE;
  $js_rules[$name]['messages']['digits_negative'] = t('!name field accepts only numbers.', array('!name' => $title));
}

328
329
330
/**
 * Set validation rule for decimal fields.
 */
Jelle's avatar
Jelle committed
331
function _clientside_validation_set_number_decimal($name, $title, $decimalpoint, &$js_rules) {
Peter Droogmans's avatar
Peter Droogmans committed
332
333
334
335
336
337
338
339
340
341
  if ($decimalpoint == '.') {
    $js_rules[$name]['number'] = TRUE;
    $js_rules[$name]['messages']['number'] = t('!name field accepts only numbers (use a \'.\' as decimal point).', array('!name' => $title));
  }
  else {
    $js_rules[$name]['numberDE'] = TRUE;
    $js_rules[$name]['messages']['numberDE'] = t('!name field accepts only numbers (use a \',\' as decimal point).', array('!name' => $title));
  }
}

342
343
344
/**
 * Set validation rule for fields with a minimum and/or a maximum value.
 */
Jelle's avatar
Jelle committed
345
function _clientside_validation_set_minmax($name, $title, $min, $max, &$js_rules, $message = '') {
Peter Droogmans's avatar
Peter Droogmans committed
346
347
  if (isset($min) && $min != '' && isset($max) && $max != '') {
    $js_rules[$name]['range'] = array($min, $max);
348
    $js_rules[$name]['messages']['range'] = (empty($message)) ? t('!name field has to be between !min and !max.', array('!name' => $title, '!min' => $min, '!max' => $max)) : $message;
Peter Droogmans's avatar
Peter Droogmans committed
349
  }
Jelle's avatar
Jelle committed
350
  elseif (isset($min) && $min != '') {
Peter Droogmans's avatar
Peter Droogmans committed
351
    $js_rules[$name]['min'] = $min;
352
    $js_rules[$name]['messages']['min'] = (empty($message)) ? t('!name field has to be greater than !min.', array('!name' => $title, '!min' => $min)) : $message;
Peter Droogmans's avatar
Peter Droogmans committed
353
  }
Jelle's avatar
Jelle committed
354
  elseif (isset($max) && $max != '') {
Peter Droogmans's avatar
Peter Droogmans committed
355
    $js_rules[$name]['max'] = $max;
356
    $js_rules[$name]['messages']['max'] = (empty($message)) ? t('!name field has to be smaller than !max.', array('!name' => $title, '!max' => $max)) : $message;
Peter Droogmans's avatar
Peter Droogmans committed
357
358
359
  }
}

360
361
362
/**
 * Set validation rule for fields with a minimum and/or maximum length.
 */
Jelle's avatar
Jelle committed
363
function _clientside_validation_set_minmaxlength($name, $title, $min, $max, &$js_rules, $message = '') {
Peter Droogmans's avatar
Peter Droogmans committed
364
365
  if (isset($min) && $min != '' && isset($max) && $max != '') {
    $js_rules[$name]['rangelength'] = array($min, $max);
366
    $js_rules[$name]['messages']['rangelength'] = (empty($message)) ? t('!name field has to have between !min and !max values.', array('!name' => $title, '!min' => $min, '!max' => $max)) : $message;
Peter Droogmans's avatar
Peter Droogmans committed
367
  }
Jelle's avatar
Jelle committed
368
  elseif (isset($min) && $min != '') {
Peter Droogmans's avatar
Peter Droogmans committed
369
    $js_rules[$name]['minlength'] = $min;
370
    $js_rules[$name]['messages']['minlength'] = (empty($message)) ? t('!name field has to have minimal !min values.', array('!name' => $title, '!min' => $min)) : $message;
Peter Droogmans's avatar
Peter Droogmans committed
371
  }
Jelle's avatar
Jelle committed
372
  elseif (isset($max) && $max != '') {
Peter Droogmans's avatar
Peter Droogmans committed
373
    $js_rules[$name]['maxlength'] = $max;
374
    $js_rules[$name]['messages']['maxlength'] = (empty($message)) ? t('!name field has to have maximum !max values.', array('!name' => $title, '!max' => $max)) : $message;
Peter Droogmans's avatar
Peter Droogmans committed
375
376
377
  }
}

378
379
380
/**
 * Set validation rule for required fields that must equal a value from an other field.
 */
Jelle's avatar
Jelle committed
381
function _clientside_validation_set_equal($name, $title, $value, &$js_rules) {
382
383
384
385
386
387
388
  $js_rules[$name]['equalTo'] = ':input[name=\'submitted[' . $value['form_key'] . ']\']';
  $js_rules[$name]['messages']['equalTo'] = t('!name field has to be equal to !firstone.', array('!name' => $title, '!firstone' => $value['name']));
}

/**
 * Set validation rule for fields that can not be equal to a value from an other field.
 */
Jelle's avatar
Jelle committed
389
function _clientside_validation_set_not_equal($name, $title, $value, &$js_rules, $message = '') {
390
391
392
393
394
395
396
397
  $js_rules[$name]['notEqualTo'] = ':input[name=\'submitted[' . $value['form_key'] . ']\']';
  $message = empty($message) ? t('!name field has to different from !firstone.', array('!name' => $title, '!firstone' => $value['name'])) : $message;
  $js_rules[$name]['messages']['notEqualTo'] = $message;
}

/**
 * Set validation rule for fields that must be equal to a specific value.
 */
Jelle's avatar
Jelle committed
398
function _clientside_validation_set_specific_value($name, $title, $value, &$js_rules, $message = '') {
399
400
401
402
403
404
405
406
  $js_rules[$name]['oneOf'] = $value;
  $message = empty($message) ? t('!name field has to different from !firstone.', array('!name' => $title, '!firstone' => $value['name'])) : $message;
  $js_rules[$name]['messages']['oneOf'] = $message;
}

/**
 * Set validation rule for ean number fields.
 */
Jelle's avatar
Jelle committed
407
function _clientside_validation_set_ean($name, $title, &$js_rules, $message = '') {
408
409
  $message = empty($message) ? t('!name field is not a valid EAN number.', array('!name' => $title)) : $message;
  $js_rules[$name]['validEAN'] = TRUE;
Peter Droogmans's avatar
Peter Droogmans committed
410
411
}

412
413
414
/**
 * Set validation rule for file fields that must have a certain extension.
 */
Jelle's avatar
Jelle committed
415
function _clientside_validation_set_extensions($name, $extensions, &$js_rules) {
416
417
418
419
420
421
422
423
  $extension_list = preg_replace('#,(?![^,]+,)#', ' or', implode(', ', $extensions));
  $js_rules[$name]['accept'] = implode('|', $extensions);
  $js_rules[$name]['messages']['accept'] = t("Only files with a %exts extension are allowed.", array('%exts' => $extension_list));
}

/**
 * Set validation rule for checkboxes.
 */
Jelle's avatar
Jelle committed
424
function _clientside_validation_set_checkboxgroup_minmax($name, $title, $id, $count, &$js_rules, $min = 1, $max = 99) {
425
426
427
428
429
  $js_rules[$name]['checkboxgroupminmax'] = array($min, $max, $id);
  if ($count == 0) {
    $js_rules[$name]['messages']['checkboxgroupminmax'] = t('!name field is required.', array('!name' => $title));
  }
  else {
Jelle's avatar
Jelle committed
430
    $js_rules[$name]['messages']['checkboxgroupminmax'] = FALSE;
431
432
433
434
435
436
  }
}

/**
 * Set validation rule for email fields.
 */
Jelle's avatar
Jelle committed
437
function _clientside_validation_set_email($name, $title, &$js_rules) {
438
439
440
441
442
443
444
  $js_rules[$name]['email'] = TRUE;
  $js_rules[$name]['messages']['email'] = t('The value in !name is not a valid email address.', array('!name' => $title));
}

function clientside_validation_drupal_json_encode($var) {
  return str_replace(array('<', '>', '&'), array('\u003c', '\u003e', '\u0026'), json_encode($var));
}