Check upload form
This commit is contained in:
parent
727387566d
commit
d2fa5ce02f
5 changed files with 54 additions and 22 deletions
|
|
@ -203,6 +203,7 @@ EMAIL_HOST_PASSWORD = os.getenv('EMAIL_PASSWORD', None)
|
||||||
# Mail will be sent from this address
|
# Mail will be sent from this address
|
||||||
SERVER_EMAIL = "photos@crans.org"
|
SERVER_EMAIL = "photos@crans.org"
|
||||||
DEFAULT_FROM_EMAIL = f"Serveur photos <{SERVER_EMAIL}>"
|
DEFAULT_FROM_EMAIL = f"Serveur photos <{SERVER_EMAIL}>"
|
||||||
|
EMAIL_SUBJECT_PREFIX = '[Serveur photos] '
|
||||||
|
|
||||||
# After login redirect user to transfer page
|
# After login redirect user to transfer page
|
||||||
LOGIN_REDIRECT_URL = '/'
|
LOGIN_REDIRECT_URL = '/'
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,16 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
{% url 'photologue:pl-gallery-archive' as url %}
|
{% url 'photologue:pl-gallery-archive' as url %}
|
||||||
<a class="nav-link {% if request.path_info == url %}active{% endif %}" href="{{ url }}">{% trans 'Galleries' %}</a>
|
<a class="nav-link {% if request.path_info == url %}active{% endif %}" href="{{ url }}">{% trans 'Galleries' %}</a>
|
||||||
</li>
|
</li>
|
||||||
|
{% if perms.photologue.add_gallery %}
|
||||||
|
<li class="nav-item">
|
||||||
|
{% url 'gallery-upload' as url %}
|
||||||
|
<a class="nav-link {% if request.path_info == url %}active{% endif %}" href="{{ url }}">{% trans 'Upload' %}</a>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
{% if request.user.is_staff %}
|
{% if request.user.is_staff %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'admin:index' %}">{% trans 'Manage' %}</a>
|
<a class="nav-link" href="{% url 'admin:index' %}">{% trans 'Manage' %}</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navbar-nav">
|
<ul class="navbar-nav">
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,11 @@ from photologue.models import Gallery
|
||||||
class UploadForm(forms.Form):
|
class UploadForm(forms.Form):
|
||||||
file_field = forms.FileField(
|
file_field = forms.FileField(
|
||||||
label="",
|
label="",
|
||||||
widget=forms.ClearableFileInput(attrs={'multiple': True}),
|
widget=forms.FileInput(attrs={
|
||||||
|
'accept': 'image/*',
|
||||||
|
'multiple': True,
|
||||||
|
'class': 'mb-3',
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
gallery = forms.ModelChoiceField(
|
gallery = forms.ModelChoiceField(
|
||||||
Gallery.objects.all(),
|
Gallery.objects.all(),
|
||||||
|
|
@ -20,3 +24,23 @@ class UploadForm(forms.Form):
|
||||||
max_length=250,
|
max_length=250,
|
||||||
required=False,
|
required=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def clean_new_gallery_title(self):
|
||||||
|
title = self.cleaned_data['new_gallery_title']
|
||||||
|
if title and Gallery.objects.filter(title=title).exists():
|
||||||
|
raise forms.ValidationError(_('A gallery with that title already exists.'))
|
||||||
|
return title
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
cleaned_data = super().clean()
|
||||||
|
|
||||||
|
# Check that either an existing gallery is chosen, or new_gallery_title is filled
|
||||||
|
if not (bool(cleaned_data['gallery']) ^ bool(cleaned_data.get('new_gallery_title', None))):
|
||||||
|
raise forms.ValidationError(
|
||||||
|
_('Select an existing gallery, or enter a title for a new gallery.'))
|
||||||
|
|
||||||
|
return cleaned_data
|
||||||
|
|
||||||
|
def save(self, files):
|
||||||
|
# TODO: upload
|
||||||
|
print(type(files))
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ dropZone.ondragleave = function() {
|
||||||
<h1>{% trans "Upload" %}</h1>
|
<h1>{% trans "Upload" %}</h1>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<form method="post">{% csrf_token %}
|
<form method="post" enctype="multipart/form-data">{% csrf_token %}
|
||||||
<div class="upload-drop-zone" id="drop-zone">
|
<div class="upload-drop-zone" id="drop-zone">
|
||||||
{% trans "Drag and drop photos here" %}
|
{% trans "Drag and drop photos here" %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,12 @@ import zipfile
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
from django.contrib import messages
|
||||||
from django.core.mail import mail_managers
|
from django.core.mail import mail_managers
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.views.generic.detail import DetailView
|
from django.views.generic.detail import DetailView
|
||||||
from django.views.generic.edit import FormView
|
from django.views.generic.edit import FormView
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from photologue.models import Gallery
|
from photologue.models import Gallery
|
||||||
from photologue.views import GalleryArchiveIndexView, GalleryYearArchiveView
|
from photologue.views import GalleryArchiveIndexView, GalleryYearArchiveView
|
||||||
from taggit.models import Tag
|
from taggit.models import Tag
|
||||||
|
|
@ -96,27 +98,26 @@ class GalleryDownload(LoginRequiredMixin, DetailView):
|
||||||
|
|
||||||
|
|
||||||
class GalleryUpload(FormView):
|
class GalleryUpload(FormView):
|
||||||
|
"""
|
||||||
|
Form to upload new photos in a gallery
|
||||||
|
"""
|
||||||
form_class = UploadForm
|
form_class = UploadForm
|
||||||
template_name = "photologue/upload.html"
|
template_name = "photologue/upload.html"
|
||||||
# success_url = '...' # Replace with your URL or reverse().
|
success_url = reverse_lazy("gallery-upload")
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
|
||||||
form_class = self.get_form_class()
|
|
||||||
form = self.get_form(form_class)
|
|
||||||
files = request.FILES.getlist('file_field')
|
|
||||||
if form.is_valid():
|
|
||||||
for f in files:
|
|
||||||
print("upload", f)
|
|
||||||
return self.form_valid(form)
|
|
||||||
else:
|
|
||||||
return self.form_invalid(form)
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
"""
|
# Upload photos
|
||||||
Notify moderators about successful upload
|
# We take files from the request to support multiple upload
|
||||||
"""
|
files = self.request.FILES.getlist('file_field')
|
||||||
|
form.save(files)
|
||||||
|
|
||||||
|
# Notify user then managers
|
||||||
|
messages.success(self.request, "Photos has been successfully uploaded.")
|
||||||
|
gallery_title = form.cleaned_data['gallery'] or form.cleaned_data.get('new_gallery_title', '')
|
||||||
|
photos = ", ".join(f.name for f in files)
|
||||||
mail_managers(
|
mail_managers(
|
||||||
subject="New upload",
|
subject="New photos upload",
|
||||||
message="", # TODO: put username, gallery and photo names
|
message=f"{self.request.user.username} has uploaded in `{gallery_title}`: {photos}",
|
||||||
)
|
)
|
||||||
|
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue