src/pyams_portal/zmi/page.py
changeset 289 fca4100c1733
parent 286 9677eb0fc872
child 290 3977d9c8618d
equal deleted inserted replaced
288:390514bce78a 289:fca4100c1733
    93     edit_permission = MANAGE_TEMPLATE_PERMISSION
    93     edit_permission = MANAGE_TEMPLATE_PERMISSION
    94 
    94 
    95     def getContent(self):
    95     def getContent(self):
    96         return IPortalPage(self.context)
    96         return IPortalPage(self.context)
    97 
    97 
       
    98     @property
       
    99     def template_css_class(self):
       
   100         template = IPortalPage(self.context).local_template
       
   101         return template.css_class if template is not None else ''
       
   102 
    98     def updateWidgets(self, prefix=None):
   103     def updateWidgets(self, prefix=None):
    99         super().updateWidgets(prefix)
   104         super().updateWidgets(prefix)
   100         shared_template = self.widgets.get('shared_template')
   105         shared_template = self.widgets.get('shared_template')
   101         if shared_template is not None:
   106         if shared_template is not None:
   102             shared_template.object_data = {
   107             shared_template.object_data = {
   114             if template_mode == TEMPLATE_SHARED_MODE:
   119             if template_mode == TEMPLATE_SHARED_MODE:
   115                 content.shared_template = data.get('shared_template')
   120                 content.shared_template = data.get('shared_template')
   116                 content.use_local_template = False
   121                 content.use_local_template = False
   117             elif template_mode == TEMPLATE_LOCAL_MODE:
   122             elif template_mode == TEMPLATE_LOCAL_MODE:
   118                 content.use_local_template = True
   123                 content.use_local_template = True
   119         return {IPortalPage: ('inherit_parent', 'use_local_template', 'shared_template')}
   124                 template = IPortalPage(self.context).local_template
       
   125                 if template is not None:
       
   126                     template.css_class = self.request.params.get('template_css_class', '')
       
   127         return {
       
   128             IPortalPage: ('inherit_parent', 'use_local_template', 'shared_template')
       
   129         }
   120 
   130 
   121     def get_ajax_output(self, changes):
   131     def get_ajax_output(self, changes):
   122         output = super(self.__class__, self).get_ajax_output(changes)
   132         output = super(self.__class__, self).get_ajax_output(changes)
   123         if changes:
   133         if changes:
   124             output.update({
   134             output.update({
   135 def handle_template_properties_extract_event(event):
   145 def handle_template_properties_extract_event(event):
   136     """Handle template properties extract event"""
   146     """Handle template properties extract event"""
   137     form = event.form
   147     form = event.form
   138     if not form.getContent().can_inherit:
   148     if not form.getContent().can_inherit:
   139         data = event.data
   149         data = event.data
   140         if (form.request.params.get('template_mode') == TEMPLATE_SHARED_MODE) and not data.get('shared_template'):
   150         if (form.request.params.get('template_mode') == TEMPLATE_SHARED_MODE) and \
       
   151                 not data.get('shared_template'):
   141             form.widgets.errors += (Invalid(_("You must select which shared template to use!")),)
   152             form.widgets.errors += (Invalid(_("You must select which shared template to use!")),)
   142 
   153 
   143 
   154 
   144 @adapter_config(context=(Interface, IPyAMSLayer, PortalContextTemplatePropertiesEditForm), provides=IPageHeader)
   155 @adapter_config(context=(Interface, IPyAMSLayer, PortalContextTemplatePropertiesEditForm),
       
   156                 provides=IPageHeader)
   145 class PortalContextPropertiesEditFormHeaderAdapter(PropertiesEditFormHeaderAdapter):
   157 class PortalContextPropertiesEditFormHeaderAdapter(PropertiesEditFormHeaderAdapter):
   146     """Portal context template properties edit form header adapter"""
   158     """Portal context template properties edit form header adapter"""
   147 
   159 
   148     icon_class = 'fa fa-fw fa-columns'
   160     icon_class = 'fa fa-fw fa-columns'
   149 
   161 
   150 
   162 
   151 @adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplatePropertiesEditForm), provides=IFormHelp)
   163 @adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplatePropertiesEditForm),
       
   164                 provides=IFormHelp)
   152 class PortalContextPropertiesEditFormHelpAdapter(FormHelp):
   165 class PortalContextPropertiesEditFormHelpAdapter(FormHelp):
   153     """Portal context properties edit form help adapter"""
   166     """Portal context properties edit form help adapter"""
   154 
   167 
   155     message = _("If you choose a shared template, you can only adjust settings of "
   168     message = _("If you choose a shared template, you can only adjust settings of "
   156                 "each portlet individually but can't change portlets list or page configuration.\n"
   169                 "each portlet individually but can't change portlets list or page "
       
   170                 "configuration.\n"
   157                 "If you use a local template, you can define a whole custom "
   171                 "If you use a local template, you can define a whole custom "
   158                 "configuration but the template definition can't be reused anywhere...""")
   172                 "configuration but the template definition can't be reused anywhere...""")
   159     message_format = 'text'
   173     message_format = 'text'
   160 
   174 
   161 
   175 
   162 #
   176 #
   163 # Portal context template configuration
   177 # Portal context template configuration
   164 #
   178 #
   165 
   179 
   166 @viewlet_config(name='template-config.menu', context=IPortalContext, layer=IAdminLayer,
   180 @viewlet_config(name='template-config.menu',
   167                 manager=IPortalContextTemplatePropertiesMenu, permission=MANAGE_TEMPLATE_PERMISSION, weight=50)
   181                 context=IPortalContext, layer=IAdminLayer,
       
   182                 manager=IPortalContextTemplatePropertiesMenu, weight=50,
       
   183                 permission=MANAGE_TEMPLATE_PERMISSION)
   168 class PortalContextTemplateConfigMenu(MenuItem):
   184 class PortalContextTemplateConfigMenu(MenuItem):
   169     """Portal context template configuration menu"""
   185     """Portal context template configuration menu"""
   170 
   186 
   171     label = _("Template properties")
   187     label = _("Template properties")
   172 
   188 
   184             return absolute_url(page.local_template, self.request, 'admin#properties.html')
   200             return absolute_url(page.local_template, self.request, 'admin#properties.html')
   185         else:
   201         else:
   186             return super(PortalContextTemplateConfigMenu, self).get_url()
   202             return super(PortalContextTemplateConfigMenu, self).get_url()
   187 
   203 
   188 
   204 
   189 @pagelet_config(name='template-config.html', context=IPortalContext, layer=IPyAMSLayer,
   205 @pagelet_config(name='template-config.html',
       
   206                 context=IPortalContext, layer=IPyAMSLayer,
   190                 permission=MANAGE_TEMPLATE_PERMISSION)
   207                 permission=MANAGE_TEMPLATE_PERMISSION)
   191 class PortalContextTemplateLayoutView(PortalTemplateLayoutView):
   208 class PortalContextTemplateLayoutView(PortalTemplateLayoutView):
   192     """Portal context template configuration view"""
   209     """Portal context template configuration view"""
   193 
   210 
   194     def get_template(self):
   211     def get_template(self):
   199         if not IPortalPage(self.context).use_local_template:
   216         if not IPortalPage(self.context).use_local_template:
   200             return False
   217             return False
   201         return self.request.has_permission(MANAGE_TEMPLATE_PERMISSION)
   218         return self.request.has_permission(MANAGE_TEMPLATE_PERMISSION)
   202 
   219 
   203 
   220 
   204 @adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplateLayoutView), provides=IPageHeader)
   221 @adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplateLayoutView),
       
   222                 provides=IPageHeader)
   205 class PortalContextTemplateLayoutHeaderAdapter(PortalTemplateHeaderAdapter):
   223 class PortalContextTemplateLayoutHeaderAdapter(PortalTemplateHeaderAdapter):
   206     """Portal context template configuration header adapter"""
   224     """Portal context template configuration header adapter"""
   207 
   225 
   208 
   226 
   209 #
   227 #
   210 # Template management views
   228 # Template management views
   211 #
   229 #
   212 
   230 
   213 @view_config(name='get-slots-width.json', context=IPortalContext, request_type=IPyAMSLayer,
   231 @view_config(name='get-slots-width.json',
       
   232              context=IPortalContext, request_type=IPyAMSLayer,
   214              permission=VIEW_SYSTEM_PERMISSION, renderer='json', xhr=True)
   233              permission=VIEW_SYSTEM_PERMISSION, renderer='json', xhr=True)
   215 def get_template_slots_width(request):
   234 def get_template_slots_width(request):
   216     """Get template slots width"""
   235     """Get template slots width"""
   217     config = IPortalTemplateConfiguration(request.context)
   236     config = IPortalTemplateConfiguration(request.context)
   218     return config.get_slots_width(request.params.get('device'))
   237     return config.get_slots_width(request.params.get('device'))
   219 
   238 
   220 
   239 
   221 @view_config(name='portlet-properties.html', context=IPortalContext, request_type=IPyAMSLayer,
   240 @view_config(name='portlet-properties.html',
       
   241              context=IPortalContext, request_type=IPyAMSLayer,
   222              permission=MANAGE_TEMPLATE_PERMISSION)
   242              permission=MANAGE_TEMPLATE_PERMISSION)
   223 class PortalContextTemplatePortletEditForm(PortalTemplatePortletEditForm):
   243 class PortalContextTemplatePortletEditForm(PortalTemplatePortletEditForm):
   224     """Portal context template portlet edit form"""
   244     """Portal context template portlet edit form"""
   225 
   245 
   226 
   246 
   227 @view_config(name='portlet-properties.json', context=IPortalContext, request_type=IPyAMSLayer,
   247 @view_config(name='portlet-properties.json',
       
   248              context=IPortalContext, request_type=IPyAMSLayer,
   228              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   249              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   229 class PortalContextTemplatePortletAJAXEditForm(PortalTemplatePortletAJAXEditForm):
   250 class PortalContextTemplatePortletAJAXEditForm(PortalTemplatePortletAJAXEditForm):
   230     """Portal context template portlet edit form, JSON renderer"""
   251     """Portal context template portlet edit form, JSON renderer"""