src/pyams_content/component/theme/zmi/__init__.py
changeset 800 2b5460ecb254
parent 605 d3d50fcbc62c
child 825 3f5684390091
--- a/src/pyams_content/component/theme/zmi/__init__.py	Thu Jul 05 08:48:47 2018 +0200
+++ b/src/pyams_content/component/theme/zmi/__init__.py	Thu Jul 05 08:53:43 2018 +0200
@@ -9,6 +9,7 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+from pyams_content.component.theme import ITagsTarget, ITagsInfo, ITagsManagerTarget, ITagsManager
 
 __docformat__ = 'restructuredtext'
 
@@ -43,8 +44,74 @@
 from pyams_content import _
 
 
+#
+# Tags management
+#
+
+@viewlet_config(name='tags.menu', context=ITagsTarget, layer=IAdminLayer,
+                manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=350)
+class TagsMenu(MenuItem):
+    """Tags menu"""
+
+    label = _("Tags...")
+    icon_class = 'fa-tag'
+    url = '#tags.html'
+
+
+@pagelet_config(name='tags.html', context=ITagsTarget, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@template_config(template='templates/themes-info.pt', layer=IPyAMSLayer)
+@ajax_config(name='tags.json', context=ITagsTarget, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
+@implementer(IWidgetForm, IInnerPage)
+class TagsEditForm(AdminEditForm):
+    """Tags edit form"""
+
+    legend = _("Content tags")
+
+    fields = field.Fields(ITagsInfo)
+    fieldname = 'tags'
+
+    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
+
+
+@adapter_config(context=(ITagsTarget, IAdminLayer, TagsEditForm), provides=IPageHeader)
+class TagsHeaderAdapter(WfSharedContentHeaderAdapter):
+    """Shared content tags header adapter"""
+
+    icon_class = 'fa fa-fw fa-tag'
+
+
+#
+# Themes management
+#
+
 @viewlet_config(name='themes.menu', context=IThemesTarget, layer=IAdminLayer,
-                manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=350)
+                manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=352)
 class ThemesMenu(MenuItem):
     """Themes menu"""
 
@@ -63,6 +130,7 @@
     legend = _("Content themes")
 
     fields = field.Fields(IThemesInfo)
+    fieldname = 'themes'
 
     def __init__(self, context, request):
         super(ThemesEditForm, self).__init__(context, request)