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