# HG changeset patch # User Damien Correia # Date 1529914178 -7200 # Node ID bd623ade162d7e3481257e2232a05b97858e14c6 # Parent b4e70a25236ac6b836d39cdb30fc6e1f0c8b194a merge default diff -r b4e70a25236a -r bd623ade162d src/pyams_content/shared/site/zmi/container.py --- a/src/pyams_content/shared/site/zmi/container.py Mon Jun 25 16:28:17 2018 +0200 +++ b/src/pyams_content/shared/site/zmi/container.py Mon Jun 25 10:09:38 2018 +0200 @@ -27,7 +27,7 @@ from pyams_i18n.interfaces import II18n from pyams_skin.interfaces import IInnerPage, IPageHeader from pyams_skin.interfaces.container import ITableElementEditor, ITableElementName, ITableWithActions -from pyams_skin.interfaces.viewlet import IBreadcrumbItem, ITableItemColumnActionsMenu +from pyams_skin.interfaces.viewlet import IBreadcrumbItem, ITableItemColumnActionsMenu, IContextActions from pyams_skin.layer import IPyAMSLayer from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION from pyams_utils.interfaces.traversing import IPathElements @@ -58,6 +58,7 @@ from pyams_utils.registry import get_utility from pyams_utils.timezone import tztime from pyams_utils.traversing import get_parent +from pyams_utils.unicode import translate_string from pyams_utils.url import absolute_url from pyams_viewlet.manager import viewletmanager_config from pyams_viewlet.viewlet import viewlet_config @@ -632,3 +633,62 @@ def url(self): version = IWorkflowVersions(self.context).get_last_versions(count=1)[0] return absolute_url(version, self.request, self.view_name) + + +# +# Site container rename view +# + +@viewlet_config(name='rename-item.menu', context=ISiteContainer, layer=IPyAMSLayer, + view=ISiteTreeTable, manager=ITableItemColumnActionsMenu, + permission=MANAGE_SITE_PERMISSION, weight=900) +@viewlet_config(name='rename-item.menu', context=ISiteContainer, layer=IPyAMSLayer, + view=Interface, manager=IContextActions, + permission=MANAGE_SITE_PERMISSION, weight=900) +class SiteContainerRenameMenu(ToolbarMenuItem): + """Site container rename menu""" + + label = _("Change URL...") + label_css_class = 'fa fa-fw fa-edit' + url = 'rename-item.html' + modal_target = True + + +@pagelet_config(name='rename-item.html', context=ISiteContainer, layer=IPyAMSLayer, + permission=MANAGE_SITE_PERMISSION) +@ajax_config(name='rename-item.json', context=ISiteContainer, layer=IPyAMSLayer) +class SiteContainerRenameForm(AdminDialogEditForm): + """Site container rename form""" + + prefix = 'rename_item.' + + legend = _("Change item URL") + + fields = field.Fields(ISiteContainer).select('__name__') + edit_permission = MANAGE_SITE_PERMISSION + + def updateWidgets(self, prefix=None): + super(SiteContainerRenameForm, self).updateWidgets(prefix) + self.widgets['__name__'].label = _("Item URL part") + + def update_content(self, content, data): + old_name = content.__name__ + changes = super(SiteContainerRenameForm, self).update_content(content, data) + if changes: + # revert rename to adjust container properties + new_name = translate_string(content.__name__, spaces='-', keep_chars='-') + content.__name__ = old_name + parent = content.__parent__ + parent[new_name] = content + del parent[old_name] + return changes + + def get_ajax_output(self, changes): + if changes: + return { + 'status': 'redirect', + 'location': absolute_url(self.context, self.request, 'admin'), + 'message': self.request.localizer.translate(self.successMessage) + } + else: + return super(SiteContainerRenameForm, self).get_ajax_output(changes)