Adding a special widget view for mail ref id fields

This commit is contained in:
Frédéric Péters 2011-07-28 15:05:56 +02:00
parent 9c8662b8a3
commit 799b04604b
4 changed files with 53 additions and 4 deletions

View File

@ -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

View File

@ -0,0 +1,23 @@
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal"
tal:omit-tag="">
<a id="" class="" href="#"
tal:attributes="id view/id;
class view/klass;
style view/style;
title view/title;
lang view/lang;
href view/href;
onclick view/onclick;
ondblclick view/ondblclick;
onmousedown view/onmousedown;
onmouseup view/onmouseup;
onmouseover view/onmouseover;
onmousemove view/onmousemove;
onmouseout view/onmouseout;
onkeypress view/onkeypress;
onkeydown view/onkeydown;
onkeyup view/onkeyup"><tal:block
condition="view/value" content="view/value"
/></a>
</html>

View File

@ -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))

View File

@ -60,4 +60,10 @@
class="plone.formwidget.autocomplete.widget.AutocompleteSearch"
/>
<z3c:widgetTemplate
mode="display"
widget=".interfaces.IMailRefIdWidget"
layer="z3c.form.interfaces.IFormLayer"
template="mail_ref_id_display.pt"
/>
</configure>