diff --git a/themis/datatypes/configure.zcml b/themis/datatypes/configure.zcml index 166066c..dafbda2 100644 --- a/themis/datatypes/configure.zcml +++ b/themis/datatypes/configure.zcml @@ -27,4 +27,6 @@ provides="themis.datatypes.deputy.INameFromPersonNames" factory="themis.datatypes.deputy.NameFromPersonNames" /> + + diff --git a/themis/datatypes/deputy.py b/themis/datatypes/deputy.py index f146444..c8acaa6 100644 --- a/themis/datatypes/deputy.py +++ b/themis/datatypes/deputy.py @@ -2,8 +2,10 @@ import datetime from five import grok from zope import schema -from zope.interface import implements -from zope.component import adapts, provideAdapter +from zope.schema import Field +from zope.schema.interfaces import IField, IFromUnicode +from zope.interface import implements, implementer +from zope.component import adapts, adapter, provideAdapter from z3c.relationfield.interfaces import IHasRelations from z3c.relationfield.schema import RelationChoice @@ -15,10 +17,41 @@ from plone.namedfile.field import NamedImage from plone.app.content.interfaces import INameFromTitle from plone.directives import form, dexterity +from z3c.form.browser.text import TextWidget +from z3c.form.interfaces import IFormLayer, IFieldWidget +from z3c.form.widget import FieldWidget + + from themis.datatypes.interfaces import MessageFactory as _ from themis.datatypes.polgroup import IPolGroup +class IAddress(IField): + title = schema.TextLine(title=_(u'Title'), required=False) + street = schema.TextLine(title=_(u'Street'), required=False) + zipcode = schema.TextLine(title=_(u'Zip'), required=False) + city = schema.TextLine(title=_(u'City'), required=False) + phone1 = schema.TextLine(title=_(u'Phone'), required=False) + phone2 = schema.TextLine(title=_(u'Phone 2'), required=False) + fax = schema.TextLine(title=_(u'Fax'), required=False) + email = schema.TextLine(title=_(u'Email'), required=False) + +class Address(Field): + implements(IAddress, IFromUnicode) + + def fromUnicode(self, str): + return None + + def __str__(self): + return u'/'.join([x for x in (self.title, self.street, self.zipcode, self.city) if x]) + +@adapter(IAddress, IFormLayer) +@implementer(IFieldWidget) +def AddressFieldWidget(field, request): + """IFieldWidget factory for Address.""" + return FieldWidget(field, TextWidget(request)) + + class IDeputy(form.Schema): firstname = schema.TextLine(title=_(u'First Name')) lastname = schema.TextLine(title=_(u'Last Name')) @@ -38,6 +71,10 @@ class IDeputy(form.Schema): degrees = schema.Text(title=_(u'Degrees'), required=False) mandates = schema.Text(title=_(u'Other Mandates'), required=False) + private_address = Address(title=_(u'Private Address'), required=False) + work_address = Address(title=_(u'Work Address'), required=False) + work_address_2 = Address(title=_(u'Work Address (2)'), required=False) + class INameFromPersonNames(INameFromTitle): def title():