From: Maurits v. R. <svn...@pl...> - 2009-12-06 00:40:47
|
Author: maurits Date: Sun Dec 6 00:21:20 2009 New Revision: 32321 Modified: plone.app.users/trunk/CHANGES.txt plone.app.users/trunk/plone/app/users/browser/register.py plone.app.users/trunk/plone/app/users/tests/registration_forms.txt Log: Make the password field optional for the admin when instead an email can be sent. Modified: plone.app.users/trunk/CHANGES.txt ============================================================================== --- plone.app.users/trunk/CHANGES.txt (original) +++ plone.app.users/trunk/CHANGES.txt Sun Dec 6 00:21:20 2009 @@ -4,6 +4,10 @@ 1.0a3 - Unreleased ------------------ +- Make the password field optional for the admin when instead an email + can be sent. + [maurits] + - On the anonymous registration form, do not offer to send an email with a link to reset your password if the password fields are right there on the form already; we were never actually sending emails Modified: plone.app.users/trunk/plone/app/users/browser/register.py ============================================================================== --- plone.app.users/trunk/plone/app/users/browser/register.py (original) +++ plone.app.users/trunk/plone/app/users/browser/register.py Sun Dec 6 00:21:20 2009 @@ -218,6 +218,11 @@ else: all_fields['email'].custom_widget = EmailWidget + # Make sure some fields are really required; a previous call + # might have changed the default. + for name in ('password', 'password_ctl'): + all_fields[name].field.required = True + # Pass the list of join form fields as a reference to the # Fields constructor, and return. return form.Fields(*[all_fields[id] for id in registration_fields]) @@ -265,7 +270,6 @@ self.widgets['password'].error = err_str self.widgets['password_ctl'].error = err_str - # Password field should have a minimum length of 5 if 'password' in form_field_names: # Skip this check if password fields already have an error @@ -277,7 +281,6 @@ 'password', u'label_password', err_str)) self.widgets['password'].error = err_str - username = '' email = '' try: @@ -326,6 +329,19 @@ 'email', u'label_email', err_str)) self.widgets['email'].error = err_str + if 'password' in form_field_names and not 'password' in error_keys: + # Admin can either set a password or mail the user (or both). + if not (self.widgets['password'].getInputValue() or + self.widgets['mail_me'].getInputValue()): + err_str = _('msg_no_password_no_mail_me', + default=u"You must set a password or choose to " + "send an email.") + errors.append(WidgetInputError( + 'password', u'label_password', err_str)) + self.widgets['password'].error = err_str + errors.append(WidgetInputError( + 'mail_me', u'label_mail_me', err_str)) + self.widgets['mail_me'].error = err_str return errors @form.action(_(u'label_register', default=u'Register'), @@ -485,7 +501,11 @@ if not mail_settings_correct: defaultFields['mail_me'].custom_widget = CantSendMailWidget else: - # XXX Perhaps we could make the password fields optional? + # Make the password fields optional: either specify a + # password or mail the user (or both). The validation + # will check that at least one of the options is chosen. + defaultFields['password'].field.required = False + defaultFields['password_ctl'].field.required = False portal = getUtility(ISiteRoot) if portal.getProperty('validate_email', True): defaultFields['mail_me'].field.default = True Modified: plone.app.users/trunk/plone/app/users/tests/registration_forms.txt ============================================================================== --- plone.app.users/trunk/plone/app/users/tests/registration_forms.txt (original) +++ plone.app.users/trunk/plone/app/users/tests/registration_forms.txt Sun Dec 6 00:21:20 2009 @@ -204,11 +204,10 @@ Fill out the form. >>> browser.getControl('User Name').value = 'user4' >>> browser.getControl('E-mail').value = 'us...@ex...' - >>> browser.getControl('Password').value = 'secret' - >>> browser.getControl('Confirm password').value = 'secret' >>> browser.getControl('Reviewers').selected = True - As we want to validate emails, by default mail_me is checked. + As we want to validate emails, by default mail_me is checked. The + password fields have become optional. >>> browser.getControl(name='form.mail_me').value True >>> browser.getControl('Register').click() |