src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py
changeset 990 3b3a47dbe205
parent 559 5ddb2d0bef4b
equal deleted inserted replaced
989:ba512b0e74de 990:3b3a47dbe205
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
     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 import locale
       
    13 
    12 
    14 
    13 __docformat__ = 'restructuredtext'
    15 __docformat__ = 'restructuredtext'
    14 
    16 
    15 
    17 
    16 # import standard library
    18 from hypatia.catalog import CatalogQuery
       
    19 from hypatia.interfaces import ICatalog
       
    20 from hypatia.query import And, Any, NotEq, Or
    17 
    21 
    18 # import interfaces
    22 from pyams_catalog.query import CatalogResultSet
    19 from hypatia.interfaces import ICatalog
    23 from pyams_content import _
    20 from pyams_content.shared.common.interfaces import IBaseSharedTool, ISharedSite
    24 from pyams_content.shared.common.interfaces import IBaseSharedTool, ISharedSite
    21 from pyams_content.skin.zmi.interfaces import IUserAddingsMenuLabel
    25 from pyams_content.skin.zmi.interfaces import IUserAddingsMenuLabel
    22 from pyams_i18n.interfaces import II18n
    26 from pyams_i18n.interfaces import II18n
    23 from pyams_skin.interfaces.viewlet import ITopLinksViewletManager
    27 from pyams_skin.interfaces.viewlet import ITopLinksViewletManager
    24 from pyams_zmi.layer import IAdminLayer
    28 from pyams_skin.viewlet.toplinks import TopLinksMenu, TopLinksViewlet
    25 
       
    26 # import packages
       
    27 from hypatia.catalog import CatalogQuery
       
    28 from hypatia.query import Any, And, Or, NotEq
       
    29 from pyams_catalog.query import CatalogResultSet
       
    30 from pyams_skin.viewlet.toplinks import TopLinksViewlet, TopLinksMenu
       
    31 from pyams_template.template import template_config
    29 from pyams_template.template import template_config
    32 from pyams_utils.list import unique
    30 from pyams_utils.list import unique
    33 from pyams_utils.registry import get_utility, get_all_utilities_registered_for
    31 from pyams_utils.registry import get_all_utilities_registered_for, get_utility
    34 from pyams_utils.url import absolute_url
    32 from pyams_utils.url import absolute_url
    35 from pyams_viewlet.viewlet import viewlet_config
    33 from pyams_viewlet.viewlet import viewlet_config
    36 
    34 from pyams_zmi.layer import IAdminLayer
    37 from pyams_content import _
       
    38 
    35 
    39 
    36 
    40 @viewlet_config(name='shared-sites.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=20)
    37 @viewlet_config(name='shared-sites.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=20)
    41 class SharedSitesMenu(TopLinksViewlet):
    38 class SharedSitesMenu(TopLinksViewlet):
    42     """Shared sites menu"""
    39     """Shared sites menu"""
    49         super(SharedSitesMenu, self).update()
    46         super(SharedSitesMenu, self).update()
    50         context = self.context
    47         context = self.context
    51         request = self.request
    48         request = self.request
    52         parent = self.__parent__
    49         parent = self.__parent__
    53         for site in sorted(get_all_utilities_registered_for(ISharedSite),
    50         for site in sorted(get_all_utilities_registered_for(ISharedSite),
    54                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
    51                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
    55             menu = TopLinksMenu(context, request, parent, self)
    52             menu = TopLinksMenu(context, request, parent, self)
    56             menu.label = II18n(site).query_attribute('title', request=request) or site.__name__
    53             menu.label = II18n(site).query_attribute('title', request=request) or site.__name__
    57             menu.url = absolute_url(site, request, 'admin#dashboard.html')
    54             menu.url = absolute_url(site, request, 'admin#dashboard.html')
    58             self.viewlets.append(menu)
    55             self.viewlets.append(menu)
    59 
    56 
    70         super(SharedContentsMenu, self).update()
    67         super(SharedContentsMenu, self).update()
    71         context = self.context
    68         context = self.context
    72         request = self.request
    69         request = self.request
    73         parent = self.__parent__
    70         parent = self.__parent__
    74         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
    71         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
    75                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
    72                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
    76             if ISharedSite.providedBy(tool) or (not tool.shared_content_menu):
    73             if ISharedSite.providedBy(tool) or (not tool.shared_content_menu):
    77                 continue
    74                 continue
    78             menu = TopLinksMenu(context, request, parent, self)
    75             menu = TopLinksMenu(context, request, parent, self)
    79             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
    76             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
    80             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
    77             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
    93         super(SharedToolsMenu, self).update()
    90         super(SharedToolsMenu, self).update()
    94         context = self.context
    91         context = self.context
    95         request = self.request
    92         request = self.request
    96         parent = self.__parent__
    93         parent = self.__parent__
    97         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
    94         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
    98                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
    95                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
    99             if ISharedSite.providedBy(tool) or tool.shared_content_menu:
    96             if ISharedSite.providedBy(tool) or tool.shared_content_menu:
   100                 continue
    97                 continue
   101             menu = TopLinksMenu(context, request, parent, self)
    98             menu = TopLinksMenu(context, request, parent, self)
   102             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
    99             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
   103             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
   100             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
   121         params = And(Or(Any(catalog['role:contributor'], {request.principal.id}),
   118         params = And(Or(Any(catalog['role:contributor'], {request.principal.id}),
   122                         Any(catalog['role:manager'], {request.principal.id}),
   119                         Any(catalog['role:manager'], {request.principal.id}),
   123                         Any(catalog['role:pilot'], {request.principal.id})),
   120                         Any(catalog['role:pilot'], {request.principal.id})),
   124                      NotEq(catalog['content_type'], None))
   121                      NotEq(catalog['content_type'], None))
   125         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   122         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   126                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
   123                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
   127             menu = TopLinksMenu(context, request, parent, self)
   124             menu = TopLinksMenu(context, request, parent, self)
   128             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
   125             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
   129             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
   126             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
   130             self.viewlets.append(menu)
   127             self.viewlets.append(menu)
   131 
   128 
   147         parent = self.__parent__
   144         parent = self.__parent__
   148         registry = request.registry
   145         registry = request.registry
   149         params = And(Any(catalog['role:contributor'], {request.principal.id}),
   146         params = And(Any(catalog['role:contributor'], {request.principal.id}),
   150                      NotEq(catalog['content_type'], None))
   147                      NotEq(catalog['content_type'], None))
   151         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   148         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   152                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
   149                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
   153             content_class = tool.shared_content_factory.content_class
   150             content_class = tool.shared_content_factory.content_class
   154             if content_class is None:
   151             if content_class is None:
   155                 continue
   152                 continue
   156             menu = TopLinksMenu(context, request, parent, self)
   153             menu = TopLinksMenu(context, request, parent, self)
   157             adapter = registry.queryMultiAdapter((tool, request), IUserAddingsMenuLabel)
   154             adapter = registry.queryMultiAdapter((tool, request), IUserAddingsMenuLabel)