SciPost Code Repository

Skip to content
Snippets Groups Projects
forms.py 1.5 KiB
Newer Older
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
from django import forms

from .models import PetitionSignatory

from scipost.models import Contributor

Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

class SignPetitionForm(forms.ModelForm):
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
    class Meta:
        model = PetitionSignatory
Jorran de Wit's avatar
Jorran de Wit committed
        fields = ['title', 'first_name', 'last_name',
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
                  'email', 'country_of_employment', 'affiliation']
Jorran de Wit's avatar
Jorran de Wit committed
    def __init__(self, *args, **kwargs):
        self.petition = kwargs.pop('petition', False)
        self.current_user = kwargs.pop('current_user', False)
        super().__init__(*args, **kwargs)

    def clean_email(self):
        email = self.cleaned_data['email']
Jorran de Wit's avatar
Jorran de Wit committed
        petition = self.petition
        if not petition:
            return email

        if self.instance.id:
            return email

        if self.current_user.is_authenticated:
Jorran de Wit's avatar
Jorran de Wit committed
            if self.current_user.email != email:
                self.add_error('email', 'This email address is not associated to your account')
        else:
            if Contributor.objects.filter(user__email=email).exists():
                self.add_error('email', ('This email address is associated to a Contributor; please '
                                         'login to sign the petition'))
        if PetitionSignatory.objects.filter(petition=petition, email=email).exists():
            self.add_error('email', ('This email address is already associated to a '
                                     'signature for this petition'))
Jorran de Wit's avatar
Jorran de Wit committed

        return email