15 |
15 |
16 # import standard library |
16 # import standard library |
17 |
17 |
18 # import interfaces |
18 # import interfaces |
19 from pyams_content.component.theme import ITagsTarget, ITagsInfo, ITagsManager, IThemesTarget, IThemesInfo, \ |
19 from pyams_content.component.theme import ITagsTarget, ITagsInfo, ITagsManager, IThemesTarget, IThemesInfo, \ |
20 IThemesManagerTarget, IThemesManager |
20 IThemesManagerTarget, IThemesManager, ICollectionsTarget, ICollectionsInfo, ICollectionsManager, \ |
|
21 ICollectionsManagerTarget |
21 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
22 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
22 from pyams_form.interfaces.form import IWidgetForm |
23 from pyams_form.interfaces.form import IWidgetForm |
23 from pyams_skin.interfaces import IInnerPage, IPageHeader, IDialog |
24 from pyams_skin.interfaces import IInnerPage, IPageHeader, IDialog |
24 from pyams_skin.layer import IPyAMSLayer |
25 from pyams_skin.layer import IPyAMSLayer |
25 from pyams_thesaurus.interfaces.thesaurus import IThesaurus |
|
26 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION |
26 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION |
27 from pyams_zmi.interfaces.menu import IPropertiesMenu |
27 from pyams_zmi.interfaces.menu import IPropertiesMenu |
28 from pyams_zmi.layer import IAdminLayer |
28 from pyams_zmi.layer import IAdminLayer |
29 |
29 |
30 # import packages |
30 # import packages |
31 from pyams_content.shared.common.zmi import WfSharedContentHeaderAdapter |
31 from pyams_content.shared.common.zmi import WfSharedContentHeaderAdapter |
32 from pyams_form.form import ajax_config, AJAXEditForm, EditForm |
32 from pyams_form.form import ajax_config, AJAXEditForm, EditForm |
33 from pyams_pagelet.pagelet import pagelet_config |
33 from pyams_pagelet.pagelet import pagelet_config |
34 from pyams_skin.viewlet.menu import MenuItem |
34 from pyams_skin.viewlet.menu import MenuItem |
35 from pyams_thesaurus.widget import ThesaurusTermsTreeFieldWidget |
35 from pyams_thesaurus.zmi.widget import ThesaurusTermsTreeFieldWidget |
36 from pyams_utils.adapter import adapter_config |
36 from pyams_utils.adapter import adapter_config |
37 from pyams_utils.registry import query_utility |
|
38 from pyams_utils.traversing import get_parent |
37 from pyams_utils.traversing import get_parent |
39 from pyams_viewlet.viewlet import viewlet_config |
38 from pyams_viewlet.viewlet import viewlet_config |
40 from pyams_zmi.form import AdminEditForm, AdminDialogEditForm |
39 from pyams_zmi.form import AdminEditForm, AdminDialogEditForm |
41 from z3c.form import field |
40 from z3c.form import field |
42 from zope.interface import implementer |
41 from zope.interface import implementer |
70 input_css_class = 'col-md-12' |
69 input_css_class = 'col-md-12' |
71 |
70 |
72 fields = field.Fields(ITagsInfo) |
71 fields = field.Fields(ITagsInfo) |
73 fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget |
72 fields['tags'].widgetFactory = ThesaurusTermsTreeFieldWidget |
74 |
73 |
75 def __init__(self, context, request): |
|
76 super(TagsEditForm, self).__init__(context, request) |
|
77 manager = ITagsManager(request.root) |
|
78 self.thesaurus_name = manager.thesaurus_name |
|
79 self.extract_name = manager.extract_name |
|
80 |
|
81 def updateWidgets(self, prefix=None): |
74 def updateWidgets(self, prefix=None): |
82 super(TagsEditForm, self).updateWidgets(prefix) |
75 super(TagsEditForm, self).updateWidgets(prefix) |
83 widget = self.widgets['tags'] |
76 if 'tags' in self.widgets: |
84 widget.thesaurus_name = self.thesaurus_name |
77 widget = self.widgets['tags'] |
85 widget.extract_name = self.extract_name |
78 manager = ITagsManager(self.request.root) |
86 |
79 widget.thesaurus_name = manager.thesaurus_name |
87 @property |
80 widget.extract_name = manager.extract_name |
88 def top_terms(self): |
|
89 thesaurus = query_utility(IThesaurus, name=self.thesaurus_name) |
|
90 if thesaurus is not None: |
|
91 return sorted(thesaurus.get_top_terms(extract=self.extract_name), |
|
92 key=lambda x: x.label) |
|
93 else: |
|
94 return () |
|
95 |
|
96 def get_subterms(self, term): |
|
97 for subterm in term.specifics: |
|
98 if (not self.extract_name) or (self.extract_name in subterm.extracts): |
|
99 yield subterm |
|
100 for another in self.get_subterms(subterm): |
|
101 yield another |
|
102 |
81 |
103 |
82 |
104 @adapter_config(context=(ITagsTarget, IAdminLayer, TagsEditForm), provides=IPageHeader) |
83 @adapter_config(context=(ITagsTarget, IAdminLayer, TagsEditForm), provides=IPageHeader) |
105 class TagsHeaderAdapter(WfSharedContentHeaderAdapter): |
84 class TagsHeaderAdapter(WfSharedContentHeaderAdapter): |
106 """Shared content tags header adapter""" |
85 """Shared content tags header adapter""" |
164 @implementer(IDialog) |
143 @implementer(IDialog) |
165 class DialogThemesEditForm(BaseThemesEditForm, AdminDialogEditForm): |
144 class DialogThemesEditForm(BaseThemesEditForm, AdminDialogEditForm): |
166 """Dialog themes edit form""" |
145 """Dialog themes edit form""" |
167 |
146 |
168 dialog_class = 'modal-large' |
147 dialog_class = 'modal-large' |
|
148 |
|
149 |
|
150 # |
|
151 # Collections management |
|
152 # |
|
153 |
|
154 @viewlet_config(name='collections.menu', context=ICollectionsTarget, layer=IAdminLayer, |
|
155 manager=IPropertiesMenu, permission=VIEW_SYSTEM_PERMISSION, weight=354) |
|
156 class CollectionsMenu(MenuItem): |
|
157 """Collections menu""" |
|
158 |
|
159 label = _("Collections...") |
|
160 icon_class = 'fa-book' |
|
161 url = '#collections.html' |
|
162 |
|
163 |
|
164 @pagelet_config(name='collections.html', context=ICollectionsTarget, layer=IPyAMSLayer, |
|
165 permission=VIEW_SYSTEM_PERMISSION) |
|
166 @ajax_config(name='collections.json', context=ICollectionsTarget, layer=IPyAMSLayer, |
|
167 permission=MANAGE_CONTENT_PERMISSION) |
|
168 @implementer(IWidgetForm, IInnerPage) |
|
169 class CollectionsEditForm(AdminEditForm): |
|
170 """Collections edit form""" |
|
171 |
|
172 legend = _("Content collections") |
|
173 |
|
174 label_css_class = 'control-label hidden' |
|
175 input_css_class = 'col-md-12' |
|
176 |
|
177 fields = field.Fields(ICollectionsInfo) |
|
178 fields['collections'].widgetFactory = ThesaurusTermsTreeFieldWidget |
|
179 |
|
180 def __init__(self, context, request): |
|
181 super(CollectionsEditForm, self).__init__(context, request) |
|
182 target = get_parent(self.context, ICollectionsManagerTarget) |
|
183 manager = ICollectionsManager(target) |
|
184 self.thesaurus_name = manager.thesaurus_name |
|
185 self.extract_name = manager.extract_name |
|
186 |
|
187 def updateWidgets(self, prefix=None): |
|
188 super(CollectionsEditForm, self).updateWidgets(prefix) |
|
189 if 'collections' in self.widgets: |
|
190 widget = self.widgets['collections'] |
|
191 target = get_parent(self.context, ICollectionsManagerTarget) |
|
192 manager = ICollectionsManager(target) |
|
193 widget.thesaurus_name = manager.thesaurus_name |
|
194 widget.extract_name = manager.extract_name |
|
195 |
|
196 |
|
197 @adapter_config(context=(ICollectionsTarget, IAdminLayer, CollectionsEditForm), provides=IPageHeader) |
|
198 class CollectionsHeaderAdapter(WfSharedContentHeaderAdapter): |
|
199 """Shared content collections header adapter""" |
|
200 |
|
201 icon_class = 'fa fa-fw fa-book' |