diff --git a/src/pretix/base/forms/user.py b/src/pretix/base/forms/user.py index b898a3cc4..c4bcb16f6 100644 --- a/src/pretix/base/forms/user.py +++ b/src/pretix/base/forms/user.py @@ -39,8 +39,7 @@ class UserSettingsForm(forms.ModelForm): class Meta: model = User fields = [ - 'givenname', - 'familyname', + 'fullname', 'locale', # 'timezone', 'email' diff --git a/src/pretix/base/migrations/0057_auto_20170107_1531.py b/src/pretix/base/migrations/0057_auto_20170107_1531.py new file mode 100644 index 000000000..49d709445 --- /dev/null +++ b/src/pretix/base/migrations/0057_auto_20170107_1531.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-01-07 15:31 +from __future__ import unicode_literals + +import django.core.validators +from django.db import migrations, models +import pretix.base.validators + + +def merge_names(apps, schema_editor): + User = apps.get_model('pretixbase', 'User') + for u in User.objects.all(): + if u.givenname: + if u.familyname: + u.fullname = u.givenname + " " + u.familyname + else: + u.fullname = u.givenname + elif u.familyname: + u.fullname = u.familyname + u.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('pretixbase', '0056_auto_20170107_1251'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='fullname', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Full name'), + ), + migrations.AlterField( + model_name='organizer', + name='slug', + field=models.SlugField(help_text='Should be short, only contain lowercase letters and numbers, and must be unique among your events. This is being used in addresses and bank transfer references.', validators=[django.core.validators.RegexValidator(message='The slug may only contain letters, numbers, dots and dashes.', regex='^[a-zA-Z0-9.-]+$'), pretix.base.validators.OrganizerSlugBlacklistValidator()], verbose_name='Short form'), + ), + migrations.RunPython(merge_names, migrations.RunPython.noop) + ] diff --git a/src/pretix/base/migrations/0058_auto_20170107_1533.py b/src/pretix/base/migrations/0058_auto_20170107_1533.py new file mode 100644 index 000000000..961c22b95 --- /dev/null +++ b/src/pretix/base/migrations/0058_auto_20170107_1533.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-01-07 15:33 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pretixbase', '0057_auto_20170107_1531'), + ] + + operations = [ + migrations.RemoveField( + model_name='user', + name='familyname', + ), + migrations.RemoveField( + model_name='user', + name='givenname', + ), + ] diff --git a/src/pretix/base/models/auth.py b/src/pretix/base/models/auth.py index 0ee8da1ab..c36c1d52c 100644 --- a/src/pretix/base/models/auth.py +++ b/src/pretix/base/models/auth.py @@ -43,10 +43,8 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin): :param email: The user's email address, used for identification. :type email: str - :param givenname: The user's given name. May be empty or null. - :type givenname: str - :param familyname: The user's given name. May be empty or null. - :type familyname: str + :param fullname: The user's full name. May be empty or null. + :type fullname: str :param is_active: Whether this user account is activated. :type is_active: bool :param is_staff: ``True`` for system operators. @@ -64,10 +62,8 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin): email = models.EmailField(unique=True, db_index=True, null=True, blank=True, verbose_name=_('E-mail')) - givenname = models.CharField(max_length=255, blank=True, null=True, - verbose_name=_('Given name')) - familyname = models.CharField(max_length=255, blank=True, null=True, - verbose_name=_('Family name')) + fullname = models.CharField(max_length=255, blank=True, null=True, + verbose_name=_('Full name')) is_active = models.BooleanField(default=True, verbose_name=_('Is active')) is_staff = models.BooleanField(default=False, @@ -100,14 +96,13 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin): """ Returns the first of the following user properties that is found to exist: - * Given name - * Family name + * Full name * Email address + + Only present for backwards compatibility """ - if self.givenname: - return self.givenname - elif self.familyname: - return self.familyname + if self.fullname: + return self.fullname else: return self.email @@ -115,20 +110,11 @@ class User(AbstractBaseUser, PermissionsMixin, LoggingMixin): """ Returns the first of the following user properties that is found to exist: - * A combination of given name and family name, depending on the locale - * Given name - * Family name - * User name + * Full name + * Email address """ - if self.givenname and not self.familyname: - return self.givenname - elif not self.givenname and self.familyname: - return self.familyname - elif self.familyname and self.givenname: - return _('%(family)s, %(given)s') % { - 'family': self.familyname, - 'given': self.givenname - } + if self.fullname: + return self.fullname else: return self.email diff --git a/src/pretix/control/templates/pretixcontrol/user/settings.html b/src/pretix/control/templates/pretixcontrol/user/settings.html index 781089e67..185ee9a0f 100644 --- a/src/pretix/control/templates/pretixcontrol/user/settings.html +++ b/src/pretix/control/templates/pretixcontrol/user/settings.html @@ -9,8 +9,7 @@ {% bootstrap_form_errors form %}
{% trans "General settings" %} - {% bootstrap_field form.givenname layout='horizontal' %} - {% bootstrap_field form.familyname layout='horizontal' %} + {% bootstrap_field form.fullname layout='horizontal' %} {% bootstrap_field form.locale layout='horizontal' %}
diff --git a/src/tests/base/test_models.py b/src/tests/base/test_models.py index ecf027673..0fddedc3a 100644 --- a/src/tests/base/test_models.py +++ b/src/tests/base/test_models.py @@ -23,22 +23,12 @@ from pretix.base.services.orders import ( class UserTestCase(TestCase): def test_name(self): u = User.objects.create_user('test@foo.bar', 'test') - u.givenname = "Christopher" - u.familyname = "Nolan" + u.fullname = "Christopher Nolan" u.set_password("test") u.save() - self.assertEqual(u.get_full_name(), 'Nolan, Christopher') - self.assertEqual(u.get_short_name(), 'Christopher') - u.givenname = None - u.save() - self.assertEqual(u.get_full_name(), 'Nolan') - self.assertEqual(u.get_short_name(), 'Nolan') - u.givenname = "Christopher" - u.familyname = None - u.save() - self.assertEqual(u.get_full_name(), 'Christopher') - self.assertEqual(u.get_short_name(), 'Christopher') - u.givenname = None + self.assertEqual(u.get_full_name(), 'Christopher Nolan') + self.assertEqual(u.get_short_name(), 'Christopher Nolan') + u.fullname = None u.save() self.assertEqual(u.get_full_name(), 'test@foo.bar') self.assertEqual(u.get_short_name(), 'test@foo.bar') diff --git a/src/tests/control/test_user.py b/src/tests/control/test_user.py index 9e914da57..97e37b5a7 100644 --- a/src/tests/control/test_user.py +++ b/src/tests/control/test_user.py @@ -26,13 +26,11 @@ class UserSettingsTest(SoupTest): def test_set_name(self): doc = self.save({ - 'givenname': 'Peter', - 'familyname': 'Miller' + 'fullname': 'Peter Miller', }) assert doc.select(".alert-success") self.user = User.objects.get(pk=self.user.pk) - assert self.user.givenname == 'Peter' - assert self.user.familyname == 'Miller' + assert self.user.fullname == 'Peter Miller' def test_change_email_require_password(self): doc = self.save({