src/pyams_thesaurus/zmi/extract.py
changeset 19 6cb6acc05cc3
parent 5 86ddb444d0a9
child 24 e1a86d99c7d4
equal deleted inserted replaced
18:23ac4c21b235 19:6cb6acc05cc3
    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: