src/pyams_content/shared/common/zmi/reverse.py
changeset 1390 4839e7691132
parent 883 731b88c6f23a
equal deleted inserted replaced
1389:1485db1e2b5e 1390:4839e7691132
     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,
    81     def values(self):
    77     def values(self):
    82 
    78 
    83         def get_item(result):
    79         def get_item(result):
    84             parent = get_parent(result, IWfSharedContent)
    80             parent = get_parent(result, IWfSharedContent)
    85             if parent is not None:
    81             if parent is not None:
    86                 return IWorkflowVersions(parent).get_last_versions(count=1)[0]
    82                 return parent
    87             parent = get_parent(result, IPortalTemplate)
    83             parent = get_parent(result, IPortalTemplate)
    88             if parent is None:
    84             if parent is None:
    89                 parent = get_parent(result, ISiteContainer)
    85                 parent = get_parent(result, ISiteContainer)
    90             if parent is None:
    86             if parent is None:
    91                 parent = self.request.root
    87                 parent = self.request.root
    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)