work in progress: self registration with email notiification/confirmation

This commit is contained in:
Helmut Merz 2013-04-15 07:50:17 +02:00
parent cad21c5dc3
commit feb6ea1a06
3 changed files with 45 additions and 6 deletions

View file

@ -27,6 +27,18 @@
class="loops.organize.browser.member.MemberRegistration"
permission="zope.View" />
<browser:page
for="loops.interfaces.INode"
name="selfservice_registration.html"
class="loops.organize.browser.member.SecureMemberRegistration"
permission="zope.View" />
<browser:page
for="loops.interfaces.INode"
name="selfservice_confirmation.html"
class="loops.organize.browser.member.ConfirmMemberRegistration"
permission="zope.View" />
<browser:page
for="loops.interfaces.INode"
name="change_password.html"

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
# Copyright (c) 2013 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -19,8 +19,6 @@
"""
Definition of view classes and other browser related stuff for
members (persons).
$Id$
"""
from zope import interface, component
@ -78,7 +76,7 @@ class PersonalInfo(ConceptView):
class MemberRegistration(NodeView, CreateForm):
interface = IMemberRegistration
interface = IMemberRegistration # TODO: add company, create institution
message = _(u'The user account has been created.')
formErrors = dict(
@ -99,7 +97,7 @@ class MemberRegistration(NodeView, CreateForm):
def checkPermissions(self):
personType = adapted(self.conceptManager['person'])
perms = IOptions(personType)('registration.permission')
perms = IOptions(personType)(self.permissions_key)
if perms:
return checkPermission(perms[0], self.context)
return checkPermission('loops.ManageSite', self.context)
@ -114,7 +112,7 @@ class MemberRegistration(NodeView, CreateForm):
schema.fields.remove('birthDate')
schema.fields.reorder(-2, 'loginName')
return schema
# TODO: add company, create institution
@Lazy
def object(self):
return Person(Concept())
@ -157,6 +155,31 @@ class MemberRegistration(NodeView, CreateForm):
return False
class SecureMemberRegistration(MemberRegistration):
permissions_key = u'secure_registration.permissions'
roles_key = u'secure_registration.roles'
@Lazy
def schema(self):
schema = super(MemberRegistration, self).schema
schema.fields.remove('birthDate')
schema.fields.remove('password')
schema.fields.remove('passwordConfirm')
schema.fields.remove('phoneNumbers')
schema.fields.reorder(-2, 'loginName')
return schema
class ConfirmMemberRegistration(NodeView):
# TODO: control form via interface?
@Lazy
def macro(self):
return organize_macros.macros['confirm']
class PasswordChange(NodeView, Form):
interface = IPasswordChange

View file

@ -1,5 +1,9 @@
<html i18n:domain="loops">
<metal:registration define-macro="confirm">
</metal:registration>
<metal:task define-macro="task">
<metal:data use-macro="view/concept_macros/conceptdata">
</metal:data>