src/pyams_content/shared/site/zmi/manager.py
changeset 294 8742c8ac126c
parent 280 a87f40e0f10c
child 336 d9f37252a42d
--- a/src/pyams_content/shared/site/zmi/manager.py	Sun Nov 26 09:57:42 2017 +0100
+++ b/src/pyams_content/shared/site/zmi/manager.py	Sun Nov 26 09:58:07 2017 +0100
@@ -19,20 +19,20 @@
 from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION
 from pyams_content.root.interfaces import ISiteRoot
 from pyams_content.shared.site.interfaces import ISiteManager
-from pyams_content.zmi.interfaces import IUserAddingsMenuLabel
+from pyams_content.zmi.interfaces import IUserAddingsMenuLabel, ISiteTreeTable
 from pyams_i18n.interfaces import II18n, INegotiator
 from pyams_skin.interfaces.container import ITableElementEditor
-from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
+from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IBreadcrumbItem
 from pyams_skin.layer import IPyAMSLayer
 from pyams_zmi.layer import IAdminLayer
 from z3c.form.interfaces import IDataExtractedEvent
 
 # import packages
-from pyams_content.shared.site.manager import SiteManager
-from pyams_content.shared.zmi.sites import SiteTreeTable
+from pyams_content.shared.site import WfTopic
 from pyams_form.form import AJAXAddForm
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.table import DefaultElementEditorAdapter
+from pyams_skin.viewlet.breadcrumb import BreadcrumbItem
 from pyams_skin.viewlet.toolbar import ToolbarMenuItem
 from pyams_utils.adapter import adapter_config, ContextRequestAdapter
 from pyams_utils.registry import query_utility
@@ -41,6 +41,7 @@
 from pyams_viewlet.viewlet import viewlet_config
 from pyams_zmi.form import AdminDialogAddForm
 from pyramid.events import subscriber
+from pyramid.path import DottedNameResolver
 from pyramid.view import view_config
 from z3c.form import field
 from zope.interface import Invalid
@@ -48,19 +49,30 @@
 from pyams_content import _
 
 
+@adapter_config(context=(ISiteManager, IPyAMSLayer), provides=IBreadcrumbItem)
+class SiteManagerBreadcrumbAdapter(BreadcrumbItem):
+    """Site manager breadcrumb adapter"""
+
+    @property
+    def label(self):
+        return II18n(self.context).query_attribute('short_name', request=self.request)
+
+    css_class = 'strong'
+
+
 @adapter_config(context=(ISiteManager, IAdminLayer), provides=IUserAddingsMenuLabel)
-class SiteManageruserAddingsMenuLabelAdapter(ContextRequestAdapter):
+class SiteManagerUserAddingsMenuLabelAdapter(ContextRequestAdapter):
     """Site manager user addings menu label adapter"""
 
     @property
     def label(self):
         return '{content} ({blog})'.format(
-            content=self.request.localizer.translate(self.context.shared_content_factory.content_class.content_name),
+            content=self.request.localizer.translate(WfTopic.content_name),
             blog=II18n(self.context).query_attribute('title', request=self.request))
 
 
 @viewlet_config(name='add-site-manager.menu', context=ISiteRoot, layer=IAdminLayer,
-                view=SiteTreeTable, manager=IToolbarAddingMenu, permission=MANAGE_SITE_ROOT_PERMISSION)
+                view=ISiteTreeTable, manager=IToolbarAddingMenu, permission=MANAGE_SITE_ROOT_PERMISSION)
 class SiteManagerAddMenu(ToolbarMenuItem):
     """Site manager add menu"""
 
@@ -84,7 +96,11 @@
     edit_permission = None
 
     def create(self, data):
-        return SiteManager()
+        factory = self.request.registry.settings.get('pyams_content.config.site_factory')
+        if factory is None:
+            factory = 'pyams_content.shared.site.manager.SiteManager'
+        factory = DottedNameResolver().resolve(factory)
+        return factory()
 
     def add(self, object):
         short_name = II18n(object).query_attribute('short_name', request=self.request)
@@ -100,7 +116,7 @@
     """Handle new site manager data extraction"""
     container = event.form.context
     negotiator = query_utility(INegotiator)
-    short_name = event.data['short_name'].get(negotiator.server_language)
+    short_name = event.data.get('short_name', {}).get(negotiator.server_language)
     if not short_name:
         event.form.widgets.errors += (Invalid(_("You must provide a short name for default server language!")),)
         return
@@ -119,9 +135,9 @@
     """Site manager add form, JSOn renderer"""
 
 
-@adapter_config(context=(ISiteManager, IAdminLayer, SiteTreeTable), provides=ITableElementEditor)
+@adapter_config(context=(ISiteManager, IAdminLayer, ISiteTreeTable), provides=ITableElementEditor)
 class SiteManagerTableElementEditor(DefaultElementEditorAdapter):
     """Site tree table element editor"""
 
-    view_name = 'admin'
+    view_name = 'admin#site-tree.html'
     modal_target = False