18 |
18 |
19 # import interfaces |
19 # import interfaces |
20 from pyams_form.interfaces.form import IWidgetsPrefixViewletsManager |
20 from pyams_form.interfaces.form import IWidgetsPrefixViewletsManager |
21 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager |
21 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager |
22 from pyams_skin.layer import IPyAMSLayer |
22 from pyams_skin.layer import IPyAMSLayer |
|
23 from pyams_thesaurus.interfaces import ADMIN_THESAURUS_PERMISSION, MANAGE_THESAURUS_EXTRACT_PERMISSION |
23 from pyams_thesaurus.interfaces.thesaurus import IThesaurus, IThesaurusExtracts, IThesaurusExtractInfo, \ |
24 from pyams_thesaurus.interfaces.thesaurus import IThesaurus, IThesaurusExtracts, IThesaurusExtractInfo, \ |
24 IThesaurusExtract |
25 IThesaurusExtract |
|
26 from pyams_utils.interfaces import VIEW_PERMISSION |
25 from pyams_utils.interfaces.data import IObjectData |
27 from pyams_utils.interfaces.data import IObjectData |
26 from pyams_utils.interfaces.tree import INode, ITree |
28 from pyams_utils.interfaces.tree import INode, ITree |
27 from pyams_zmi.layer import IAdminLayer |
29 from pyams_zmi.layer import IAdminLayer |
28 from z3c.form.interfaces import DISPLAY_MODE |
30 from z3c.form.interfaces import DISPLAY_MODE |
29 from z3c.table.interfaces import IValues, IColumn |
31 from z3c.table.interfaces import IValues, IColumn |
55 id = 'thesaurus_extracts_table' |
57 id = 'thesaurus_extracts_table' |
56 title = _("Thesaurus extracts") |
58 title = _("Thesaurus extracts") |
57 |
59 |
58 @property |
60 @property |
59 def data_attributes(self): |
61 def data_attributes(self): |
60 attrs = super(ThesaurusExtractsTable, self).data_attributes |
62 attributes = super(ThesaurusExtractsTable, self).data_attributes |
61 table = attrs.setdefault('table', {}) |
63 table = attributes.setdefault('table', {}) |
62 table.setdefault('data-ams-location', absolute_url(self.context, self.request, '++extracts++')) |
64 table.setdefault('data-ams-location', absolute_url(self.context, self.request, '++extracts++')) |
63 table.setdefault('data-ams-delete-target', 'delete-extract.json') |
65 table.setdefault('data-ams-delete-target', 'delete-extract.json') |
64 return attrs |
66 return attributes |
65 |
67 |
66 cssClasses = {'table': 'table table-bordered table-striped table-hover table-tight datatable extracts'} |
68 cssClasses = {'table': 'table table-bordered table-striped table-hover table-tight datatable extracts'} |
67 |
69 |
68 |
70 |
69 @adapter_config(context=(IThesaurus, IAdminLayer, ThesaurusExtractsTable), provides=IValues) |
71 @adapter_config(context=(IThesaurus, IAdminLayer, ThesaurusExtractsTable), provides=IValues) |
113 @adapter_config(name='trash', context=(IThesaurus, IAdminLayer, ThesaurusExtractsTable), provides=IColumn) |
115 @adapter_config(name='trash', context=(IThesaurus, IAdminLayer, ThesaurusExtractsTable), provides=IColumn) |
114 class ThesaurusExtractsTrashColumn(TrashColumn): |
116 class ThesaurusExtractsTrashColumn(TrashColumn): |
115 """Thesaurus extracts trash column""" |
117 """Thesaurus extracts trash column""" |
116 |
118 |
117 icon_hint = _("Delete extract") |
119 icon_hint = _("Delete extract") |
118 permission = 'thesaurus.admin' |
120 permission = ADMIN_THESAURUS_PERMISSION |
119 |
121 |
120 |
122 |
121 @viewlet_config(name='thesaurus.extract.adding', context=IThesaurus, view=ThesaurusExtractsTable, |
123 @viewlet_config(name='thesaurus.extract.adding', context=IThesaurus, view=ThesaurusExtractsTable, |
122 layer=IAdminLayer, manager=IWidgetTitleViewletManager, permission='thesaurus.admin') |
124 layer=IAdminLayer, manager=IWidgetTitleViewletManager, permission=ADMIN_THESAURUS_PERMISSION) |
123 class ThesaurusExtractAddAction(ToolbarAction): |
125 class ThesaurusExtractAddAction(ToolbarAction): |
124 """Thesaurus extract add action""" |
126 """Thesaurus extract add action""" |
125 |
127 |
126 label = _("Add extract") |
128 label = _("Add extract") |
127 url = 'add-extract.html' |
129 url = 'add-extract.html' |
128 modal_target = True |
130 modal_target = True |
129 |
131 |
130 |
132 |
131 @pagelet_config(name='add-extract.html', context=IThesaurus, layer=IPyAMSLayer, permission='thesaurus.admin') |
133 @pagelet_config(name='add-extract.html', context=IThesaurus, layer=IPyAMSLayer, permission=ADMIN_THESAURUS_PERMISSION) |
132 class ThesaurusExtractAddForm(AdminDialogAddForm): |
134 class ThesaurusExtractAddForm(AdminDialogAddForm): |
133 """Thesaurus extract add form""" |
135 """Thesaurus extract add form""" |
134 |
136 |
135 @property |
137 @property |
136 def title(self): |
138 def title(self): |
161 def nextURL(self): |
163 def nextURL(self): |
162 return absolute_url(self.context, self.request, 'terms.html') |
164 return absolute_url(self.context, self.request, 'terms.html') |
163 |
165 |
164 |
166 |
165 @view_config(name='add-extract.json', context=IThesaurus, request_type=IPyAMSLayer, |
167 @view_config(name='add-extract.json', context=IThesaurus, request_type=IPyAMSLayer, |
166 permission='thesaurus.admin', renderer='json', xhr=True) |
168 permission=ADMIN_THESAURUS_PERMISSION, renderer='json', xhr=True) |
167 class ThesaurusExtractAJAXAddForm(AJAXAddForm, ThesaurusExtractAddForm): |
169 class ThesaurusExtractAJAXAddForm(AJAXAddForm, ThesaurusExtractAddForm): |
168 """Thesaurus extract add form, AJAX view""" |
170 """Thesaurus extract add form, AJAX view""" |
169 |
171 |
170 |
172 |
171 @pagelet_config(name='properties.html', context=IThesaurusExtract, layer=IPyAMSLayer, |
173 @pagelet_config(name='properties.html', context=IThesaurusExtract, layer=IPyAMSLayer, |
172 permission='thesaurus.extract.manage') |
174 permission=MANAGE_THESAURUS_EXTRACT_PERMISSION) |
173 class ThesaurusExtractEditForm(AdminDialogEditForm): |
175 class ThesaurusExtractEditForm(AdminDialogEditForm): |
174 """Thesaurus extract edit form""" |
176 """Thesaurus extract edit form""" |
175 |
177 |
176 @property |
178 @property |
177 def title(self): |
179 def title(self): |
182 icon_css_class = 'fa fa-fw fa-filter' |
184 icon_css_class = 'fa fa-fw fa-filter' |
183 |
185 |
184 fields = field.Fields(IThesaurusExtractInfo) |
186 fields = field.Fields(IThesaurusExtractInfo) |
185 |
187 |
186 ajax_handler = 'properties.json' |
188 ajax_handler = 'properties.json' |
187 edit_permission = 'thesaurus.extract.manage' |
189 edit_permission = MANAGE_THESAURUS_EXTRACT_PERMISSION |
188 |
190 |
189 def updateWidgets(self, prefix=None): |
191 def updateWidgets(self, prefix=None): |
190 super(ThesaurusExtractEditForm, self).updateWidgets(prefix) |
192 super(ThesaurusExtractEditForm, self).updateWidgets(prefix) |
191 self.widgets['name'].mode = DISPLAY_MODE |
193 self.widgets['name'].mode = DISPLAY_MODE |
192 self.widgets['description'].label_css_class = 'textarea' |
194 self.widgets['description'].label_css_class = 'textarea' |
194 alsoProvides(widget, IObjectData) |
196 alsoProvides(widget, IObjectData) |
195 widget.object_data = {'ams-colorpicker-position': 'top left'} |
197 widget.object_data = {'ams-colorpicker-position': 'top left'} |
196 |
198 |
197 |
199 |
198 @view_config(name='properties.json', context=IThesaurusExtract, request_type=IPyAMSLayer, |
200 @view_config(name='properties.json', context=IThesaurusExtract, request_type=IPyAMSLayer, |
199 permission='thesaurus.extract.manage', renderer='json', xhr=True) |
201 permission=MANAGE_THESAURUS_EXTRACT_PERMISSION, renderer='json', xhr=True) |
200 class ThesaurusExtractAJAXEditForm(AJAXEditForm, ThesaurusExtractEditForm): |
202 class ThesaurusExtractAJAXEditForm(AJAXEditForm, ThesaurusExtractEditForm): |
201 """Thesaurus extract edit form, AJAX view""" |
203 """Thesaurus extract edit form, AJAX view""" |
202 |
204 |
203 def get_ajax_output(self, changes): |
205 def get_ajax_output(self, changes): |
204 extract_changes = changes.get(IThesaurusExtractInfo) |
206 extract_changes = changes.get(IThesaurusExtractInfo) |
257 'extracts': [], |
259 'extracts': [], |
258 'expand': node.has_children(extract_name)}) |
260 'expand': node.has_children(extract_name)}) |
259 |
261 |
260 |
262 |
261 @view_config(name='get-nodes.json', context=IThesaurusExtract, request_type=IPyAMSLayer, |
263 @view_config(name='get-nodes.json', context=IThesaurusExtract, request_type=IPyAMSLayer, |
262 permission='view', renderer='json', xhr=True) |
264 permission=VIEW_PERMISSION, renderer='json', xhr=True) |
263 class ThesaurusTermNodes(BaseTreeNodesView): |
265 class ThesaurusTermNodes(BaseTreeNodesView): |
264 """Get thesaurus nodes""" |
266 """Get thesaurus nodes""" |
265 |
267 |
266 def __call__(self): |
268 def __call__(self): |
267 label = self.request.params.get('term') |
269 label = self.request.params.get('term') |
275 return {'term': label, |
277 return {'term': label, |
276 'nodes': sorted(result, key=lambda x: x['label'])} |
278 'nodes': sorted(result, key=lambda x: x['label'])} |
277 |
279 |
278 |
280 |
279 @view_config(name='delete-extract.json', context=IThesaurusExtracts, request_type=IPyAMSLayer, |
281 @view_config(name='delete-extract.json', context=IThesaurusExtracts, request_type=IPyAMSLayer, |
280 permission='thesaurus.admin', renderer='json', xhr=True) |
282 permission=ADMIN_THESAURUS_PERMISSION, renderer='json', xhr=True) |
281 def delete_extract(request): |
283 def delete_extract(request): |
282 """Delete extract from thesaurus""" |
284 """Delete extract from thesaurus""" |
283 translate = request.localizer.translate |
285 translate = request.localizer.translate |
284 name = request.params.get('object_name') |
286 name = request.params.get('object_name') |
285 if not name: |
287 if not name: |