8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
13 from hypatia.catalog import CatalogQuery |
|
14 from hypatia.interfaces import ICatalog |
|
15 from hypatia.query import Any, Eq, Or |
|
16 from z3c.table.interfaces import IColumn, IValues |
|
17 from zope.interface import Interface, implementer |
14 |
18 |
15 |
19 from pyams_catalog.query import CatalogResultSet |
16 # import standard library |
|
17 |
|
18 # import interfaces |
|
19 from hypatia.interfaces import ICatalog |
|
20 from pyams_content.shared.common.interfaces import IWfSharedContent |
20 from pyams_content.shared.common.interfaces import IWfSharedContent |
21 from pyams_content.shared.common.interfaces.zmi import ISiteRootDashboardTable |
21 from pyams_content.shared.common.interfaces.zmi import ISiteRootDashboardTable |
22 from pyams_content.shared.site.interfaces import ISiteContainer |
22 from pyams_content.shared.site.interfaces import ISiteContainer |
|
23 from pyams_pagelet.pagelet import pagelet_config |
23 from pyams_portal.interfaces import IPortalTemplate |
24 from pyams_portal.interfaces import IPortalTemplate |
24 from pyams_sequence.interfaces import ISequentialIdInfo |
25 from pyams_sequence.interfaces import ISequentialIdInfo |
|
26 from pyams_skin.container import ContainerView |
25 from pyams_skin.interfaces import IInnerPage |
27 from pyams_skin.interfaces import IInnerPage |
26 from pyams_skin.layer import IPyAMSLayer |
28 from pyams_skin.layer import IPyAMSLayer |
27 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION |
|
28 from pyams_workflow.interfaces import IWorkflowVersions |
|
29 from pyams_zmi.interfaces.menu import IContentManagementMenu |
|
30 from pyams_zmi.layer import IAdminLayer |
|
31 from z3c.table.interfaces import IValues, IColumn |
|
32 |
|
33 # import packages |
|
34 from hypatia.catalog import CatalogQuery |
|
35 from hypatia.query import Eq, Or, Any |
|
36 from pyams_catalog.query import CatalogResultSet |
|
37 from pyams_pagelet.pagelet import pagelet_config |
|
38 from pyams_skin.container import ContainerView |
|
39 from pyams_skin.table import BaseTable, NameColumn |
29 from pyams_skin.table import BaseTable, NameColumn |
40 from pyams_skin.viewlet.menu import MenuItem |
30 from pyams_skin.viewlet.menu import MenuItem |
41 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter |
31 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config |
42 from pyams_utils.list import unique_iter |
32 from pyams_utils.interfaces import ICacheKeyValue, VIEW_SYSTEM_PERMISSION |
|
33 from pyams_utils.list import unique_iter_max |
43 from pyams_utils.registry import get_utility |
34 from pyams_utils.registry import get_utility |
44 from pyams_utils.traversing import get_parent |
35 from pyams_utils.traversing import get_parent |
45 from pyams_viewlet.viewlet import viewlet_config |
36 from pyams_viewlet.viewlet import viewlet_config |
|
37 from pyams_workflow.interfaces import IWorkflowState |
|
38 from pyams_zmi.interfaces.menu import IContentManagementMenu |
|
39 from pyams_zmi.layer import IAdminLayer |
46 from pyams_zmi.view import AdminView |
40 from pyams_zmi.view import AdminView |
47 from zope.interface import implementer, Interface |
41 |
|
42 |
|
43 __docformat__ = 'restructuredtext' |
48 |
44 |
49 from pyams_content import _ |
45 from pyams_content import _ |
50 |
46 |
51 |
47 |
52 @viewlet_config(name='reverse-links.menu', context=IWfSharedContent, layer=IAdminLayer, |
48 @viewlet_config(name='reverse-links.menu', context=IWfSharedContent, layer=IAdminLayer, |
93 |
89 |
94 catalog = get_utility(ICatalog) |
90 catalog = get_utility(ICatalog) |
95 oid = ISequentialIdInfo(self.context).hex_oid |
91 oid = ISequentialIdInfo(self.context).hex_oid |
96 params = Or(Eq(catalog['link_reference'], oid), |
92 params = Or(Eq(catalog['link_reference'], oid), |
97 Any(catalog['link_references'], {oid})) |
93 Any(catalog['link_references'], {oid})) |
98 return unique_iter(map(get_item, |
94 return unique_iter_max(map(get_item, |
99 CatalogResultSet(CatalogQuery(catalog).query(params, |
95 CatalogResultSet(CatalogQuery(catalog).query(params))), |
100 sort_index='modified_date')))) |
96 key=lambda x: getattr(ISequentialIdInfo(x, None), |
|
97 'oid', ICacheKeyValue(x)), |
|
98 sort_key=lambda x: getattr(IWorkflowState(x, None), |
|
99 'version_id', ICacheKeyValue(x))) |
101 |
100 |
102 |
101 |
103 @pagelet_config(name='reverse-links.html', context=IWfSharedContent, layer=IPyAMSLayer, |
102 @pagelet_config(name='reverse-links.html', context=IWfSharedContent, layer=IPyAMSLayer, |
104 permission=VIEW_SYSTEM_PERMISSION) |
103 permission=VIEW_SYSTEM_PERMISSION) |
105 @implementer(IInnerPage) |
104 @implementer(IInnerPage) |