src/pyams_portal/views.py
changeset 131 ed2ff7b44c73
parent 99 29e2004100b3
child 135 3bca72c8574d
equal deleted inserted replaced
130:26038059e74d 131:ed2ff7b44c73
    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()