src/pyams_content/shared/site/zmi/container.py
changeset 731 a39cedc655ff
parent 730 8a9dd03f95ac
child 736 4eed94fdf7c3
child 757 72e2df59af62
equal deleted inserted replaced
730:8a9dd03f95ac 731:a39cedc655ff
    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, IContextActions
    30 from pyams_skin.interfaces.viewlet import IBreadcrumbItem, ITableItemColumnActionsMenu
    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
       
    62 from pyams_utils.url import absolute_url
    61 from pyams_utils.url import absolute_url
    63 from pyams_viewlet.manager import viewletmanager_config
    62 from pyams_viewlet.manager import viewletmanager_config
    64 from pyams_viewlet.viewlet import viewlet_config
    63 from pyams_viewlet.viewlet import viewlet_config
    65 from pyams_zmi.form import AdminDialogEditForm
    64 from pyams_zmi.form import AdminDialogEditForm
    66 from pyams_zmi.view import AdminView
    65 from pyams_zmi.view import AdminView
   631 
   630 
   632     @property
   631     @property
   633     def url(self):
   632     def url(self):
   634         version = IWorkflowVersions(self.context).get_last_versions(count=1)[0]
   633         version = IWorkflowVersions(self.context).get_last_versions(count=1)[0]
   635         return absolute_url(version, self.request, self.view_name)
   634         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)