src/pyams_portal/zmi/layout.py
changeset 289 fca4100c1733
parent 279 c025abc00397
child 290 3977d9c8618d
equal deleted inserted replaced
288:390514bce78a 289:fca4100c1733
    63     @property
    63     @property
    64     def header(self):
    64     def header(self):
    65         return _("Template management")
    65         return _("Template management")
    66 
    66 
    67 
    67 
    68 @viewlet_config(name='template-properties.menu', context=IPortalTemplate, layer=IAdminLayer,
    68 @viewlet_config(name='template-layout.menu',
    69                 manager=IContentManagementMenu, permission=MANAGE_TEMPLATE_PERMISSION, weight=1)
    69                 context=IPortalTemplate, layer=IAdminLayer,
    70 @viewletmanager_config(name='template-properties.menu', layer=IAdminLayer, provides=IPropertiesMenu)
    70                 manager=IContentManagementMenu, weight=1,
       
    71                 permission=MANAGE_TEMPLATE_PERMISSION)
       
    72 @viewletmanager_config(name='template-layout.menu',
       
    73                        layer=IAdminLayer,
       
    74                        provides=IPropertiesMenu)
    71 @implementer(IPropertiesMenu)
    75 @implementer(IPropertiesMenu)
    72 class PortalTemplatePropertiesMenu(MenuItem):
    76 class PortalTemplatePropertiesMenu(MenuItem):
    73     """Portal template properties menu"""
    77     """Portal template properties menu"""
    74 
    78 
    75     label = _("Properties")
    79     label = _("Layout")
    76     icon_class = 'fa-edit'
    80     icon_class = 'fa-edit'
    77     url = '#properties.html'
    81     url = '#layout.html'
    78 
    82 
    79 
    83 
    80 @pagelet_config(name='properties.html', context=IPortalTemplate, layer=IPyAMSLayer,
    84 @pagelet_config(name='layout.html', context=IPortalTemplate, layer=IPyAMSLayer,
    81                 permission=MANAGE_TEMPLATE_PERMISSION)
    85                 permission=MANAGE_TEMPLATE_PERMISSION)
    82 @template_config(template='templates/layout.pt', layer=IAdminLayer)
    86 @template_config(template='templates/layout.pt', layer=IAdminLayer)
    83 @implementer(IInnerPage)
    87 @implementer(IInnerPage)
    84 class PortalTemplateLayoutView(AdminView):
    88 class PortalTemplateLayoutView(AdminView):
    85     """Portal template main layout configuration view"""
    89     """Portal template main layout configuration view"""
    90         if container is None:
    94         if container is None:
    91             context = get_parent(self.context, IPortalContext)
    95             context = get_parent(self.context, IPortalContext)
    92             page = IPortalPage(context)
    96             page = IPortalPage(context)
    93             if page.use_local_template:
    97             if page.use_local_template:
    94                 return _("Local template configuration")
    98                 return _("Local template configuration")
    95             else:
    99             if page.template.name == LOCAL_TEMPLATE_NAME:
    96                 if page.template.name == LOCAL_TEMPLATE_NAME:
   100                 return _("Inherited local template configuration")
    97                     return _("Inherited local template configuration")
   101             translate = self.request.localizer.translate
    98                 else:
   102             return translate(_("Shared template configuration ({0})")).format(page.template.name)
    99                     translate = self.request.localizer.translate
   103         return _("Template configuration")
   100                     return translate(_("Shared template configuration ({0})")).format(page.template.name)
       
   101         else:
       
   102             return _("Template configuration")
       
   103 
   104 
   104     def get_template(self):
   105     def get_template(self):
   105         return self.context
   106         return self.context
   106 
   107 
   107     def get_context(self):
   108     def get_context(self):
   139 
   140 
   140     def get_portlet_label(self, name):
   141     def get_portlet_label(self, name):
   141         portlet = self.get_portlet(name)
   142         portlet = self.get_portlet(name)
   142         if portlet is not None:
   143         if portlet is not None:
   143             return self.request.localizer.translate(portlet.label)
   144             return self.request.localizer.translate(portlet.label)
   144         else:
   145         return self.request.localizer.translate(_("{{ missing portlet }}"))
   145             return self.request.localizer.translate(_("{{ missing portlet }}"))
       
   146 
   146 
   147     def get_portlet_preview(self, portlet_id):
   147     def get_portlet_preview(self, portlet_id):
   148         settings = self.portlet_configuration.get_portlet_configuration(portlet_id).settings
   148         settings = self.portlet_configuration.get_portlet_configuration(portlet_id).settings
   149         previewer = self.request.registry.queryMultiAdapter((self.get_context(), self.request, self, settings),
   149         previewer = self.request.registry.queryMultiAdapter(
   150                                                             IPortletPreviewer)
   150             (self.get_context(), self.request, self, settings), IPortletPreviewer)
   151         if previewer is not None:
   151         if previewer is not None:
   152             previewer.update()
   152             previewer.update()
   153             return previewer.render()
   153             return previewer.render()
   154         else:
   154         return ''
   155             return ''
       
   156 
   155 
   157 
   156 
   158 #
   157 #
   159 # Rows views
   158 # Rows views
   160 #
   159 #
   168     label = _("Add row...")
   167     label = _("Add row...")
   169     label_css_class = 'fa fa-fw fa-indent'
   168     label_css_class = 'fa fa-fw fa-indent'
   170     url = 'PyAMS_portal.template.addRow'
   169     url = 'PyAMS_portal.template.addRow'
   171 
   170 
   172 
   171 
   173 @view_config(name='add-template-row.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   172 @view_config(name='add-template-row.json',
       
   173              context=IPortalTemplate, request_type=IPyAMSLayer,
   174              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   174              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   175 def add_template_row(request):
   175 def add_template_row(request):
   176     """Add template raw"""
   176     """Add template raw"""
   177     config = IPortalTemplateConfiguration(request.context)
   177     config = IPortalTemplateConfiguration(request.context)
   178     return {'row_id': config.add_row()}
   178     return {'row_id': config.add_row()}
   179 
   179 
   180 
   180 
   181 @view_config(name='set-template-row-order.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   181 @view_config(name='set-template-row-order.json',
       
   182              context=IPortalTemplate, request_type=IPyAMSLayer,
   182              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   183              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   183 def set_template_row_order(request):
   184 def set_template_row_order(request):
   184     """Set template rows order"""
   185     """Set template rows order"""
   185     config = IPortalTemplateConfiguration(request.context)
   186     config = IPortalTemplateConfiguration(request.context)
   186     row_ids = map(int, json.loads(request.params.get('rows')))
   187     row_ids = map(int, json.loads(request.params.get('rows')))
   187     config.set_row_order(row_ids)
   188     config.set_row_order(row_ids)
   188     return {'status': 'success'}
   189     return {'status': 'success'}
   189 
   190 
   190 
   191 
   191 @view_config(name='delete-template-row.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   192 @view_config(name='delete-template-row.json',
       
   193              context=IPortalTemplate, request_type=IPyAMSLayer,
   192              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   194              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   193 def delete_template_row(request):
   195 def delete_template_row(request):
   194     """Delete template row"""
   196     """Delete template row"""
   195     config = IPortalTemplateConfiguration(request.context)
   197     config = IPortalTemplateConfiguration(request.context)
   196     config.delete_row(int(request.params.get('row_id')))
   198     config.delete_row(int(request.params.get('row_id')))
   199 
   201 
   200 #
   202 #
   201 # Slots views
   203 # Slots views
   202 #
   204 #
   203 
   205 
   204 @viewlet_config(name='add-template-slot.menu', context=IPortalTemplate, layer=IAdminLayer,
   206 @viewlet_config(name='add-template-slot.menu',
   205                 view=PortalTemplateLayoutView, manager=IToolbarAddingMenu,
   207                 context=IPortalTemplate, layer=IAdminLayer, view=PortalTemplateLayoutView,
   206                 permission=MANAGE_TEMPLATE_PERMISSION, weight=2)
   208                 manager=IToolbarAddingMenu, weight=2,
       
   209                 permission=MANAGE_TEMPLATE_PERMISSION)
   207 class PortalTemplateSlotAddMenu(ToolbarMenuItem):
   210 class PortalTemplateSlotAddMenu(ToolbarMenuItem):
   208     """Portal template slot add menu"""
   211     """Portal template slot add menu"""
   209 
   212 
   210     label = _("Add slot...")
   213     label = _("Add slot...")
   211     label_css_class = 'fa fa-fw fa-columns'
   214     label_css_class = 'fa fa-fw fa-columns'
   212     url = 'add-template-slot.html'
   215     url = 'add-template-slot.html'
   213     modal_target = True
   216     modal_target = True
   214 
   217 
   215 
   218 
   216 @pagelet_config(name='add-template-slot.html', context=IPortalTemplate, layer=IPyAMSLayer,
   219 @pagelet_config(name='add-template-slot.html',
   217                 permission=MANAGE_TEMPLATE_PERMISSION)
   220                 context=IPortalTemplate, layer=IPyAMSLayer,
   218 @ajax_config(name='add-template-slot.json', context=IPortalTemplate, layer=IPyAMSLayer,
   221                 permission=MANAGE_TEMPLATE_PERMISSION)
       
   222 @ajax_config(name='add-template-slot.json',
       
   223              context=IPortalTemplate, layer=IPyAMSLayer,
   219              permission=MANAGE_TEMPLATE_PERMISSION, base=AJAXAddForm)
   224              permission=MANAGE_TEMPLATE_PERMISSION, base=AJAXAddForm)
   220 class PortalTemplateSlotAddForm(AdminDialogAddForm):
   225 class PortalTemplateSlotAddForm(AdminDialogAddForm):
   221     """Portal template slot add form"""
   226     """Portal template slot add form"""
   222 
   227 
   223     @property
   228     @property
   272         except ValueError:
   277         except ValueError:
   273             event.form.widgets.errors += (Invalid(_("Row ID must be an integer value!")),)
   278             event.form.widgets.errors += (Invalid(_("Row ID must be an integer value!")),)
   274         else:
   279         else:
   275             if not 0 < row_id <= config.rows:
   280             if not 0 < row_id <= config.rows:
   276                 translate = event.form.request.localizer.translate
   281                 translate = event.form.request.localizer.translate
   277                 event.form.widgets.errors += (Invalid(translate(_("Row ID must be between 1 and {0}!")).format(
   282                 event.form.widgets.errors += (Invalid(translate(
   278                     config.rows)),)
   283                     _("Row ID must be between 1 and {0}!")).format(config.rows)),)
   279 
   284 
   280 
   285 
   281 @view_config(name='set-template-slot-order.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   286 @view_config(name='set-template-slot-order.json',
       
   287              context=IPortalTemplate, request_type=IPyAMSLayer,
   282              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   288              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   283 def set_template_slot_order(request):
   289 def set_template_slot_order(request):
   284     """Set template slots order"""
   290     """Set template slots order"""
   285     config = IPortalTemplateConfiguration(request.context)
   291     config = IPortalTemplateConfiguration(request.context)
   286     order = json.loads(request.params.get('order'))
   292     order = json.loads(request.params.get('order'))
   288         order[int(key)] = order.pop(key)
   294         order[int(key)] = order.pop(key)
   289     config.set_slot_order(order)
   295     config.set_slot_order(order)
   290     return {'status': 'success'}
   296     return {'status': 'success'}
   291 
   297 
   292 
   298 
   293 @view_config(name='get-slots-width.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   299 @view_config(name='get-slots-width.json',
       
   300              context=IPortalTemplate, request_type=IPyAMSLayer,
   294              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   301              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   295 def get_template_slots_width(request):
   302 def get_template_slots_width(request):
   296     """Get template slots width"""
   303     """Get template slots width"""
   297     config = IPortalTemplateConfiguration(request.context)
   304     config = IPortalTemplateConfiguration(request.context)
   298     return config.get_slots_width(request.params.get('device'))
   305     return config.get_slots_width(request.params.get('device'))
   299 
   306 
   300 
   307 
   301 @view_config(name='set-slot-width.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   308 @view_config(name='set-slot-width.json',
       
   309              context=IPortalTemplate, request_type=IPyAMSLayer,
   302              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   310              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   303 def set_template_slot_width(request):
   311 def set_template_slot_width(request):
   304     """Set template slot width"""
   312     """Set template slot width"""
   305     config = IPortalTemplateConfiguration(request.context)
   313     config = IPortalTemplateConfiguration(request.context)
   306     config.set_slot_width(request.params.get('slot_name'),
   314     config.set_slot_width(request.params.get('slot_name'),
   307                           request.params.get('device'),
   315                           request.params.get('device'),
   308                           int(request.params.get('width')))
   316                           int(request.params.get('width')))
   309     return config.get_slots_width(request.params.get('device'))
   317     return config.get_slots_width(request.params.get('device'))
   310 
   318 
   311 
   319 
   312 @pagelet_config(name='slot-properties.html', context=IPortalTemplate, layer=IPyAMSLayer,
   320 @pagelet_config(name='slot-properties.html',
   313                 permission=MANAGE_TEMPLATE_PERMISSION)
   321                 context=IPortalTemplate, layer=IPyAMSLayer,
   314 @ajax_config(name='slot-properties.json', context=IPortalTemplate, layer=IPyAMSLayer)
   322                 permission=MANAGE_TEMPLATE_PERMISSION)
       
   323 @ajax_config(name='slot-properties.json',
       
   324              context=IPortalTemplate, layer=IPyAMSLayer)
   315 class PortalTemplateSlotPropertiesEditForm(AdminDialogEditForm):
   325 class PortalTemplateSlotPropertiesEditForm(AdminDialogEditForm):
   316     """Slot properties edit form"""
   326     """Slot properties edit form"""
   317 
   327 
   318     prefix = 'slot.'
   328     prefix = 'slot.'
   319 
   329 
   361             }
   371             }
   362         else:
   372         else:
   363             return super(self.__class__, self).get_ajax_output(changes)
   373             return super(self.__class__, self).get_ajax_output(changes)
   364 
   374 
   365 
   375 
   366 @view_config(name='delete-template-slot.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   376 @view_config(name='delete-template-slot.json',
       
   377              context=IPortalTemplate, request_type=IPyAMSLayer,
   367              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   378              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   368 def delete_template_slot(request):
   379 def delete_template_slot(request):
   369     """Delete template slot"""
   380     """Delete template slot"""
   370     config = IPortalTemplateConfiguration(request.context)
   381     config = IPortalTemplateConfiguration(request.context)
   371     config.delete_slot(request.params.get('slot_name'))
   382     config.delete_slot(request.params.get('slot_name'))
   374 
   385 
   375 #
   386 #
   376 # Portlet views
   387 # Portlet views
   377 #
   388 #
   378 
   389 
   379 @viewlet_config(name='add-template-portlet.divider', context=IPortalTemplate, layer=IAdminLayer,
   390 @viewlet_config(name='add-template-portlet.divider',
   380                 view=PortalTemplateLayoutView, manager=IToolbarAddingMenu,
   391                 context=IPortalTemplate, layer=IAdminLayer, view=PortalTemplateLayoutView,
   381                 permission=MANAGE_TEMPLATE_PERMISSION, weight=10)
   392                 manager=IToolbarAddingMenu, weight=10,
       
   393                 permission=MANAGE_TEMPLATE_PERMISSION)
   382 class PortalTemplateAddMenuDivider(ToolbarMenuDivider):
   394 class PortalTemplateAddMenuDivider(ToolbarMenuDivider):
   383     """Portal template menu divider"""
   395     """Portal template menu divider"""
   384 
   396 
   385 
   397 
   386 @viewlet_config(name='add-template-portlet.menu', context=IPortalTemplate, layer=IAdminLayer,
   398 @viewlet_config(name='add-template-portlet.menu',
   387                 view=PortalTemplateLayoutView, manager=IToolbarAddingMenu,
   399                 context=IPortalTemplate, layer=IAdminLayer, view=PortalTemplateLayoutView,
   388                 permission=MANAGE_TEMPLATE_PERMISSION, weight=20)
   400                 manager=IToolbarAddingMenu, weight=20,
       
   401                 permission=MANAGE_TEMPLATE_PERMISSION)
   389 class PortalTemplatePortletAddMenu(ToolbarMenuItem):
   402 class PortalTemplatePortletAddMenu(ToolbarMenuItem):
   390     """Portal template portlet add menu"""
   403     """Portal template portlet add menu"""
   391 
   404 
   392     label = _("Add portlet...")
   405     label = _("Add portlet...")
   393     label_css_class = 'fa fa-fw fa-window-restore'
   406     label_css_class = 'fa fa-fw fa-window-restore'
   394     url = 'add-template-portlet.html'
   407     url = 'add-template-portlet.html'
   395     modal_target = True
   408     modal_target = True
   396 
   409 
   397 
   410 
   398 @pagelet_config(name='add-template-portlet.html', context=IPortalTemplate, layer=IPyAMSLayer,
   411 @pagelet_config(name='add-template-portlet.html',
   399                 permission=MANAGE_TEMPLATE_PERMISSION)
   412                 context=IPortalTemplate, layer=IPyAMSLayer,
   400 @ajax_config(name='add-template-portlet.json', context=IPortalTemplate, layer=IPyAMSLayer,
   413                 permission=MANAGE_TEMPLATE_PERMISSION)
       
   414 @ajax_config(name='add-template-portlet.json',
       
   415              context=IPortalTemplate, layer=IPyAMSLayer,
   401              permission=MANAGE_TEMPLATE_PERMISSION, base=AJAXAddForm)
   416              permission=MANAGE_TEMPLATE_PERMISSION, base=AJAXAddForm)
   402 class PortalTemplatePortletAddForm(AdminDialogAddForm):
   417 class PortalTemplatePortletAddForm(AdminDialogAddForm):
   403     """Portal template portlet add form"""
   418     """Portal template portlet add form"""
   404 
   419 
   405     @property
   420     @property
   419         return config.add_portlet(data.get('portlet_name'), data.get('slot_name'))
   434         return config.add_portlet(data.get('portlet_name'), data.get('slot_name'))
   420 
   435 
   421     def get_ajax_output(self, changes):
   436     def get_ajax_output(self, changes):
   422         configuration = IPortalPortletsConfiguration(self.context)
   437         configuration = IPortalPortletsConfiguration(self.context)
   423         settings = configuration.get_portlet_configuration(changes['portlet_id']).settings
   438         settings = configuration.get_portlet_configuration(changes['portlet_id']).settings
   424         previewer = self.request.registry.queryMultiAdapter((self.context, self.request, self, settings),
   439         previewer = self.request.registry.queryMultiAdapter(
   425                                                             IPortletPreviewer)
   440             (self.context, self.request, self, settings), IPortletPreviewer)
   426         if previewer is not None:
   441         if previewer is not None:
   427             previewer.update()
   442             previewer.update()
   428             changes['preview'] = previewer.render()
   443             changes['preview'] = previewer.render()
   429         return {
   444         return {
   430             'status': 'callback',
   445             'status': 'callback',
   431             'callback': 'PyAMS_portal.template.addPortletCallback',
   446             'callback': 'PyAMS_portal.template.addPortletCallback',
   432             'options': changes
   447             'options': changes
   433         }
   448         }
   434 
   449 
   435 
   450 
   436 @view_config(name='drag-template-portlet.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   451 @view_config(name='drag-template-portlet.json',
       
   452              context=IPortalTemplate, request_type=IPyAMSLayer,
   437              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   453              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   438 def drag_template_portlet(request):
   454 def drag_template_portlet(request):
   439     """Drag portlet icon to slot"""
   455     """Drag portlet icon to slot"""
   440     tmpl_config = IPortalTemplateConfiguration(request.context)
   456     tmpl_config = IPortalTemplateConfiguration(request.context)
   441     portlets_config = IPortalPortletsConfiguration(request.context)
   457     portlets_config = IPortalPortletsConfiguration(request.context)
   442     portlet_name = request.params.get('portlet_name')
   458     portlet_name = request.params.get('portlet_name')
   443     slot_name = request.params.get('slot_name')
   459     slot_name = request.params.get('slot_name')
   444     changes = tmpl_config.add_portlet(portlet_name, slot_name)
   460     changes = tmpl_config.add_portlet(portlet_name, slot_name)
   445     settings = portlets_config.get_portlet_configuration(changes['portlet_id']).settings
   461     settings = portlets_config.get_portlet_configuration(changes['portlet_id']).settings
   446     previewer = request.registry.queryMultiAdapter((request.context, request, request, settings),
   462     previewer = request.registry.queryMultiAdapter(
   447                                                    IPortletPreviewer)
   463         (request.context, request, request, settings), IPortletPreviewer)
   448     if previewer is not None:
   464     if previewer is not None:
   449         previewer.update()
   465         previewer.update()
   450         changes['preview'] = previewer.render()
   466         changes['preview'] = previewer.render()
   451     return {
   467     return {
   452         'status': 'callback',
   468         'status': 'callback',
   454         'callback': 'PyAMS_portal.template.addPortletCallback',
   470         'callback': 'PyAMS_portal.template.addPortletCallback',
   455         'options': changes
   471         'options': changes
   456     }
   472     }
   457 
   473 
   458 
   474 
   459 @view_config(name='set-template-portlet-order.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   475 @view_config(name='set-template-portlet-order.json',
       
   476              context=IPortalTemplate, request_type=IPyAMSLayer,
   460              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   477              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   461 def set_template_portlet_order(request):
   478 def set_template_portlet_order(request):
   462     """Set template portlet order"""
   479     """Set template portlet order"""
   463     order = json.loads(request.params.get('order'))
   480     order = json.loads(request.params.get('order'))
   464     order['from'] = int(order['from'])
   481     order['from'] = int(order['from'])
   478 
   495 
   479     def __call__(self):
   496     def __call__(self):
   480         request = self.request
   497         request = self.request
   481         request.registry.notify(PageletCreatedEvent(self))
   498         request.registry.notify(PageletCreatedEvent(self))
   482         portlet_id = int(request.params.get('{0}widgets.portlet_id'.format(self.prefix)))
   499         portlet_id = int(request.params.get('{0}widgets.portlet_id'.format(self.prefix)))
   483         portlet_config = IPortalPortletsConfiguration(self.context).get_portlet_configuration(portlet_id)
   500         portlet_config = IPortalPortletsConfiguration(self.context) \
       
   501             .get_portlet_configuration(portlet_id)
   484         if portlet_config is None:
   502         if portlet_config is None:
   485             raise NotFound()
   503             raise NotFound()
   486         editor = self.request.registry.queryMultiAdapter((portlet_config.editor_settings, request),
   504         editor = self.request.registry.queryMultiAdapter(
   487                                                          IPagelet, name='properties.html')
   505             (portlet_config.editor_settings, request), IPagelet, name='properties.html')
   488         if editor is None:
   506         if editor is None:
   489             raise NotFound()
   507             raise NotFound()
   490         request.registry.notify(PageletCreatedEvent(editor))
   508         request.registry.notify(PageletCreatedEvent(editor))
   491         editor.ajax_handler = 'portlet-properties.json'
   509         editor.ajax_handler = 'portlet-properties.json'
   492         editor.update()
   510         editor.update()
   501     def __call__(self):
   519     def __call__(self):
   502         request = self.request
   520         request = self.request
   503         request.registry.notify(PageletCreatedEvent(self))
   521         request.registry.notify(PageletCreatedEvent(self))
   504         # load portlet config
   522         # load portlet config
   505         portlet_id = int(request.params.get('{0}widgets.portlet_id'.format(self.prefix)))
   523         portlet_id = int(request.params.get('{0}widgets.portlet_id'.format(self.prefix)))
   506         portlet_config = IPortalPortletsConfiguration(self.context).get_portlet_configuration(portlet_id)
   524         portlet_config = IPortalPortletsConfiguration(self.context) \
       
   525             .get_portlet_configuration(portlet_id)
   507         if portlet_config is None:
   526         if portlet_config is None:
   508             raise NotFound()
   527             raise NotFound()
   509         # check inheritance
   528         # check inheritance
   510         old_override = portlet_config.inherit_parent
   529         old_override = portlet_config.inherit_parent
   511         new_override = request.params.get('{0}widgets.override_parent'.format(self.prefix))
   530         new_override = request.params.get('{0}widgets.override_parent'.format(self.prefix))
   550         if 'autosubmit' in request.params:
   569         if 'autosubmit' in request.params:
   551             changes['close_form'] = False
   570             changes['close_form'] = False
   552         return changes
   571         return changes
   553 
   572 
   554 
   573 
   555 @view_config(name='delete-template-portlet.json', context=IPortalTemplate, request_type=IPyAMSLayer,
   574 @view_config(name='delete-template-portlet.json',
       
   575              context=IPortalTemplate, request_type=IPyAMSLayer,
   556              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   576              permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True)
   557 def delete_template_portlet(request):
   577 def delete_template_portlet(request):
   558     """Delete template portlet"""
   578     """Delete template portlet"""
   559     config = IPortalTemplateConfiguration(request.context)
   579     config = IPortalTemplateConfiguration(request.context)
   560     config.delete_portlet(int(request.params.get('portlet_id')))
   580     config.delete_portlet(int(request.params.get('portlet_id')))