From bee61bf3984868f7150e871023b318566f840df2 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 26 Apr 2017 12:05:53 +0200 Subject: [PATCH] Allow creating KnownDomains in the interface --- src/pretix/control/forms/organizer.py | 34 +++++++++++++++++++ .../pretixcontrol/organizers/edit.html | 3 ++ src/pretix/control/views/organizer.py | 6 ++++ 3 files changed, 43 insertions(+) diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index 7bb147e7e..f70ae341c 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -3,6 +3,7 @@ from django.utils.translation import ugettext_lazy as _ from pretix.base.forms import I18nModelForm from pretix.base.models import Organizer +from pretix.multidomain.models import KnownDomain class OrganizerForm(I18nModelForm): @@ -25,9 +26,42 @@ class OrganizerForm(I18nModelForm): class OrganizerUpdateForm(OrganizerForm): + def __init__(self, *args, **kwargs): + self.domain = kwargs.pop('domain', False) + kwargs.setdefault('initial', {}) + self.instance = kwargs['instance'] + if self.domain and self.instance: + initial_domain = self.instance.domains.first() + if initial_domain: + kwargs['initial'].setdefault('domain', initial_domain.domainname) + super().__init__(*args, **kwargs) self.fields['slug'].widget.attrs['readonly'] = 'readonly' + if self.domain: + self.fields['domain'] = forms.CharField( + max_length=255, + label=_('Custom domain'), + required=False, + help_text=_('You need to configure the custom domain in the webserver beforehand.') + ) def clean_slug(self): return self.instance.slug + + def save(self, commit=True): + instance = super().save(commit) + + if self.domain: + current_domain = instance.domains.first() + if self.cleaned_data['domain']: + if current_domain and current_domain.domainname != self.cleaned_data['domain']: + current_domain.delete() + KnownDomain.objects.create(organizer=instance, domainname=self.cleaned_data['domain']) + elif not current_domain: + KnownDomain.objects.create(organizer=instance, domainname=self.cleaned_data['domain']) + elif current_domain: + current_domain.delete() + instance.get_cache().clear() + + return instance diff --git a/src/pretix/control/templates/pretixcontrol/organizers/edit.html b/src/pretix/control/templates/pretixcontrol/organizers/edit.html index b2fbf12d3..05a31cff6 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/edit.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/edit.html @@ -11,6 +11,9 @@ {% trans "General information" %} {% bootstrap_field form.name layout="horizontal" %} {% bootstrap_field form.slug layout="horizontal" %} + {% if form.domain %} + {% bootstrap_field form.domain layout="horizontal" %} + {% endif %}