Index: checkbox_validate.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/checkbox_validate/checkbox_validate.module,v retrieving revision 1.2 diff -u -p -r1.2 checkbox_validate.module --- checkbox_validate.module 29 May 2008 14:14:40 -0000 1.2 +++ checkbox_validate.module 9 Jul 2009 18:28:01 -0000 @@ -2,60 +2,54 @@ // $Id: checkbox_validate.module,v 1.2 2008/05/29 14:14:40 MegaGrunt Exp $ /** - * Implementation of hook_form_alter(). + * @file + * Corrects display and behaviour of required checkboxes in all Drupal forms */ -function checkbox_validate_form_alter(&$form, $form_state, $form_id) { - $form = checkbox_validate_recurse($form); - return; + +/* + * Implementation of hook_elements(). + */ +function checkbox_validate_elements() { + return array( + 'checkbox' => array( + '#process' => array('checkbox_validate_add_validation'), + ), + 'optionwidgets_onoff' => array( + '#process' => array('checkbox_validate_add_validation'), + ), + ); } /** - * Recurse through a form array to find required checkboxes + * Process function for checkbox form elements. */ -function checkbox_validate_recurse($form_item) { - if (!is_array($form_item)) return; - - while (list($key, $value) = each($form_item)) { - - if (strpos($key, '#') === 0) { - - if (isset($form_item['#type']) && $form_item['#type'] == 'checkbox' && isset($form_item['#required']) && $form_item['#required'] == TRUE) { - - $form_item['#element_validate'] = array('checkbox_validate_validation'); - $form_item['#pre_render'][] = 'checkbox_validate_add_required_symbol'; - return $form_item; - } - - } - else { - - $form_item[$key] = checkbox_validate_recurse($value, $key); - } +function checkbox_validate_add_validation($element, $form_state) { + if (isset($element['#required']) && $element['#required'] == TRUE) { + $element['#element_validate'][] = 'checkbox_validate_validation'; + $element['#pre_render'][] = 'checkbox_validate_add_required_symbol'; } - - return $form_item; -} - -/* add required symbol here in this pre_render function - so it doresn't display on error messages */ -function checkbox_validate_add_required_symbol($form) { - $form['#title'] .= ' *'; - return $form; + return $element; } -/* validate a required checkbox */ -function checkbox_validate_validation($element) { - if (empty($element['#value'])) form_error($element, t('!title field is required.', array('!title' => filter_xss_admin(($element['#title']))))); - return; +/** + * Add required symbol here in this pre_render function + * so it doesn't display on error messages + */ +function checkbox_validate_add_required_symbol($element) { + $marker = ' *'; + $element['#title'] .= $marker; + // CCK fields store title in $element['value']['#title'] + if (isset($element['value']['#title'])) { + $element['value']['#title'] .= $marker; + } + return $element; } /** - * Implementation of hook_theme(). + * Validate a required checkbox. */ -function checkbox_validate_theme() { - return array( - 'checkbox_validate_required' => array( - 'arguments' => array(), - ), - ); -} +function checkbox_validate_validation($element) { + if (empty($element['#value']) || $element['#value']['value'][0] == FALSE) { + form_error($element, t('!title field is required.', array('!title' => filter_xss_admin($element['#title'])))); + } +} \ No newline at end of file