======
Nutzer
======
Plone 4 ermöglicht mit `plone.app.users`_ neue Felder zum Registrieren an der Website und den persönlichen Einstellungen hinzuzufügen.
.. _`plone.app.users`: http://pypi.python.org/pypi/plone.app.users
Überschreiben des bestehenden Schemas
=====================================
Das Standardschema von ``plone.app.users`` ist in einem Hilfsprogramm (*Utility*) definiert, das überschrieben werden muss um ein neues Schema anzulegen. Dies geschieht in der Datei ``profiles/default/componentregistry.xml``::
Nun wird die *factory* in ``userdataschema.py`` erstellt::
from plone.app.users.userdataschema import IUserDataSchemaProvider
class UserDataSchemaProvider(object):
implements(IUserDataSchemaProvider)
def getSchema(self):
"""
"""
return IEnhancedUserDataSchema
Schließlich wird eine Unterklasse des Standardschemas ``IUserDataSchema`` erstellt::
from plone.app.users.userdataschema import IUserDataSchema
class IEnhancedUserDataSchema(IUserDataSchema):
""" Use all the fields from the default user data schema, and add various
extra fields.
"""
Hinzufügen neuer Felder
=======================
Nun können neue Felder definiert werden, z.B.::
newsletter = schema.Bool(
title=_(u'label_newsletter', default=u'Subscribe to newsletter'),
description=_(u'help_newsletter',
default=u"If you tick this box, we'll subscribe you to "
"our newsletter."),
required=False,
)
Bedingungen
-----------
Felder mit Bedingungen für eine erfolgreiche Anmeldung können als ``constraint`` angegeben werden, z.B.::
def validateAccept(value):
if not value == True:
return False
return True
class IEnhancedUserDataSchema(IUserDataSchema):
# ...
accept = schema.Bool(
title=_(u'label_accept', default=u'Accept terms of use'),
description=_(u'help_accept',
default=u"Tick this box to indicate that you have found,"
" read and accepted the terms of use for this site. "),
required=True,
constraint=validateAccept,
)
Eigenschaften
=============
Neue Eigenschaften lassen sich in den *memberdata properties* speichern indem eine Datei ``memberdata_properties.xml`` in ``profiles/default/`` erstellt wird. Dabei werden alle Felder hinzugefügt bis auf das ``accept``-Feld, das zwingend für die Registrierung erforderlich ist::
Registrierung
=============
Die Felder für die Registrierung werden in ``profiles/default/propertiestool.xml`` angegeben::
Persönliche Informationen
=========================
Um die Felder auch im Formular mit den persönlichen Informationen ``@@personal-information`` zu sehen, wird zunächst der Adapter des Nutzerobjekts in der ``overrides.zcml`` überschrieben::
Anschließend müssen leider die Felder nochmals angegeben werden. Hierzu fügen wir ``adapter.py`` hinzu mit::
from plone.app.users.browser.personalpreferences import UserDataPanelAdapter
class EnhancedUserDataPanelAdapter(UserDataPanelAdapter):
"""
"""
def get_newsletter(self):
return self.context.getProperty('newsletter', '')
def set_newsletter(self, value):
return self.context.setMemberProperties({'newsletter': value})
newsletter = property(get_newsletter, set_newsletter)
def get_accept(self):
return self.context.getProperty('accept', '')
def set_accept(self, value):
return self.context.setMemberProperties({'accept': value})
accept = property(get_accept, set_accept)
Zum Weiterlesen
===============
`Member manipulation `_
Getting logged-in member, any member and member information
`collective.examples.userdata `_
Python-Egg mit Beispielen, wie das Schema der Nutzerdaten erweitert werden
kann.