140 super(PortletContentProvider, self).__init__(context, request, view) |
140 super(PortletContentProvider, self).__init__(context, request, view) |
141 self.portlet = request.registry.queryUtility(IPortlet, |
141 self.portlet = request.registry.queryUtility(IPortlet, |
142 name=settings.configuration.portlet_name) |
142 name=settings.configuration.portlet_name) |
143 self.settings = settings |
143 self.settings = settings |
144 |
144 |
145 def render(self): |
145 def render(self, template_name=''): |
146 if self.portlet is None: |
146 if self.portlet is None: |
147 return '' |
147 return '' |
148 if self.portlet.permission and not self.request.has_permission(self.portlet.permission): |
148 if self.portlet.permission and not self.request.has_permission(self.portlet.permission): |
149 return '' |
149 return '' |
150 return super(PortletContentProvider, self).render() |
150 return super().render(template_name) |
151 |
151 |
152 |
152 |
153 PREVIEW_PREFIX = '''<div class="padding-x-5 text-info"> |
153 PREVIEW_PREFIX = '''<div class="padding-x-5 text-info"> |
154 <span>{label}</span> |
154 <span>{label}</span> |
155 {renderer} |
155 {renderer} |
168 template = IPortalPage(self.context).template |
168 template = IPortalPage(self.context).template |
169 config = IPortalTemplateConfiguration(template) |
169 config = IPortalTemplateConfiguration(template) |
170 slot_id, slot_name = config.get_portlet_slot(self.settings.configuration.portlet_id) |
170 slot_id, slot_name = config.get_portlet_slot(self.settings.configuration.portlet_id) |
171 return config.get_slot_configuration(slot_name) |
171 return config.get_slot_configuration(slot_name) |
172 |
172 |
173 def render(self): |
173 def render(self, template_name=''): |
174 if self.settings.renderer == 'hidden': |
174 if self.settings.renderer == 'hidden': |
175 return render('templates/portlet-hidden.pt', {}, request=self.request) |
175 return render('templates/portlet-hidden.pt', {}, request=self.request) |
176 else: |
176 result = super(PortletPreviewer, self).render() |
177 result = super(PortletPreviewer, self).render() |
177 renderer = self.settings.get_renderer() |
178 renderer = self.settings.get_renderer() |
178 translate = self.request.localizer.translate |
179 translate = self.request.localizer.translate |
179 result = PREVIEW_PREFIX.format(label=translate(_("Renderer:")), |
180 result = PREVIEW_PREFIX.format(label=translate(_("Renderer:")), |
180 renderer=translate(renderer.label)) + result |
181 renderer=translate(renderer.label)) + result |
181 return result |
182 return result |
|
183 |
182 |
184 |
183 |
185 PORTLETS_CACHE_REGION = 'portlets' |
184 PORTLETS_CACHE_REGION = 'portlets' |
186 PORTLETS_CACHE_NAME = 'PyAMS::portlet' |
185 PORTLETS_CACHE_NAME = 'PyAMS::portlet' |
187 |
186 |
224 if display_context is None: |
223 if display_context is None: |
225 return PORTLETS_CACHE_KEY.format(portlet=ICacheKeyValue(self.settings), |
224 return PORTLETS_CACHE_KEY.format(portlet=ICacheKeyValue(self.settings), |
226 hostname=self.request.host, |
225 hostname=self.request.host, |
227 context=ICacheKeyValue(self.context), |
226 context=ICacheKeyValue(self.context), |
228 lang=self.request.locale_name) |
227 lang=self.request.locale_name) |
229 else: |
228 return PORTLETS_CACHE_DISPLAY_CONTEXT_KEY.format(portlet=ICacheKeyValue(self.settings), |
230 return PORTLETS_CACHE_DISPLAY_CONTEXT_KEY.format(portlet=ICacheKeyValue(self.settings), |
229 hostname=self.request.host, |
231 hostname=self.request.host, |
230 context=ICacheKeyValue(self.context), |
232 context=ICacheKeyValue(self.context), |
231 display=ICacheKeyValue( |
233 display=ICacheKeyValue( |
232 display_context), |
234 display_context), |
233 lang=self.request.locale_name) |
235 lang=self.request.locale_name) |
234 |
236 |
235 def render(self, template_name=''): |
237 def render(self): |
|
238 preview_mode = self.request.annotations.get(PREVIEW_MODE, False) |
236 preview_mode = self.request.annotations.get(PREVIEW_MODE, False) |
239 if preview_mode or not self.use_portlets_cache: |
237 if preview_mode or not self.use_portlets_cache: |
240 return super(PortletRenderer, self).render() |
238 return super().render(template_name) |
241 else: |
239 portlets_cache = get_cache(PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME) |
242 portlets_cache = get_cache(PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME) |
240 cache_key = self.get_cache_key() |
243 cache_key = self.get_cache_key() |
241 if template_name: |
244 if self.use_authentication: |
242 cache_key = '{}::{}'.format(cache_key, template_name) |
245 cache_key = '{0}::{1}'.format(cache_key, self.request.principal.id) |
243 if self.use_authentication: |
246 # load rendered content from cache, or create output and store it in cache |
244 cache_key = '{}::{}'.format(cache_key, self.request.principal.id) |
247 try: |
245 # load rendered content from cache, or create output and store it in cache |
248 result = portlets_cache.get_value(cache_key) |
246 try: |
249 logger.debug("Retrieving portlet content from cache key {0}".format(cache_key)) |
247 result = portlets_cache.get_value(cache_key) |
250 except KeyError: |
248 logger.debug("Retrieving portlet content from cache key {0}".format(cache_key)) |
251 self.update() |
249 except KeyError: |
252 result = super(PortletRenderer, self).render() |
250 self.update() |
253 portlets_cache.set_value(cache_key, result) |
251 result = super().render(template_name) |
254 logger.debug("Storing portlet content to cache key {0}".format(cache_key)) |
252 portlets_cache.set_value(cache_key, result) |
255 return result |
253 logger.debug("Storing portlet content to cache key {0}".format(cache_key)) |
|
254 return result |
256 |
255 |
257 |
256 |
258 @vocabulary_config(name='PyAMS portlet renderers') |
257 @vocabulary_config(name='PyAMS portlet renderers') |
259 class PortletRenderersVocabulary(SimpleVocabulary): |
258 class PortletRenderersVocabulary(SimpleVocabulary): |
260 """Portlet renderers vocabulary""" |
259 """Portlet renderers vocabulary""" |
261 |
260 |
262 def __init__(self, context): |
261 def __init__(self, context): |
263 request = check_request() |
262 request = check_request() |
264 translate = request.localizer.translate |
263 translate = request.localizer.translate |
265 terms = [SimpleTerm(name, title=translate(adapter.label)) |
264 terms = [ |
266 for name, adapter in sorted(request.registry.getAdapters((request.root, request, |
265 SimpleTerm(name, title=translate(adapter.label)) |
|
266 for name, adapter in sorted(request.registry.getAdapters((request.root, request, |
267 request, context), |
267 request, context), |
268 IPortletRenderer), |
268 IPortletRenderer), |
269 key=get_adapter_weight)] |
269 key=get_adapter_weight) |
|
270 ] |
270 super(PortletRenderersVocabulary, self).__init__(terms) |
271 super(PortletRenderersVocabulary, self).__init__(terms) |
271 |
272 |
272 |
273 |
273 # |
274 # |
274 # Portlet configuration |
275 # Portlet configuration |