src/pyams_content/zmi/viewlet/toplinks/__init__.py
changeset 1381 db5205cef064
parent 1070 ea0c7ac589c4
equal deleted inserted replaced
1380:2bb74b846776 1381:db5205cef064
     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'
       
    14 
       
    15 import locale
    13 import locale
    16 
    14 
    17 from hypatia.catalog import CatalogQuery
    15 from hypatia.catalog import CatalogQuery
    18 from hypatia.interfaces import ICatalog
    16 from hypatia.interfaces import ICatalog
    19 from hypatia.query import And, Any, NotEq, Or
    17 from hypatia.query import And, Any, NotEq, Or
    20 
    18 
    21 from pyams_catalog.query import CatalogResultSet
    19 from pyams_catalog.query import CatalogResultSet
    22 from pyams_content.shared.common.interfaces import IBaseSharedTool, ISharedSite
    20 from pyams_content.shared.common.interfaces import IBaseSharedTool, ISharedSite, ISharedTool
    23 from pyams_content.zmi.interfaces import IUserAddingsMenuLabel
    21 from pyams_content.zmi.interfaces import IUserAddingsMenuLabel
    24 from pyams_i18n.interfaces import II18n
    22 from pyams_i18n.interfaces import II18n
    25 from pyams_skin.interfaces.viewlet import ITopLinksViewletManager
    23 from pyams_skin.interfaces.viewlet import ITopLinksViewletManager
    26 from pyams_skin.viewlet.toplinks import TopLinksMenu, TopLinksViewlet
    24 from pyams_skin.viewlet.toplinks import TopLinksMenu, TopLinksViewlet
    27 from pyams_template.template import template_config
    25 from pyams_template.template import template_config
    29 from pyams_utils.registry import get_all_utilities_registered_for, get_utility
    27 from pyams_utils.registry import get_all_utilities_registered_for, get_utility
    30 from pyams_utils.url import absolute_url
    28 from pyams_utils.url import absolute_url
    31 from pyams_viewlet.viewlet import viewlet_config
    29 from pyams_viewlet.viewlet import viewlet_config
    32 from pyams_zmi.layer import IAdminLayer
    30 from pyams_zmi.layer import IAdminLayer
    33 
    31 
       
    32 
       
    33 __docformat__ = 'restructuredtext'
       
    34 
    34 from pyams_content import _
    35 from pyams_content import _
    35 
    36 
    36 
    37 
    37 @viewlet_config(name='shared-sites.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=20)
    38 @viewlet_config(name='shared-sites.menu', layer=IAdminLayer, manager=ITopLinksViewletManager,
       
    39                 weight=20)
    38 class SharedSitesMenu(TopLinksViewlet):
    40 class SharedSitesMenu(TopLinksViewlet):
    39     """Shared sites menu"""
    41     """Shared sites menu"""
    40 
    42 
    41     label = ''
    43     label = ''
    42     css_class = 'top-menu bordered margin-top-10'
    44     css_class = 'top-menu bordered margin-top-10'
    46         super(SharedSitesMenu, self).update()
    48         super(SharedSitesMenu, self).update()
    47         context = self.context
    49         context = self.context
    48         request = self.request
    50         request = self.request
    49         parent = self.__parent__
    51         parent = self.__parent__
    50         for site in sorted(get_all_utilities_registered_for(ISharedSite),
    52         for site in sorted(get_all_utilities_registered_for(ISharedSite),
    51                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
    53                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title',
       
    54                                                                                  request=request)
       
    55                                                         or '')):
    52             menu = TopLinksMenu(context, request, parent, self)
    56             menu = TopLinksMenu(context, request, parent, self)
    53             menu.label = II18n(site).query_attribute('title', request=request) or site.__name__
    57             menu.label = II18n(site).query_attribute('title', request=request) or site.__name__
    54             menu.url = absolute_url(site, request, 'admin#dashboard.html')
    58             menu.url = absolute_url(site, request, 'admin#dashboard.html')
    55             self.viewlets.append(menu)
    59             self.viewlets.append(menu)
    56 
    60 
    57 
    61 
    58 @viewlet_config(name='shared-contents.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=30)
    62 @viewlet_config(name='shared-contents.menu', layer=IAdminLayer, manager=ITopLinksViewletManager,
       
    63                 weight=30)
    59 class SharedContentsMenu(TopLinksViewlet):
    64 class SharedContentsMenu(TopLinksViewlet):
    60     """Shared contents menu"""
    65     """Shared contents menu"""
    61 
    66 
    62     label = ''
    67     label = ''
    63     css_class = 'top-menu bordered margin-top-10'
    68     css_class = 'top-menu bordered margin-top-10'
    67         super(SharedContentsMenu, self).update()
    72         super(SharedContentsMenu, self).update()
    68         context = self.context
    73         context = self.context
    69         request = self.request
    74         request = self.request
    70         parent = self.__parent__
    75         parent = self.__parent__
    71         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
    76         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
    72                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
    77                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title',
       
    78                                                                                  request=request)
       
    79                                                         or '')):
    73             if ISharedSite.providedBy(tool) or (not tool.shared_content_menu):
    80             if ISharedSite.providedBy(tool) or (not tool.shared_content_menu):
    74                 continue
    81                 continue
    75             menu = TopLinksMenu(context, request, parent, self)
    82             menu = TopLinksMenu(context, request, parent, self)
    76             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
    83             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
    77             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
    84             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
    78             self.viewlets.append(menu)
    85             self.viewlets.append(menu)
    79 
    86 
    80 
    87 
    81 @viewlet_config(name='shared-tools.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=40)
    88 @viewlet_config(name='shared-tools.menu', layer=IAdminLayer, manager=ITopLinksViewletManager,
       
    89                 weight=40)
    82 class SharedToolsMenu(TopLinksViewlet):
    90 class SharedToolsMenu(TopLinksViewlet):
    83     """Shared tools menu"""
    91     """Shared tools menu"""
    84 
    92 
    85     label = ''
    93     label = ''
    86     css_class = 'top-menu bordered margin-top-10'
    94     css_class = 'top-menu bordered margin-top-10'
    90         super(SharedToolsMenu, self).update()
    98         super(SharedToolsMenu, self).update()
    91         context = self.context
    99         context = self.context
    92         request = self.request
   100         request = self.request
    93         parent = self.__parent__
   101         parent = self.__parent__
    94         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
   102         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
    95                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
   103                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title',
       
   104                                                                                  request=request)
       
   105                                                         or '')):
    96             if ISharedSite.providedBy(tool) or tool.shared_content_menu:
   106             if ISharedSite.providedBy(tool) or tool.shared_content_menu:
    97                 continue
   107                 continue
    98             menu = TopLinksMenu(context, request, parent, self)
   108             menu = TopLinksMenu(context, request, parent, self)
    99             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
   109             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
   100             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
   110             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
   101             self.viewlets.append(menu)
   111             self.viewlets.append(menu)
   102 
   112 
   103 
   113 
   104 @viewlet_config(name='user-roles.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=90)
   114 @viewlet_config(name='user-roles.menu', layer=IAdminLayer, manager=ITopLinksViewletManager,
       
   115                 weight=90)
   105 class UserRolesMenu(TopLinksViewlet):
   116 class UserRolesMenu(TopLinksViewlet):
   106     """User roles menu"""
   117     """User roles menu"""
   107 
   118 
   108     label = ''
   119     label = ''
   109     css_class = 'top-menu bordered margin-top-10'
   120     css_class = 'top-menu bordered margin-top-10'
   118         params = And(Or(Any(catalog['role:contributor'], {request.principal.id}),
   129         params = And(Or(Any(catalog['role:contributor'], {request.principal.id}),
   119                         Any(catalog['role:manager'], {request.principal.id}),
   130                         Any(catalog['role:manager'], {request.principal.id}),
   120                         Any(catalog['role:pilot'], {request.principal.id})),
   131                         Any(catalog['role:pilot'], {request.principal.id})),
   121                      NotEq(catalog['content_type'], None))
   132                      NotEq(catalog['content_type'], None))
   122         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   133         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   123                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
   134                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title',
       
   135                                                                                  request=request)
       
   136                                                         or '')):
   124             menu = TopLinksMenu(context, request, parent, self)
   137             menu = TopLinksMenu(context, request, parent, self)
   125             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
   138             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
   126             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
   139             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
   127             self.viewlets.append(menu)
   140             self.viewlets.append(menu)
   128 
   141 
   129 
   142 
   130 @viewlet_config(name='user-addings.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=95)
   143 @viewlet_config(name='user-addings.menu', layer=IAdminLayer, manager=ITopLinksViewletManager,
       
   144                 weight=95)
   131 @template_config(template='templates/user-addings.pt', layer=IAdminLayer)
   145 @template_config(template='templates/user-addings.pt', layer=IAdminLayer)
   132 class UserAddingsMenu(TopLinksViewlet):
   146 class UserAddingsMenu(TopLinksViewlet):
   133     """User addings menu"""
   147     """User addings menu"""
   134 
   148 
   135     label = ''
   149     label = ''
   144         parent = self.__parent__
   158         parent = self.__parent__
   145         registry = request.registry
   159         registry = request.registry
   146         params = And(Any(catalog['role:contributor'], {request.principal.id}),
   160         params = And(Any(catalog['role:contributor'], {request.principal.id}),
   147                      NotEq(catalog['content_type'], None))
   161                      NotEq(catalog['content_type'], None))
   148         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   162         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   149                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', request=request) or '')):
   163                            key=lambda x: locale.strxfrm(II18n(x).query_attribute('title',
       
   164                                                                                  request=request)
       
   165                                                         or '')):
       
   166             if not ISharedTool.providedBy(tool):
       
   167                 continue
   150             content_class = tool.shared_content_factory.content_class
   168             content_class = tool.shared_content_factory.content_class
   151             if content_class is None:
   169             if content_class is None:
   152                 continue
   170                 continue
   153             menu = TopLinksMenu(context, request, parent, self)
   171             menu = TopLinksMenu(context, request, parent, self)
   154             adapter = registry.queryMultiAdapter((tool, request), IUserAddingsMenuLabel)
   172             adapter = registry.queryMultiAdapter((tool, request), IUserAddingsMenuLabel)