From 684488cfe3dab653d8993b787456dc07a12607c6 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Fri, 25 Aug 2017 14:11:32 +0200
Subject: [PATCH] Hotfix: error if deadline form not valid

---
 SciPost_v1/settings/base.py                   | 10 +++++
 submissions/forms.py                          |  5 +++
 .../templates/submissions/editorial_page.html |  3 +-
 submissions/views.py                          | 39 +++++++++----------
 4 files changed, 36 insertions(+), 21 deletions(-)

diff --git a/SciPost_v1/settings/base.py b/SciPost_v1/settings/base.py
index 28b54d4d4..a1a017193 100644
--- a/SciPost_v1/settings/base.py
+++ b/SciPost_v1/settings/base.py
@@ -18,6 +18,7 @@ import json
 from django.utils.translation import ugettext_lazy as _
 
 from django.core.exceptions import ImproperlyConfigured
+from django.contrib.messages import constants as message_constants
 
 # Build paths inside the project
 BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@@ -169,6 +170,15 @@ TEMPLATES = [
 
 WSGI_APPLICATION = 'SciPost_v1.wsgi.application'
 
+# Messages
+MESSAGE_TAGS = {
+    message_constants.DEBUG: 'debug',
+    message_constants.INFO: 'info',
+    message_constants.SUCCESS: 'success',
+    message_constants.WARNING: 'warning',
+    message_constants.ERROR: 'danger',
+}
+
 
 # Database
 # https://docs.djangoproject.com/en/1.8/ref/settings/#databases
diff --git a/submissions/forms.py b/submissions/forms.py
index e6b3cd433..1cb063484 100644
--- a/submissions/forms.py
+++ b/submissions/forms.py
@@ -396,6 +396,11 @@ class ConsiderRefereeInvitationForm(forms.Form):
 class SetRefereeingDeadlineForm(forms.Form):
     deadline = forms.DateField(required=False, label='', widget=forms.SelectDateWidget)
 
+    def clean_deadline(self):
+        if not self.cleaned_data.get('deadline'):
+            self.add_error('deadline', 'Please use a valid date.')
+        return self.cleaned_data.get('deadline')
+
 
 class VotingEligibilityForm(forms.Form):
 
diff --git a/submissions/templates/submissions/editorial_page.html b/submissions/templates/submissions/editorial_page.html
index 65a024d1e..1afd0a553 100644
--- a/submissions/templates/submissions/editorial_page.html
+++ b/submissions/templates/submissions/editorial_page.html
@@ -162,7 +162,8 @@
                         <li>
                             Set refereeing deadline:
                             <form class="form-inline" action="{% url 'submissions:set_refereeing_deadline' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr %}" method="post">
-                                {% csrf_token %}{{ set_deadline_form|bootstrap_inline:'0,12' }}
+                                {% csrf_token %}
+                                {{ set_deadline_form|bootstrap_inline:'0,12' }}
                                 <div class="ml-2 form-group row">
                                     <div class="col-12">
                                         <input class="btn btn-secondary" type="submit" value="Set deadline"/>
diff --git a/submissions/views.py b/submissions/views.py
index f6addc6e6..1488164f3 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -939,26 +939,25 @@ def extend_refereeing_deadline(request, arxiv_identifier_w_vn_nr, days):
 def set_refereeing_deadline(request, arxiv_identifier_w_vn_nr):
     submission = get_object_or_404(Submission.objects.get_pool(request.user),
                                    arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
-    if request.method == 'POST':
-        form = SetRefereeingDeadlineForm(request.POST)
-        if form.is_valid():
-            submission.reporting_deadline = form.cleaned_data['deadline']
-            if form.cleaned_data['deadline'] > timezone.now().date():
-                submission.open_for_reporting = True
-                submission.open_for_commenting = True
-            submission.status = 'EICassigned'
-            submission.latest_activity = timezone.now()
-            submission.save()
-            submission.add_general_event('A new refereeing deadline is set.')
-            context = {'ack_header': 'New reporting deadline set.',
-                       'followup_message': 'Return to the ',
-                       'followup_link': reverse('submissions:editorial_page',
-                                                kwargs={'arxiv_identifier_w_vn_nr': submission.arxiv_identifier_w_vn_nr}),
-                       'followup_link_label': 'Submission\'s Editorial Page'}
-            return render(request, 'scipost/acknowledgement.html', context)
-        else:
-            errormessage = 'The set reporting deadline form was improperly filled'
-            return render(request, 'scipost/error.html', {'errormessage': errormessage})
+
+    form = SetRefereeingDeadlineForm(request.POST or None)
+    if form.is_valid():
+        submission.reporting_deadline = form.cleaned_data['deadline']
+        if form.cleaned_data['deadline'] > timezone.now().date():
+            submission.open_for_reporting = True
+            submission.open_for_commenting = True
+        submission.status = 'EICassigned'
+        submission.latest_activity = timezone.now()
+        submission.save()
+        submission.add_general_event('A new refereeing deadline is set.')
+        context = {'ack_header': 'New reporting deadline set.',
+                   'followup_message': 'Return to the ',
+                   'followup_link': reverse('submissions:editorial_page',
+                                            kwargs={'arxiv_identifier_w_vn_nr': submission.arxiv_identifier_w_vn_nr}),
+                   'followup_link_label': 'Submission\'s Editorial Page'}
+        return render(request, 'scipost/acknowledgement.html', context)
+    else:
+        messages.error(request, 'The deadline has not been set. Please try again.')
 
     return redirect(reverse('submissions:editorial_page',
                             kwargs={'arxiv_identifier_w_vn_nr': arxiv_identifier_w_vn_nr}))
-- 
GitLab