21 |
21 |
22 # import interfaces |
22 # import interfaces |
23 from pyams_form.interfaces.form import IFormContextPermissionChecker |
23 from pyams_form.interfaces.form import IFormContextPermissionChecker |
24 from pyams_portal.interfaces import IPortlet, IPortletSettings, IPortletConfiguration, IPortletPreviewer, \ |
24 from pyams_portal.interfaces import IPortlet, IPortletSettings, IPortletConfiguration, IPortletPreviewer, \ |
25 IPortletRenderer, IPortalPortletsConfiguration, IPortalTemplate, IPortalContext, IPortalPage, \ |
25 IPortletRenderer, IPortalPortletsConfiguration, IPortalTemplate, IPortalContext, IPortalPage, \ |
26 IPortalTemplateConfiguration, MANAGE_TEMPLATE_PERMISSION |
26 IPortalTemplateConfiguration, MANAGE_TEMPLATE_PERMISSION, IPortletRendererSettings |
27 from zope.traversing.interfaces import ITraversable |
27 from zope.traversing.interfaces import ITraversable |
28 |
28 |
29 # import packages |
29 # import packages |
30 from persistent import Persistent |
30 from persistent import Persistent |
31 from persistent.mapping import PersistentMapping |
31 from persistent.mapping import PersistentMapping |
32 from pyams_utils.adapter import adapter_config, ContextAdapter, get_adapter_weight |
32 from pyams_utils.adapter import adapter_config, ContextAdapter, get_adapter_weight, get_annotation_adapter |
33 from pyams_utils.request import check_request |
33 from pyams_utils.request import check_request |
34 from pyams_utils.vocabulary import vocabulary_config |
34 from pyams_utils.vocabulary import vocabulary_config |
35 from pyams_viewlet.viewlet import ViewContentProvider |
35 from pyams_viewlet.viewlet import ViewContentProvider |
36 from pyramid.exceptions import ConfigurationError |
36 from pyramid.exceptions import ConfigurationError |
37 from pyramid.renderers import render |
37 from pyramid.renderers import render |
165 |
165 |
166 @implementer(IPortletRenderer) |
166 @implementer(IPortletRenderer) |
167 class PortletRenderer(PortletContentProvider): |
167 class PortletRenderer(PortletContentProvider): |
168 """Portlet renderer adapter""" |
168 """Portlet renderer adapter""" |
169 |
169 |
|
170 settings_interface = None |
|
171 settings_key = None |
|
172 |
170 target_interface = None |
173 target_interface = None |
|
174 |
171 weight = 0 |
175 weight = 0 |
172 |
176 |
173 @property |
177 @property |
174 def slot_configuration(self): |
178 def slot_configuration(self): |
175 template = IPortalPage(self.context).template |
179 template = IPortalPage(self.context).template |
234 renderer = request.registry.queryMultiAdapter((request.root, request, request, self), IPortletRenderer, |
238 renderer = request.registry.queryMultiAdapter((request.root, request, request, self), IPortletRenderer, |
235 name=self._renderer) |
239 name=self._renderer) |
236 if (renderer is not None) and (renderer.target_interface is not None): |
240 if (renderer is not None) and (renderer.target_interface is not None): |
237 alsoProvides(self, renderer.target_interface) |
241 alsoProvides(self, renderer.target_interface) |
238 |
242 |
|
243 def get_renderer(self, request=None): |
|
244 if request is None: |
|
245 request = check_request() |
|
246 return request.registry.queryMultiAdapter((request.root, request, request, self), IPortletRenderer, |
|
247 name=self._renderer) |
|
248 |
239 @property |
249 @property |
240 def configuration(self): |
250 def configuration(self): |
241 return self.__parent__ |
251 return self.__parent__ |
|
252 |
|
253 |
|
254 @adapter_config(context=IPortletSettings, provides=IPortletRendererSettings) |
|
255 def portlet_renderer_settings_adapter(context): |
|
256 renderer = context.get_renderer() |
|
257 if not renderer.settings_interface: |
|
258 return None |
|
259 return get_annotation_adapter(context, renderer.settings_key, renderer.settings_interface) |
242 |
260 |
243 |
261 |
244 @implementer(IPortletConfiguration) |
262 @implementer(IPortletConfiguration) |
245 class PortletConfiguration(Persistent, Contained): |
263 class PortletConfiguration(Persistent, Contained): |
246 """Portlet configuration persistent class |
264 """Portlet configuration persistent class |