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