diff --git a/themis.fields.egg-info/SOURCES.txt b/themis.fields.egg-info/SOURCES.txt
index 2cd92c1..86f1ac9 100644
--- a/themis.fields.egg-info/SOURCES.txt
+++ b/themis.fields.egg-info/SOURCES.txt
@@ -11,5 +11,6 @@ themis/fields/__init__.py
themis/fields/editors.py
themis/fields/handlers.py
themis/fields/interfaces.py
+themis/fields/marshaler.py
themis/fields/vocabs.py
themis/fields/widgets.py
\ No newline at end of file
diff --git a/themis/fields/__init__.py b/themis/fields/__init__.py
index 55914ec..1d8f9e0 100644
--- a/themis/fields/__init__.py
+++ b/themis/fields/__init__.py
@@ -4,6 +4,8 @@ from zope.schema import Choice, Field, List, Date, Orderable
from zope.schema.interfaces import IFromUnicode, IChoice
from zope.schema.interfaces import WrongType
+from z3c.relationfield.schema import RelationChoice, RelationList
+
from themis.fields.interfaces import ICommission
from themis.fields.interfaces import ICommissions
from themis.fields.vocabs import CommissionsSource
@@ -23,10 +25,14 @@ from themis.fields.vocabs import ContactsSource
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.vocabs import SubjectsSource
from themis.fields.vocabs import LegislativeSessionsSource
+from plone.formwidget.contenttree import ObjPathSourceBinder
+from z3c.relationfield.schema import Relation
+
class Commission(Field):
implements(ICommission, IChoice)
@@ -331,3 +337,18 @@ class RadioChoice(Choice):
implements(IRadioChoice)
+class RelatedDoc(Relation):
+ implements(IRelatedDoc)
+
+ def __init__(self, **kw):
+ super(RelatedDoc, self).__init__(**kw)
+ self.vocabulary = ObjPathSourceBinder()
+
+ source = property(lambda self: self.vocabulary)
+
+ def bind(self, object):
+ """See zope.schema._bootstrapinterfaces.IField."""
+ clone = super(RelatedDoc, self).bind(object)
+ clone.vocabulary = self.vocabulary(object)
+ return clone
+
diff --git a/themis/fields/editors.py b/themis/fields/editors.py
index e523851..d3abd8a 100644
--- a/themis/fields/editors.py
+++ b/themis/fields/editors.py
@@ -12,6 +12,7 @@ from themis.fields import Contact, Contacts
from themis.fields import Deputy, Deputies
from themis.fields import Ministry, Ministries
from themis.fields import DeputyOrMinistry, DeputiesOrMinistries
+from themis.fields import RelatedDoc
from plone.schemaeditor.fields import FieldFactory
@interface.implementer(editor_ifaces.IFieldEditFormSchema)
@@ -41,3 +42,5 @@ LegisSessionFactory = FieldFactory(LegisSession, u'Legislative Session')
DateOnlyFactory = FieldFactory(DateOnly, u'Date')
RadioChoiceFactory = FieldFactory(RadioChoice, u'Choice (radio)', values=[])
+
+RelatedDocFactory = FieldFactory(RelatedDoc, u'Related Document')
diff --git a/themis/fields/editors.zcml b/themis/fields/editors.zcml
index e416035..159af36 100644
--- a/themis/fields/editors.zcml
+++ b/themis/fields/editors.zcml
@@ -72,4 +72,9 @@
component=".editors.RadioChoiceFactory"
/>
+
+
diff --git a/themis/fields/handlers.py b/themis/fields/handlers.py
index 00923c5..28a1fc9 100644
--- a/themis/fields/handlers.py
+++ b/themis/fields/handlers.py
@@ -10,6 +10,7 @@ if HAVE_SUPERMODEL:
from zope.interface import implements
from zope.component import adapts
from plone.supermodel.interfaces import IToUnicode
+ from plone.app.relationfield.widget import RelationChoiceHandler
from themis.fields import Commission, Commissions
from themis.fields import DateOnly
@@ -20,6 +21,7 @@ if HAVE_SUPERMODEL:
from themis.fields import DeputyOrMinistry, DeputiesOrMinistries
from themis.fields import Contact, Contacts
from themis.fields import LegisSession
+ from themis.fields import RelatedDoc
class CommissionHandler_(BaseHandler):
pass
@@ -91,4 +93,9 @@ if HAVE_SUPERMODEL:
RadioChoiceHandler = RadioChoiceHandler_(RadioChoice)
+ class RelatedDocHandler_(BaseHandler):
+ pass
+
+ RelatedDocHandler = RelatedDocHandler_(RelatedDoc)
+
diff --git a/themis/fields/handlers.zcml b/themis/fields/handlers.zcml
index 9eb2d57..7cef426 100644
--- a/themis/fields/handlers.zcml
+++ b/themis/fields/handlers.zcml
@@ -74,4 +74,9 @@
name="themis.fields.RadioChoice"
/>
+
+
diff --git a/themis/fields/interfaces.py b/themis/fields/interfaces.py
index 8760c69..6295f2f 100644
--- a/themis/fields/interfaces.py
+++ b/themis/fields/interfaces.py
@@ -3,6 +3,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.relationfield.interfaces import IRelation
class ICommission(IField):
'''Field containing a unicode string without newlines that is a commission.'''
@@ -82,3 +83,13 @@ class IRadioChoice(IChoice):
required=False,
values=[])
+class IRelatedDoc(IRelation):
+ default = schema.Text(
+ title=IField['default'].title,
+ description=IField['default'].description,
+ required=False)
+
+ missing_value = schema.Text(
+ title=IField['missing_value'].title,
+ description=IField['missing_value'].description,
+ required=False)
diff --git a/themis/fields/widgets.py b/themis/fields/widgets.py
index 91ad89c..7882273 100644
--- a/themis/fields/widgets.py
+++ b/themis/fields/widgets.py
@@ -18,6 +18,7 @@ from themis.fields.interfaces import IDeputy, IDeputies
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 plone.formwidget.autocomplete.interfaces import IAutocompleteWidget
from plone.formwidget.autocomplete.widget import AutocompleteSelectionWidget
@@ -27,6 +28,7 @@ from z3c.form.browser.orderedselect import OrderedSelectWidget
from z3c.form.browser.checkbox import CheckBoxWidget
from z3c.form.browser.select import SelectWidget
from z3c.form.browser.radio import RadioWidget
+from plone.formwidget.contenttree.widget import ContentTreeWidget
@adapter(ICommission, IFormLayer)
@implementer(IFieldWidget)
@@ -181,3 +183,9 @@ class OrderedSelectAndAddWidget(OrderedSelectWidget):
self._bound_source = source
return self._bound_source
+@adapter(IRelatedDoc, IFormLayer)
+@implementer(IFieldWidget)
+def RelatedDocFieldWidget(field, request):
+ '''IFieldWidget factory for RadioChoiceWidget'''
+ return FieldWidget(field, ContentTreeWidget(request))
+
diff --git a/themis/fields/widgets.zcml b/themis/fields/widgets.zcml
index 89343f3..ffd411c 100644
--- a/themis/fields/widgets.zcml
+++ b/themis/fields/widgets.zcml
@@ -29,6 +29,7 @@
+