From 7f08110a5e29c29812a01b9c148e52b34f3eccdf Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Mon, 31 May 2004 09:40:56 +0000 Subject: - Improved form handling. + Introduced two new functions: 1. form_set_error($name, $message): files an error against the form element with the specified $name. 2. form_has_errors(): returns true if errors has been filed against form elements. + Updated the form handling: 1. The form_ functions will add 'class="error"' when a form field has been found to be erroneous. 2. The error message is passed to theme_form_element() when the particular form field has been found to be erroneous. + I updated the user and profile module to take advantage of these new functions. + IMPORTANT: the _user() hook changed. The 'validate' case should no longer retun an error message when something goes wrong but should set it with form_set_error(). --- includes/common.inc | 53 ++++++++++++++++++++++++++++++++++++++++------------- includes/theme.inc | 5 +++-- 2 files changed, 43 insertions(+), 15 deletions(-) (limited to 'includes') diff --git a/includes/common.inc b/includes/common.inc index 423486e94..5dddd790c 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -57,6 +57,7 @@ function drupal_get_messages() { return $messages; } + /* @} */ /** @@ -1012,8 +1013,34 @@ function form($form, $method = "post", $action = NULL, $attributes = NULL) { return "
\n$form\n
\n"; } -function form_item($title, $value, $description = NULL, $id = NULL, $required = FALSE) { - return theme("form_element", $title, $value, $description, $id, $required); +/** + * File an error against the form with the specified name. + */ +function form_set_error($name, $message) { + $GLOBALS['form'][$name] = $message; + drupal_set_message($message, 'error'); +} + +/** + * Return true when errors have been set. + */ +function form_has_errors() { + return isset($GLOBALS['form']); +} + +/** + * Return the error message filed against the form with the specified name. + */ +function _form_get_error($name) { + return $GLOBALS['form'][$name]; +} + +function _form_get_class($name, $required, $error) { + return $name. ($required ? ' required' : '') . ($error ? ' error' : ''); +} + +function form_item($title, $value, $description = NULL, $id = NULL, $required = FALSE, $error = FALSE) { + return theme("form_element", $title, $value, $description, $id, $required, $error); } function form_group($legend, $group, $description = NULL) { @@ -1021,11 +1048,11 @@ function form_group($legend, $group, $description = NULL) { } function form_radio($title, $name, $value = 1, $checked = 0, $description = NULL, $attributes = NULL, $required = FALSE) { - $element = "'; + $element = "'; if (!is_null($title)) { $element = ""; } - return theme('form_element', NULL, $element, $description, $required); + return theme('form_element', NULL, $element, $description, $required, _form_get_error($name)); } function form_radios($title, $name, $value, $options, $description = NULL, $required = FALSE) { @@ -1034,16 +1061,16 @@ function form_radios($title, $name, $value, $options, $description = NULL, $requ foreach ($options as $key => $choice) { $choices .= "
"; } - return theme('form_element', $title, $choices, $description, $required); + return theme('form_element', $title, $choices, $description, $required, _form_get_error($name)); } } function form_checkbox($title, $name, $value = 1, $checked = 0, $description = NULL, $attributes = NULL, $required = FALSE) { - $element = "'; + $element = "'; if (!is_null($title)) { $element = ""; } - return form_hidden($name, 0) . theme('form_element', NULL, $element, $description, $required); + return form_hidden($name, 0) . theme('form_element', NULL, $element, $description, $required, _form_get_error($name)); } function form_checkboxes($title, $name, $values, $options, $description = NULL, $required = FALSE) { @@ -1055,24 +1082,24 @@ function form_checkboxes($title, $name, $values, $options, $description = NULL, foreach ($options as $key => $choice) { $choices .= "
"; } - return theme('form_element', $title, $choices, $description, $required); + return theme('form_element', $title, $choices, $description, $required, _form_get_error($name)); } } function form_textfield($title, $name, $value, $size, $maxlength, $description = NULL, $attributes = NULL, $required = FALSE) { $size = $size ? " size=\"$size\"" : ""; - return theme("form_element", $title, "", $description, $name, $required); + return theme("form_element", $title, "", $description, $name, $required, _form_get_error($name)); } function form_password($title, $name, $value, $size, $maxlength, $description = NULL, $attributes = NULL, $required = FALSE) { $size = $size ? " size=\"$size\"" : ""; - return theme("form_element", $title, "", $description, $name, $required); + return theme("form_element", $title, "", $description, $name, $required, _form_get_error($name)); } function form_textarea($title, $name, $value, $cols, $rows, $description = NULL, $attributes = NULL, $required = FALSE) { $cols = $cols ? " cols=\"$cols\"" : ""; module_invoke_all("textarea", $name); // eg. optionally plug in a WYSIWYG editor - return theme("form_element", $title, "", $description, $name, $required); + return theme("form_element", $title, "", $description, $name, $required, _form_get_error($name)); } /** @@ -1102,11 +1129,11 @@ function form_select($title, $name, $value, $options, $description = NULL, $extr $select .= ""; } } - return theme("form_element", $title, "", $description, $name, $required); + return theme("form_element", $title, "", $description, $name, $required, _form_get_error($name)); } function form_file($title, $name, $size, $description = NULL, $required = FALSE) { - return theme("form_element", $title, "\n", $description, $name, $required); + return theme("form_element", $title, "\n", $description, $name, $required, _form_get_error($error)); } function form_hidden($name, $value) { diff --git a/includes/theme.inc b/includes/theme.inc index 5101fa516..b66cccb01 100644 --- a/includes/theme.inc +++ b/includes/theme.inc @@ -269,11 +269,12 @@ function theme_node($node, $main = 0, $page = 0) { * @param $value the form element's data * @param $description the form element's description or explanation * @param $id the form element's ID used by the <label> tag + * @param $required a boolean to indicate whether this is a required field or not + * @param $error a string with an error message filed against this form element * * @return a string representing the form element */ - -function theme_form_element($title, $value, $description = NULL, $id = NULL, $required = FALSE) { +function theme_form_element($title, $value, $description = NULL, $id = NULL, $required = FALSE, $error = FALSE) { $output = "
\n"; -- cgit v1.2.3