diff -r bf12603398b2 -r f933926ed0a1 src/pyams_content/component/theme/zmi/__init__.py --- a/src/pyams_content/component/theme/zmi/__init__.py Tue Jul 10 16:59:55 2018 +0200 +++ b/src/pyams_content/component/theme/zmi/__init__.py Wed Jul 11 10:18:10 2018 +0200 @@ -17,12 +17,12 @@ # import interfaces from pyams_content.component.theme import ITagsTarget, ITagsInfo, ITagsManager, IThemesTarget, IThemesInfo, \ - IThemesManagerTarget, IThemesManager + IThemesManagerTarget, IThemesManager, ICollectionsTarget, ICollectionsInfo, ICollectionsManager, \ + ICollectionsManagerTarget from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION from pyams_form.interfaces.form import IWidgetForm from pyams_skin.interfaces import IInnerPage, IPageHeader, IDialog from pyams_skin.layer import IPyAMSLayer -from pyams_thesaurus.interfaces.thesaurus import IThesaurus from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION from pyams_zmi.interfaces.menu import IPropertiesMenu from pyams_zmi.layer import IAdminLayer @@ -32,9 +32,8 @@ from pyams_form.form import ajax_config, AJAXEditForm, EditForm from pyams_pagelet.pagelet import pagelet_config from pyams_skin.viewlet.menu import MenuItem -from pyams_thesaurus.widget import ThesaurusTermsTreeFieldWidget +from pyams_thesaurus.zmi.widget import ThesaurusTermsTreeFieldWidget from pyams_utils.adapter import adapter_config -from pyams_utils.registry import query_utility from pyams_utils.traversing import get_parent from pyams_viewlet.viewlet import viewlet_config from pyams_zmi.form import AdminEditForm, AdminDialogEditForm @@ -72,33 +71,13 @@ fields = field.Fields(ITagsInfo) fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget - def __init__(self, context, request): - super(TagsEditForm, self).__init__(context, request) - manager = ITagsManager(request.root) - self.thesaurus_name = manager.thesaurus_name - self.extract_name = manager.extract_name - def updateWidgets(self, prefix=None): super(TagsEditForm, self).updateWidgets(prefix) - widget = self.widgets['tags'] - widget.thesaurus_name = self.thesaurus_name - widget.extract_name = self.extract_name - - @property - def top_terms(self): - thesaurus = query_utility(IThesaurus, name=self.thesaurus_name) - if thesaurus is not None: - return sorted(thesaurus.get_top_terms(extract=self.extract_name), - key=lambda x: x.label) - else: - return () - - def get_subterms(self, term): - for subterm in term.specifics: - if (not self.extract_name) or (self.extract_name in subterm.extracts): - yield subterm - for another in self.get_subterms(subterm): - yield another + if 'tags' in self.widgets: + widget = self.widgets['tags'] + manager = ITagsManager(self.request.root) + widget.thesaurus_name = manager.thesaurus_name + widget.extract_name = manager.extract_name @adapter_config(context=(ITagsTarget, IAdminLayer, TagsEditForm), provides=IPageHeader) @@ -166,3 +145,57 @@ """Dialog themes edit form""" dialog_class = 'modal-large' + + +# +# Collections management +# + +@viewlet_config(name='collections.menu', context=ICollectionsTarget, layer=IAdminLayer, + manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=354) +class CollectionsMenu(MenuItem): + """Collections menu""" + + label = _("Collections...") + icon_class = 'fa-book' + url = '#collections.html' + + +@pagelet_config(name='collections.html', context=ICollectionsTarget, layer=IPyAMSLayer, + permission=VIEW_SYSTEM_PERMISSION) +@ajax_config(name='collections.json', context=ICollectionsTarget, layer=IPyAMSLayer, + permission=MANAGE_CONTENT_PERMISSION) +@implementer(IWidgetForm, IInnerPage) +class CollectionsEditForm(AdminEditForm): + """Collections edit form""" + + legend = _("Content collections") + + label_css_class = 'control-label hidden' + input_css_class = 'col-md-12' + + fields = field.Fields(ICollectionsInfo) + fields['collections'].widgetFactory = ThesaurusTermsTreeFieldWidget + + def __init__(self, context, request): + super(CollectionsEditForm, self).__init__(context, request) + target = get_parent(self.context, ICollectionsManagerTarget) + manager = ICollectionsManager(target) + self.thesaurus_name = manager.thesaurus_name + self.extract_name = manager.extract_name + + def updateWidgets(self, prefix=None): + super(CollectionsEditForm, self).updateWidgets(prefix) + if 'collections' in self.widgets: + widget = self.widgets['collections'] + target = get_parent(self.context, ICollectionsManagerTarget) + manager = ICollectionsManager(target) + widget.thesaurus_name = manager.thesaurus_name + widget.extract_name = manager.extract_name + + +@adapter_config(context=(ICollectionsTarget, IAdminLayer, CollectionsEditForm), provides=IPageHeader) +class CollectionsHeaderAdapter(WfSharedContentHeaderAdapter): + """Shared content collections header adapter""" + + icon_class = 'fa fa-fw fa-book'