diff -r 000000000000 -r fd39db613f8b src/pyams_media/zmi/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pyams_media/zmi/__init__.py Wed Sep 02 15:31:55 2015 +0200 @@ -0,0 +1,137 @@ +# +# Copyright (c) 2008-2015 Thierry Florac +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# + +__docformat__ = 'restructuredtext' + + +# import standard library + +# import interfaces +from pyams_form.interfaces.form import IWidgetsSuffixViewletsManager +from pyams_media.interfaces import IMediaConversionUtility +from pyams_skin.interfaces.viewlet import ITableItemColumnActionsMenu +from pyams_skin.layer import IPyAMSLayer + +# import packages +from pyams_form.form import AJAXEditForm, AJAXAddForm +from pyams_form.schema import CloseButton +from pyams_pagelet.pagelet import pagelet_config +from pyams_skin.viewlet.toolbar import ToolbarMenuItem +from pyams_template.template import template_config +from pyams_utils.text import text_to_html +from pyams_viewlet.viewlet import viewlet_config, Viewlet +from pyams_zmi.control_panel import UtilitiesTable +from pyams_zmi.form import AdminDialogEditForm, AdminDialogAddForm +from pyams_zmi.layer import IAdminLayer +from pyramid.view import view_config +from z3c.form import field, button +from zope.interface import Interface + +from pyams_media import _ + + +@pagelet_config(name='properties.html', context=IMediaConversionUtility, layer=IPyAMSLayer, permission='system.view') +class MediaConversionUtilityPropertiesEditForm(AdminDialogEditForm): + """Medias conversion utility properties edit form""" + + @property + def title(self): + return self.context.__name__ + + legend = _("Update medias converter properties") + + fields = field.Fields(IMediaConversionUtility) + label_css_class = 'control-label col-md-4' + input_css_class = 'col-md-8' + + ajax_handler = 'properties.json' + edit_permission = 'system.manage' + + +@view_config(name='properties.json', context=IMediaConversionUtility, request_type=IPyAMSLayer, + permission='system.manage', renderer='json', xhr=True) +class MediaConversionUtilityPropertiesAJAXEditForm(AJAXEditForm, MediaConversionUtilityPropertiesEditForm): + """Medias conversion utility properties edit form, JSON renderer""" + + +@viewlet_config(name='test-conversion-process.menu', context=IMediaConversionUtility, layer=IAdminLayer, + view=UtilitiesTable, manager=ITableItemColumnActionsMenu, permission='system.manage') +class MediaConversionProcessTestMenu(ToolbarMenuItem): + """Medias conversion process test menu""" + + label = _("Test process connection...") + label_css_class = 'fa fa-fw fa-film' + url = 'test-conversion-process.html' + modal_target = True + stop_propagation = True + + +class IMediaConversionProcessTestButtons(Interface): + """Medias conversion process test buttons""" + + close = CloseButton(name='close', title=_("Close")) + test = button.Button(name='test', title=_("Test connection")) + + +@pagelet_config(name='test-conversion-process.html', context=IMediaConversionUtility, layer=IPyAMSLayer, + permission='system.manage') +class MediaConversionProcessTestForm(AdminDialogAddForm): + """Medias conversion process test form""" + + @property + def title(self): + return self.context.__name__ + + legend = _("Test medias converter process connection") + icon_css_class = 'fa fa-fw fa-film' + + prefix = 'test_form.' + fields = field.Fields(Interface) + buttons = button.Buttons(IMediaConversionProcessTestButtons) + ajax_handler = 'test-conversion-process.json' + edit_permission = 'system.manage' + + @property + def form_target(self): + return '#{0}_test_result'.format(self.id) + + def updateActions(self): + super(MediaConversionProcessTestForm, self).updateActions() + if 'test' in self.actions: + self.actions['test'].addClass('btn-primary') + + def createAndAdd(self, data): + return self.context.test_process() + + +@viewlet_config(name='test-conversion-process.suffix', layer=IAdminLayer, manager=IWidgetsSuffixViewletsManager, + view=MediaConversionProcessTestForm, weight=50) +@template_config(template='templates/process-test.pt') +class MediaConversionProcessTestSuffix(Viewlet): + """Media conversion process test form suffix""" + + +@view_config(name='test-conversion-process.json', context=IMediaConversionUtility, request_type=IPyAMSLayer, + permission='system.manage', renderer='json', xhr=True) +class MediaConversionProcessAJAXTestForm(AJAXAddForm, MediaConversionProcessTestForm): + """Medias conversion process test form, JSON renderer""" + + def get_ajax_output(self, changes): + status, message = changes + if status == 200: + return {'status': 'success', + 'content': {'html': text_to_html(message)}, + 'close_form': False} + else: + return {'status': 'info', + 'content': {'html': text_to_html(message)}, + 'close_form': False}