From 228cef3eeec10980701078f6723effc78f7919c1 Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Mon, 19 Sep 2016 20:23:05 +0200 Subject: [PATCH] Mark invitation as responded if user registers directly (without using invitation key/link) --- scipost/forms.py | 5 +++++ scipost/utils.py | 37 ++----------------------------------- scipost/views.py | 19 ++++++++++++++++--- 3 files changed, 23 insertions(+), 38 deletions(-) diff --git a/scipost/forms.py b/scipost/forms.py index 8631c56f8..0eb7cdc73 100644 --- a/scipost/forms.py +++ b/scipost/forms.py @@ -12,6 +12,8 @@ from crispy_forms.layout import Layout, Div, Field, Fieldset, HTML, Submit from .models import * +from submissions.models import SUBMISSION_STATUS_PUBLICLY_UNLISTED +from submissions.models import Submission REGISTRATION_REFUSAL_CHOICES = ( @@ -60,6 +62,9 @@ class RegistrationInvitationForm(forms.ModelForm): super(RegistrationInvitationForm, self).__init__(*args, **kwargs) self.fields['personal_message'].widget.attrs.update( {'placeholder': 'NOTE: a personal phrase or two. The bulk of the text will be auto-generated.'}) + self.fields['cited_in_submission'] = forms.ModelChoiceField( + queryset=Submission.objects.all().exclude( + status__in=SUBMISSION_STATUS_PUBLICLY_UNLISTED).order_by('-submission_date')) self.helper = FormHelper() self.helper.layout = Layout( Div( diff --git a/scipost/utils.py b/scipost/utils.py index 06f1ddf1a..80c880591 100644 --- a/scipost/utils.py +++ b/scipost/utils.py @@ -12,39 +12,6 @@ from .models import * EMAIL_FOOTER = ( '{% load staticfiles %}' - # '<ul style="background-color: #f0f0f0; color: #002B49; list-style-type: none; padding: 5px 5px;">' - # '<li style="display: inline; margin: 0px; padding: 0px;">' - # '<a href="https://scipost.org">' - # '<img src="{% static \'scipost/images/logo_scipost_with_bgd_small.png\' %}" width="64px" ' - # 'style="margin: 0px; padding: 0px;"></a></li>' - # '<li style="display: inline; margin: 3px; padding: 3px;">' - # '<a href="https://scipost.org/journals/" style="padding: 3px;">Journals</a></li>' - # '<li style="display: inline; margin: 3px; padding: 3px;">' - # '<a href="https://scipost.org/submissions/" style="padding: 3px;">Submissions</a></li>' - # '<li style="display: inline; margin: 3px; padding: 3px;">' - # '<a href="https://scipost.org/commentaries/" style="padding: 3px;">Commentaries</a></li>' - # '<li style="display: inline; margin: 3px; padding: 3px;">' - # '<a href="https://scipost.org/theses/" style="padding: 3px;">Theses</a></li>' - # '<li style="display: inline; margin: 3px; padding: 3px;">' - # '<a href="https://scipost.org/login/" style="padding: 3px;">Login</a></li>' - # '</ul>' - # '<ul style="background-color: #f0f0f0; color: #002B49; list-style-type: none; ' - # 'display: flex; align-items: center;">' - # '<li style="display: inline-block; margin: 0px; padding: 0px;">' - # '<a href="https://scipost.org">' - # '<img src="{% static \'scipost/images/logo_scipost_with_bgd_small.png\' %}" width="64px" ' - # 'style="margin: 0px; padding: 0px;"></a></li>' - # '<li style="display: inline-block; padding: 8px;">' - # '<a href="https://scipost.org/journals/">Journals</a></li>' - # '<li style="display: inline-block; padding: 8px;">' - # '<a href="https://scipost.org/submissions/">Submissions</a></li>' - # '<li style="display: inline-block; padding: 8px;">' - # '<a href="https://scipost.org/commentaries/">Commentaries</a></li>' - # '<li style="display: inline-block; padding: 8px;">' - # '<a href="https://scipost.org/theses/">Theses</a></li>' - # '<li style="display: inline-block; padding: 8px;">' - # '<a href="https://scipost.org/login/">Login</a></li>' - # '</ul>' '<a href="https://scipost.org"><img src="{% static ' '\'scipost/images/logo_scipost_with_bgd_small.png\' %}" width="64px"></a><br/>' '<div style="background-color: #f0f0f0; color: #002B49; align-items: center;">' @@ -186,7 +153,7 @@ class Utils(object): invitationsalt = invitationsalt.encode('utf8') cls.invitation.invitation_key = hashlib.sha1(salt+invitationsalt).hexdigest() cls.invitation.key_expires = datetime.datetime.strftime( - datetime.datetime.now() + datetime.timedelta(days=14), "%Y-%m-%d %H:%M:%S") + datetime.datetime.now() + datetime.timedelta(days=365), "%Y-%m-%d %H:%M:%S") cls.invitation.save() email_text = '' if cls.invitation.invitation_type == 'F': @@ -215,7 +182,7 @@ class Utils(object): 'contents, for example by offering submissions, reports and comments.' '\n\nFor your convenience, I have prepared a partly pre-filled registration ' 'form at https://scipost.org/invitation/' + cls.invitation.invitation_key - + ' (valid for two weeks; you can thereafter still register at ' + + ' (valid for up to a year; you can thereafter still register at ' 'https://scipost.org/register).\n\n' 'If you do develop sympathy for the initiative, besides participating in the ' 'online platform, I would be very grateful if you considered submitting a ' diff --git a/scipost/views.py b/scipost/views.py index d3584954f..e07fd36a5 100644 --- a/scipost/views.py +++ b/scipost/views.py @@ -11,7 +11,7 @@ from django.contrib.auth.decorators import login_required #from django.contrib.auth.decorators import permission_required # Superseded by guardian from django.contrib.auth.models import User, Group, Permission from django.contrib.auth.views import password_reset, password_reset_confirm -from django.core.exceptions import PermissionDenied +from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist, PermissionDenied from django.core import mail from django.core.mail import EmailMessage, EmailMultiAlternatives from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger @@ -222,7 +222,19 @@ def register(request): {'form': form, 'errormessage': 'This email address is already in use'}) Utils.create_and_save_contributor('') Utils.send_registration_email() - #return HttpResponseRedirect(reverse('scipost:thanks_for_registering')) + # If this email was associated to an invitation, mark it as responded to + try: + invitation = RegistrationInvitation.objects.get( + email=form.cleaned_data['email']) + invitation.responded = True + invitation.save() + except ObjectDoesNotExist: + pass + except MultipleObjectsReturned: + # Delete the first invitation + invitation_to_delete = RegistrationInvitation.objects.filter( + email=form.cleaned_data['email']).first() + invitation_to_delete.delete() context = {'ack_header': 'Thanks for registering to SciPost.', 'ack_message': ('You will receive an email with a link to verify ' 'your email address. Please visit this link within 48 hours. ' @@ -242,7 +254,8 @@ def invitation(request, key): """ Register, by invitation """ invitation = get_object_or_404(RegistrationInvitation, invitation_key=key) if invitation.responded: - errormessage = 'This invitation token has already been used.' + errormessage = ('This invitation token has already been used, ' + 'or this email address is already associated to a registration.') elif timezone.now() > invitation.key_expires: errormessage = 'The invitation key has expired.' elif request.method == 'POST': -- GitLab