8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
|
14 |
|
15 |
|
16 # import standard library |
|
17 import json |
13 import json |
18 |
14 |
19 # import interfaces |
15 from pyramid.decorator import reify |
20 from pyams_content.features.alert.interfaces import IAlertTarget, IAlertContainer |
16 from pyramid.view import view_config |
|
17 from z3c.table.interfaces import IColumn, IValues |
|
18 |
|
19 from pyams_content.features.alert.interfaces import IAlertContainer, IAlertTarget |
21 from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION |
20 from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION |
22 from pyams_skin.interfaces import IPageHeader |
|
23 from pyams_skin.layer import IPyAMSLayer |
|
24 from pyams_zmi.interfaces.menu import ISiteManagementMenu |
|
25 from pyams_zmi.layer import IAdminLayer |
|
26 from z3c.table.interfaces import IValues, IColumn |
|
27 |
|
28 # import packages |
|
29 from pyams_content.zmi import pyams_content |
21 from pyams_content.zmi import pyams_content |
30 from pyams_i18n.column import I18nAttrColumn |
22 from pyams_i18n.column import I18nAttrColumn |
31 from pyams_pagelet.pagelet import pagelet_config |
23 from pyams_pagelet.pagelet import pagelet_config |
|
24 from pyams_skin.container import switch_element_visibility |
|
25 from pyams_skin.interfaces import IPageHeader |
|
26 from pyams_skin.layer import IPyAMSLayer |
32 from pyams_skin.page import DefaultPageHeaderAdapter |
27 from pyams_skin.page import DefaultPageHeaderAdapter |
33 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn |
28 from pyams_skin.table import BaseTable, I18nColumn, SorterColumn, TrashColumn, \ |
|
29 VisibilitySwitcherColumn |
34 from pyams_skin.viewlet.menu import MenuItem |
30 from pyams_skin.viewlet.menu import MenuItem |
35 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter |
31 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config |
36 from pyams_utils.fanstatic import get_resource_path |
32 from pyams_utils.fanstatic import get_resource_path |
37 from pyams_utils.text import get_text_start |
33 from pyams_utils.text import get_text_start |
38 from pyams_utils.url import absolute_url |
34 from pyams_utils.url import absolute_url |
39 from pyams_viewlet.viewlet import viewlet_config |
35 from pyams_viewlet.viewlet import viewlet_config |
|
36 from pyams_zmi.interfaces.menu import ISiteManagementMenu |
|
37 from pyams_zmi.layer import IAdminLayer |
40 from pyams_zmi.view import ContainerAdminView |
38 from pyams_zmi.view import ContainerAdminView |
41 from pyramid.decorator import reify |
39 |
42 from pyramid.exceptions import NotFound |
40 |
43 from pyramid.view import view_config |
41 __docformat__ = 'restructuredtext' |
44 |
42 |
45 from pyams_content import _ |
43 from pyams_content import _ |
46 |
44 |
47 |
45 |
48 @viewlet_config(name='alerts.menu', context=IAlertTarget, layer=IPyAMSLayer, manager=ISiteManagementMenu, |
46 @viewlet_config(name='alerts.menu', context=IAlertTarget, layer=IPyAMSLayer, |
49 permission=MANAGE_SITE_ROOT_PERMISSION, weight=30) |
47 manager=ISiteManagementMenu, permission=MANAGE_SITE_ROOT_PERMISSION, weight=30) |
50 class AlertsMenu(MenuItem): |
48 class AlertsMenu(MenuItem): |
51 """Alerts menu""" |
49 """Alerts menu""" |
52 |
50 |
53 label = _("Alerts") |
51 label = _("Alerts") |
54 icon_class = 'fa-exclamation-triangle' |
52 icon_class = 'fa-exclamation-triangle' |
117 order = list(map(str, json.loads(request.params.get('names')))) |
116 order = list(map(str, json.loads(request.params.get('names')))) |
118 request.context.updateOrder(order) |
117 request.context.updateOrder(order) |
119 return {'status': 'success'} |
118 return {'status': 'success'} |
120 |
119 |
121 |
120 |
122 @adapter_config(name='show-hide', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), provides=IColumn) |
121 @adapter_config(name='show-hide', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), |
|
122 provides=IColumn) |
123 class AlertContainerShowHideColumn(VisibilitySwitcherColumn): |
123 class AlertContainerShowHideColumn(VisibilitySwitcherColumn): |
124 """Alert container visibility switcher column""" |
124 """Alert container visibility switcher column""" |
125 |
125 |
126 |
126 |
127 @view_config(name='switch-alert-visibility.json', context=IAlertContainer, request_type=IPyAMSLayer, |
127 @view_config(name='switch-alert-visibility.json', context=IAlertContainer, |
128 permission=MANAGE_SITE_ROOT_PERMISSION, renderer='json', xhr=True) |
128 request_type=IPyAMSLayer, permission=MANAGE_SITE_ROOT_PERMISSION, |
|
129 renderer='json', xhr=True) |
129 def switch_alert_visibility(request): |
130 def switch_alert_visibility(request): |
130 """Switch alert visibility""" |
131 """Switch alert visibility""" |
131 container = IAlertContainer(request.context) |
132 return switch_element_visibility(request, IAlertContainer) |
132 alert = container.get(str(request.params.get('object_name'))) |
|
133 if alert is None: |
|
134 raise NotFound() |
|
135 alert.visible = not alert.visible |
|
136 return {'visible': alert.visible} |
|
137 |
133 |
138 |
134 |
139 @adapter_config(name='name', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), provides=IColumn) |
135 @adapter_config(name='name', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), |
|
136 provides=IColumn) |
140 class AlertContainerNameColumn(I18nColumn, I18nAttrColumn): |
137 class AlertContainerNameColumn(I18nColumn, I18nAttrColumn): |
141 """Alert container message column""" |
138 """Alert container message column""" |
142 |
139 |
143 _header = _("Message") |
140 _header = _("Message") |
144 attrName = 'message' |
141 attrName = 'message' |
149 if not value: |
146 if not value: |
150 return '--' |
147 return '--' |
151 return get_text_start(value, 50, 10) |
148 return get_text_start(value, 50, 10) |
152 |
149 |
153 |
150 |
154 @adapter_config(name='trash', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), provides=IColumn) |
151 @adapter_config(name='trash', context=(IAlertTarget, IPyAMSLayer, AlertContainerTable), |
|
152 provides=IColumn) |
155 class AlertContainerTrashColumn(TrashColumn): |
153 class AlertContainerTrashColumn(TrashColumn): |
156 """Alert container trash column""" |
154 """Alert container trash column""" |
157 |
155 |
158 permission = MANAGE_SITE_ROOT_PERMISSION |
156 permission = MANAGE_SITE_ROOT_PERMISSION |
159 |
157 |
160 |
158 |
161 @pagelet_config(name='alerts.html', context=IAlertTarget, layer=IPyAMSLayer, permission=MANAGE_SITE_ROOT_PERMISSION) |
159 @pagelet_config(name='alerts.html', context=IAlertTarget, layer=IPyAMSLayer, |
|
160 permission=MANAGE_SITE_ROOT_PERMISSION) |
162 class AlertContainerView(ContainerAdminView): |
161 class AlertContainerView(ContainerAdminView): |
163 """Alerts container view""" |
162 """Alerts container view""" |
164 |
163 |
165 title = _("Alert list") |
164 title = _("Alert list") |
166 table_class = AlertContainerTable |
165 table_class = AlertContainerTable |