self registration with confirmation working (needs still improvements: sender email, info messages)

This commit is contained in:
Helmut Merz 2013-05-06 08:00:09 +02:00
parent 7b9a85a586
commit 9427b8ccbd
4 changed files with 40 additions and 19 deletions

Binary file not shown.

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: 0.13.0\n" "Project-Id-Version: 0.13.0\n"
"POT-Creation-Date: 2007-05-22 12:00 CET\n" "POT-Creation-Date: 2007-05-22 12:00 CET\n"
"PO-Revision-Date: 2013-04-06 12:00 CET\n" "PO-Revision-Date: 2013-05-05 12:00 CET\n"
"Last-Translator: Helmut Merz <helmutm@cy55.de>\n" "Last-Translator: Helmut Merz <helmutm@cy55.de>\n"
"Language-Team: loops developers <helmutm@cy55.de>\n" "Language-Team: loops developers <helmutm@cy55.de>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -86,6 +86,9 @@ msgstr "Thema bearbeiten..."
msgid "Modify topic." msgid "Modify topic."
msgstr "Thema ändern" msgstr "Thema ändern"
msgid "Please correct the indicated errors."
msgstr "Bitte berichtigen Sie die angezeigten Fehler."
# blog # blog
msgid "Edit Blog Post..." msgid "Edit Blog Post..."
@ -759,12 +762,18 @@ msgstr "Teilnehmerregistrierung"
msgid "Register" msgid "Register"
msgstr "Benutzer registrieren" msgstr "Benutzer registrieren"
msgid "Login name already taken."
msgstr "Die von Ihnen eingegebene Benutzerkennung ist schon vergeben."
msgid "Your old password was not entered correctly." msgid "Your old password was not entered correctly."
msgstr "Sie haben Ihr altes Passwort nicht korrekt eingegeben." msgstr "Sie haben Ihr altes Passwort nicht korrekt eingegeben."
msgid "Password and password confirmation do not match." msgid "Password and password confirmation do not match."
msgstr "Die Passwort-Wiederholung stimmt nicht mit dem eingegebenen Passwort überein." msgstr "Die Passwort-Wiederholung stimmt nicht mit dem eingegebenen Passwort überein."
msgid "The user account has been created."
msgstr "Ihr Benutzerkonto wurde eingerichtet."
msgid "Your password has been changed." msgid "Your password has been changed."
msgstr "Ihr Passwort wurde geändert." msgstr "Ihr Passwort wurde geändert."

View file

@ -111,6 +111,10 @@ class BaseMemberRegistration(NodeView):
def item(self): def item(self):
return self return self
@Lazy
def data(self):
return self.request.form
def getPrincipalAnnotation(self, principal): def getPrincipalAnnotation(self, principal):
return annotations(principal).get(ANNOTATION_KEY, None) return annotations(principal).get(ANNOTATION_KEY, None)
@ -201,12 +205,13 @@ class SecureMemberRegistration(BaseMemberRegistration, CreateForm):
regMan = IMemberRegistrationManager(self.context.getLoopsRoot()) regMan = IMemberRegistrationManager(self.context.getLoopsRoot())
pw = generateName() pw = generateName()
email = form.get('email') email = form.get('email')
result = regMan.register(login, pw, try:
form.get('lastName'), form.get('firstName'), result = regMan.register(login, pw,
email=email,) form.get('lastName'), form.get('firstName'),
if isinstance(result, dict): email=email,)
fi = formState.fieldInstances[result['fieldName']] except ValueError, e:
fi.setError(result['error'], self.formErrors) fi = formState.fieldInstances['loginName']
fi.setError('duplicate_loginname', self.formErrors)
formState.severity = max(formState.severity, fi.severity) formState.severity = max(formState.severity, fi.severity)
return True return True
self.object = result self.object = result
@ -225,11 +230,11 @@ class SecureMemberRegistration(BaseMemberRegistration, CreateForm):
url = u'%s/selfservice_confirmation.html?login=%s&id=%s' % ( url = u'%s/selfservice_confirmation.html?login=%s&id=%s' % (
baseUrl, userid, id,) baseUrl, userid, id,)
recipients = [recipient] recipients = [recipient]
message = u'Um die Anmeldung abzuschliessen muessen Sie folgenden Link betaetigen:\n\n' message = _(u'confirmation_mail_text') + u':\n\n'
message = (message + url).encode('UTF-8') message = (message + url).encode('UTF-8')
sender = 'webmaster@zeitraum-bayern.de' sender = 'helmutm@cy55.de'
msg = MIMEText(message, 'plain', 'utf-8') msg = MIMEText(message, 'plain', 'utf-8')
msg['Subject'] = 'Benutzer-Registrierung' msg['Subject'] = _(u'confirmation_mail_subject')
msg['From'] = sender msg['From'] = sender
msg['To'] = ', '.join(recipients) msg['To'] = ', '.join(recipients)
mailhost = component.getUtility(IMailDelivery, 'Mail') mailhost = component.getUtility(IMailDelivery, 'Mail')
@ -263,12 +268,10 @@ class ConfirmMemberRegistration(BaseMemberRegistration, Form):
schema = super(ConfirmMemberRegistration, self).schema schema = super(ConfirmMemberRegistration, self).schema
schema.fields.remove('birthDate') schema.fields.remove('birthDate')
schema.fields.remove('phoneNumbers') schema.fields.remove('phoneNumbers')
schema.fields.loginName.readonly = True schema.fields.remove('loginName')
schema.fields.reorder(-2, 'loginName') schema.fields.remove('firstName')
schema.fields.firstName.readonly = True schema.fields.remove('lastName')
schema.fields.lastName.readonly = True schema.fields.remove('email')
schema.fields.firstName.readonly = True
schema.fields.email.readonly = True
return schema return schema
def update(self): def update(self):
@ -285,11 +288,19 @@ class ConfirmMemberRegistration(BaseMemberRegistration, Form):
id = form.get('id') id = form.get('id')
if not id or id != pa.get('id'): if not id or id != pa.get('id'):
return True return True
instance = component.getAdapter(self.object, IInstance, name='editor')
instance.template = self.schema
self.formState = formState = instance.applyTemplate(data=form,
fieldHandlers=self.fieldHandlers)
#formState = self.formState = self.validate(form)
if formState.severity > 0:
return True
pw = form.get('password') pw = form.get('password')
pwConfirm = form.get('passwordConfirm') pwConfirm = form.get('passwordConfirm')
if pw != pwConfirm: if pw != pwConfirm:
msg = self.errorMessages['confirm_nomatch'] fi = formState.fieldInstances['password']
self.request.form['message'] = msg fi.setError('confirm_nomatch', self.formErrors)
formState.severity = max(formState.severity, fi.severity)
return True return True
del pa['id'] del pa['id']
del pa['timestamp'] del pa['timestamp']

View file

@ -79,7 +79,8 @@ class MemberRegistrationManager(object):
if pfName is None: if pfName is None:
pfName = options(self.principalfolder_key, pfName = options(self.principalfolder_key,
(self.default_principalfolder,))[0] (self.default_principalfolder,))[0]
self.createPrincipal(pfName, userId, password, lastName, firstName, useExisting=useExisting) self.createPrincipal(pfName, userId, password, lastName, firstName,
useExisting=useExisting)
if len(groups)==0: if len(groups)==0:
groups = options(self.groups_key, ()) groups = options(self.groups_key, ())
self.setGroupsForPrincipal(pfName, userId, groups=groups) self.setGroupsForPrincipal(pfName, userId, groups=groups)