35 |
35 |
36 # import packages |
36 # import packages |
37 from pyams_form.form import AJAXEditForm, AJAXAddForm |
37 from pyams_form.form import AJAXEditForm, AJAXAddForm |
38 from pyams_form.schema import CloseButton |
38 from pyams_form.schema import CloseButton |
39 from pyams_pagelet.pagelet import pagelet_config |
39 from pyams_pagelet.pagelet import pagelet_config |
40 from pyams_skin.container import ContainerView |
40 from pyams_skin.container import ContainerView, delete_container_element |
41 from pyams_skin.page import DefaultPageHeaderAdapter |
41 from pyams_skin.page import DefaultPageHeaderAdapter |
42 from pyams_skin.table import DefaultElementEditorAdapter, BaseTable, I18nColumn, TrashColumn, ActionColumn, TableViewlet |
42 from pyams_skin.table import DefaultElementEditorAdapter, BaseTable, I18nColumn, TrashColumn, ActionColumn, TableViewlet |
43 from pyams_skin.viewlet.menu import MenuItem |
43 from pyams_skin.viewlet.menu import MenuItem |
44 from pyams_skin.viewlet.toolbar import ToolbarMenuItem |
44 from pyams_skin.viewlet.toolbar import ToolbarMenuItem |
45 from pyams_template.template import template_config |
45 from pyams_template.template import template_config |
97 |
97 |
98 @property |
98 @property |
99 def data_attributes(self): |
99 def data_attributes(self): |
100 manager = query_utility(IScheduler) |
100 manager = query_utility(IScheduler) |
101 attributes = super(SchedulerTasksTable, self).data_attributes |
101 attributes = super(SchedulerTasksTable, self).data_attributes |
102 table_attrs = {'data-ams-location': absolute_url(manager, self.request), |
102 attributes.setdefault('table', {}).update({ |
103 'data-ams-delete-target': 'delete-task.json'} |
103 'data-ams-location': absolute_url(manager, self.request) |
104 if 'table' in attributes: |
104 }) |
105 attributes['table'].update(table_attrs) |
|
106 else: |
|
107 attributes['table'] = table_attrs |
|
108 return attributes |
105 return attributes |
109 |
106 |
110 def getCSSHighlightClass(self, column, item, cssClass): |
107 def getCSSHighlightClass(self, column, item, cssClass): |
111 if column.__name__ == 'name': |
108 if column.__name__ == 'name': |
112 info = item.get_scheduling_info(self.request.registry) |
109 info = item.get_scheduling_info(self.request.registry) |
196 |
193 |
197 icon_hint = _("Delete task") |
194 icon_hint = _("Delete task") |
198 permission = MANAGE_SYSTEM_PERMISSION |
195 permission = MANAGE_SYSTEM_PERMISSION |
199 |
196 |
200 |
197 |
201 @view_config(name='delete-task.json', context=IScheduler, request_type=IPyAMSLayer, |
198 @view_config(name='delete-element.json', context=IScheduler, request_type=IPyAMSLayer, |
202 permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True) |
199 permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True) |
203 def delete_scheduler_task(request): |
200 def delete_scheduler_task(request): |
204 """Delete task from scheduler utility""" |
201 """Delete task from scheduler utility""" |
205 translate = request.localizer.translate |
202 return delete_container_element(request, ignore_permission=True) |
206 name = request.params.get('object_name') |
|
207 if not name: |
|
208 return {'status': 'message', |
|
209 'messagebox': {'status': 'error', |
|
210 'content': translate(_("No provided object_name argument!"))}} |
|
211 if name not in request.context: |
|
212 return {'status': 'message', |
|
213 'messagebox': {'status': 'error', |
|
214 'content': translate(_("Given task name doesn't exist!"))}} |
|
215 del request.context[name] |
|
216 return {'status': 'success'} |
|
217 |
203 |
218 |
204 |
219 @adapter_config(context=(ISite, IAdminLayer, SchedulerTasksTable), provides=IValues) |
205 @adapter_config(context=(ISite, IAdminLayer, SchedulerTasksTable), provides=IValues) |
220 class SchedulerTasksValuesAdapter(ContextRequestViewAdapter): |
206 class SchedulerTasksValuesAdapter(ContextRequestViewAdapter): |
221 """Scheduler tasks values adapter""" |
207 """Scheduler tasks values adapter""" |
263 |
249 |
264 @pagelet_config(name='properties.html', context=IScheduler, layer=IPyAMSLayer, permission=MANAGE_SYSTEM_PERMISSION) |
250 @pagelet_config(name='properties.html', context=IScheduler, layer=IPyAMSLayer, permission=MANAGE_SYSTEM_PERMISSION) |
265 class SchedulerPropertiesEditForm(AdminDialogEditForm): |
251 class SchedulerPropertiesEditForm(AdminDialogEditForm): |
266 """Scheduler properties edit form""" |
252 """Scheduler properties edit form""" |
267 |
253 |
|
254 prefix = 'scheduler_properties.' |
|
255 |
268 @property |
256 @property |
269 def title(self): |
257 def title(self): |
270 return self.context.__name__ |
258 return self.context.__name__ |
271 |
259 |
272 legend = _("Update tasks scheduler properties") |
260 legend = _("Update tasks scheduler properties") |
317 cssClasses = {'table': 'table table-bordered table-striped table-hover table-tight datatable'} |
305 cssClasses = {'table': 'table table-bordered table-striped table-hover table-tight datatable'} |
318 sortOn = None |
306 sortOn = None |
319 |
307 |
320 @property |
308 @property |
321 def data_attributes(self): |
309 def data_attributes(self): |
322 return {'table': {'data-ams-datatable-global-filter': 'false', |
310 return { |
323 'data-ams-datatable-info': 'false', |
311 'table': { |
324 'data-ams-datatable-sdom': "t<'dt-row dt-bottom-row'<'text-right'p>>", |
312 'data-ams-datatable-global-filter': 'false', |
325 'data-ams-datatable-display-length': '20', |
313 'data-ams-datatable-info': 'false', |
326 'data-ams-datatable-pagination-type': 'bootstrap_prevnext'}} |
314 'data-ams-datatable-sdom': "t<'dt-row dt-bottom-row'<'text-right'p>>", |
|
315 'data-ams-datatable-display-length': '20', |
|
316 'data-ams-datatable-pagination-type': 'bootstrap_prevnext' |
|
317 } |
|
318 } |
327 |
319 |
328 |
320 |
329 @adapter_config(name='name', context=(Interface, IAdminLayer, SchedulerJobsTable), provides=IColumn) |
321 @adapter_config(name='name', context=(Interface, IAdminLayer, SchedulerJobsTable), provides=IColumn) |
330 class SchedulerJobNameColumn(I18nColumn, GetAttrColumn): |
322 class SchedulerJobNameColumn(I18nColumn, GetAttrColumn): |
331 """Scheduler job name column""" |
323 """Scheduler job name column""" |
454 """Scheduler process test form, JSON renderer""" |
446 """Scheduler process test form, JSON renderer""" |
455 |
447 |
456 def get_ajax_output(self, changes): |
448 def get_ajax_output(self, changes): |
457 status, message = changes |
449 status, message = changes |
458 if status == 200: |
450 if status == 200: |
459 return {'status': 'success', |
451 return { |
460 'content': {'html': text_to_html(message)}, |
452 'status': 'success', |
461 'close_form': False} |
453 'content': { |
|
454 'html': text_to_html(message) |
|
455 }, |
|
456 'close_form': False |
|
457 } |
462 else: |
458 else: |
463 return {'status': 'info', |
459 return { |
464 'content': {'html': text_to_html(message)}, |
460 'status': 'info', |
465 'close_form': False} |
461 'content': { |
|
462 'html': text_to_html(message) |
|
463 }, |
|
464 'close_form': False |
|
465 } |