Add widget with custom view for mail number
This commit is contained in:
parent
799b04604b
commit
04943cf4ed
|
@ -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)
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -77,6 +77,11 @@
|
|||
component=".editors.RelatedDocFactory"
|
||||
/>
|
||||
|
||||
<utility
|
||||
name="themis.fields.MailId"
|
||||
component=".editors.MailIdFactory"
|
||||
/>
|
||||
|
||||
<utility
|
||||
name="themis.fields.MailRefId"
|
||||
component=".editors.MailRefIdFactory"
|
||||
|
|
|
@ -22,6 +22,7 @@ if HAVE_SUPERMODEL:
|
|||
from themis.fields import Contact, Contacts
|
||||
from themis.fields import LegisSession
|
||||
from themis.fields import RelatedDoc
|
||||
from themis.fields import MailId
|
||||
from themis.fields import MailRefId
|
||||
|
||||
class CommissionHandler_(BaseHandler):
|
||||
|
@ -99,9 +100,13 @@ if HAVE_SUPERMODEL:
|
|||
|
||||
RelatedDocHandler = RelatedDocHandler_(RelatedDoc)
|
||||
|
||||
class MailIdHandler_(BaseHandler):
|
||||
pass
|
||||
|
||||
MailIdHandler = MailIdHandler_(MailId)
|
||||
|
||||
class MailRefIdHandler_(BaseHandler):
|
||||
pass
|
||||
|
||||
MailRefIdHandler = MailRefIdHandler_(MailRefId)
|
||||
|
||||
|
||||
|
|
|
@ -79,6 +79,11 @@
|
|||
name="themis.fields.RelatedDoc"
|
||||
/>
|
||||
|
||||
<utility
|
||||
component=".handlers.MailIdHandler"
|
||||
name="themis.fields.MailId"
|
||||
/>
|
||||
|
||||
<utility
|
||||
component=".handlers.MailRefIdHandler"
|
||||
name="themis.fields.MailRefId"
|
||||
|
|
|
@ -94,6 +94,18 @@ class IRelatedDoc(IRelation):
|
|||
description=IField['missing_value'].description,
|
||||
required=False)
|
||||
|
||||
class IMailId(IField):
|
||||
default = schema.Text(
|
||||
description=IField['default'].description,
|
||||
required=False)
|
||||
|
||||
missing_value = schema.Text(
|
||||
title=IField['missing_value'].title,
|
||||
description=IField['missing_value'].description,
|
||||
required=False)
|
||||
|
||||
class IMailIdWidget(ITextWidget):
|
||||
pass
|
||||
|
||||
class IMailRefId(IField):
|
||||
default = schema.Text(
|
||||
|
|
|
@ -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>
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
<adapter factory=".widgets.DateFieldWidget"/>
|
||||
<adapter factory=".widgets.RadioChoiceFieldWidget"/>
|
||||
<adapter factory=".widgets.RelatedDocFieldWidget"/>
|
||||
<adapter factory=".widgets.MailIdFieldWidget"/>
|
||||
<adapter factory=".widgets.MailRefIdFieldWidget"/>
|
||||
|
||||
<class class=".widgets.OrderedSelectAndAddWidget">
|
||||
|
@ -60,10 +61,18 @@
|
|||
class="plone.formwidget.autocomplete.widget.AutocompleteSearch"
|
||||
/>
|
||||
|
||||
<z3c:widgetTemplate
|
||||
mode="display"
|
||||
widget=".interfaces.IMailIdWidget"
|
||||
layer="z3c.form.interfaces.IFormLayer"
|
||||
template="mail_id_display.pt"
|
||||
/>
|
||||
|
||||
<z3c:widgetTemplate
|
||||
mode="display"
|
||||
widget=".interfaces.IMailRefIdWidget"
|
||||
layer="z3c.form.interfaces.IFormLayer"
|
||||
template="mail_ref_id_display.pt"
|
||||
/>
|
||||
|
||||
</configure>
|
||||
|
|
Reference in New Issue