src/pyams_content/root/zmi/sites.py
changeset 527 5dd1aa8bedd9
parent 503 264f9b53a714
child 577 b7ded033d298
equal deleted inserted replaced
526:b15153f45957 527:5dd1aa8bedd9
    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 _
    71 
    72 
    72 @implementer(IDashboardTable, ITableWithActions, ISiteTreeTable)
    73 @implementer(IDashboardTable, ITableWithActions, ISiteTreeTable)
    73 class SiteTreeTable(BaseTable):
    74 class SiteTreeTable(BaseTable):
    74     """Site tree table"""
    75     """Site tree table"""
    75 
    76 
    76     id = 'site_tree_table'
    77     prefix = 'site_tree'
    77     title = _("Blogs and shared sites")
    78     title = _("Blogs and shared sites")
    78 
    79 
    79     sortOn = None
    80     sortOn = None
    80 
    81 
    81     @property
    82     @property
    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'}