Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 2.2.28 on 2022-08-20 11:27

from django.db import migrations
import phonenumber_field.modelfields


class Migration(migrations.Migration):

dependencies = [
('petition', '0015_petitiontemplate_has_share_buttons'),
]

operations = [
migrations.AlterField(
model_name='signature',
name='phone',
field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=20, region=None, verbose_name='Phone number'),
),
]
5 changes: 3 additions & 2 deletions pytition/petition/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

from tinymce import models as tinymce_models
from colorfield.fields import ColorField
from phonenumber_field.modelfields import PhoneNumberField

from .helpers import sanitize_html

Expand Down Expand Up @@ -438,7 +439,7 @@ def moderate(self, do_moderate=True):
class Signature(models.Model):
first_name = models.CharField(max_length=50, verbose_name=ugettext_lazy("First name"))
last_name = models.CharField(max_length=50, verbose_name=ugettext_lazy("Last name"))
phone = models.CharField(max_length=20, blank=True, verbose_name=ugettext_lazy("Phone number"))
phone = PhoneNumberField(max_length=20, blank=True, verbose_name=ugettext_lazy("Phone number"))
email = models.EmailField(verbose_name=ugettext_lazy("Email address"))
confirmation_hash = models.CharField(max_length=128)
confirmed = models.BooleanField(default=False, verbose_name=ugettext_lazy("Confirmed"))
Expand Down Expand Up @@ -657,4 +658,4 @@ class ModerationReason(models.Model):

class Moderation(models.Model):
petition = models.ForeignKey(Petition, on_delete=models.CASCADE)
reason = models.ForeignKey(ModerationReason, blank=True, null=True, on_delete=models.SET_NULL)
reason = models.ForeignKey(ModerationReason, blank=True, null=True, on_delete=models.SET_NULL)
17 changes: 17 additions & 0 deletions pytition/petition/tests/tests_CreateSignatureView.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def test_CreateSignaturePOSTOk(self):
'first_name': 'Alan',
'last_name': 'John',
'email': '[email protected]',
'phone': '0605040302',
'subscribed_to_mailinglist': False,
}
petition = Petition.objects.filter(published=True).first()
Expand All @@ -26,10 +27,26 @@ def test_CreateSignaturePOSTOk(self):
signature = Signature.objects.filter(petition=petition).first()
self.assertEqual(signature.confirmed, False)
self.assertEqual(signature.email, '[email protected]')
self.assertEqual(signature.phone, '+33605040302')
self.assertEqual(signature.first_name, 'Alan')
self.assertEqual(signature.last_name, 'John')
self.assertEqual(signature.subscribed_to_mailinglist, False)

def test_CreateSignaturePOSTNok(self):
data = {
'first_name': 'Alan',
'last_name': '',
'email': 'wrong-mail.org',
'phone': '060504030201',
}
petition = Petition.objects.filter(published=True).first()
response = self.client.post(reverse('create_signature', args=[petition.id]), data)
self.assertEqual(Signature.objects.count(), 0)
self.assertTemplateUsed(response, 'petition/petition_detail.html')
self.assertContains(response, 'This field is required')
self.assertContains(response, 'Enter a valid phone number')
self.assertContains(response, 'Enter a valid email address')

def test_CreateSignatureGETOk(self):
petition = Petition.objects.filter(published=True).first()
response = self.client.get(reverse('create_signature', args=[petition.id]), follow=True)
Expand Down
6 changes: 6 additions & 0 deletions pytition/pytition/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
'django.contrib.staticfiles',
'widget_tweaks',
'formtools',
'phonenumber_field',
]

MIDDLEWARE = [
Expand Down Expand Up @@ -275,3 +276,8 @@
MAINTENANCE_MODE_IGNORE_ADMIN_SITE = True
# Following setting prevents error 500, due to issue #76 of django_maintenance_mode
MAINTENANCE_MODE_STATE_FILE_PATH = os.path.join(BASE_DIR, 'maintenance_mode_state.txt')

# Set default region to France with regard to accepting phone numbers without international prefix.
# The +33 prefix for France is therefore optional, but it might be mandatory to add a prefix for
# other countries. This does not change anything for translations.
PHONENUMBER_DEFAULT_REGION = "FR"
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ django-colorfield==0.1.15
django-tinymce==2.8.0
django-mailer==1.2.6
django-maintenance-mode
django-phonenumber-field[phonenumbers]==6.3.0
requests~=2.20.0
mysqlclient==2.0.1
django-widget-tweaks==1.4.3
Expand Down