From 04943cf4ed94d2e336f391420f8d4018fe6868f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 28 Jul 2011 15:22:46 +0200 Subject: [PATCH] Add widget with custom view for mail number --- themis/fields/__init__.py | 5 +++++ themis/fields/editors.py | 3 +++ themis/fields/editors.zcml | 5 +++++ themis/fields/handlers.py | 7 ++++++- themis/fields/handlers.zcml | 5 +++++ themis/fields/interfaces.py | 12 ++++++++++++ themis/fields/mail_id_display.pt | 23 +++++++++++++++++++++++ themis/fields/widgets.py | 28 ++++++++++++++++++++++++++++ themis/fields/widgets.zcml | 9 +++++++++ 9 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 themis/fields/mail_id_display.pt diff --git a/themis/fields/__init__.py b/themis/fields/__init__.py index 2a272ea..0a17998 100644 --- a/themis/fields/__init__.py +++ b/themis/fields/__init__.py @@ -26,6 +26,7 @@ from themis.fields.interfaces import IDateOnly from themis.fields.interfaces import IRadioChoice from themis.fields.interfaces import ISubjects, ILegisSession, IList from themis.fields.interfaces import IRelatedDoc +from themis.fields.interfaces import IMailId from themis.fields.interfaces import IMailRefId from themis.fields.vocabs import SubjectsSource @@ -354,6 +355,10 @@ class RelatedDoc(Relation): return clone +class MailId(TextLine): + implements(IMailId, IFromUnicode) + + class MailRefId(TextLine): implements(IMailRefId, IFromUnicode) diff --git a/themis/fields/editors.py b/themis/fields/editors.py index cad3f68..b7d8460 100644 --- a/themis/fields/editors.py +++ b/themis/fields/editors.py @@ -13,6 +13,7 @@ from themis.fields import Deputy, Deputies from themis.fields import Ministry, Ministries from themis.fields import DeputyOrMinistry, DeputiesOrMinistries from themis.fields import RelatedDoc +from themis.fields import MailId from themis.fields import MailRefId from plone.schemaeditor.fields import FieldFactory @@ -47,3 +48,5 @@ RadioChoiceFactory = FieldFactory(RadioChoice, u'Choice (radio)', values=[]) RelatedDocFactory = FieldFactory(RelatedDoc, u'Related Document') MailRefIdFactory = FieldFactory(MailRefId, u'Mail Reference') + +MailIdFactory = FieldFactory(MailId, u'Mail Number') diff --git a/themis/fields/editors.zcml b/themis/fields/editors.zcml index 1a15aff..fc65989 100644 --- a/themis/fields/editors.zcml +++ b/themis/fields/editors.zcml @@ -77,6 +77,11 @@ component=".editors.RelatedDocFactory" /> + + + + + + diff --git a/themis/fields/widgets.py b/themis/fields/widgets.py index a64b93c..7548e80 100644 --- a/themis/fields/widgets.py +++ b/themis/fields/widgets.py @@ -21,6 +21,7 @@ from themis.fields.interfaces import IMinistry, IMinistries from themis.fields.interfaces import IDeputyOrMinistry, IDeputiesOrMinistries from themis.fields.interfaces import IOrderedSelectAndAddWidget from themis.fields.interfaces import IRelatedDoc +from themis.fields.interfaces import IMailId, IMailIdWidget from themis.fields.interfaces import IMailRefId, IMailRefIdWidget from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget @@ -194,6 +195,33 @@ def RelatedDocFieldWidget(field, request): return FieldWidget(field, ContentTreeWidget(request)) +class MailIdWidget(TextWidget): + implements(IMailIdWidget) + + def get_matching_object(self): + catalog = getToolByName(self.context, 'portal_catalog') + results = catalog(themis_mail_ref=self.value) + objects = [x.getObject() for x in results] + if len(objects) == 0: + return None + if len(objects) > 1: + pass # should we display a warning? + return objects[0] + + def href(self): + object = self.get_matching_object() + if object: + return object.absolute_url() + return None + + +@adapter(IMailId, IFormLayer) +@implementer(IFieldWidget) +def MailIdFieldWidget(field, request): + """IFieldWidget factory for MailId""" + return FieldWidget(field, MailIdWidget(request)) + + class MailRefIdWidget(TextWidget): implements(IMailRefIdWidget) diff --git a/themis/fields/widgets.zcml b/themis/fields/widgets.zcml index a313559..0d650ec 100644 --- a/themis/fields/widgets.zcml +++ b/themis/fields/widgets.zcml @@ -30,6 +30,7 @@ + @@ -60,10 +61,18 @@ class="plone.formwidget.autocomplete.widget.AutocompleteSearch" /> + + +