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 18 Jan 2010 18:06:45 -0000
@@ -2,60 +2,46 @@
// $Id: checkbox_validate.module,v 1.2 2008/05/29 14:14:40 MegaGrunt Exp $
/**
- * Implementation of hook_form_alter().
+ * @file
+ * Fixes behavior and display of required checkboxes in forms.
*/
-function checkbox_validate_form_alter(&$form, $form_state, $form_id) {
- $form = checkbox_validate_recurse($form);
- return;
-}
/**
- * Recurse through a form array to find required checkboxes
+ * Implements hook_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 {
+function checkbox_validate_elements() {
+ return array(
+ 'checkbox' => array(
+ '#process' => array('checkbox_validate_process_element'),
+ ),
+ );
+}
- $form_item[$key] = checkbox_validate_recurse($value, $key);
- }
+/**
+ * Form element #process callback for checkbox form elements.
+ */
+function checkbox_validate_process_element($element) {
+ if (!empty($element['#required'])) {
+ $element['#element_validate'][] = 'checkbox_validate_element_validate';
+ $element['#pre_render'][] = 'checkbox_validate_pre_render_checkbox';
}
-
- 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;
+/**
+ * Form element validation handler for a required checkbox.
+ */
+function checkbox_validate_element_validate($element, &$form_state) {
+ if (empty($element['#value'])) {
+ form_error($element, t('!title field is required.', array('!title' => filter_xss_admin($element['#title']))));
+ }
}
/**
- * Implementation of hook_theme().
+ * Adds required symbol during rendering, thus hiding it in error messages.
*/
-function checkbox_validate_theme() {
- return array(
- 'checkbox_validate_required' => array(
- 'arguments' => array(),
- ),
- );
+function checkbox_validate_pre_render_checkbox($element) {
+ $element['#title'] .= ' *';
+ return $element;
}
+