86 # |
86 # |
87 # Gallery contents |
87 # Gallery contents |
88 # |
88 # |
89 |
89 |
90 @pagelet_config(name='contents.html', context=IGallery, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
90 @pagelet_config(name='contents.html', context=IGallery, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
91 @implementer(IGalleryImagesView) |
91 @implementer(IGalleryContentsView) |
92 class GalleryContentForm(AdminDialogDisplayForm): |
92 class GalleryContentForm(AdminDialogDisplayForm): |
93 """Gallery contents form""" |
93 """Gallery contents form""" |
94 |
94 |
95 legend = _("Update gallery contents") |
95 legend = _("Update gallery contents") |
96 dialog_class = 'modal-max' |
96 dialog_class = 'modal-max' |
97 |
97 |
98 fields = field.Fields(Interface) |
98 fields = field.Fields(Interface) |
99 show_widget_title = True |
99 show_widget_title = True |
100 |
100 |
101 |
101 |
102 @viewlet_config(name='gallery-images', context=IGallery, view=IGalleryImagesView, manager=IWidgetsPrefixViewletsManager) |
102 @viewlet_config(name='gallery-medias', context=IGallery, view=IGalleryContentsView, manager=IWidgetsPrefixViewletsManager) |
103 @template_config(template='templates/gallery-images.pt', layer=IPyAMSLayer) |
103 @template_config(template='templates/gallery-medias.pt', layer=IPyAMSLayer) |
104 @implementer(IGalleryImagesView) |
104 @implementer(IGalleryContentsView) |
105 class GalleryImagesViewlet(Viewlet): |
105 class GalleryMediasViewlet(Viewlet): |
106 """Gallery images viewlet""" |
106 """Gallery medias viewlet""" |
107 |
107 |
108 def get_title(self, image): |
108 def get_title(self, media): |
109 return II18n(image).query_attribute('title', request=self.request) |
109 return II18n(media).query_attribute('title', request=self.request) |
110 |
110 |
111 |
111 |
112 @view_config(name='get-gallery-images.html', context=IGallery, request_type=IPyAMSLayer, |
112 @view_config(name='get-gallery-medias.html', context=IGallery, request_type=IPyAMSLayer, |
113 permission=VIEW_SYSTEM_PERMISSION) |
113 permission=VIEW_SYSTEM_PERMISSION) |
114 @implementer(IGalleryImagesView) |
114 @implementer(IGalleryContentsView) |
115 class GalleryImagesView(WfSharedContentPermissionMixin): |
115 class GalleryMediasView(WfSharedContentPermissionMixin): |
116 """Gallery images view""" |
116 """Gallery medias view""" |
117 |
117 |
118 def __init__(self, context, request): |
118 def __init__(self, context, request): |
119 self.context = context |
119 self.context = context |
120 self.request = request |
120 self.request = request |
121 |
121 |
122 def __call__(self): |
122 def __call__(self): |
123 return render_to_response('templates/gallery-images.pt', {'view': self}, request=self.request) |
123 return render_to_response('templates/gallery-medias.pt', {'view': self}, request=self.request) |
124 |
124 |
125 def get_title(self, image): |
125 def get_title(self, media): |
126 return II18n(image).query_attribute('title', request=self.request) |
126 return II18n(media).query_attribute('title', request=self.request) |
127 |
127 |
128 def get_thumbnail_target(self, media): |
128 def get_thumbnail_target(self, media): |
129 registry = self.request.registry |
129 registry = self.request.registry |
130 view = registry.queryMultiAdapter((media, self.request), IView, name='preview.html') |
130 view = registry.queryMultiAdapter((media, self.request), IView, name='preview.html') |
131 if view is not None: |
131 if view is not None: |
132 return absolute_url(media, self.request, 'preview.html') |
132 return absolute_url(media, self.request, 'preview.html') |
133 |
133 |
134 |
134 |
135 @view_config(name='set-images-order.json', context=IGallery, request_type=IPyAMSLayer, |
135 @view_config(name='set-medias-order.json', context=IGallery, request_type=IPyAMSLayer, |
136 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
136 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
137 def set_images_order(request): |
137 def set_medias_order(request): |
138 """Set gallery images order""" |
138 """Set gallery medias order""" |
139 images_names = json.loads(request.params.get('images')) |
139 medias_names = json.loads(request.params.get('medias')) |
140 request.context.updateOrder(images_names) |
140 request.context.updateOrder(medias_names) |
141 return {'status': 'success'} |
141 return {'status': 'success'} |
142 |
142 |
143 |
143 |
144 @view_config(name='set-image-visibility.json', context=IGallery, request_type=IPyAMSLayer, |
144 @view_config(name='set-media-visibility.json', context=IGallery, request_type=IPyAMSLayer, |
145 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
145 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
146 def set_image_visibility(request): |
146 def set_media_visibility(request): |
147 """Set gallery image visibility""" |
147 """Set gallery media visibility""" |
148 gallery = IGallery(request.context) |
148 gallery = IGallery(request.context) |
149 image = gallery.get(str(request.params.get('object_name'))) |
149 media = gallery.get(str(request.params.get('object_name'))) |
150 if image is None: |
150 if media is None: |
151 raise NotFound() |
151 raise NotFound() |
152 image.visible = not image.visible |
152 media.visible = not media.visible |
153 return {'visible': image.visible} |
153 return {'visible': media.visible} |
154 |
154 |
155 |
155 |
156 # |
156 # |
157 # Gallery renderers |
157 # Gallery renderers |
158 # |
158 # |
174 label = _("Default gallery renderer") |
174 label = _("Default gallery renderer") |
175 weight = 1 |
175 weight = 1 |
176 |
176 |
177 |
177 |
178 # |
178 # |
179 # Gallery images downloader |
179 # Gallery medias downloader |
180 # |
180 # |
181 |
181 |
182 @view_config(name='get-images.zip', context=IGallery, request_type=IPyAMSLayer, |
182 @view_config(name='get-medias.zip', context=IGallery, request_type=IPyAMSLayer, |
183 permission=VIEW_SYSTEM_PERMISSION) |
183 permission=VIEW_SYSTEM_PERMISSION) |
184 def get_images_archive(request): |
184 def get_medias_archive(request): |
185 """Get all gallery images as ZIP file""" |
185 """Get all gallery medias as ZIP file""" |
186 zip_data = BytesIO() |
186 zip_data = BytesIO() |
187 zip_file = zipfile.ZipFile(zip_data, mode='w') |
187 zip_file = zipfile.ZipFile(zip_data, mode='w') |
188 for image in IGallery(request.context).values(): |
188 for media in IGallery(request.context).values(): |
189 zip_file.writestr(IFileInfo(image.data).filename, image.data.data) |
189 zip_file.writestr(IFileInfo(media.data).filename, media.data.data) |
190 zip_file.close() |
190 zip_file.close() |
191 zip_data.seek(0) |
191 zip_data.seek(0) |
192 response = Response(content_type='application/zip', |
192 response = Response(content_type='application/zip', |
193 content_disposition='attachment; filename="gallery.zip"') |
193 content_disposition='attachment; filename="gallery.zip"') |
194 response.body_file = zip_data |
194 response.body_file = zip_data |