src/pyams_content/shared/common/zmi/dashboard.py
changeset 277 9649f8ce3b1c
parent 162 fc3266e6a510
child 279 c31da1985a3b
--- a/src/pyams_content/shared/common/zmi/dashboard.py	Fri Nov 10 12:07:43 2017 +0100
+++ b/src/pyams_content/shared/common/zmi/dashboard.py	Tue Nov 14 14:05:30 2017 +0100
@@ -19,7 +19,7 @@
 from hypatia.interfaces import ICatalog
 from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION, PUBLISH_CONTENT_PERMISSION
 from pyams_content.profile.interfaces import IAdminProfile
-from pyams_content.shared.common.interfaces import ISharedTool, IWfSharedContent, IManagerRestrictions
+from pyams_content.shared.common.interfaces import IBaseSharedTool, IWfSharedContent, IManagerRestrictions
 from pyams_content.shared.common.interfaces.zmi import IDashboardTable, ISharedToolDashboardTable
 from pyams_content.zmi.interfaces import IDashboardMenu, IMyDashboardMenu, IAllContentsMenu
 from pyams_i18n.interfaces import II18n
@@ -34,11 +34,13 @@
 from pyams_zmi.layer import IAdminLayer
 from z3c.table.interfaces import IValues, IColumn
 from zope.dublincore.interfaces import IZopeDublinCore
+from zope.intid.interfaces import IIntIds
 
 # import packages
 from hypatia.catalog import CatalogQuery
 from hypatia.query import And, Or, Eq, Any
 from pyams_catalog.query import CatalogResultSet
+from pyams_content.shared.common import CONTENT_TYPES
 from pyams_content.skin import pyams_content
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_skin.container import ContainerView
@@ -106,7 +108,7 @@
     _header = _("Title")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, IDashboardTable), provides=ITableElementName)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, IDashboardTable), provides=ITableElementName)
 class SharedToolDashboardNameAdapter(ContextRequestViewAdapter):
     """Shared tool dashboard name adapter"""
 
@@ -133,8 +135,11 @@
 
     def getValue(self, obj):
         target = get_parent(obj, ISequentialIdTarget)
-        sequence = get_utility(ISequentialIntIds, name=target.sequence_name)
-        return sequence.get_base_oid(ISequentialIdInfo(obj).oid, target.sequence_prefix)
+        if target is not None:
+            sequence = get_utility(ISequentialIntIds, name=target.sequence_name)
+            return sequence.get_base_oid(ISequentialIdInfo(obj).oid, target.sequence_prefix)
+        else:
+            return '--'
 
 
 @adapter_config(name='status', context=(Interface, IPyAMSLayer, ISharedToolDashboardTable), provides=IColumn)
@@ -145,19 +150,22 @@
     weight = 20
 
     def getValue(self, obj):
-        workflow = IWorkflow(obj)
-        state = IWorkflowState(obj)
-        result = self.request.localizer.translate(workflow.get_state_label(state.state))
-        if state.state_urgency:
-            result += ' <i class="fa fa-fw fa-exclamation-triangle txt-color-red"></i>'
-        elif state.state in workflow.published_states:
-            pub_info = IWorkflowPublicationInfo(obj, None)
-            if (pub_info is not None) and not pub_info.is_published():
-                translate = self.request.localizer.translate
-                result += ' <i class="fa fa-fw fa-hourglass-half font-xs opacity-75 hint align-base" ' \
-                          'data-ams-hint-offset="5" title="{0}"></i>'.format(
-                    translate(_("Content publication start date is not passed yet")))
-        return result
+        state = IWorkflowState(obj, None)
+        if state is not None:
+            workflow = IWorkflow(obj)
+            result = self.request.localizer.translate(workflow.get_state_label(state.state))
+            if state.state_urgency:
+                result += ' <i class="fa fa-fw fa-exclamation-triangle txt-color-red"></i>'
+            elif state.state in workflow.published_states:
+                pub_info = IWorkflowPublicationInfo(obj, None)
+                if (pub_info is not None) and not pub_info.is_published():
+                    translate = self.request.localizer.translate
+                    result += ' <i class="fa fa-fw fa-hourglass-half font-xs opacity-75 hint align-base" ' \
+                              'data-ams-hint-offset="5" title="{0}"></i>'.format(
+                        translate(_("Content publication start date is not passed yet")))
+            return result
+        else:
+            return '--'
 
 
 @adapter_config(name='status_date', context=(Interface, IPyAMSLayer, ISharedToolDashboardTable), provides=IColumn)
@@ -170,8 +178,11 @@
     weight = 21
 
     def getValue(self, obj):
-        state = IWorkflowState(obj)
-        return format_datetime(state.state_date, SH_DATETIME_FORMAT, request=self.request)
+        state = IWorkflowState(obj, None)
+        if state is not None:
+            return format_datetime(state.state_date, SH_DATETIME_FORMAT, request=self.request)
+        else:
+            return '--'
 
 
 @adapter_config(name='version', context=(Interface, IPyAMSLayer, ISharedToolDashboardTable), provides=IColumn)
@@ -182,7 +193,11 @@
     weight = 25
 
     def getValue(self, obj):
-        return str(IWorkflowState(obj).version_id)
+        state = IWorkflowState(obj, None)
+        if state is not None:
+            return str(state.version_id)
+        else:
+            return '--'
 
 
 @adapter_config(name='status_principal', context=(Interface, IPyAMSLayer, ISharedToolDashboardTable), provides=IColumn)
@@ -195,9 +210,12 @@
     weight = 30
 
     def getValue(self, obj):
-        state = IWorkflowState(obj)
-        manager = get_utility(ISecurityManager)
-        return manager.get_principal(state.state_principal).title
+        state = IWorkflowState(obj, None)
+        if state is not None:
+            manager = get_utility(ISecurityManager)
+            return manager.get_principal(state.state_principal).title
+        else:
+            return '--'
 
 
 @adapter_config(name='owner', context=(Interface, IPyAMSLayer, ISharedToolDashboardTable), provides=IColumn)
@@ -210,8 +228,13 @@
     weight = 35
 
     def getValue(self, obj):
-        manager = get_utility(ISecurityManager)
-        return manager.get_principal(next(iter(obj.owner))).title
+        try:
+            owner = obj.owner
+        except AttributeError:
+            return '--'
+        else:
+            manager = get_utility(ISecurityManager)
+            return manager.get_principal(next(iter(owner))).title
 
 
 @adapter_config(name='modified', context=(Interface, IPyAMSLayer, ISharedToolDashboardTable), provides=IColumn)
@@ -229,7 +252,7 @@
 # Shared tool control panel
 #
 
-@viewlet_config(name='dashboard.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='dashboard.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IContentManagementMenu, permission=VIEW_SYSTEM_PERMISSION, weight=1)
 @viewletmanager_config(name='dashboard.menu', layer=IAdminLayer, provides=IDashboardMenu)
 @implementer(IDashboardMenu)
@@ -241,7 +264,7 @@
     url = '#dashboard.html'
 
 
-@pagelet_config(name='dashboard.html', context=ISharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='dashboard.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
 @template_config(template='templates/dashboard.pt', layer=IAdminLayer)
 class SharedToolDashboardView(InnerAdminView):
     """Shared tool dashboard view"""
@@ -262,7 +285,7 @@
         [table.update() for table in self.tables]
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolDashboardView), provides=IPageHeader)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolDashboardView), provides=IPageHeader)
 class SharedToolDashboardHeaderAdapter(DefaultPageHeaderAdapter):
     """Shared tool properties header adapter"""
 
@@ -284,15 +307,16 @@
     _plural_title = _("MANAGER - {0} contents waiting for your action")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolDashboardManagerWaitingTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolDashboardManagerWaitingTable), provides=IValues)
 class SharedToolDashboardManagerWaitingValues(ContextRequestViewAdapter):
     """Shared tool dashboard waiting values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
-        params = Eq(catalog['content_type'], self.context.shared_content_type) & \
+        params = Eq(catalog['parents'], intids.register(self.context)) & \
                  Any(catalog['workflow_state'], workflow.waiting_states)
         return filter(self.check_access,
                       unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
@@ -326,15 +350,16 @@
     dt_sort_order = 'asc'
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolDashboardOwnerWaitingTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolDashboardOwnerWaitingTable), provides=IValues)
 class SharedToolDashboardOwnerWaitingValues(ContextRequestViewAdapter):
     """Shared tool dashboard waiting owned contents values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
-        params = Eq(catalog['content_type'], self.context.shared_content_type) & \
+        params = Eq(catalog['parents'], intids.register(self.context)) & \
                  Any(catalog['workflow_state'], workflow.waiting_states) & \
                  Eq(catalog['workflow_principal'], self.request.principal.id)
         return unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
@@ -361,16 +386,18 @@
             return _("CONTRIBUTOR - Last {0} modified contents")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolDashboardOwnerModifiedTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolDashboardOwnerModifiedTable), provides=IValues)
 class SharedToolDashboardOwnerModifiedValues(ContextRequestViewAdapter):
     """Shared tool dashboard waiting owned contents values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
-        params = And(Eq(catalog['content_type'], self.context.shared_content_type),
-                        Or(Eq(catalog['role:owner'], self.request.principal.id),
-                           Eq(catalog['role:contributor'], self.request.principal.id)))
+        params = And(Eq(catalog['parents'], intids.register(self.context)),
+                     Any(catalog['content_type'], CONTENT_TYPES.keys()),
+                     Or(Eq(catalog['role:owner'], self.request.principal.id),
+                        Eq(catalog['role:contributor'], self.request.principal.id)))
         return unique(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state),
                                            key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0],
                           CatalogResultSet(CatalogQuery(catalog).query(params,
@@ -383,7 +410,7 @@
 # All my contents menu
 #
 
-@viewlet_config(name='my-contents.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='my-contents.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IContentManagementMenu, permission=VIEW_SYSTEM_PERMISSION, weight=5)
 @viewletmanager_config(name='my-contents.menu', layer=IAdminLayer, provides=IMyDashboardMenu)
 @implementer(IMyDashboardMenu)
@@ -400,7 +427,7 @@
 # Dashboard of favorites contents
 #
 
-@viewlet_config(name='my-favorites.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='my-favorites.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IMyDashboardMenu, permission=VIEW_SYSTEM_PERMISSION, weight=3)
 class SharedToolFavoritesMenu(MenuItem):
     """Shared tool favorites dashboard menu"""
@@ -454,15 +481,17 @@
         return ''
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolFavoritesTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolFavoritesTable), provides=IValues)
 class SharedToolFavoritesValues(ContextRequestViewAdapter):
     """Shared tool favorites values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         profile = IAdminProfile(self.request.principal)
-        params = And(Eq(catalog['content_type'], self.context.shared_content_type),
+        params = And(Eq(catalog['parents'], intids.register(self.context)),
+                     Any(catalog['content_type'], CONTENT_TYPES.keys()),
                      Any(catalog['oid'], profile.favorites or ()))
         return unique(map(lambda x: IWorkflowVersions(x).get_last_versions()[0],
                       CatalogResultSet(CatalogQuery(catalog).query(params,
@@ -470,14 +499,14 @@
                                                                    reverse=True))))
 
 
-@pagelet_config(name='my-favorites.html', context=ISharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='my-favorites.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolFavoritesView(InnerAdminView, ContainerView):
     """Shared tool favorites view"""
 
     table_class = SharedToolFavoritesTable
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolFavoritesView), provides=IPageHeader)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolFavoritesView), provides=IPageHeader)
 class SharedToolFavoritesHeaderAdapter(DefaultPageHeaderAdapter):
     """Shared tool favorites header adapter"""
 
@@ -496,7 +525,7 @@
 # Dashboard of owned and modified contents which can be updated
 #
 
-@viewlet_config(name='my-preparations.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='my-preparations.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IMyDashboardMenu, permission=VIEW_SYSTEM_PERMISSION, weight=5)
 class SharedToolPreparationsMenu(MenuItem):
     """Shared tool preparations dashboard menu"""
@@ -514,15 +543,16 @@
     _plural_title = _("CONTRIBUTOR - {0} prepared contents")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolPreparationsTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolPreparationsTable), provides=IValues)
 class SharedToolPreparationsValues(ContextRequestViewAdapter):
     """Shared tool preparations values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
-        params = And(Eq(catalog['content_type'], self.context.shared_content_type),
+        params = And(Eq(catalog['parents'], intids.register(self.context)),
                      Or(Eq(catalog['role:owner'], self.request.principal.id),
                         Eq(catalog['role:contributor'], self.request.principal.id)),
                      Eq(catalog['workflow_state'], workflow.initial_state))
@@ -531,14 +561,14 @@
                                                                    reverse=True)))
 
 
-@pagelet_config(name='my-preparations.html', context=ISharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='my-preparations.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolPreparationsView(InnerAdminView, ContainerView):
     """Shared tool preparations view"""
 
     table_class = SharedToolPreparationsTable
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolPreparationsView), provides=IPageHeader)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolPreparationsView), provides=IPageHeader)
 class SharedToolPreparationsHeaderAdapter(DefaultPageHeaderAdapter):
     """Shared tool preparations header adapter"""
 
@@ -557,7 +587,7 @@
 # Dashboard of owned and modified contents which are waiting for manager action
 #
 
-@viewlet_config(name='my-submissions.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='my-submissions.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IMyDashboardMenu, permission=VIEW_SYSTEM_PERMISSION, weight=7)
 class SharedToolSubmissionsMenu(MenuItem):
     """Shared tool submissions dashboard menu"""
@@ -575,15 +605,16 @@
     _plural_title = _("CONTRIBUTOR - {0} submitted contents")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolSubmissionsTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolSubmissionsTable), provides=IValues)
 class SharedToolSubmissionsValues(ContextRequestViewAdapter):
     """Shared tool submissions values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
-        params = And(Eq(catalog['content_type'], self.context.shared_content_type),
+        params = And(Eq(catalog['parents'], intids.register(self.context)),
                      Or(Eq(catalog['role:owner'], self.request.principal.id),
                         Eq(catalog['role:contributor'], self.request.principal.id)),
                      Any(catalog['workflow_state'], workflow.waiting_states))
@@ -592,14 +623,14 @@
                                                                    reverse=True)))
 
 
-@pagelet_config(name='my-submissions.html', context=ISharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='my-submissions.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolSubmissionsView(InnerAdminView, ContainerView):
     """Shared tool submissions view"""
 
     table_class = SharedToolSubmissionsTable
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolSubmissionsView), provides=IPageHeader)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolSubmissionsView), provides=IPageHeader)
 class SharedToolSubmissionsHeaderAdapter(DefaultPageHeaderAdapter):
     """Shared tool submissions header adapter"""
 
@@ -618,7 +649,7 @@
 # Dashboard of owned and modified contents which are published
 #
 
-@viewlet_config(name='my-publications.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='my-publications.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IMyDashboardMenu, permission=VIEW_SYSTEM_PERMISSION, weight=10)
 class SharedToolPublicationsMenu(MenuItem):
     """Shared tool publications dashboard menu"""
@@ -636,15 +667,16 @@
     _plural_title = _("CONTRIBUTOR - {0} published contents")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolPublicationsTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolPublicationsTable), provides=IValues)
 class SharedToolPublicationsValues(ContextRequestViewAdapter):
     """Shared tool publications values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
-        params = And(Eq(catalog['content_type'], self.context.shared_content_type),
+        params = And(Eq(catalog['parents'], intids.register(self.context)),
                      Or(Eq(catalog['role:owner'], self.request.principal.id),
                         Eq(catalog['role:contributor'], self.request.principal.id)),
                      Any(catalog['workflow_state'], workflow.published_states))
@@ -653,14 +685,14 @@
                                                                    reverse=True)))
 
 
-@pagelet_config(name='my-publications.html', context=ISharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
+@pagelet_config(name='my-publications.html', context=IBaseSharedTool, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolPublicationsView(InnerAdminView, ContainerView):
     """Shared tool publications view"""
 
     table_class = SharedToolPublicationsTable
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolPublicationsView), provides=IPageHeader)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolPublicationsView), provides=IPageHeader)
 class SharedToolPublicationsHeaderAdapter(DefaultPageHeaderAdapter):
     """Shared tool publications header adapter"""
 
@@ -679,7 +711,7 @@
 # Dashboard of owned and modified contents which are retired
 #
 
-@viewlet_config(name='my-retired-contents.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='my-retired-contents.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IMyDashboardMenu, permission=VIEW_SYSTEM_PERMISSION, weight=15)
 class SharedToolRetiredMenu(MenuItem):
     """Shared tool retired contents dashboard menu"""
@@ -697,15 +729,16 @@
     _plural_title = _("CONTRIBUTOR - {0} retired contents")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolRetiredContentsTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolRetiredContentsTable), provides=IValues)
 class SharedToolRetiredContentsValues(ContextRequestViewAdapter):
     """Shared tool retired contents values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
-        params = And(Eq(catalog['content_type'], self.context.shared_content_type),
+        params = And(Eq(catalog['parents'], intids.register(self.context)),
                      Or(Eq(catalog['role:owner'], self.request.principal.id),
                         Eq(catalog['role:contributor'], self.request.principal.id)),
                      Any(catalog['workflow_state'], workflow.retired_states))
@@ -714,7 +747,7 @@
                                                                    reverse=True)))
 
 
-@pagelet_config(name='my-retired-contents.html', context=ISharedTool, layer=IPyAMSLayer,
+@pagelet_config(name='my-retired-contents.html', context=IBaseSharedTool, layer=IPyAMSLayer,
                 permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolRetiredContentsView(InnerAdminView, ContainerView):
     """Shared tool retired contents view"""
@@ -722,7 +755,7 @@
     table_class = SharedToolRetiredContentsTable
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolRetiredContentsView), provides=IPageHeader)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolRetiredContentsView), provides=IPageHeader)
 class SharedToolRetiredContentsHeaderAdapter(DefaultPageHeaderAdapter):
     """Shared tool retired contents header adapter"""
 
@@ -741,7 +774,7 @@
 # Dashboard of owned and modified contents which are archived
 #
 
-@viewlet_config(name='my-archived-contents.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='my-archived-contents.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IMyDashboardMenu, permission=VIEW_SYSTEM_PERMISSION, weight=20)
 class SharedToolArchivedMenu(MenuItem):
     """Shared tool archived contents dashboard menu"""
@@ -759,16 +792,17 @@
     _plural_title = _("CONTRIBUTOR - {0} archived contents")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolArchivedContentsTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolArchivedContentsTable), provides=IValues)
 class SharedToolArchivedContentsValues(ContextRequestViewAdapter):
     """Shared tool archived contents values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         principal_id = self.request.principal.id
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
-        params = And(Eq(catalog['content_type'], self.context.shared_content_type),
+        params = And(Eq(catalog['parents'], intids.register(self.context)),
                      Or(Eq(catalog['role:owner'], principal_id),
                         Eq(catalog['role:contributor'], principal_id)),
                      Any(catalog['workflow_state'], workflow.archived_states))
@@ -782,7 +816,7 @@
                                                                        reverse=True))))
 
 
-@pagelet_config(name='my-archived-contents.html', context=ISharedTool, layer=IPyAMSLayer,
+@pagelet_config(name='my-archived-contents.html', context=IBaseSharedTool, layer=IPyAMSLayer,
                 permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolArchivedContentsView(InnerAdminView, ContainerView):
     """Shared tool archived contents view"""
@@ -790,7 +824,7 @@
     table_class = SharedToolArchivedContentsTable
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolArchivedContentsView), provides=IPageHeader)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolArchivedContentsView), provides=IPageHeader)
 class SharedToolArchivedContentsHeaderAdapter(DefaultPageHeaderAdapter):
     """Shared tool archived contents header adapter"""
 
@@ -808,7 +842,7 @@
 # All interventions
 #
 
-@viewlet_config(name='all-interventions.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='all-interventions.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IContentManagementMenu, permission=VIEW_SYSTEM_PERMISSION, weight=10)
 @viewletmanager_config(name='all-interventions.menu', layer=IAdminLayer, provides=IAllContentsMenu)
 @implementer(IAllContentsMenu)
@@ -825,7 +859,7 @@
 # Dashboard of all published contents
 #
 
-@viewlet_config(name='all-publications.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='all-publications.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IAllContentsMenu, permission=VIEW_SYSTEM_PERMISSION, weight=10)
 class SharedToolAllPublicationsMenu(MenuItem):
     """Shared tool published contents dashboard menu"""
@@ -849,15 +883,16 @@
             return _("CONTRIBUTORS - Last published contents (in the limit of 50)")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolAllPublicationsTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAllPublicationsTable), provides=IValues)
 class SharedToolAllPublicationsValues(ContextRequestViewAdapter):
     """Shared tool published contents values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
         workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow)
-        params = And(Eq(catalog['content_type'], self.context.shared_content_type),
+        params = And(Eq(catalog['parents'], intids.register(self.context)),
                      Any(catalog['workflow_state'], workflow.published_states))
         return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
                                                                    limit=50,
@@ -865,7 +900,7 @@
                                                                    reverse=True)))
 
 
-@pagelet_config(name='all-publications.html', context=ISharedTool, layer=IPyAMSLayer,
+@pagelet_config(name='all-publications.html', context=IBaseSharedTool, layer=IPyAMSLayer,
                 permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolAllPublicationsView(InnerAdminView, ContainerView):
     """Shared tool published contents view"""
@@ -873,7 +908,7 @@
     table_class = SharedToolAllPublicationsTable
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolAllPublicationsView), provides=IPageHeader)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAllPublicationsView), provides=IPageHeader)
 class SharedToolAllPublicationsHeaderAdapter(DefaultPageHeaderAdapter):
     """Shared tool published contents header adapter"""
 
@@ -892,7 +927,7 @@
 # Dashboard of all updated contents
 #
 
-@viewlet_config(name='all-updates.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='all-updates.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IAllContentsMenu, permission=VIEW_SYSTEM_PERMISSION, weight=20)
 class SharedToolAllUpdatesMenu(MenuItem):
     """Shared tool updated contents dashboard menu"""
@@ -916,21 +951,23 @@
             return _("CONTRIBUTORS - Last updated contents (in the limit of 50)")
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolAllUpdatesTable), provides=IValues)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAllUpdatesTable), provides=IValues)
 class SharedToolAllUpdatesValues(ContextRequestViewAdapter):
     """Shared tool updated contents values adapter"""
 
     @property
     def values(self):
+        intids = get_utility(IIntIds)
         catalog = get_utility(ICatalog)
-        params = Eq(catalog['content_type'], self.context.shared_content_type)
+        params = Eq(catalog['parents'], intids.register(self.context)) & \
+                 Any(catalog['content_type'], CONTENT_TYPES.keys())
         return unique(CatalogResultSet(CatalogQuery(catalog).query(params,
                                                                    limit=50,
                                                                    sort_index='modified_date',
                                                                    reverse=True)))
 
 
-@pagelet_config(name='all-updates.html', context=ISharedTool, layer=IPyAMSLayer,
+@pagelet_config(name='all-updates.html', context=IBaseSharedTool, layer=IPyAMSLayer,
                 permission=VIEW_SYSTEM_PERMISSION)
 class SharedToolAllUpdatesView(InnerAdminView, ContainerView):
     """Shared tool updated contents view"""
@@ -938,7 +975,7 @@
     table_class = SharedToolAllUpdatesTable
 
 
-@adapter_config(context=(ISharedTool, IPyAMSLayer, SharedToolAllUpdatesView), provides=IPageHeader)
+@adapter_config(context=(IBaseSharedTool, IPyAMSLayer, SharedToolAllUpdatesView), provides=IPageHeader)
 class SharedToolAllUpdatesHeaderAdapter(DefaultPageHeaderAdapter):
     """Shared tool updated contents header adapter"""
 
@@ -956,7 +993,7 @@
 # Advanced search access menu
 #
 
-@viewlet_config(name='advanced-search.menu', context=ISharedTool, layer=IAdminLayer,
+@viewlet_config(name='advanced-search.menu', context=IBaseSharedTool, layer=IAdminLayer,
                 manager=IAllContentsMenu, permission=VIEW_SYSTEM_PERMISSION, weight=90)
 class SharedToolAdvancedSearchMenu(MenuItem):
     """Shared tool advanced search menu"""