diff --git a/documents/forms.py b/documents/forms.py index 370f21c8..75dbb3e1 100644 --- a/documents/forms.py +++ b/documents/forms.py @@ -52,7 +52,18 @@ class UploadFileForm(DocumentForm): class BulkFilesForm(forms.Form): - url = forms.URLField() + url = forms.URLField( + widget=forms.URLInput( + attrs={ + "class": "form-control", + "placeholder": "https://...", + "id": "url", + } + ), + error_messages={ + "invalid": "Le lien fourni n'est pas valide. Entre une URL complète (ex: https://...)." + }, + ) class ReUploadForm(forms.Form): diff --git a/documents/templates/documents/document_upload.html b/documents/templates/documents/document_upload.html index de61994c..13969a71 100644 --- a/documents/templates/documents/document_upload.html +++ b/documents/templates/documents/document_upload.html @@ -193,8 +193,18 @@
- {% csrf_token %} + method="post" + novalidate> {% csrf_token %} + + {% if bulk_form.url.errors %} + + {% endif %}
-
+
+ {{ bulk_form.url }} +
- Si ton lien contient un dossier séparé par cours, les fichiers seront automatiquement ajoutés dans le - bon cours. + Si ton lien contient un dossier séparé par cours, les fichiers seront automatiquement ajoutés dans le bon cours.
diff --git a/documents/views.py b/documents/views.py index aa411bc4..74fba9e6 100644 --- a/documents/views.py +++ b/documents/views.py @@ -68,6 +68,7 @@ def upload_file(request, slug): form = UploadFileForm() multiform = MultipleUploadFileForm() + bulk_form = BulkFilesForm() return render( request, @@ -75,6 +76,7 @@ def upload_file(request, slug): { "form": form, "multiform": multiform, + "bulk_form": bulk_form, "course": course, }, ) @@ -305,18 +307,59 @@ def submit_bulk(request, slug): form = BulkFilesForm(request.POST) if form.is_valid(): - BulkDocuments.objects.create( - url=form.cleaned_data["url"], course=course, user=request.user + url = form.cleaned_data["url"] + + # Verify Duplicate Submission URL + if BulkDocuments.objects.filter( + url=url, course=course, processed=False + ).exists(): + form.add_error( + "url", + "Ce lien a déjà été soumis pour ce cours et est en attente de traitement.", + ) + return render( + request, + "documents/document_upload.html", + { + "course": course, + "form": UploadFileForm(), + "multiform": MultipleUploadFileForm(), + "bulk_form": form, + }, + # status=422 mandatory for Turbo: forces the display of validation errors (Turbo ignores 200 codes) + status=422, + ) + + # Succes submit URL + BulkDocuments.objects.create(url=url, course=course, user=request.user) + success_url = ( + reverse("document_submit_bulk", args=[course.slug]) + "?success=true" ) + return HttpResponseRedirect(success_url) + else: + # Bad URL submit return render( request, - "documents/document_bulk.html", + "documents/document_upload.html", { "course": course, + "form": UploadFileForm(), + "multiform": MultipleUploadFileForm(), + "bulk_form": form, }, + status=422, ) + if "success" in request.GET: + return render( + request, + "documents/document_bulk.html", + { + "course": course, + }, + ) + return HttpResponseRedirect(reverse("document_put", args=[course.slug]))