src/pyams_content/skin/zmi/viewlet/toplinks/__init__.py
changeset 559 5ddb2d0bef4b
parent 531 288ab38cdb56
child 990 3b3a47dbe205
equal deleted inserted replaced
558:d9c6b1d7fefa 559:5ddb2d0bef4b
    28 from hypatia.query import Any, And, Or, NotEq
    28 from hypatia.query import Any, And, Or, NotEq
    29 from pyams_catalog.query import CatalogResultSet
    29 from pyams_catalog.query import CatalogResultSet
    30 from pyams_skin.viewlet.toplinks import TopLinksViewlet, TopLinksMenu
    30 from pyams_skin.viewlet.toplinks import TopLinksViewlet, TopLinksMenu
    31 from pyams_template.template import template_config
    31 from pyams_template.template import template_config
    32 from pyams_utils.list import unique
    32 from pyams_utils.list import unique
    33 from pyams_utils.registry import get_local_registry, get_utility
    33 from pyams_utils.registry import get_utility, get_all_utilities_registered_for
    34 from pyams_utils.url import absolute_url
    34 from pyams_utils.url import absolute_url
    35 from pyams_viewlet.viewlet import viewlet_config
    35 from pyams_viewlet.viewlet import viewlet_config
    36 from pyramid.threadlocal import get_current_registry
       
    37 
    36 
    38 from pyams_content import _
    37 from pyams_content import _
    39 
    38 
    40 
    39 
    41 @viewlet_config(name='shared-sites.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=20)
    40 @viewlet_config(name='shared-sites.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=20)
    46     css_class = 'top-menu bordered margin-top-10'
    45     css_class = 'top-menu bordered margin-top-10'
    47     dropdown_label = _("Shared sites")
    46     dropdown_label = _("Shared sites")
    48 
    47 
    49     def update(self):
    48     def update(self):
    50         super(SharedSitesMenu, self).update()
    49         super(SharedSitesMenu, self).update()
    51         registry = get_local_registry()
    50         context = self.context
    52         for site in sorted(registry.getAllUtilitiesRegisteredFor(ISharedSite),
    51         request = self.request
    53                            key=lambda x: II18n(x).query_attribute('title', request=self.request) or ''):
    52         parent = self.__parent__
    54             menu = TopLinksMenu(self.context, self.request, self.__parent__, self)
    53         for site in sorted(get_all_utilities_registered_for(ISharedSite),
    55             menu.label = II18n(site).query_attribute('title', request=self.request) or site.__name__
    54                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
    56             menu.url = absolute_url(site, self.request, 'admin#dashboard.html')
    55             menu = TopLinksMenu(context, request, parent, self)
       
    56             menu.label = II18n(site).query_attribute('title', request=request) or site.__name__
       
    57             menu.url = absolute_url(site, request, 'admin#dashboard.html')
    57             self.viewlets.append(menu)
    58             self.viewlets.append(menu)
    58 
    59 
    59 
    60 
    60 @viewlet_config(name='shared-contents.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=30)
    61 @viewlet_config(name='shared-contents.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=30)
    61 class SharedContentsMenu(TopLinksViewlet):
    62 class SharedContentsMenu(TopLinksViewlet):
    65     css_class = 'top-menu bordered margin-top-10'
    66     css_class = 'top-menu bordered margin-top-10'
    66     dropdown_label = _("Shared contents")
    67     dropdown_label = _("Shared contents")
    67 
    68 
    68     def update(self):
    69     def update(self):
    69         super(SharedContentsMenu, self).update()
    70         super(SharedContentsMenu, self).update()
    70         registry = get_local_registry()
    71         context = self.context
    71         for tool in sorted(registry.getAllUtilitiesRegisteredFor(IBaseSharedTool),
    72         request = self.request
    72                            key=lambda x: II18n(x).query_attribute('title', request=self.request) or ''):
    73         parent = self.__parent__
       
    74         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
       
    75                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
    73             if ISharedSite.providedBy(tool) or (not tool.shared_content_menu):
    76             if ISharedSite.providedBy(tool) or (not tool.shared_content_menu):
    74                 continue
    77                 continue
    75             menu = TopLinksMenu(self.context, self.request, self.__parent__, self)
    78             menu = TopLinksMenu(context, request, parent, self)
    76             menu.label = II18n(tool).query_attribute('title', request=self.request) or tool.__name__
    79             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
    77             menu.url = absolute_url(tool, self.request, 'admin#dashboard.html')
    80             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
    78             self.viewlets.append(menu)
    81             self.viewlets.append(menu)
    79 
    82 
    80 
    83 
    81 @viewlet_config(name='shared-tools.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=40)
    84 @viewlet_config(name='shared-tools.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=40)
    82 class SharedToolsMenu(TopLinksViewlet):
    85 class SharedToolsMenu(TopLinksViewlet):
    86     css_class = 'top-menu bordered margin-top-10'
    89     css_class = 'top-menu bordered margin-top-10'
    87     dropdown_label = _("Shared tools")
    90     dropdown_label = _("Shared tools")
    88 
    91 
    89     def update(self):
    92     def update(self):
    90         super(SharedToolsMenu, self).update()
    93         super(SharedToolsMenu, self).update()
    91         registry = get_local_registry()
    94         context = self.context
    92         for tool in sorted(registry.getAllUtilitiesRegisteredFor(IBaseSharedTool),
    95         request = self.request
    93                            key=lambda x: II18n(x).query_attribute('title', request=self.request) or ''):
    96         parent = self.__parent__
       
    97         for tool in sorted(get_all_utilities_registered_for(IBaseSharedTool),
       
    98                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
    94             if ISharedSite.providedBy(tool) or tool.shared_content_menu:
    99             if ISharedSite.providedBy(tool) or tool.shared_content_menu:
    95                 continue
   100                 continue
    96             menu = TopLinksMenu(self.context, self.request, self.__parent__, self)
   101             menu = TopLinksMenu(context, request, parent, self)
    97             menu.label = II18n(tool).query_attribute('title', request=self.request) or tool.__name__
   102             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
    98             menu.url = absolute_url(tool, self.request, 'admin#dashboard.html')
   103             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
    99             self.viewlets.append(menu)
   104             self.viewlets.append(menu)
   100 
   105 
   101 
   106 
   102 @viewlet_config(name='user-roles.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=90)
   107 @viewlet_config(name='user-roles.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=90)
   103 class UserRolesMenu(TopLinksViewlet):
   108 class UserRolesMenu(TopLinksViewlet):
   108     dropdown_label = _("My roles")
   113     dropdown_label = _("My roles")
   109 
   114 
   110     def update(self):
   115     def update(self):
   111         super(UserRolesMenu, self).update()
   116         super(UserRolesMenu, self).update()
   112         catalog = get_utility(ICatalog)
   117         catalog = get_utility(ICatalog)
   113         params = And(Or(Any(catalog['role:contributor'], {self.request.principal.id}),
   118         context = self.context
   114                         Any(catalog['role:manager'], {self.request.principal.id}),
   119         request = self.request
   115                         Any(catalog['role:pilot'], {self.request.principal.id})),
   120         parent = self.__parent__
       
   121         params = And(Or(Any(catalog['role:contributor'], {request.principal.id}),
       
   122                         Any(catalog['role:manager'], {request.principal.id}),
       
   123                         Any(catalog['role:pilot'], {request.principal.id})),
   116                      NotEq(catalog['content_type'], None))
   124                      NotEq(catalog['content_type'], None))
   117         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   125         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   118                            key=lambda x: II18n(x).query_attribute('title', request=self.request) or ''):
   126                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
   119             menu = TopLinksMenu(self.context, self.request, self.__parent__, self)
   127             menu = TopLinksMenu(context, request, parent, self)
   120             menu.label = II18n(tool).query_attribute('title', request=self.request) or tool.__name__
   128             menu.label = II18n(tool).query_attribute('title', request=request) or tool.__name__
   121             menu.url = absolute_url(tool, self.request, 'admin#dashboard.html')
   129             menu.url = absolute_url(tool, request, 'admin#dashboard.html')
   122             self.viewlets.append(menu)
   130             self.viewlets.append(menu)
   123 
   131 
   124 
   132 
   125 @viewlet_config(name='user-addings.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=95)
   133 @viewlet_config(name='user-addings.menu', layer=IAdminLayer, manager=ITopLinksViewletManager, weight=95)
   126 @template_config(template='templates/user-addings.pt', layer=IAdminLayer)
   134 @template_config(template='templates/user-addings.pt', layer=IAdminLayer)
   132     dropdown_label = ''
   140     dropdown_label = ''
   133 
   141 
   134     def update(self):
   142     def update(self):
   135         super(UserAddingsMenu, self).update()
   143         super(UserAddingsMenu, self).update()
   136         catalog = get_utility(ICatalog)
   144         catalog = get_utility(ICatalog)
   137         registry = get_current_registry()
   145         context = self.context
   138         params = And(Any(catalog['role:contributor'], {self.request.principal.id}),
   146         request = self.request
       
   147         parent = self.__parent__
       
   148         registry = request.registry
       
   149         params = And(Any(catalog['role:contributor'], {request.principal.id}),
   139                      NotEq(catalog['content_type'], None))
   150                      NotEq(catalog['content_type'], None))
   140         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   151         for tool in sorted(unique(CatalogResultSet(CatalogQuery(catalog).query(params))),
   141                            key=lambda x: II18n(x).query_attribute('title', request=self.request) or ''):
   152                            key=lambda x: II18n(x).query_attribute('title', request=request) or ''):
   142             menu = TopLinksMenu(self.context, self.request, self.__parent__, self)
   153             content_class = tool.shared_content_factory.content_class
   143             adapter = registry.queryMultiAdapter((tool, self.request), IUserAddingsMenuLabel)
   154             if content_class is None:
       
   155                 continue
       
   156             menu = TopLinksMenu(context, request, parent, self)
       
   157             adapter = registry.queryMultiAdapter((tool, request), IUserAddingsMenuLabel)
   144             if adapter is None:
   158             if adapter is None:
   145                 menu.label = self.request.localizer.translate(tool.shared_content_factory.content_class.content_name)
   159                 menu.label = request.localizer.translate(content_class.content_name)
   146             else:
   160             else:
   147                 menu.label = adapter.label
   161                 menu.label = adapter.label
   148             menu.url = absolute_url(tool, self.request, 'add-shared-content.html')
   162             menu.url = absolute_url(tool, request, 'add-shared-content.html')
   149             menu.data = {'data-toggle': 'modal'}
   163             menu.data = {'data-toggle': 'modal'}
   150             self.viewlets.append(menu)
   164             self.viewlets.append(menu)