src/pyams_content/component/theme/zmi/__init__.py
changeset 829 f933926ed0a1
parent 825 3f5684390091
child 1389 1485db1e2b5e
--- 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'