diff --git a/django_web_galleries/web_galleries/forms.py b/django_web_galleries/web_galleries/forms.py
index 7821d31..faeda76 100644
--- a/django_web_galleries/web_galleries/forms.py
+++ b/django_web_galleries/web_galleries/forms.py
@@ -30,4 +30,9 @@ class AccessCodeForm(forms.Form):
access_code = forms.CharField(max_length=32)
class VisitorNameForm(forms.Form):
- name = forms.CharField(max_length=50)
\ No newline at end of file
+ name = forms.CharField(max_length=50)
+
+class ImageUploadForm(forms.Form):
+ images = forms.ImageField(
+ widget=forms.ClearableFileInput(attrs={'multiple': True})
+ )
\ No newline at end of file
diff --git a/django_web_galleries/web_galleries/models.py b/django_web_galleries/web_galleries/models.py
index e6aed26..23c07bc 100644
--- a/django_web_galleries/web_galleries/models.py
+++ b/django_web_galleries/web_galleries/models.py
@@ -72,13 +72,6 @@ class Gallery(models.Model):
def __str__(self):
return self.title
- def mettwurst(self):
- if self.private and access_code is None:
- raise ValidationErrorr('Private gallery needs an access code')
- if len(self.visitors.all()) > 10:
- raise ValidationError('Gallery can not have more than 10 visitors assigned')
-
-
class Image(models.Model):
"""
An image contains the path to the image file and several information
diff --git a/django_web_galleries/web_galleries/templates/gallery/gallery_detail.html b/django_web_galleries/web_galleries/templates/gallery/gallery_detail.html
index ff4aea2..80feddc 100644
--- a/django_web_galleries/web_galleries/templates/gallery/gallery_detail.html
+++ b/django_web_galleries/web_galleries/templates/gallery/gallery_detail.html
@@ -6,10 +6,11 @@
{% if gallery.title %}
{{gallery.title}}
{% endif %}
+ Upload image to this gallery
{% for image in gallery.images.all %}
-
+
{% endfor %}
diff --git a/django_web_galleries/web_galleries/templates/gallery/upload_image.html b/django_web_galleries/web_galleries/templates/gallery/upload_image.html
new file mode 100644
index 0000000..eafc0f8
--- /dev/null
+++ b/django_web_galleries/web_galleries/templates/gallery/upload_image.html
@@ -0,0 +1,14 @@
+{% extends '../global.html' %}
+
+{% block content %}
+
+{% endblock content %}
\ No newline at end of file
diff --git a/django_web_galleries/web_galleries/urls.py b/django_web_galleries/web_galleries/urls.py
index 1adf16b..e6df269 100644
--- a/django_web_galleries/web_galleries/urls.py
+++ b/django_web_galleries/web_galleries/urls.py
@@ -10,7 +10,9 @@ from .views import (
ImageDetailView,
GainAccessToGalleryView,
VisitorSettingsView,
- RevokeAccessToGallery
+ RevokeAccessToGallery,
+ UploadToGalleryView,
+ ImageThroughGalleryView
)
urlpatterns = [
@@ -24,4 +26,6 @@ urlpatterns = [
path('gallery/gain_access//', GainAccessToGalleryView.as_view(), name='gallery_gain_access'),
path('visitor/my_profile', VisitorSettingsView.as_view(), name='visitor_profile'),
path('gallery/revoke_access//', RevokeAccessToGallery.as_view(), name='gallery_revoke_access'),
+ path('gallery/upload/', UploadToGalleryView.as_view(), name='gallery_upload'),
+ path('gallery/image//', ImageThroughGalleryView.as_view(), name='image_through_gallery')
]
diff --git a/django_web_galleries/web_galleries/views.py b/django_web_galleries/web_galleries/views.py
index c641bc2..48b6798 100644
--- a/django_web_galleries/web_galleries/views.py
+++ b/django_web_galleries/web_galleries/views.py
@@ -15,7 +15,8 @@ from .forms import (
ImageUploadForm,
GalleryCreatingForm,
AccessCodeForm,
- VisitorNameForm
+ VisitorNameForm,
+ ImageUploadForm
)
from .models import (
Image,
@@ -94,7 +95,7 @@ class ImageUploadView(VisitorSessionMixin, View):
}
)
-class PublicImageListView(ListView):
+class PublicImageListView(VisitorSessionMixin, ListView):
model = Image
paginate_by = 20
context_object_name = 'images'
@@ -107,6 +108,7 @@ class MyImagesListView(VisitorSessionMixin, View):
def get(self, request):
visitor = self.get_visitor()
uploaded_images = Image.objects.all().filter(
+
uploaded_by=self.get_visitor()
)
shared_images = Image.objects.all().filter(
@@ -165,7 +167,12 @@ class GalleryCreateView(VisitorSessionMixin, View):
gallery.save()
return redirect(
- reverse('home')
+ reverse(
+ 'gallery',
+ kwargs={
+ 'pk': gallery.id
+ }
+ )
)
else:
form = ImageUploadForm()
@@ -234,6 +241,42 @@ class ImageDetailView(VisitorSessionMixin, UserPassesTestMixin, DetailView):
reverse('home')
)
+class ImageThroughGalleryView(VisitorSessionMixin, View):
+ def _redirect_gallery_no_access(self, gallery):
+ return redirect(
+ reverse(
+ 'gallery_gain_access',
+ kwargs={
+ 'gallery_id': gallery.id
+ }
+ )
+ )
+
+ def get(self, request, gallery_id, image_id):
+ gallery = get_object_or_404(Gallery, id=gallery_id)
+ if self.get_visitor() in gallery.visitors.all() or self.get_visitor() == gallery.created_by:
+ image = get_object_or_404(Image, id=image_id)
+ if image in gallery.images.all():
+ return render(
+ request,
+ 'image/image_detail.html',
+ {
+ 'image': image,
+ 'visitor': self.get_visitor()
+ }
+ )
+ else:
+ return redirect(
+ reverse(
+ 'gallery',
+ kwargs={
+ 'pk': gallery.id
+ }
+ )
+ )
+ else:
+ return self._redirect_gallery_no_access(gallery)
+
class GainAccessToGalleryView(VisitorSessionMixin, View):
def _redirect_to_gallery(self, gallery):
return redirect(
@@ -351,3 +394,56 @@ class VisitorSettingsView(VisitorSessionMixin, View):
'visitor': self.get_visitor()
}
)
+
+class UploadToGalleryView(VisitorSessionMixin, View):
+ def get(self, request, gallery_id):
+ upload_form = ImageUploadForm()
+ gallery = get_object_or_404(Gallery, id=gallery_id)
+
+ return render(
+ request,
+ 'gallery/upload_image.html',
+ {
+ 'form': upload_form,
+ 'gallery': gallery
+ }
+ )
+
+ def post(self, request, gallery_id):
+ upload_form = ImageUploadForm(
+ request.POST,
+ request.FILES
+ )
+
+ if upload_form.is_valid():
+ gallery = get_object_or_404(Gallery, id=gallery_id)
+
+ for image in request.FILES.getlist('images'):
+ imageObject = Image.objects.create(
+ image_file=image,
+ uploaded_by=self.get_visitor(),
+ private=gallery.private,
+ access_code=gallery.access_code
+
+ )
+ imageObject.galleries.add(gallery)
+ imageObject.save()
+
+ gallery.save()
+ return redirect(
+ reverse(
+ 'gallery',
+ kwargs={
+ 'pk': gallery.id
+ }
+ )
+ )
+ else:
+ return render(
+ request,
+ 'gallery/upload_image.html',
+ {
+ 'form': upload_form,
+ 'gallery': gallery
+ }
+ )
\ No newline at end of file