57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
|
from django import forms
|
||
|
from django.core.exceptions import ValidationError
|
||
|
from django.utils.translation import ugettext_lazy as _
|
||
|
|
||
|
from . import validators
|
||
|
from .helpers import domain_for_validation
|
||
|
from .models import Domain
|
||
|
|
||
|
|
||
|
class DomainAdminForm(forms.ModelForm):
|
||
|
def clean(self):
|
||
|
""" inherit related top domain account, when exists """
|
||
|
cleaned_data = super(DomainAdminForm, self).clean()
|
||
|
if not cleaned_data['account']:
|
||
|
domain = Domain(name=cleaned_data['name'])
|
||
|
top = domain.get_top()
|
||
|
if not top:
|
||
|
# Fake an account to make django validation happy
|
||
|
Account = self.fields['account']._queryset.model
|
||
|
cleaned_data['account'] = Account()
|
||
|
msg = _("An account should be provided for top domain names")
|
||
|
raise ValidationError(msg)
|
||
|
cleaned_data['account'] = top.account
|
||
|
return cleaned_data
|
||
|
|
||
|
|
||
|
class RecordInlineFormSet(forms.models.BaseInlineFormSet):
|
||
|
def clean(self):
|
||
|
""" Checks if everything is consistent """
|
||
|
if any(self.errors):
|
||
|
return
|
||
|
if self.instance.name:
|
||
|
records = []
|
||
|
for form in self.forms:
|
||
|
data = form.cleaned_data
|
||
|
if data and not data['DELETE']:
|
||
|
records.append(data)
|
||
|
domain = domain_for_validation(self.instance, records)
|
||
|
validators.validate_zone(domain.render_zone())
|
||
|
|
||
|
|
||
|
class DomainIterator(forms.models.ModelChoiceIterator):
|
||
|
""" Group ticket owner by superusers, ticket.group and regular users """
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
self.account = kwargs.pop('account')
|
||
|
self.domains = kwargs.pop('domains')
|
||
|
super(forms.models.ModelChoiceIterator, self).__init__(*args, **kwargs)
|
||
|
|
||
|
def __iter__(self):
|
||
|
yield ('', '---------')
|
||
|
account_domains = self.domains.filter(account=self.account)
|
||
|
account_domains = account_domains.values_list('pk', 'name')
|
||
|
yield (_("Account"), list(account_domains))
|
||
|
domains = self.domains.exclude(account=self.account)
|
||
|
domains = domains.values_list('pk', 'name')
|
||
|
yield (_("Other"), list(domains))
|