diff -u b/password_policy.module b/password_policy.module --- b/password_policy.module +++ b/password_policy.module @@ -725,7 +725,8 @@ } // If a password is set and OpenID is not being used, validate constraints. - if (!empty($form_state['values']['pass']) && !isset($values['auth_openid'])) { + $values = $form_state['values']; + if (!empty($values['pass']) && !isset($values['auth_openid'])) { _password_policy_validate_constraints($form_state, $account); } } @@ -745,9 +746,11 @@ if (isset($values['name'])) { $account->name = $values['name']; } - if (_password_policy_is_administrator_registering_user($form, $account) - || _password_policy_is_administrator_editing_user($form, $account)) { - _password_policy_add_chosen_roles_to_account($form_state, $account); + + if (!_password_policy_is_current_user($account)) { + // Administrator is changing password for another user. For validating + // constraints, use roles selected on form for the user. + _password_policy_add_selected_roles_to_account($form_state, $account); } return $account; } @@ -763,40 +766,14 @@ } /** - * Determines whether administrator is registering a new user. - * - * @param array $form - * Form. - * @param object $account - * Custom user object for validating constraints. - */ -function _password_policy_is_administrator_registering_user(array $form, $account) { - $form_id = $form['#form_id']; - return $form_id == 'user_register_form' && !_password_policy_is_current_user($account); -} - -/** - * Determines whether administrator is editing an existing user. - * - * @param array $form - * Form. - * @param object $account - * Custom user object for validating constraints. - */ -function _password_policy_is_administrator_editing_user(array $form, $account) { - $form_id = $form['#form_id']; - return $form_id == 'user_profile_form' && !_password_policy_is_current_user($account); -} - -/** - * Adds roles chosen for user on form to the user object. + * Adds roles selected for user on form to the user object. * * @param array $form_state * Form state. * @param object $account * Custom user object for validating constraints. */ -function _password_policy_add_chosen_roles_to_account(array $form_state, &$account) { +function _password_policy_add_selected_roles_to_account(array $form_state, &$account) { $rids = array_keys(array_filter($form_state['values']['roles'])); $roles = array_combine($rids, $rids); $account->roles = $roles;