src/pyams_content/component/gallery/zmi/file.py
changeset 591 b694d5667d17
parent 570 196121e4a6f4
child 823 46d1f7b3d3bb
equal deleted inserted replaced
590:4fafaf94701d 591:b694d5667d17
    32 from pyams_content.component.gallery.file import GalleryFile
    32 from pyams_content.component.gallery.file import GalleryFile
    33 from pyams_content.shared.common import IWfSharedContent
    33 from pyams_content.shared.common import IWfSharedContent
    34 from pyams_content.shared.common.zmi import WfSharedContentPermissionMixin
    34 from pyams_content.shared.common.zmi import WfSharedContentPermissionMixin
    35 from pyams_file.file import get_magic_content_type
    35 from pyams_file.file import get_magic_content_type
    36 from pyams_file.zmi.file import FilePropertiesAction
    36 from pyams_file.zmi.file import FilePropertiesAction
    37 from pyams_form.form import AJAXAddForm, AJAXEditForm
    37 from pyams_form.form import AJAXAddForm, ajax_config
    38 from pyams_form.group import NamedWidgetsGroup
    38 from pyams_form.group import NamedWidgetsGroup
    39 from pyams_pagelet.pagelet import pagelet_config
    39 from pyams_pagelet.pagelet import pagelet_config
    40 from pyams_skin.viewlet.toolbar import ToolbarAction, JsToolbarActionItem
    40 from pyams_skin.viewlet.toolbar import ToolbarAction, JsToolbarActionItem
    41 from pyams_utils.registry import query_utility
    41 from pyams_utils.registry import query_utility
    42 from pyams_utils.traversing import get_parent
    42 from pyams_utils.traversing import get_parent
    43 from pyams_utils.url import absolute_url
    43 from pyams_utils.url import absolute_url
    44 from pyams_viewlet.viewlet import viewlet_config
    44 from pyams_viewlet.viewlet import viewlet_config
    45 from pyams_zmi.form import AdminDialogEditForm, AdminDialogAddForm
    45 from pyams_zmi.form import AdminDialogEditForm, AdminDialogAddForm
    46 from pyramid.view import view_config
       
    47 from z3c.form import field
    46 from z3c.form import field
    48 from zope.lifecycleevent import ObjectCreatedEvent
    47 from zope.lifecycleevent import ObjectCreatedEvent
    49 from zope.location import locate
    48 from zope.location import locate
    50 
    49 
    51 from pyams_content import _
    50 from pyams_content import _
    61     modal_target = True
    60     modal_target = True
    62     stop_propagation = True
    61     stop_propagation = True
    63 
    62 
    64 
    63 
    65 @pagelet_config(name='add-media.html', context=IGallery, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
    64 @pagelet_config(name='add-media.html', context=IGallery, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
       
    65 @ajax_config(name='add-media.json', context=IGallery, layer=IPyAMSLayer, base=AJAXAddForm)
    66 class GalleryMediaAddForm(AdminDialogAddForm):
    66 class GalleryMediaAddForm(AdminDialogAddForm):
    67     """Gallery media add form"""
    67     """Gallery media add form"""
    68 
    68 
    69     legend = _("Add media(s)")
    69     legend = _("Add media(s)")
    70     icon_css_class = 'fa -fa-fw fa-picture-o'
    70     icon_css_class = 'fa -fa-fw fa-picture-o'
    71 
    71 
    72     fields = field.Fields(IGalleryMediasAddFields)
    72     fields = field.Fields(IGalleryMediasAddFields)
    73     ajax_handler = 'add-media.json'
    73     edit_permission = MANAGE_CONTENT_PERMISSION
    74 
    74 
    75     def updateWidgets(self, prefix=None):
    75     def updateWidgets(self, prefix=None):
    76         super(GalleryMediaAddForm, self).updateWidgets(prefix)
    76         super(GalleryMediaAddForm, self).updateWidgets(prefix)
    77         if 'author_comments' in self.widgets:
    77         if 'author_comments' in self.widgets:
    78             self.widgets['author_comments'].widget_css_class = 'textarea'
    78             self.widgets['author_comments'].widget_css_class = 'textarea'
   119                 media.author = data.get('author')
   119                 media.author = data.get('author')
   120                 media.author_comments = data.get('author_comments')
   120                 media.author_comments = data.get('author_comments')
   121                 self.context.append(media)
   121                 self.context.append(media)
   122         return None
   122         return None
   123 
   123 
   124 
       
   125 @view_config(name='add-media.json', context=IGallery, request_type=IPyAMSLayer,
       
   126              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   127 class GalleryMediaAJAXAddForm(AJAXAddForm, GalleryMediaAddForm):
       
   128     """Gallery media add form, JSON renderer"""
       
   129 
       
   130     def get_ajax_output(self, changes):
   124     def get_ajax_output(self, changes):
   131         return {
   125         return {
   132             'status': 'reload',
   126             'status': 'reload',
   133             'location': absolute_url(self.context, self.request, 'get-gallery-medias.html'),
   127             'location': absolute_url(self.context, self.request, 'get-gallery-medias.html'),
   134             'target': '#gallery_medias_{0}'.format(self.context.__name__)
   128             'target': '#gallery_medias_{0}'.format(self.context.__name__)
   179     url = 'gallery-file-properties.html'
   173     url = 'gallery-file-properties.html'
   180 
   174 
   181 
   175 
   182 @pagelet_config(name='gallery-file-properties.html', context=IGalleryFile, layer=IPyAMSLayer,
   176 @pagelet_config(name='gallery-file-properties.html', context=IGalleryFile, layer=IPyAMSLayer,
   183                 permission=VIEW_SYSTEM_PERMISSION)
   177                 permission=VIEW_SYSTEM_PERMISSION)
       
   178 @ajax_config(name='gallery-file-properties.html', context=IGalleryFile, layer=IPyAMSLayer)
   184 class GalleryFilePropertiesEditForm(AdminDialogEditForm):
   179 class GalleryFilePropertiesEditForm(AdminDialogEditForm):
   185     """Gallery file properties edit form"""
   180     """Gallery file properties edit form"""
   186 
   181 
   187     prefix = 'file_properties.'
   182     prefix = 'file_properties.'
   188 
   183 
   189     legend = _("Update media properties")
   184     legend = _("Update media properties")
   190     icon_css_class = 'fa fa-fw fa-picture-o'
   185     icon_css_class = 'fa fa-fw fa-picture-o'
   191     dialog_class = 'modal-large'
   186     dialog_class = 'modal-large'
   192 
   187 
   193     fields = field.Fields(IGalleryFile).omit('__parent__', '__name__', 'visible')
   188     fields = field.Fields(IGalleryFile).omit('__parent__', '__name__', 'visible')
   194     ajax_handler = 'gallery-file-properties.json'
   189     edit_permission = MANAGE_CONTENT_PERMISSION
   195 
   190 
   196     @property
   191     @property
   197     def title(self):
   192     def title(self):
   198         gallery = get_parent(self.context, IGallery)
   193         gallery = get_parent(self.context, IGallery)
   199         return II18n(gallery).query_attribute('title', request=self.request)
   194         return II18n(gallery).query_attribute('title', request=self.request)
   217                                          css_class='inner',
   212                                          css_class='inner',
   218                                          switch=True,
   213                                          switch=True,
   219                                          display_mode='auto'))
   214                                          display_mode='auto'))
   220         super(GalleryFilePropertiesEditForm, self).updateGroups()
   215         super(GalleryFilePropertiesEditForm, self).updateGroups()
   221 
   216 
   222 
       
   223 @view_config(name='gallery-file-properties.json', context=IGalleryFile, request_type=IPyAMSLayer,
       
   224              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   225 class GalleryFileInfoPropertiesAJAXEditForm(AJAXEditForm, GalleryFilePropertiesEditForm):
       
   226     """Gallery file properties edit form, JSON renderer"""
       
   227 
       
   228     def get_ajax_output(self, changes):
   217     def get_ajax_output(self, changes):
   229         output = super(GalleryFileInfoPropertiesAJAXEditForm, self).get_ajax_output(changes)
   218         output = super(self.__class__, self).get_ajax_output(changes)
   230         if 'title' in changes.get(IGalleryFile, ()):
   219         if 'title' in changes.get(IGalleryFile, ()):
   231             gallery = get_parent(self.context, IGallery)
   220             gallery = get_parent(self.context, IGallery)
   232             if gallery is not None:
   221             if gallery is not None:
   233                 output.setdefault('events', []).append({
   222                 output.setdefault('events', []).append({
   234                     'event': 'myams.refresh',
   223                     'event': 'myams.refresh',