28 from pyams_template.template import template_config |
28 from pyams_template.template import template_config |
29 from pyramid.decorator import reify |
29 from pyramid.decorator import reify |
30 from pyramid.exceptions import NotFound |
30 from pyramid.exceptions import NotFound |
31 |
31 |
32 |
32 |
33 @pagelet_config(name='', context=IPortalContext, layer=IPyAMSUserLayer) |
33 class BasePortalContextIndexPage(BaseIndexPage): |
34 @template_config(template='templates/pagelet.pt', layer=IPyAMSUserLayer) |
34 """Base portal context index page""" |
35 class PortalContextIndexPage(BaseIndexPage): |
35 |
36 """Portal context index page""" |
36 portlets = None |
37 |
37 |
38 def update(self): |
38 def update(self): |
39 wf_info = IWorkflowPublicationInfo(self.context, None) |
39 super(BasePortalContextIndexPage, self).update() |
40 if (wf_info is not None) and not wf_info.is_visible(self.request): |
40 # extract all renderers list |
41 raise NotFound() |
41 self.portlets = {} |
42 super(PortalContextIndexPage, self).update() |
42 template_configuration = self.template_configuration |
|
43 portlets_configuration = self.portlet_configuration |
|
44 for row_id in range(template_configuration.rows): |
|
45 for slot_name in template_configuration.get_slots(row_id): |
|
46 for portlet_id in template_configuration.slot_config[slot_name].portlet_ids: |
|
47 settings = portlets_configuration.get_portlet_configuration(portlet_id).settings |
|
48 renderer = self.request.registry.queryMultiAdapter((self.context, self.request, self, settings), |
|
49 IPortletRenderer, |
|
50 name=settings.renderer) |
|
51 if renderer is not None: |
|
52 renderer.update() |
|
53 self.portlets[portlet_id] = renderer |
43 |
54 |
44 @reify |
55 @reify |
45 def page(self): |
56 def page(self): |
46 return IPortalPage(self.context) |
57 return IPortalPage(self.context) |
47 |
58 |
55 |
66 |
56 def get_portlet(self, name): |
67 def get_portlet(self, name): |
57 return self.request.registry.getUtility(IPortlet, name=name) |
68 return self.request.registry.getUtility(IPortlet, name=name) |
58 |
69 |
59 def render_portlet(self, portlet_id): |
70 def render_portlet(self, portlet_id): |
60 settings = self.portlet_configuration.get_portlet_configuration(portlet_id).settings |
71 renderer = self.portlets.get(portlet_id) |
61 renderer = self.request.registry.queryMultiAdapter((self.context, self.request, self, settings), |
|
62 IPortletRenderer, |
|
63 name=settings.renderer) |
|
64 if renderer is not None: |
72 if renderer is not None: |
65 return renderer() |
73 return renderer.render() |
66 else: |
74 else: |
67 return '' |
75 return '' |
|
76 |
|
77 |
|
78 @pagelet_config(name='', context=IPortalContext, layer=IPyAMSUserLayer) |
|
79 @template_config(template='templates/pagelet.pt', layer=IPyAMSUserLayer) |
|
80 class PortalContextIndexPage(BasePortalContextIndexPage): |
|
81 """Portal context index page""" |
|
82 |
|
83 def update(self): |
|
84 wf_info = IWorkflowPublicationInfo(self.context, None) |
|
85 if (wf_info is not None) and not wf_info.is_visible(self.request): |
|
86 raise NotFound() |
|
87 super(PortalContextIndexPage, self).update() |
|
88 |
|
89 |
|
90 PREVIEW_MODE = 'PREVIEW_MODE' |
68 |
91 |
69 |
92 |
70 @pagelet_config(name='preview.html', context=IPortalContext, layer=IPyAMSUserLayer, |
93 @pagelet_config(name='preview.html', context=IPortalContext, layer=IPyAMSUserLayer, |
71 permission=VIEW_SYSTEM_PERMISSION) |
94 permission=VIEW_SYSTEM_PERMISSION) |
72 class PortalContextPreviewPage(PortalContextIndexPage): |
95 class PortalContextPreviewPage(PortalContextIndexPage): |
73 """Portal context preview page""" |
96 """Portal context preview page""" |
74 |
97 |
75 def update(self): |
98 def update(self): |
76 # Bypass publication status in preview |
99 # Bypass publication status in preview |
|
100 self.request.annotations[PREVIEW_MODE] = True |
77 super(PortalContextIndexPage, self).update() |
101 super(PortalContextIndexPage, self).update() |