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) |