src/pyams_content/shared/site/zmi/container.py
changeset 730 8a9dd03f95ac
parent 600 33811e279b1d
child 731 a39cedc655ff
equal deleted inserted replaced
729:f6594cea3d5a 730:8a9dd03f95ac
    25 from pyams_content.shared.site.interfaces import ISiteContainer, ISiteManager, IContentLink
    25 from pyams_content.shared.site.interfaces import ISiteContainer, ISiteManager, IContentLink
    26 from pyams_content.skin.zmi.interfaces import ISiteTreeMenu, ISiteTreeTable, IUserAddingsMenuLabel
    26 from pyams_content.skin.zmi.interfaces import ISiteTreeMenu, ISiteTreeTable, IUserAddingsMenuLabel
    27 from pyams_i18n.interfaces import II18n
    27 from pyams_i18n.interfaces import II18n
    28 from pyams_skin.interfaces import IInnerPage, IPageHeader
    28 from pyams_skin.interfaces import IInnerPage, IPageHeader
    29 from pyams_skin.interfaces.container import ITableElementEditor, ITableElementName, ITableWithActions
    29 from pyams_skin.interfaces.container import ITableElementEditor, ITableElementName, ITableWithActions
    30 from pyams_skin.interfaces.viewlet import IBreadcrumbItem, ITableItemColumnActionsMenu
    30 from pyams_skin.interfaces.viewlet import IBreadcrumbItem, ITableItemColumnActionsMenu, IContextActions
    31 from pyams_skin.layer import IPyAMSLayer
    31 from pyams_skin.layer import IPyAMSLayer
    32 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
    32 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
    33 from pyams_utils.interfaces.traversing import IPathElements
    33 from pyams_utils.interfaces.traversing import IPathElements
    34 from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowPublicationInfo
    34 from pyams_workflow.interfaces import IWorkflowVersions, IWorkflowPublicationInfo
    35 from pyams_zmi.interfaces.menu import ISiteManagementMenu, IPropertiesMenu
    35 from pyams_zmi.interfaces.menu import ISiteManagementMenu, IPropertiesMenu
    56 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter
    56 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter
    57 from pyams_utils.fanstatic import get_resource_path
    57 from pyams_utils.fanstatic import get_resource_path
    58 from pyams_utils.registry import get_utility
    58 from pyams_utils.registry import get_utility
    59 from pyams_utils.timezone import tztime
    59 from pyams_utils.timezone import tztime
    60 from pyams_utils.traversing import get_parent
    60 from pyams_utils.traversing import get_parent
       
    61 from pyams_utils.unicode import translate_string
    61 from pyams_utils.url import absolute_url
    62 from pyams_utils.url import absolute_url
    62 from pyams_viewlet.manager import viewletmanager_config
    63 from pyams_viewlet.manager import viewletmanager_config
    63 from pyams_viewlet.viewlet import viewlet_config
    64 from pyams_viewlet.viewlet import viewlet_config
    64 from pyams_zmi.form import AdminDialogEditForm
    65 from pyams_zmi.form import AdminDialogEditForm
    65 from pyams_zmi.view import AdminView
    66 from pyams_zmi.view import AdminView
    66 from pyramid.exceptions import NotFound
    67 from pyramid.exceptions import NotFound
    67 from pyramid.location import lineage
    68 from pyramid.location import lineage
    68 from pyramid.view import view_config
    69 from pyramid.view import view_config
    69 from z3c.form import field
    70 from z3c.form import field
    70 from z3c.table.column import GetAttrColumn
    71 from z3c.table.column import GetAttrColumn
    71 from zope.interface import implementer
    72 from zope.interface import implementer, Interface
    72 from zope.lifecycleevent import ObjectMovedEvent
    73 from zope.lifecycleevent import ObjectMovedEvent
    73 
    74 
    74 from pyams_content import _
    75 from pyams_content import _
    75 
    76 
    76 
    77 
   630 
   631 
   631     @property
   632     @property
   632     def url(self):
   633     def url(self):
   633         version = IWorkflowVersions(self.context).get_last_versions(count=1)[0]
   634         version = IWorkflowVersions(self.context).get_last_versions(count=1)[0]
   634         return absolute_url(version, self.request, self.view_name)
   635         return absolute_url(version, self.request, self.view_name)
       
   636 
       
   637 
       
   638 #
       
   639 # Site container rename view
       
   640 #
       
   641 
       
   642 @viewlet_config(name='rename-item.menu', context=ISiteContainer, layer=IPyAMSLayer,
       
   643                 view=ISiteTreeTable, manager=ITableItemColumnActionsMenu,
       
   644                 permission=MANAGE_SITE_PERMISSION, weight=900)
       
   645 @viewlet_config(name='rename-item.menu', context=ISiteContainer, layer=IPyAMSLayer,
       
   646                 view=Interface, manager=IContextActions,
       
   647                 permission=MANAGE_SITE_PERMISSION, weight=900)
       
   648 class SiteContainerRenameMenu(ToolbarMenuItem):
       
   649     """Site container rename menu"""
       
   650 
       
   651     label = _("Change URL...")
       
   652     label_css_class = 'fa fa-fw fa-edit'
       
   653     url = 'rename-item.html'
       
   654     modal_target = True
       
   655 
       
   656 
       
   657 @pagelet_config(name='rename-item.html', context=ISiteContainer, layer=IPyAMSLayer,
       
   658                 permission=MANAGE_SITE_PERMISSION)
       
   659 @ajax_config(name='rename-item.json', context=ISiteContainer, layer=IPyAMSLayer)
       
   660 class SiteContainerRenameForm(AdminDialogEditForm):
       
   661     """Site container rename form"""
       
   662 
       
   663     prefix = 'rename_item.'
       
   664 
       
   665     legend = _("Change item URL")
       
   666 
       
   667     fields = field.Fields(ISiteContainer).select('__name__')
       
   668     edit_permission = MANAGE_SITE_PERMISSION
       
   669 
       
   670     def updateWidgets(self, prefix=None):
       
   671         super(SiteContainerRenameForm, self).updateWidgets(prefix)
       
   672         self.widgets['__name__'].label = _("Item URL part")
       
   673 
       
   674     def update_content(self, content, data):
       
   675         old_name = content.__name__
       
   676         changes = super(SiteContainerRenameForm, self).update_content(content, data)
       
   677         if changes:
       
   678             # revert rename to adjust container properties
       
   679             new_name = translate_string(content.__name__, spaces='-', keep_chars='-')
       
   680             content.__name__ = old_name
       
   681             parent = content.__parent__
       
   682             parent[new_name] = content
       
   683             del parent[old_name]
       
   684         return changes
       
   685 
       
   686     def get_ajax_output(self, changes):
       
   687         if changes:
       
   688             return {
       
   689                 'status': 'redirect',
       
   690                 'location': absolute_url(self.context, self.request, 'admin'),
       
   691                 'message': self.request.localizer.translate(self.successMessage)
       
   692             }
       
   693         else:
       
   694             return super(SiteContainerRenameForm, self).get_ajax_output(changes)