src/pyams_content/features/alert/zmi/container.py
changeset 527 5dd1aa8bedd9
parent 506 174894a2293d
child 578 a607fdec4d63
equal deleted inserted replaced
526:b15153f45957 527:5dd1aa8bedd9
    29 # import packages
    29 # import packages
    30 from pyams_content.skin import pyams_content
    30 from pyams_content.skin import pyams_content
    31 from pyams_i18n.column import I18nAttrColumn
    31 from pyams_i18n.column import I18nAttrColumn
    32 from pyams_pagelet.pagelet import pagelet_config
    32 from pyams_pagelet.pagelet import pagelet_config
    33 from pyams_skin.page import DefaultPageHeaderAdapter
    33 from pyams_skin.page import DefaultPageHeaderAdapter
    34 from pyams_skin.table import BaseTable, SorterColumn, JsActionColumn, I18nColumn, TrashColumn
    34 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
    35 from pyams_skin.viewlet.menu import MenuItem
    35 from pyams_skin.viewlet.menu import MenuItem
    36 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
    36 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
    37 from pyams_utils.fanstatic import get_resource_path
    37 from pyams_utils.fanstatic import get_resource_path
    38 from pyams_utils.text import get_text_start
    38 from pyams_utils.text import get_text_start
    39 from pyams_utils.url import absolute_url
    39 from pyams_utils.url import absolute_url
    58 
    58 
    59 
    59 
    60 class AlertContainerTable(BaseTable):
    60 class AlertContainerTable(BaseTable):
    61     """Alerts container table"""
    61     """Alerts container table"""
    62 
    62 
    63     id = 'alerts_table'
    63     prefix = 'alerts'
       
    64 
    64     hide_header = True
    65     hide_header = True
    65     sortOn = None
    66     sortOn = None
    66 
    67 
    67     cssClasses = {'table': 'table table-bordered table-striped table-hover table-tight table-dnd'}
    68     cssClasses = {'table': 'table table-bordered table-striped table-hover table-tight table-dnd'}
    68 
    69 
    73             'id': self.id,
    74             'id': self.id,
    74             'data-ams-plugins': 'pyams_content',
    75             'data-ams-plugins': 'pyams_content',
    75             'data-ams-plugin-pyams_content-src': get_resource_path(pyams_content),
    76             'data-ams-plugin-pyams_content-src': get_resource_path(pyams_content),
    76             'data-ams-location': absolute_url(IAlertContainer(self.context), self.request),
    77             'data-ams-location': absolute_url(IAlertContainer(self.context), self.request),
    77             'data-ams-tablednd-drag-handle': 'td.sorter',
    78             'data-ams-tablednd-drag-handle': 'td.sorter',
    78             'data-ams-tablednd-drop-target': 'set-alerts-order.json'
    79             'data-ams-tablednd-drop-target': 'set-alerts-order.json',
    79         })
    80             'data-ams-visibility-switcher': 'switch-alert-visibility.json'
    80         attributes.setdefault('tr', {}).update({
       
    81             'id': lambda x, col: 'alert_{0}'.format(x.__name__),
       
    82             'data-ams-delete-target': 'delete-alert.json'
       
    83         })
    81         })
    84         return attributes
    82         return attributes
    85 
    83 
    86     @reify
    84     @reify
    87     def values(self):
    85     def values(self):
   116     request.context.updateOrder(order)
   114     request.context.updateOrder(order)
   117     return {'status': 'success'}
   115     return {'status': 'success'}
   118 
   116 
   119 
   117 
   120 @adapter_config(name='show-hide', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), provides=IColumn)
   118 @adapter_config(name='show-hide', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), provides=IColumn)
   121 class AlertContainerShowHideColumn(JsActionColumn):
   119 class AlertContainerShowHideColumn(VisibilitySwitcherColumn):
   122     """Alert container visibility switcher column"""
   120     """Alert container visibility switcher column"""
   123 
   121 
   124     cssClasses = {'th': 'action',
   122 
   125                   'td': 'action switcher'}
   123 @view_config(name='switch-alert-visibility.json', context=IAlertContainer, request_type=IPyAMSLayer,
   126 
       
   127     icon_class = 'fa fa-fw fa-eye'
       
   128     icon_hint = _("Switch alert visibility")
       
   129 
       
   130     url = 'PyAMS_content.alerts.switchVisibility'
       
   131 
       
   132     weight = 5
       
   133 
       
   134     def get_icon_class(self, item):
       
   135         if item.visible:
       
   136             return self.icon_class
       
   137         else:
       
   138             return 'fa fa-fw fa-eye-slash text-danger'
       
   139 
       
   140 
       
   141 @view_config(name='set-alert-visibility.json', context=IAlertContainer, request_type=IPyAMSLayer,
       
   142              permission=MANAGE_SITE_ROOT_PERMISSION, renderer='json', xhr=True)
   124              permission=MANAGE_SITE_ROOT_PERMISSION, renderer='json', xhr=True)
   143 def set_alert_visibility(request):
   125 def switch_alert_visibility(request):
   144     """Set alert visibility"""
   126     """Switch alert visibility"""
   145     container = IAlertContainer(request.context)
   127     container = IAlertContainer(request.context)
   146     alert = container.get(str(request.params.get('object_name')))
   128     alert = container.get(str(request.params.get('object_name')))
   147     if alert is None:
   129     if alert is None:
   148         raise NotFound()
   130         raise NotFound()
   149     alert.visible = not alert.visible
   131     alert.visible = not alert.visible
   198 
   180 
   199 @adapter_config(name='trash', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), provides=IColumn)
   181 @adapter_config(name='trash', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), provides=IColumn)
   200 class AlertContainerTrashColumn(TrashColumn):
   182 class AlertContainerTrashColumn(TrashColumn):
   201     """Alert container trash column"""
   183     """Alert container trash column"""
   202 
   184 
   203 
   185     permission = MANAGE_SITE_ROOT_PERMISSION
   204 @view_config(name='delete-alert.json', context=IAlertTarget, request_type=IPyAMSLayer,
       
   205              permission=MANAGE_SITE_ROOT_PERMISSION, renderer='json', xhr=True)
       
   206 def delete_alert(request):
       
   207     """Delete alert"""
       
   208     translate = request.localizer.translate
       
   209     name = request.params.get('object_name')
       
   210     if not name:
       
   211         return {
       
   212             'status': 'message',
       
   213             'messagebox': {
       
   214                 'status': 'error',
       
   215                 'content': translate(_("No provided object_name argument!"))
       
   216             }
       
   217         }
       
   218     if name not in request.context:
       
   219         return {
       
   220             'status': 'message',
       
   221             'messagebox': {
       
   222                 'status': 'error',
       
   223                 'content': translate(_("Given alert name doesn't exist!"))
       
   224             }
       
   225         }
       
   226     del request.context[name]
       
   227     return {'status': 'success'}
       
   228 
   186 
   229 
   187 
   230 @pagelet_config(name='alerts.html', context=IAlertTarget, layer=IPyAMSLayer, permission=MANAGE_SITE_ROOT_PERMISSION)
   188 @pagelet_config(name='alerts.html', context=IAlertTarget, layer=IPyAMSLayer, permission=MANAGE_SITE_ROOT_PERMISSION)
   231 class AlertContainerView(ContainerAdminView):
   189 class AlertContainerView(ContainerAdminView):
   232     """Alerts container view"""
   190     """Alerts container view"""