diff --git a/themis/fields/interfaces.py b/themis/fields/interfaces.py index 68cf7ea..b1f0be8 100644 --- a/themis/fields/interfaces.py +++ b/themis/fields/interfaces.py @@ -2,7 +2,7 @@ from zope.interface import Interface from zope.schema.interfaces import IChoice, IField, IList, IDate from zope import schema -from z3c.form.interfaces import IOrderedSelectWidget +from z3c.form.interfaces import IOrderedSelectWidget, ITextWidget from z3c.relationfield.interfaces import IRelation class ICommission(IField): @@ -105,3 +105,6 @@ class IMailRefId(IField): description=IField['missing_value'].description, required=False) +class IMailRefIdWidget(ITextWidget): + pass + diff --git a/themis/fields/mail_ref_id_display.pt b/themis/fields/mail_ref_id_display.pt new file mode 100644 index 0000000..ed74e67 --- /dev/null +++ b/themis/fields/mail_ref_id_display.pt @@ -0,0 +1,23 @@ + + + diff --git a/themis/fields/widgets.py b/themis/fields/widgets.py index c76bd30..a64b93c 100644 --- a/themis/fields/widgets.py +++ b/themis/fields/widgets.py @@ -1,8 +1,10 @@ from Acquisition import ImplicitAcquisitionWrapper -from zope.interface import implementsOnly, implementer +from zope.interface import implements, implementsOnly, implementer from zope.component import adapts, adapter +from Products.CMFCore.utils import getToolByName + from z3c.form.interfaces import IFormLayer, IFieldWidget from z3c.form.widget import FieldWidget from collective.z3cform.datetimewidget import DateWidget @@ -19,7 +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 IMailRefId +from themis.fields.interfaces import IMailRefId, IMailRefIdWidget from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget from plone.formwidget.autocomplete.widget import AutocompleteSelectionWidget @@ -191,10 +193,25 @@ def RelatedDocFieldWidget(field, request): '''IFieldWidget factory for RadioChoiceWidget''' return FieldWidget(field, ContentTreeWidget(request)) + +class MailRefIdWidget(TextWidget): + implements(IMailRefIdWidget) + + def href(self): + catalog = getToolByName(self.context, 'portal_catalog') + results = catalog(themis_mail_number=self.value) + objects = [x.getObject() for x in results] + if len(objects) == 0: + return '' + if len(objects) > 1: + pass # should we display a warning? + return objects[0].absolute_url() + + @adapter(IMailRefId, IFormLayer) @implementer(IFieldWidget) def MailRefIdFieldWidget(field, request): """IFieldWidget factory for MailRefId""" - return FieldWidget(field, TextWidget(request)) + return FieldWidget(field, MailRefIdWidget(request)) diff --git a/themis/fields/widgets.zcml b/themis/fields/widgets.zcml index 83d7ac1..a313559 100644 --- a/themis/fields/widgets.zcml +++ b/themis/fields/widgets.zcml @@ -60,4 +60,10 @@ class="plone.formwidget.autocomplete.widget.AutocompleteSearch" /> +