From a4b833b6deb353d28ad51f9c648061bd0a83c950 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Tue, 22 Sep 2009 07:50:16 +0000 Subject: [PATCH] - Patch #118345 by sun | nedjo, pwolanin, webchick: DIE hook_user_form() + hook_user_register() DIE! --- modules/block/block.module | 11 ++--- modules/contact/contact.module | 10 ++--- modules/locale/locale.module | 41 ++++++++--------- modules/openid/openid.module | 4 +- modules/profile/profile.module | 38 ++++++++-------- modules/system/system.module | 26 ++++++----- modules/user/user.api.php | 63 -------------------------- modules/user/user.module | 80 ++++++++++++---------------------- modules/user/user.pages.inc | 25 ++++++----- 9 files changed, 102 insertions(+), 196 deletions(-) diff --git a/modules/block/block.module b/modules/block/block.module index 7da39f71ef2..887366387af 100644 --- a/modules/block/block.module +++ b/modules/block/block.module @@ -374,10 +374,11 @@ function block_custom_block_save($edit, $delta) { } /** - * Implement hook_user_form(). + * Implement hook_form_FORM_ID_alter(). */ -function block_user_form(&$edit, $account, $category) { - if ($category == 'account') { +function block_form_user_profile_form_alter(&$form, &$form_state) { + if ($form['#user_category'] == 'account') { + $account = $form['#user']; $rids = array_keys($account->roles); $result = db_query("SELECT DISTINCT b.* FROM {block} b LEFT JOIN {block_role} r ON b.module = r.module AND b.delta = r.delta WHERE b.status = 1 AND b.custom <> 0 AND (r.rid IN (:rids) OR r.rid IS NULL) ORDER BY b.weight, b.module", array(':rids' => $rids)); $form['block'] = array( @@ -400,8 +401,8 @@ function block_user_form(&$edit, $account, $category) { } } - if (!empty($return)) { - return $form; + if (!isset($return)) { + $form['block']['#access'] = FALSE; } } } diff --git a/modules/contact/contact.module b/modules/contact/contact.module index 80388d04925..2cdb73077d0 100644 --- a/modules/contact/contact.module +++ b/modules/contact/contact.module @@ -145,10 +145,11 @@ function contact_load($cid) { } /** - * Implement hook_user_form(). + * Implement hook_form_FORM_ID_alter(). */ -function contact_user_form(&$edit, $account, $category) { - if ($category == 'account') { +function contact_form_user_profile_form_alter(&$form, &$form_state) { + if ($form['#user_category'] == 'account') { + $account = $form['#user']; $form['contact'] = array('#type' => 'fieldset', '#title' => t('Contact settings'), '#weight' => 5, @@ -156,10 +157,9 @@ function contact_user_form(&$edit, $account, $category) { ); $form['contact']['contact'] = array('#type' => 'checkbox', '#title' => t('Personal contact form'), - '#default_value' => !empty($edit['contact']) ? $edit['contact'] : FALSE, + '#default_value' => !empty($account->contact) ? $account->contact : FALSE, '#description' => t('Allow other users to contact you via a personal contact form which keeps your e-mail address hidden. Note that some privileged users such as site administrators are still able to contact you even if you choose to disable this feature.', array('@url' => url("user/$account->uid/contact"))), ); - return $form; } } diff --git a/modules/locale/locale.module b/modules/locale/locale.module index 524e117e0bc..c2a58917c30 100644 --- a/modules/locale/locale.module +++ b/modules/locale/locale.module @@ -224,34 +224,18 @@ function locale_locale($op = 'groups') { } /** - * Implement hook_user_register(). + * Form builder callback to display language selection widget. + * + * @ingroup forms + * @see locale_form_alter() */ -function locale_user_register(&$edit, $account, $category) { - // If we have more then one language and either creating a user on the - // admin interface or edit the user, show the language selector. - if (variable_get('language_count', 1) > 1 && user_access('administer users')) { - return locale_language_selector_form($account); - } -} - -/** - * Implement hook_user_form(). - */ -function locale_user_form(&$edit, $account, $category) { - // If we have more then one language and either creating a user on the - // admin interface or edit the user, show the language selector. - if (variable_get('language_count', 1) > 1 && $category == 'account') { - return locale_language_selector_form($account); - } -} - -function locale_language_selector_form($user) { +function locale_language_selector_form(&$form, &$form_state, $user) { global $language; $languages = language_list('enabled'); $languages = $languages[1]; // If the user is being created, we set the user language to the page language. - $user_preferred_language = $user ? user_preferred_language($user) : $language; + $user_preferred_language = $user->uid ? user_preferred_language($user) : $language; $names = array(); foreach ($languages as $langcode => $item) { @@ -273,7 +257,6 @@ function locale_language_selector_form($user) { '#options' => $names, '#description' => ($mode == LANGUAGE_NEGOTIATION_PATH) ? t("This account's default language for e-mails, and preferred language for site presentation.") : t("This account's default language for e-mails."), ); - return $form; } /** @@ -306,9 +289,19 @@ function locale_form_node_type_form_alter(&$form, &$form_state) { } /** - * Implement hook_form_alter(). Adds language fields to forms. + * Implement hook_form_alter(). + * + * Adds language fields to forms. */ function locale_form_alter(&$form, &$form_state, $form_id) { + // Only alter user forms if there is more than one language. + if (variable_get('language_count', 1) > 1) { + // Display language selector when either creating a user on the admin + // interface or editing a user account. + if (($form_id == 'user_register' && user_access('administer users')) || ($form_id == 'user_profile_form' && $form['#user_category'] == 'account')) { + locale_language_selector_form($form, $form_state, $form['#user']); + } + } if (isset($form['#id']) && $form['#id'] == 'node-form') { if (isset($form['#node']->type) && variable_get('language_content_type_' . $form['#node']->type, 0)) { $form['language'] = array( diff --git a/modules/openid/openid.module b/modules/openid/openid.module index 61edf053a77..40520edd4aa 100644 --- a/modules/openid/openid.module +++ b/modules/openid/openid.module @@ -125,7 +125,9 @@ function _openid_user_login_form_alter(&$form, &$form_state) { } /** - * Implement hook_form_alter(). Adds OpenID login to the login forms. + * Implement hook_form_alter(). + * + * Adds OpenID login to the login forms. */ function openid_form_user_register_alter(&$form, &$form_state) { if (isset($_SESSION['openid']['values'])) { diff --git a/modules/profile/profile.module b/modules/profile/profile.module index 7b9bddaa254..da9b34f0bd7 100644 --- a/modules/profile/profile.module +++ b/modules/profile/profile.module @@ -209,13 +209,6 @@ function profile_block_view($delta = '') { } } -/** - * Implement hook_user_register(). - */ -function profile_user_register(&$edit, $account, $category) { - return profile_form_profile($edit, $account, $category, TRUE); -} - /** * Implement hook_user_update(). */ @@ -230,13 +223,6 @@ function profile_user_insert(&$edit, $account, $category) { return profile_save_profile($edit, $account, $category, TRUE); } -/** - * Implement hook_user_form(). - */ -function profile_user_form(&$edit, $account, $category) { - return profile_form_profile($edit, $account, $category); -} - /** * Implement hook_user_cancel(). */ @@ -378,7 +364,17 @@ function _profile_form_explanation($field) { return $output; } -function profile_form_profile($edit, $account, $category, $register = FALSE) { +/** + * Implement hook_form_alter(). + */ +function profile_form_alter(&$form, &$form_state, $form_id) { + if ($form_id == 'user_register' || $form_id == 'user_profile_form') { + $register = ($form['#user']->uid > 0 ? FALSE : TRUE); + $form = array_merge($form, profile_form_profile($form['#user'], $form['#user_category'], $register)); + } +} + +function profile_form_profile($account, $category, $register = FALSE) { $result = _profile_get_fields($category, $register); $weight = 1; $fields = array(); @@ -392,7 +388,7 @@ function profile_form_profile($edit, $account, $category, $register = FALSE) { case 'url': $fields[$category][$field->name] = array('#type' => 'textfield', '#title' => check_plain($field->title), - '#default_value' => isset($edit[$field->name]) ? $edit[$field->name] : '', + '#default_value' => isset($account->{$field->name}) ? $account->{$field->name} : '', '#maxlength' => 255, '#description' => _profile_form_explanation($field), '#required' => $field->required, @@ -404,7 +400,7 @@ function profile_form_profile($edit, $account, $category, $register = FALSE) { case 'textarea': $fields[$category][$field->name] = array('#type' => 'textarea', '#title' => check_plain($field->title), - '#default_value' => isset($edit[$field->name]) ? $edit[$field->name] : '', + '#default_value' => isset($account->{$field->name}) ? $account->{$field->name} : '', '#description' => _profile_form_explanation($field), '#required' => $field->required, ); @@ -412,7 +408,7 @@ function profile_form_profile($edit, $account, $category, $register = FALSE) { case 'list': $fields[$category][$field->name] = array('#type' => 'textarea', '#title' => check_plain($field->title), - '#default_value' => isset($edit[$field->name]) ? $edit[$field->name] : '', + '#default_value' => isset($account->{$field->name}) ? $account->{$field->name} : '', '#description' => _profile_form_explanation($field), '#required' => $field->required, ); @@ -420,7 +416,7 @@ function profile_form_profile($edit, $account, $category, $register = FALSE) { case 'checkbox': $fields[$category][$field->name] = array('#type' => 'checkbox', '#title' => check_plain($field->title), - '#default_value' => isset($edit[$field->name]) ? $edit[$field->name] : '', + '#default_value' => isset($account->{$field->name}) ? $account->{$field->name} : '', '#description' => _profile_form_explanation($field), '#required' => $field->required, ); @@ -435,7 +431,7 @@ function profile_form_profile($edit, $account, $category, $register = FALSE) { } $fields[$category][$field->name] = array('#type' => 'select', '#title' => check_plain($field->title), - '#default_value' => isset($edit[$field->name]) ? $edit[$field->name] : '', + '#default_value' => isset($account->{$field->name}) ? $account->{$field->name} : '', '#options' => $options, '#description' => _profile_form_explanation($field), '#required' => $field->required, @@ -444,7 +440,7 @@ function profile_form_profile($edit, $account, $category, $register = FALSE) { case 'date': $fields[$category][$field->name] = array('#type' => 'date', '#title' => check_plain($field->title), - '#default_value' => isset($edit[$field->name]) ? $edit[$field->name] : '', + '#default_value' => isset($account->{$field->name}) ? $account->{$field->name} : '', '#description' => _profile_form_explanation($field), '#required' => $field->required, ); diff --git a/modules/system/system.module b/modules/system/system.module index 7ed7a68186a..8a9fad8c5d1 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -1475,25 +1475,24 @@ function system_preprocess_page(&$variables) { } /** - * Implement hook_user_form(). + * Implement hook_form_FORM_ID_alter(). */ -function system_user_form(&$edit, $account, $category) { - if ($category == 'account') { +function system_form_user_profile_form_alter(&$form, &$form_state) { + if ($form['#user_category'] == 'account') { if (variable_get('configurable_timezones', 1)) { - system_user_timezone($edit, $form); + system_user_timezone($form, $form_state); } return $form; } } /** - * Implement hook_user_register(). + * Implement hook_form_FORM_ID_alter(). */ -function system_user_register(&$edit, $account, $category) { +function system_form_user_register_alter(&$form, &$form_state) { if (variable_get('configurable_timezones', 1)) { - $form = array(); if (variable_get('user_default_timezone', DRUPAL_USER_TIMEZONE_DEFAULT) == DRUPAL_USER_TIMEZONE_SELECT) { - system_user_timezone($edit, $form); + system_user_timezone($form, $form_state); } else { $form['account']['timezone'] = array( @@ -1518,8 +1517,11 @@ function system_user_login(&$edit, $account) { /** * Add the time zone field to the user edit and register forms. */ -function system_user_timezone(&$edit, &$form) { +function system_user_timezone(&$form, &$form_state) { global $user; + + $account = $form['#user']; + $form['timezone'] = array( '#type' => 'fieldset', '#title' => t('Locale settings'), @@ -1529,11 +1531,11 @@ function system_user_timezone(&$edit, &$form) { $form['timezone']['timezone'] = array( '#type' => 'select', '#title' => t('Time zone'), - '#default_value' => $edit['timezone'] ? $edit['timezone'] : ($edit['uid'] == $user->uid ? variable_get('date_default_timezone', '') : ''), - '#options' => system_time_zones(($edit['uid'] != $user->uid)), + '#default_value' => isset($account->timezone) ? $account->timezone : ($account->uid == $user->uid ? variable_get('date_default_timezone', '') : ''), + '#options' => system_time_zones($account->uid != $user->uid), '#description' => t('Select the desired local time and time zone. Dates and times throughout this site will be displayed using this time zone.'), ); - if (!$edit['timezone'] && $edit['uid'] == $user->uid) { + if (!isset($account->timezone) && $account->uid == $user->uid) { $form['timezone']['#description'] = t('Your time zone setting will be automatically detected if possible. Please confirm the selection and click save.'); $form['timezone']['timezone']['#attributes'] = array('class' => array('timezone-detect')); drupal_add_js('misc/timezone.js'); diff --git a/modules/user/user.api.php b/modules/user/user.api.php index 88d4c0fa101..82895e1828e 100644 --- a/modules/user/user.api.php +++ b/modules/user/user.api.php @@ -217,38 +217,6 @@ function hook_user_categories() { )); } -/** - * The user account edit form is about to be displayed. - * - * The module should present the form elements it wishes to inject - * into the form. - * - * @param &$edit - * The array of form values submitted by the user. - * @param $account - * The user object on which the operation is being performed. - * @param $category - * The active category of user information being edited. - * @return - * A $form array containing the form elements to display. - */ -function hook_user_form(&$edit, $account, $category = NULL) { - if ($category == 'account') { - $form['comment_settings'] = array( - '#type' => 'fieldset', - '#title' => t('Comment settings'), - '#collapsible' => TRUE, - '#weight' => 4); - $form['comment_settings']['signature'] = array( - '#type' => 'textarea', - '#title' => t('Signature'), - '#default_value' => $edit['signature'], - '#description' => t('Your signature will be publicly displayed at the end of your comments.')); - return $form; - } -} - - /** * The user account is being added. * @@ -302,37 +270,6 @@ function hook_user_logout($account) { ->execute(); } -/** - * The user account registration form is about to be displayed. - * - * The module should present the form elements it wishes to inject into the - * form. - * - * @param &$edit - * The array of form values submitted by the user. - * @param $account - * The user object on which the operation is being performed. - * @param $category - * The active category of user information being edited. - * @return - * A $form array containing the form elements to display. - */ -function hook_user_register(&$edit, $account, $category) { - if (variable_get('configurable_timezones', 1)) { - $form = array(); - if (variable_get('user_default_timezone', DRUPAL_USER_TIMEZONE_DEFAULT) == DRUPAL_USER_TIMEZONE_SELECT) { - system_user_timezone($edit, $form); - } - else { - $form['timezone'] = array( - '#type' => 'hidden', - '#value' => variable_get('user_default_timezone', DRUPAL_USER_TIMEZONE_DEFAULT) ? '' : variable_get('date_default_timezone', ''), - ); - } - return $form; - } -} - /** * Modify the account before it gets saved. * diff --git a/modules/user/user.module b/modules/user/user.module index a5796520281..05605499a23 100644 --- a/modules/user/user.module +++ b/modules/user/user.module @@ -859,17 +859,6 @@ function user_user_view($account) { ); } -/** - * Implement hook_user_form. - */ -function user_user_form(&$edit, $account, $category) { - if ($category == 'account') { - $form = array(); - $form_state = array(); - return user_edit_form($form, $form_state, (isset($account->uid) ? $account->uid : FALSE), $edit); - } -} - /** * Implement hook_user_validate(). */ @@ -1810,7 +1799,12 @@ function user_pass_rehash($password, $timestamp, $login) { return md5($timestamp . $password . $login); } -function user_edit_form($form, &$form_state, $uid, $edit, $register = FALSE) { +function user_edit_form(&$form, &$form_state) { + global $user; + + $account = $form['#user']; + $register = ($form['#user']->uid > 0 ? FALSE : TRUE); + _user_password_dynamic_validation(); $admin = user_access('administer users'); @@ -1819,24 +1813,29 @@ function user_edit_form($form, &$form_state, $uid, $edit, $register = FALSE) { '#title' => t('Account information'), '#weight' => -10, ); - // Only show name field when: registration page; or user is editing own account and can change username; or an admin user. - if ($register || ($GLOBALS['user']->uid == $uid && user_access('change own username')) || $admin) { + // Only show name field when: registration page; or user is editing own + // account and can change username; or an admin user. + if ($register || ($user->uid == $account->uid && user_access('change own username')) || $admin) { $form['account']['name'] = array('#type' => 'textfield', '#title' => t('Username'), - '#default_value' => $edit['name'], '#maxlength' => USERNAME_MAX_LENGTH, '#description' => t('Spaces are allowed; punctuation is not allowed except for periods, hyphens, apostrophes, and underscores.'), '#required' => TRUE, '#attributes' => array('class' => array('username')), ); + if (!$register) { + $form['account']['name']['#default_value'] = $account->name; + } } $form['account']['mail'] = array('#type' => 'textfield', '#title' => t('E-mail address'), - '#default_value' => $edit['mail'], '#maxlength' => EMAIL_MAX_LENGTH, '#description' => t('A valid e-mail address. All e-mails from the system will be sent to this address. The e-mail address is not made public and will only be used if you wish to receive a new password or wish to receive certain news or notifications by e-mail.'), '#required' => TRUE, ); + if (!$register) { + $form['account']['mail']['#default_value'] = $account->mail; + } if (!$register) { $form['account']['pass'] = array('#type' => 'password_confirm', '#description' => t('To change the current user password, enter the new password in both fields.'), @@ -1855,7 +1854,7 @@ function user_edit_form($form, &$form_state, $uid, $edit, $register = FALSE) { $form['account']['status'] = array( '#type' => 'radios', '#title' => t('Status'), - '#default_value' => isset($edit['status']) ? $edit['status'] : 1, + '#default_value' => isset($account->status) ? $account->status : 1, '#options' => array(t('Blocked'), t('Active')) ); } @@ -1876,11 +1875,10 @@ function user_edit_form($form, &$form_state, $uid, $edit, $register = FALSE) { unset($roles[DRUPAL_AUTHENTICATED_RID]); if ($roles) { - $default = empty($edit['roles']) ? array() : array_keys($edit['roles']); $form['account']['roles'] = array( '#type' => 'checkboxes', '#title' => t('Roles'), - '#default_value' => $default, + '#default_value' => isset($account->roles) ? array_keys($account->roles) : array(), '#options' => $roles, DRUPAL_AUTHENTICATED_RID => $checkbox_authenticated, ); @@ -1897,13 +1895,13 @@ function user_edit_form($form, &$form_state, $uid, $edit, $register = FALSE) { $form['signature_settings']['signature'] = array( '#type' => 'textarea', '#title' => t('Signature'), - '#default_value' => $edit['signature'], + '#default_value' => isset($account->signature) ? $account->signature : '', '#description' => t('Your signature will be publicly displayed at the end of your comments.'), ); } // Picture/avatar: - if (variable_get('user_pictures', 0) && !$register) { + if (variable_get('user_pictures', 0) && !$register && !$admin) { $form['picture'] = array( '#type' => 'fieldset', '#title' => t('Picture'), @@ -1911,15 +1909,15 @@ function user_edit_form($form, &$form_state, $uid, $edit, $register = FALSE) { ); $form['picture']['picture'] = array( '#type' => 'value', - '#value' => $edit['picture'], + '#value' => isset($account->picture) ? $account->picture : NULL, ); $form['picture']['picture_current'] = array( - '#markup' => theme('user_picture', (object)$edit), + '#markup' => theme('user_picture', $account), ); $form['picture']['picture_delete'] = array( '#type' => 'checkbox', '#title' => t('Delete picture'), - '#access' => !empty($edit['picture']->fid), + '#access' => !empty($account->picture->fid), '#description' => t('Check this box to delete your current picture.'), ); $form['picture']['picture_upload'] = array( @@ -1931,9 +1929,6 @@ function user_edit_form($form, &$form_state, $uid, $edit, $register = FALSE) { $form['#validate'][] = 'user_profile_form_validate'; $form['#validate'][] = 'user_validate_picture'; } - $form['#uid'] = $uid; - - return $form; } /** @@ -3073,8 +3068,11 @@ function user_register($form, &$form_state) { drupal_goto('user/' . $user->uid); } - // Start with the default user edit fields. - $form = user_edit_form($form, $form_state, NULL, NULL, TRUE); + $form['#user'] = drupal_anonymous_user(); + $form['#user_category'] = 'register'; + + // Start with the default user account fields. + user_edit_form($form, $form_state); if ($admin) { $form['account']['notify'] = array( '#type' => 'checkbox', @@ -3085,13 +3083,6 @@ function user_register($form, &$form_state) { $form_state['redirect'] = $_GET['q']; } - // Create a dummy variable for pass-by-reference parameters. - $null = NULL; - $extra = _user_forms($null, NULL, NULL, 'register'); - if ($extra) { - $form = array_merge_recursive($form, $extra); - } - // If the "account" fieldset is the only element at the top level, its // borders are hidden for aesthetic reasons. We do not remove the fieldset but // preserve the form structure so that modules implementing @@ -3110,23 +3101,6 @@ function user_register_validate($form, &$form_state) { user_module_invoke('validate', $form_state['values'], $form_state['values'], 'account'); } -/** - * Retrieve a list of all form elements for the specified category. - */ -function _user_forms(&$edit, $account, $category, $hook = 'form') { - $groups = array(); - foreach (module_implements('user_' . $hook) as $module) { - $function = $module . '_user_' . $hook; - if ($data = $function($edit, $account, $category)) { - $groups = array_merge_recursive($data, $groups); - } - } - uasort($groups, '_user_sort'); - - return empty($groups) ? FALSE : $groups; -} - - /** * Implementation of hook_modules_installed(). */ diff --git a/modules/user/user.pages.inc b/modules/user/user.pages.inc index cfe7015302a..25f7401bd96 100644 --- a/modules/user/user.pages.inc +++ b/modules/user/user.pages.inc @@ -225,19 +225,21 @@ function user_edit($account, $category = 'account') { * @see user_profile_form_submit() * @see user_cancel_confirm_form_submit() */ -function user_profile_form($form, $form_state, $account, $category = 'account') { +function user_profile_form($form, &$form_state, $account, $category = 'account') { global $user; - $edit = (empty($form_state['values'])) ? (array)$account : $form_state['values']; + $form['#user'] = $account; + $form['#user_category'] = $category; - $form = _user_forms($edit, $account, $category); + if ($category == 'account') { + user_edit_form($form, $form_state); + } // Attach field widgets. - field_attach_form('user', (object) $edit, $form, $form_state); + field_attach_form('user', $account, $form, $form_state); - $form['_category'] = array('#type' => 'value', '#value' => $category); - $form['_account'] = array('#type' => 'value', '#value' => $account); $form['submit'] = array('#type' => 'submit', '#value' => t('Save'), '#weight' => 30); + if (($account->uid == $user->uid && user_access('cancel account')) || user_access('administer users')) { $form['cancel'] = array( '#type' => 'submit', @@ -257,7 +259,7 @@ function user_profile_form_validate($form, &$form_state) { $edit = (object)$form_state['values']; field_attach_form_validate('user', $edit, $form, $form_state); $edit = (array)$edit; - user_module_invoke('validate', $edit, $form_state['values']['_account'], $form_state['values']['_category']); + user_module_invoke('validate', $edit, $form['#user'], $form['#user_category']); // Validate input to ensure that non-privileged users can't alter protected data. if ((!user_access('administer users') && array_intersect(array_keys($edit), array('uid', 'init', 'session'))) || (!user_access('administer permissions') && isset($form_state['values']['roles']))) { watchdog('security', 'Detected malicious attempt to alter protected user fields.', array(), WATCHDOG_WARNING); @@ -270,9 +272,9 @@ function user_profile_form_validate($form, &$form_state) { * Submit function for the user account and profile editing form. */ function user_profile_form_submit($form, &$form_state) { - $account = $form_state['values']['_account']; - $category = $form_state['values']['_category']; - unset($form_state['values']['_account'], $form_state['values']['op'], $form_state['values']['submit'], $form_state['values']['cancel'], $form_state['values']['form_token'], $form_state['values']['form_id'], $form_state['values']['_category'], $form_state['values']['form_build_id']); + $account = $form['#user']; + $category = $form['#user_category']; + unset($form_state['values']['op'], $form_state['values']['submit'], $form_state['values']['cancel'], $form_state['values']['form_token'], $form_state['values']['form_id'], $form_state['values']['form_build_id']); $edit = (object)$form_state['values']; field_attach_submit('user', $edit, $form, $form_state); @@ -284,7 +286,6 @@ function user_profile_form_submit($form, &$form_state) { cache_clear_all(); drupal_set_message(t('The changes have been saved.')); - return; } /** @@ -297,7 +298,7 @@ function user_edit_cancel_submit($form, &$form_state) { unset($_GET['destination']); } // Note: We redirect from user/uid/edit to user/uid/cancel to make the tabs disappear. - $form_state['redirect'] = array("user/" . $form_state['values']['_account']->uid . "/cancel", $destination); + $form_state['redirect'] = array("user/" . $form['#user']->uid . "/cancel", $destination); } /**