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', |