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) |
|