33 from zope.intid.interfaces import IIntIds |
33 from zope.intid.interfaces import IIntIds |
34 |
34 |
35 # import packages |
35 # import packages |
36 from pyams_content.skin import pyams_content |
36 from pyams_content.skin import pyams_content |
37 from pyams_pagelet.pagelet import pagelet_config |
37 from pyams_pagelet.pagelet import pagelet_config |
38 from pyams_skin.container import ContainerView |
38 from pyams_skin.container import ContainerView, delete_container_element |
39 from pyams_skin.page import DefaultPageHeaderAdapter |
39 from pyams_skin.page import DefaultPageHeaderAdapter |
40 from pyams_skin.table import BaseTable, TrashColumn, ActionColumn, I18nColumn |
40 from pyams_skin.table import BaseTable, TrashColumn, ActionColumn, I18nColumn |
41 from pyams_skin.viewlet.menu import MenuItem |
41 from pyams_skin.viewlet.menu import MenuItem |
42 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter |
42 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter |
43 from pyams_utils.fanstatic import get_resource_path |
43 from pyams_utils.fanstatic import get_resource_path |
44 from pyams_utils.registry import get_utility |
44 from pyams_utils.registry import get_utility |
45 from pyams_utils.url import absolute_url |
45 from pyams_utils.url import absolute_url |
46 from pyams_viewlet.manager import viewletmanager_config |
46 from pyams_viewlet.manager import viewletmanager_config |
47 from pyams_viewlet.viewlet import viewlet_config |
47 from pyams_viewlet.viewlet import viewlet_config |
48 from pyams_zmi.view import AdminView |
48 from pyams_zmi.view import AdminView |
|
49 from pyramid.exceptions import NotFound |
49 from pyramid.view import view_config |
50 from pyramid.view import view_config |
50 from z3c.table.column import GetAttrColumn |
51 from z3c.table.column import GetAttrColumn |
51 from zope.interface import implementer |
52 from zope.interface import implementer |
52 |
53 |
53 from pyams_content import _ |
54 from pyams_content import _ |
83 attributes = super(SiteTreeTable, self).data_attributes |
84 attributes = super(SiteTreeTable, self).data_attributes |
84 intids = get_utility(IIntIds) |
85 intids = get_utility(IIntIds) |
85 attributes.setdefault('table', {}).update({ |
86 attributes.setdefault('table', {}).update({ |
86 'data-ams-plugins': 'pyams_content', |
87 'data-ams-plugins': 'pyams_content', |
87 'data-ams-plugin-pyams_content-src': get_resource_path(pyams_content), |
88 'data-ams-plugin-pyams_content-src': get_resource_path(pyams_content), |
88 'data-ams-location': absolute_url(self.context, self.request), |
89 'data-ams-location': absolute_url(self.context, self.request) |
89 'data-ams-delete-target': 'delete-shared-site.json' |
|
90 }) |
90 }) |
91 attributes.setdefault('tr', {}).update({ |
91 attributes.setdefault('tr', {}).update({ |
92 'id': lambda x, col: '{0}::{1}'.format(self.id, intids.queryId(x)), |
92 'id': lambda x, col: '{0}::{1}'.format(self.id, intids.queryId(x)), |
93 'data-ams-location': lambda x, col: absolute_url(x.__parent__, self.request), |
93 'data-ams-location': lambda x, col: absolute_url(x.__parent__, self.request), |
94 'data-ams-tree-node-id': lambda x, col: intids.queryId(x), |
94 'data-ams-tree-node-id': lambda x, col: intids.queryId(x), |
153 |
153 |
154 def has_permission(self, item): |
154 def has_permission(self, item): |
155 return super(SiteTreeTrashColumn, self).has_permission(item) and item.is_deletable() |
155 return super(SiteTreeTrashColumn, self).has_permission(item) and item.is_deletable() |
156 |
156 |
157 |
157 |
|
158 @view_config(name='delete-shared-site.json', context=ISiteRoot, request_type=IPyAMSLayer, |
|
159 permission=MANAGE_SITE_ROOT_PERMISSION, renderer='json', xhr=True) |
|
160 def delete_shared_site(request): |
|
161 """Delete shared site from site manager""" |
|
162 if not request.context.is_deletable(): |
|
163 raise NotFound() |
|
164 return delete_container_element(request, ignore_permission=True) |
|
165 |
|
166 |
158 @adapter_config(context=(ISiteRoot, IAdminLayer, SiteTreeTable), provides=IValues) |
167 @adapter_config(context=(ISiteRoot, IAdminLayer, SiteTreeTable), provides=IValues) |
159 class SiteTreValuesAdapter(ContextRequestViewAdapter): |
168 class SiteTreValuesAdapter(ContextRequestViewAdapter): |
160 """Site tree values adapter""" |
169 """Site tree values adapter""" |
161 |
170 |
162 @property |
171 @property |
179 @adapter_config(context=(ISiteRoot, IAdminLayer, SiteTreeView), provides=IPageHeader) |
188 @adapter_config(context=(ISiteRoot, IAdminLayer, SiteTreeView), provides=IPageHeader) |
180 class SiteViewHeaderAdapter(DefaultPageHeaderAdapter): |
189 class SiteViewHeaderAdapter(DefaultPageHeaderAdapter): |
181 """Site tree view header adapter""" |
190 """Site tree view header adapter""" |
182 |
191 |
183 icon_class = 'fa fa-fw fa-sitemap' |
192 icon_class = 'fa fa-fw fa-sitemap' |
184 |
|
185 |
|
186 @view_config(name='delete-shared-site.json', context=ISiteRoot, request_type=IPyAMSLayer, |
|
187 permission=MANAGE_SITE_ROOT_PERMISSION, renderer='json', xhr=True) |
|
188 def delete_shared_site(request): |
|
189 """Delete shared site from site manager""" |
|
190 translate = request.localizer.translate |
|
191 name = request.params.get('object_name') |
|
192 if not name: |
|
193 return { |
|
194 'status': 'message', |
|
195 'messagebox': { |
|
196 'status': 'error', |
|
197 'content': translate(_("No provided object_name argument!")) |
|
198 } |
|
199 } |
|
200 if name not in request.context: |
|
201 return { |
|
202 'status': 'message', |
|
203 'messagebox': { |
|
204 'status': 'error', |
|
205 'content': translate(_("Given site name doesn't exist!")) |
|
206 } |
|
207 } |
|
208 del request.context[name] |
|
209 return {'status': 'success'} |
|