Jan Dittberner
6cebd80c89
This commit is a rough port to Django 2.1, Python 3 and a Docker based local development setup. Tests fail/error but migrations and the web frontend are already runnable. Task queue functionality is untested and translations seem to have trouble.
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
"""
|
|
This module defines form classes for website editing.
|
|
|
|
"""
|
|
from __future__ import absolute_import, unicode_literals
|
|
|
|
from django import forms
|
|
from django.urls import reverse
|
|
from django.utils.translation import ugettext as _
|
|
|
|
from crispy_forms.bootstrap import AppendedText
|
|
from crispy_forms.helper import FormHelper
|
|
from crispy_forms.layout import (
|
|
Layout,
|
|
Submit,
|
|
)
|
|
|
|
from domains.forms import relative_domain_validator
|
|
from .models import Website
|
|
|
|
|
|
class AddWebsiteForm(forms.ModelForm):
|
|
"""
|
|
This form is used to create new Website instances.
|
|
|
|
"""
|
|
class Meta:
|
|
model = Website
|
|
fields = ['subdomain', 'wildcard']
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.hosting_package = kwargs.pop('hostingpackage')
|
|
self.hosting_domain = kwargs.pop('domain')
|
|
super(AddWebsiteForm, self).__init__(*args, **kwargs)
|
|
self.fields['subdomain'].validators.append(relative_domain_validator)
|
|
if Website.objects.filter(
|
|
wildcard=True, domain=self.hosting_domain
|
|
).exists():
|
|
self.fields['wildcard'].widget = forms.HiddenInput()
|
|
|
|
self.helper = FormHelper()
|
|
self.helper.form_action = reverse(
|
|
'add_website', kwargs={
|
|
'package': self.hosting_package.id,
|
|
'domain': self.hosting_domain.domain,
|
|
}
|
|
)
|
|
self.helper.layout = Layout(
|
|
AppendedText('subdomain', '.' + self.hosting_domain.domain),
|
|
'wildcard',
|
|
Submit('submit', _('Add website')),
|
|
)
|
|
|
|
def clean_subdomain(self):
|
|
data = self.cleaned_data['subdomain']
|
|
if Website.objects.filter(
|
|
domain=self.hosting_domain, subdomain=data
|
|
).exists():
|
|
raise forms.ValidationError(
|
|
_('There is already a website for this subdomain'))
|
|
relative_domain_validator(
|
|
"{0}.{1}".format(data, self.hosting_domain.domain))
|
|
return data
|
|
|
|
def save(self, commit=True):
|
|
self.instance.domain = self.hosting_domain
|
|
self.instance.osuser = self.hosting_package.osuser
|
|
return super(AddWebsiteForm, self).save(commit)
|