work in progress: info texts and feedback pages for self-service registration
This commit is contained in:
parent
d84e8de9a0
commit
3f1ffdb8f4
6 changed files with 66 additions and 19 deletions
|
@ -481,7 +481,7 @@ class BaseView(GenericView, I18NView):
|
||||||
return absoluteURL(provider, self.request)
|
return absoluteURL(provider, self.request)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def renderText(self, text, contentType):
|
def renderText(self, text, contentType='text/restructured'):
|
||||||
text = util.toUnicode(text)
|
text = util.toUnicode(text)
|
||||||
typeKey = util.renderingFactories.get(contentType, None)
|
typeKey = util.renderingFactories.get(contentType, None)
|
||||||
if typeKey is None:
|
if typeKey is None:
|
||||||
|
|
Binary file not shown.
|
@ -774,7 +774,7 @@ msgstr "Die Passwort-Wiederholung stimmt nicht mit dem eingegebenen Passwort üb
|
||||||
msgid "confirmation_mail_subject"
|
msgid "confirmation_mail_subject"
|
||||||
msgstr "Benutzer-Registrierung"
|
msgstr "Benutzer-Registrierung"
|
||||||
|
|
||||||
msgid "confirmation_mail_text."
|
msgid "confirmation_mail_text"
|
||||||
msgstr "Bitte clicken Sie auf den folgenden Link, um die Anmeldung abzschließen."
|
msgstr "Bitte clicken Sie auf den folgenden Link, um die Anmeldung abzschließen."
|
||||||
|
|
||||||
msgid "The user account has been created."
|
msgid "The user account has been created."
|
||||||
|
|
|
@ -185,7 +185,7 @@ sure that a principal object can be served by a corresponding factory):
|
||||||
... 'lastName': u'Sawyer',
|
... 'lastName': u'Sawyer',
|
||||||
... 'firstName': u'Tom',
|
... 'firstName': u'Tom',
|
||||||
... 'email': u'tommy@sawyer.com',
|
... 'email': u'tommy@sawyer.com',
|
||||||
... 'action': 'update',}
|
... 'form.action': 'update',}
|
||||||
|
|
||||||
and register it.
|
and register it.
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,7 @@ class BaseMemberRegistration(NodeView):
|
||||||
|
|
||||||
interface = IMemberRegistration # TODO: add company, create institution
|
interface = IMemberRegistration # TODO: add company, create institution
|
||||||
message = _(u'The user account has been created.')
|
message = _(u'The user account has been created.')
|
||||||
|
template = form_macros
|
||||||
|
|
||||||
formErrors = dict(
|
formErrors = dict(
|
||||||
confirm_nomatch=FormError(_(u'Password and password confirmation do not match.')),
|
confirm_nomatch=FormError(_(u'Password and password confirmation do not match.')),
|
||||||
|
@ -95,6 +96,17 @@ class BaseMemberRegistration(NodeView):
|
||||||
permissions_key = u'registration.permissions'
|
permissions_key = u'registration.permissions'
|
||||||
roles_key = u'registration.roles'
|
roles_key = u'registration.roles'
|
||||||
registration_adapter_key = u'registration.adapter'
|
registration_adapter_key = u'registration.adapter'
|
||||||
|
text_names_prefix = 'organize.member.registration'
|
||||||
|
# texts: reg_info, reg_feedback, conf_mail, conf_info, conf_feedback
|
||||||
|
info_key = 'reg_info'
|
||||||
|
feedback_key = 'reg_feedback'
|
||||||
|
|
||||||
|
isInnerHtml = False
|
||||||
|
showAssignments = False
|
||||||
|
form_action = 'register'
|
||||||
|
|
||||||
|
def closeAction(self, submit=True):
|
||||||
|
return u''
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def macro(self):
|
def macro(self):
|
||||||
|
@ -118,6 +130,21 @@ class BaseMemberRegistration(NodeView):
|
||||||
def getPrincipalAnnotation(self, principal):
|
def getPrincipalAnnotation(self, principal):
|
||||||
return annotations(principal).get(ANNOTATION_KEY, None)
|
return annotations(principal).get(ANNOTATION_KEY, None)
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def infoText(self):
|
||||||
|
name = '.'.join((self.text_names_prefix, self.info_key))
|
||||||
|
text = self.resourceManager.get(name)
|
||||||
|
if text:
|
||||||
|
return self.renderText(text.data)
|
||||||
|
return u''
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def feedbackUrl(self):
|
||||||
|
name = '.'.join((self.text_names_prefix, self.feedback_key))
|
||||||
|
text = self.resourceManager.get(name)
|
||||||
|
if text:
|
||||||
|
return self.getUrlForTarget(text)
|
||||||
|
|
||||||
|
|
||||||
class MemberRegistration(BaseMemberRegistration, CreateForm):
|
class MemberRegistration(BaseMemberRegistration, CreateForm):
|
||||||
|
|
||||||
|
@ -135,7 +162,7 @@ class MemberRegistration(BaseMemberRegistration, CreateForm):
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
form = self.request.form
|
form = self.request.form
|
||||||
if not form.get('action'):
|
if not form.get('form.action'):
|
||||||
return True
|
return True
|
||||||
instance = component.getAdapter(self.object, IInstance, name='editor')
|
instance = component.getAdapter(self.object, IInstance, name='editor')
|
||||||
instance.template = self.schema
|
instance.template = self.schema
|
||||||
|
@ -186,13 +213,17 @@ class SecureMemberRegistration(BaseMemberRegistration, CreateForm):
|
||||||
#schema.fields.reorder(-2, 'loginName')
|
#schema.fields.reorder(-2, 'loginName')
|
||||||
return schema
|
return schema
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def macro(self):
|
||||||
|
return organize_macros.macros['register']
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def object(self):
|
def object(self):
|
||||||
return Person(Concept())
|
return Person(Concept())
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
form = self.request.form
|
form = self.request.form
|
||||||
if not form.get('action'):
|
if not form.get('form.action'):
|
||||||
return True
|
return True
|
||||||
instance = component.getAdapter(self.object, IInstance, name='editor')
|
instance = component.getAdapter(self.object, IInstance, name='editor')
|
||||||
instance.template = self.schema
|
instance.template = self.schema
|
||||||
|
@ -221,6 +252,9 @@ class SecureMemberRegistration(BaseMemberRegistration, CreateForm):
|
||||||
pa['id'] = generateName()
|
pa['id'] = generateName()
|
||||||
pa['timestamp'] = datetime.utcnow()
|
pa['timestamp'] = datetime.utcnow()
|
||||||
self.notifyEmail(login, email, pa['id'])
|
self.notifyEmail(login, email, pa['id'])
|
||||||
|
if self.feedbackUrl:
|
||||||
|
self.request.response.redirect(self.feedbackUrl)
|
||||||
|
else:
|
||||||
msg = self.message
|
msg = self.message
|
||||||
self.request.response.redirect('%s?loops.message=%s' % (self.url, msg))
|
self.request.response.redirect('%s?loops.message=%s' % (self.url, msg))
|
||||||
return False
|
return False
|
||||||
|
@ -230,11 +264,18 @@ 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]
|
||||||
|
subject = _(u'confirmation_mail_subject')
|
||||||
|
name = '.'.join((self.text_names_prefix, self.feedback_key))
|
||||||
|
text = self.resourceManager.get(name)
|
||||||
|
if text:
|
||||||
|
message = text.data % url
|
||||||
|
subject = text.description or subject
|
||||||
|
else:
|
||||||
message = _(u'confirmation_mail_text') + u':\n\n'
|
message = _(u'confirmation_mail_text') + u':\n\n'
|
||||||
message = (message + url).encode('UTF-8')
|
message = (message + url).encode('UTF-8')
|
||||||
sender = 'helmutm@cy55.de'
|
sender = 'helmutm@cy55.de'
|
||||||
msg = MIMEText(message, 'plain', 'utf-8')
|
msg = MIMEText(message, 'plain', 'utf-8')
|
||||||
msg['Subject'] = _(u'confirmation_mail_subject')
|
msg['Subject'] = 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')
|
||||||
|
@ -245,15 +286,11 @@ class ConfirmMemberRegistration(BaseMemberRegistration, Form):
|
||||||
|
|
||||||
permissions_key = u'secure_registration.permissions'
|
permissions_key = u'secure_registration.permissions'
|
||||||
roles_key = u'secure_registration.roles'
|
roles_key = u'secure_registration.roles'
|
||||||
|
info_key = 'conf_info'
|
||||||
|
feedback_key = 'conf_feedback'
|
||||||
|
|
||||||
template = form_macros
|
|
||||||
isInnerHtml = False
|
|
||||||
showAssignments = False
|
|
||||||
form_action = 'confirm_registration'
|
form_action = 'confirm_registration'
|
||||||
|
|
||||||
def closeAction(self, submit=True):
|
|
||||||
return u''
|
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def macro(self):
|
def macro(self):
|
||||||
return organize_macros.macros['confirm']
|
return organize_macros.macros['confirm']
|
||||||
|
@ -306,6 +343,9 @@ class ConfirmMemberRegistration(BaseMemberRegistration, Form):
|
||||||
del pa['timestamp']
|
del pa['timestamp']
|
||||||
ip = getInternalPrincipal(userId)
|
ip = getInternalPrincipal(userId)
|
||||||
ip.setPassword(pw)
|
ip.setPassword(pw)
|
||||||
|
if self.feedbackUrl:
|
||||||
|
self.request.response.redirect(self.feedbackUrl)
|
||||||
|
else:
|
||||||
url = '%s?loops.message=%s' % (self.url, self.message)
|
url = '%s?loops.message=%s' % (self.url, self.message)
|
||||||
self.request.response.redirect(url)
|
self.request.response.redirect(url)
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -1,7 +1,14 @@
|
||||||
<html i18n:domain="loops">
|
<html i18n:domain="loops">
|
||||||
|
|
||||||
|
|
||||||
|
<metal:block define-macro="register">
|
||||||
|
<tal:info content="structure item/infoText" />
|
||||||
|
<metal:data use-macro="view/form_macros/edit" />
|
||||||
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
<metal:block define-macro="confirm">
|
<metal:block define-macro="confirm">
|
||||||
|
<tal:info content="structure item/infoText" />
|
||||||
<metal:data use-macro="view/form_macros/edit">
|
<metal:data use-macro="view/form_macros/edit">
|
||||||
<metal:custom fill-slot="custom_header">
|
<metal:custom fill-slot="custom_header">
|
||||||
<tbody><tr><td colspan="5">
|
<tbody><tr><td colspan="5">
|
||||||
|
|
Loading…
Add table
Reference in a new issue