diff -r 3cee4d5a0c29 -r a8723fffbaf6 src/pyams_content/shared/common/zmi/dashboard.py --- a/src/pyams_content/shared/common/zmi/dashboard.py Wed Sep 19 10:49:26 2018 +0200 +++ b/src/pyams_content/shared/common/zmi/dashboard.py Wed Sep 19 10:54:08 2018 +0200 @@ -12,39 +12,32 @@ __docformat__ = 'restructuredtext' - -# import standard library +from hypatia.catalog import CatalogQuery +from hypatia.interfaces import ICatalog +from hypatia.query import And, Or, Eq, Any +from z3c.table.column import GetAttrColumn +from z3c.table.interfaces import IValues, IColumn +from zope.dublincore.interfaces import IZopeDublinCore +from zope.interface import implementer, Interface +from zope.intid.interfaces import IIntIds -# import interfaces -from hypatia.interfaces import ICatalog +from pyams_catalog.query import CatalogResultSet from pyams_content.interfaces import MANAGE_SITE_ROOT_PERMISSION, PUBLISH_CONTENT_PERMISSION from pyams_content.profile.interfaces import IAdminProfile +from pyams_content.shared.common import CONTENT_TYPES from pyams_content.shared.common.interfaces import IBaseSharedTool, IWfSharedContent, IManagerRestrictions from pyams_content.shared.common.interfaces.zmi import IDashboardTable, ISharedToolDashboardTable, \ IDashboardSearchHeader +from pyams_content.skin import pyams_content from pyams_content.skin.zmi.interfaces import IDashboardMenu, IMyDashboardMenu, IAllContentsMenu from pyams_i18n.interfaces import II18n +from pyams_pagelet.pagelet import pagelet_config from pyams_security.interfaces import ISecurityManager from pyams_sequence.interfaces import ISequentialIdInfo, ISequentialIdTarget, ISequentialIntIds +from pyams_skin.container import ContainerView from pyams_skin.interfaces import IPageHeader from pyams_skin.interfaces.container import ITableElementName from pyams_skin.layer import IPyAMSLayer -from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION -from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowVersions, IWorkflowPublicationInfo -from pyams_zmi.interfaces.menu import IContentManagementMenu -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 from pyams_skin.page import DefaultPageHeaderAdapter from pyams_skin.table import BaseTable, I18nColumn, NameColumn, JsActionColumn from pyams_skin.viewlet.menu import MenuItem @@ -52,6 +45,7 @@ from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter from pyams_utils.date import format_datetime, SH_DATETIME_FORMAT from pyams_utils.fanstatic import get_resource_path +from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION from pyams_utils.list import unique_iter from pyams_utils.property import cached_property from pyams_utils.registry import get_utility @@ -59,9 +53,10 @@ from pyams_utils.traversing import get_parent from pyams_viewlet.manager import viewletmanager_config from pyams_viewlet.viewlet import viewlet_config +from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowVersions, IWorkflowPublicationInfo +from pyams_zmi.interfaces.menu import IContentManagementMenu +from pyams_zmi.layer import IAdminLayer from pyams_zmi.view import InnerAdminView -from z3c.table.column import GetAttrColumn -from zope.interface import implementer, Interface from pyams_content import _ @@ -340,8 +335,8 @@ catalog = get_utility(ICatalog) workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow) params = Eq(catalog['parents'], intids.register(self.context)) & \ - Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ - Any(catalog['workflow_state'], workflow.waiting_states) + Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ + Any(catalog['workflow_state'], workflow.waiting_states) yield from filter(self.check_access, unique_iter(map(lambda x: sorted(IWorkflowVersions(x).get_versions(IWorkflowState(x).state), key=lambda y: IZopeDublinCore(y).modified, reverse=True)[0], @@ -384,9 +379,9 @@ catalog = get_utility(ICatalog) workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow) params = Eq(catalog['parents'], intids.register(self.context)) & \ - Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ - Any(catalog['workflow_state'], workflow.waiting_states) & \ - Eq(catalog['workflow_principal'], self.request.principal.id) + Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ + Any(catalog['workflow_state'], workflow.waiting_states) & \ + Eq(catalog['workflow_principal'], self.request.principal.id) yield from unique_iter(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, @@ -445,8 +440,8 @@ label = _("My contents") icon_class = 'fa-user' url = '#' - - + + # # My favorites # Dashboard of favorites contents @@ -493,14 +488,14 @@ oid = ISequentialIdInfo(item).hex_oid icon_class = 'fa fa-fw fa-star{0}'.format('' if oid in (self.profile.favorites or ()) else '-o') return ''.format( - path=get_resource_path(pyams_content), - oid=oid, - title=self.request.localizer.translate(self.icon_hint), - icon_class=icon_class) + 'data-ams-plugin-pyams_content-src="{path}" ' \ + 'data-ams-click-handler="PyAMS_content.profile.switchFavorite" data-ams-stop-propagation="true" ' \ + 'data-sequence-oid="{oid}" ' \ + 'class="{icon_class}">'.format( + path=get_resource_path(pyams_content), + oid=oid, + title=self.request.localizer.translate(self.icon_hint), + icon_class=icon_class) def get_url(self, item): return '' @@ -578,7 +573,7 @@ catalog = get_utility(ICatalog) workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow) params = And(Eq(catalog['parents'], intids.register(self.context)), - Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ + Any(catalog['content_type'], CONTENT_TYPES.keys()) & Or(Eq(catalog['role:owner'], self.request.principal.id), Eq(catalog['role:contributor'], self.request.principal.id)), Eq(catalog['workflow_state'], workflow.initial_state)) @@ -587,7 +582,8 @@ reverse=True))) -@pagelet_config(name='my-preparations.html', context=IBaseSharedTool, 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""" @@ -641,7 +637,7 @@ catalog = get_utility(ICatalog) workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow) params = And(Eq(catalog['parents'], intids.register(self.context)), - Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ + Any(catalog['content_type'], CONTENT_TYPES.keys()) & Or(Eq(catalog['role:owner'], self.request.principal.id), Eq(catalog['role:contributor'], self.request.principal.id)), Any(catalog['workflow_state'], workflow.waiting_states)) @@ -650,7 +646,8 @@ reverse=True))) -@pagelet_config(name='my-submissions.html', context=IBaseSharedTool, 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""" @@ -704,7 +701,7 @@ catalog = get_utility(ICatalog) workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow) params = And(Eq(catalog['parents'], intids.register(self.context)), - Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ + Any(catalog['content_type'], CONTENT_TYPES.keys()) & Or(Eq(catalog['role:owner'], self.request.principal.id), Eq(catalog['role:contributor'], self.request.principal.id)), Any(catalog['workflow_state'], workflow.published_states)) @@ -713,7 +710,8 @@ reverse=True))) -@pagelet_config(name='my-publications.html', context=IBaseSharedTool, 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""" @@ -767,7 +765,7 @@ catalog = get_utility(ICatalog) workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow) params = And(Eq(catalog['parents'], intids.register(self.context)), - Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ + Any(catalog['content_type'], CONTENT_TYPES.keys()) & Or(Eq(catalog['role:owner'], self.request.principal.id), Eq(catalog['role:contributor'], self.request.principal.id)), Any(catalog['workflow_state'], workflow.retired_states)) @@ -832,7 +830,7 @@ principal_id = self.request.principal.id workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow) params = And(Eq(catalog['parents'], intids.register(self.context)), - Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ + Any(catalog['content_type'], CONTENT_TYPES.keys()) & Or(Eq(catalog['role:owner'], principal_id), Eq(catalog['role:contributor'], principal_id)), Any(catalog['workflow_state'], workflow.archived_states)) @@ -923,7 +921,7 @@ catalog = get_utility(ICatalog) workflow = get_utility(IWorkflow, name=self.context.shared_content_workflow) params = And(Eq(catalog['parents'], intids.register(self.context)), - Any(catalog['content_type'], CONTENT_TYPES.keys()) & \ + Any(catalog['content_type'], CONTENT_TYPES.keys()) & Any(catalog['workflow_state'], workflow.published_states)) yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params, limit=50, @@ -991,7 +989,7 @@ intids = get_utility(IIntIds) catalog = get_utility(ICatalog) params = Eq(catalog['parents'], intids.register(self.context)) & \ - Any(catalog['content_type'], CONTENT_TYPES.keys()) + Any(catalog['content_type'], CONTENT_TYPES.keys()) yield from unique_iter(CatalogResultSet(CatalogQuery(catalog).query(params, limit=50, sort_index='modified_date',