Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions news/230.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Allow the ContentBrowserWidget to be used inside an object widget
6 changes: 6 additions & 0 deletions plone/app/z3cform/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from Products.CMFCore.interfaces import IContentish
from Products.CMFCore.interfaces import IFolderish
from Products.CMFCore.interfaces import ISiteRoot
from z3c.form.browser.object import ObjectWidget
from z3c.form.interfaces import IForm
from zope.component import providedBy
from zope.component.hooks import getSite
Expand Down Expand Up @@ -143,6 +144,11 @@ def dict_merge(dict_a, dict_b):

def get_widget_form(widget):
form = getattr(widget, "form", None)
if isinstance(form, ObjectWidget):
# ObjectWidget are container widgets,
# the proper form is the one they belong to
return get_widget_form(form)

if getattr(aq_base(form), "parentForm", None) is not None:
form = form.parentForm
return form
Expand Down
4 changes: 4 additions & 0 deletions plone/app/z3cform/widgets/contentbrowser.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from plone.base.navigationroot import get_navigation_root_object
from plone.base.utils import get_top_site_from_url
from Products.CMFCore.utils import getToolByName
from z3c.form.browser.object import ObjectWidget
from z3c.form.interfaces import IEditForm
from z3c.form.interfaces import IFieldWidget
from z3c.form.interfaces import IForm
Expand Down Expand Up @@ -152,9 +153,12 @@ def get_pattern_options(self):
view_context = get_widget_form(self)
# For EditForms and non-Forms (in tests), the vocabulary is looked
# up on the context, otherwise on the view

if IEditForm.providedBy(view_context):
if self.is_subform_widget():
view_context = self.form.parentForm.context
elif isinstance(self.form, ObjectWidget):
view_context = self.form.form.context
elif not ISimpleItem.providedBy(context):
view_context = self.form.context
else:
Expand Down