Imporved mailbox custom filtering management
This commit is contained in:
parent
ebd5ff03ce
commit
e388346f9a
|
@ -174,6 +174,15 @@ class MailboxAdmin(ChangePasswordAdminMixin, SelectAccountAdminMixin, ExtendedMo
|
||||||
|
|
||||||
def save_model(self, request, obj, form, change):
|
def save_model(self, request, obj, form, change):
|
||||||
""" save hacky mailbox.addresses and local domain clashing """
|
""" save hacky mailbox.addresses and local domain clashing """
|
||||||
|
if obj.filtering != obj.CUSTOM:
|
||||||
|
msg = _("You have provided a custom filtering but filtering "
|
||||||
|
"selected option is %s") % obj.get_filtering_display()
|
||||||
|
if change:
|
||||||
|
old = Mailbox.objects.get(pk=obj.pk)
|
||||||
|
if old.custom_filtering != obj.custom_filtering:
|
||||||
|
messages.warning(request, msg)
|
||||||
|
elif obj.custom_filtering:
|
||||||
|
messages.warning(request, msg)
|
||||||
super(MailboxAdmin, self).save_model(request, obj, form, change)
|
super(MailboxAdmin, self).save_model(request, obj, form, change)
|
||||||
obj.addresses = form.cleaned_data['addresses']
|
obj.addresses = form.cleaned_data['addresses']
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ class MailboxForm(forms.ModelForm):
|
||||||
""" hacky form for adding reverse M2M form field for Mailbox.addresses """
|
""" hacky form for adding reverse M2M form field for Mailbox.addresses """
|
||||||
# TODO keep track of this ticket for future reimplementation
|
# TODO keep track of this ticket for future reimplementation
|
||||||
# https://code.djangoproject.com/ticket/897
|
# https://code.djangoproject.com/ticket/897
|
||||||
addresses = forms.ModelMultipleChoiceField(queryset=Address.objects.select_related('domain'),
|
addresses = forms.ModelMultipleChoiceField(required=False,
|
||||||
required=False,
|
queryset=Address.objects.select_related('domain'),
|
||||||
widget=widgets.FilteredSelectMultiple(verbose_name=_('addresses'), is_stacked=False))
|
widget=widgets.FilteredSelectMultiple(verbose_name=_('addresses'), is_stacked=False))
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
@ -30,16 +30,17 @@ class MailboxForm(forms.ModelForm):
|
||||||
self.fields['addresses'].widget = widgets.RelatedFieldWidgetWrapper(widget, field,
|
self.fields['addresses'].widget = widgets.RelatedFieldWidgetWrapper(widget, field,
|
||||||
self.modeladmin.admin_site, can_add_related=True)
|
self.modeladmin.admin_site, can_add_related=True)
|
||||||
|
|
||||||
|
account = self.modeladmin.account
|
||||||
# Filter related addresses by account
|
# Filter related addresses by account
|
||||||
old_render = self.fields['addresses'].widget.render
|
old_render = self.fields['addresses'].widget.render
|
||||||
def render(*args, **kwargs):
|
def render(*args, **kwargs):
|
||||||
output = old_render(*args, **kwargs)
|
output = old_render(*args, **kwargs)
|
||||||
args = 'account=%i' % self.modeladmin.account.pk
|
args = 'account=%i' % account.pk
|
||||||
output = output.replace('/add/?', '/add/?%s&' % args)
|
output = output.replace('/add/?', '/add/?%s&' % args)
|
||||||
return mark_safe(output)
|
return mark_safe(output)
|
||||||
self.fields['addresses'].widget.render = render
|
self.fields['addresses'].widget.render = render
|
||||||
queryset = self.fields['addresses'].queryset
|
queryset = self.fields['addresses'].queryset
|
||||||
realted_addresses = queryset.filter(account_id=self.modeladmin.account.pk).order_by('name')
|
realted_addresses = queryset.filter(account_id=account.pk).order_by('name')
|
||||||
self.fields['addresses'].queryset = realted_addresses
|
self.fields['addresses'].queryset = realted_addresses
|
||||||
|
|
||||||
if self.instance and self.instance.pk:
|
if self.instance and self.instance.pk:
|
||||||
|
|
|
@ -60,9 +60,7 @@ class Mailbox(models.Model):
|
||||||
return os.path.normpath(settings.MAILBOXES_HOME % context)
|
return os.path.normpath(settings.MAILBOXES_HOME % context)
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
if self.custom_filtering and self.filtering != self.CUSTOM:
|
if self.filtering == self.CUSTOM and not self.custom_filtering:
|
||||||
self.custom_filtering = ''
|
|
||||||
elif self.filtering == self.CUSTOM and not self.custom_filtering:
|
|
||||||
raise ValidationError({
|
raise ValidationError({
|
||||||
'custom_filtering': _("Custom filtering is selected but not provided.")
|
'custom_filtering': _("Custom filtering is selected but not provided.")
|
||||||
})
|
})
|
||||||
|
@ -70,6 +68,7 @@ class Mailbox(models.Model):
|
||||||
def get_filtering(self):
|
def get_filtering(self):
|
||||||
name, content = settings.MAILBOXES_MAILBOX_FILTERINGS[self.filtering]
|
name, content = settings.MAILBOXES_MAILBOX_FILTERINGS[self.filtering]
|
||||||
if callable(content):
|
if callable(content):
|
||||||
|
# Custom filtering
|
||||||
content = content(self)
|
content = content(self)
|
||||||
return (name, content)
|
return (name, content)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue