From 08543e5348b0b5ee9aa9ae02a623282c70316660 Mon Sep 17 00:00:00 2001 From: tonio Date: Fri, 21 May 2010 18:55:32 +0200 Subject: [PATCH] Partial implementation of ticket #40 (modifying an alias is not working yet) --- admin/forms.py | 6 ++--- admin/models.py | 6 ++--- admin/urls.py | 2 +- admin/views.py | 29 +++++++++++-------------- extensions/webmail/templates/index.html | 2 +- templates/admin/aliases.html | 8 +++++-- templates/admin/editalias.html | 2 +- templates/admin/mailboxes.html | 2 +- templates/admin/newalias.html | 2 +- 9 files changed, 30 insertions(+), 29 deletions(-) diff --git a/admin/forms.py b/admin/forms.py index 3d7e03f57..75e6b604d 100644 --- a/admin/forms.py +++ b/admin/forms.py @@ -45,13 +45,13 @@ class AliasForm(forms.ModelForm): del kwargs["domain"] super(AliasForm, self).__init__(*args, **kwargs) self.fields['address'].widget.attrs['size'] = 14 - self.fields['mbox'].widget.attrs['size'] = 5 + self.fields['mboxes'].widget.attrs['size'] = 5 if domain: - self.fields['mbox'].queryset = Mailbox.objects.filter(domain=domain.id) + self.fields['mboxes'].queryset = Mailbox.objects.filter(domain=domain.id) class Meta: model = Alias - fields = ('address', 'mbox', 'enabled') + fields = ('address', 'mboxes', 'enabled') class PermissionForm(forms.Form): domain = forms.ModelChoiceField(queryset=Domain.objects.all(), label=_("Domain"), diff --git a/admin/models.py b/admin/models.py index 50dc8c140..2e381e7a7 100644 --- a/admin/models.py +++ b/admin/models.py @@ -38,7 +38,7 @@ class Domain(models.Model): class Mailbox(models.Model): name = models.CharField(_('name'), max_length=100, help_text=_("First name and last name of mailbox owner")) - address = models.CharField(_('address'), max_length=10, + address = models.CharField(_('address'), max_length=100, help_text=_("Mailbox address (without the @domain.tld part)")) full_address = models.CharField(max_length=150) password = models.CharField(_('password'), max_length=100) @@ -102,8 +102,8 @@ class Alias(models.Model): address = models.CharField(_('address'), max_length=100, help_text=_("The alias address (without the domain part)")) full_address = models.CharField(max_length=150) - mbox = models.ForeignKey(Mailbox, verbose_name=_('mailbox'), - help_text=_("The mailbox this alias points to")) + mboxes = models.ManyToManyField(Mailbox, verbose_name=_('mailboxes'), + help_text=_("The mailboxes this alias points to")) enabled = models.BooleanField(_('enabled'), help_text=_("Check to activate this alias")) diff --git a/admin/urls.py b/admin/urls.py index 2736b07d9..8855e8f0d 100644 --- a/admin/urls.py +++ b/admin/urls.py @@ -9,7 +9,7 @@ urlpatterns = patterns('mailng.admin.views', (r'^domains/(?P\d+)/newmailbox/$', 'newmailbox'), (r'^domains/(?P\d+)/editmailbox/(?P\d+)/$', 'editmailbox'), (r'^domains/(?P\d+)/deletemailbox/(?P\d+)/$', 'delmailbox'), - (r'^domains/(?P\d+)/newalias/(?P\d+)/$', 'newalias'), + (r'^domains/(?P\d+)/newalias/$', 'newalias'), (r'^domains/(?P\d+)/editalias/(?P\d+)/$', 'editalias'), (r'^domains/(?P\d+)/$', 'mailboxes'), (r'^domains/(?P\d+)/raw/$', 'mailboxes_raw'), diff --git a/admin/views.py b/admin/views.py index c4b93c134..2138019fc 100644 --- a/admin/views.py +++ b/admin/views.py @@ -275,12 +275,9 @@ def delmailbox(request, dom_id, mbox_id=None): def aliases(request, dom_id=None, mbox_id=None): domain = Domain.objects.get(pk=dom_id) if not mbox_id: - mboxes = Mailbox.objects.filter(domain=dom_id) - aliases = [] - for mb in mboxes: - aliases += Alias.objects.filter(mbox=mb.id) + aliases = Alias.objects.filter(mboxes__domain__id=dom_id).distinct() else: - aliases = Alias.objects.filter(mbox=mbox_id) + aliases = Alias.objects.filter(mboxes__id=mbox_id) return _render(request, 'admin/aliases.html', { "aliases" : aliases, "domain" : domain }) @@ -288,30 +285,30 @@ def aliases(request, dom_id=None, mbox_id=None): @login_required @good_domain @permission_required("admin.add_alias") -def newalias(request, dom_id, mbox_id): - mbox = Mailbox.objects.get(pk=mbox_id) +def newalias(request, dom_id): if request.method == "POST": form = AliasForm(request.POST) error = None if form.is_valid(): - if Alias.objects.filter(address=request.POST["address"], - mbox=mbox_id): - error = _("Alias with this address already exists") + if Alias.objects.filter(address=request.POST["address"]): + error = _("Alias with this name already exists") else: + domain = Domain.objects.get(pk=dom_id) alias = form.save(commit=False) - alias.full_address = "%s@%s" % (alias.address, mbox.domain.name) + alias.full_address = "%s@%s" % (alias.address, domain.name) alias.save() - ctx = _ctx_ok(reverse(admin.views.aliases, args=[mbox.domain.id])) + form.save_m2m() + ctx = _ctx_ok(reverse(admin.views.aliases, args=[dom_id])) return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") ctx = _ctx_ko("admin/newalias.html", { - "mbox" : mbox, "form" : form, "error" : error + "domain" : dom_id, "form" : form, "error" : error }) return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") - form = AliasForm({"mbox" : mbox_id}, domain=mbox.domain) + form = AliasForm() return render_to_response('admin/newalias.html', { - "mbox" : mbox, "form" : form, "noerrors" : True + "domain" : dom_id, "form" : form, "noerrors" : True }) @login_required @@ -341,7 +338,7 @@ def editalias(request, dom_id, alias_id): return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") form = AliasForm(instance=alias) return _render(request, 'admin/editalias.html', { - "form" : form, "alias" : alias + "form" : form, "alias" : alias, "domain" : dom_id }) @login_required diff --git a/extensions/webmail/templates/index.html b/extensions/webmail/templates/index.html index 61221268e..44d89e185 100644 --- a/extensions/webmail/templates/index.html +++ b/extensions/webmail/templates/index.html @@ -330,7 +330,7 @@ ul.visible { selectedRows.each(function(item, index) { msgset.include(item.get("id")); }); - {% url extensions.webmail.main.move as moveurl %} + {% url extensions.webmail.views.move as moveurl %} new Request.JSON({url: "{{ moveurl }}", onSuccess: get_callback("folder")} ).get({msgset : msgset.join(), to : dest}); diff --git a/templates/admin/aliases.html b/templates/admin/aliases.html index 8d13ac2f7..36701a7a8 100644 --- a/templates/admin/aliases.html +++ b/templates/admin/aliases.html @@ -28,8 +28,12 @@ - {{ alias.address }}@{{ alias.mbox.domain.name }} - {{ alias.mbox.address }}@{{ alias.mbox.domain.name }} + {{ alias.full_address }} + + {% for mb in alias.mboxes.all %} + {{ mb.full_address }}
+ {% endfor %} + {{ alias.enabled|yesno }} {% endfor %} diff --git a/templates/admin/editalias.html b/templates/admin/editalias.html index 4393fd8fc..2739ae090 100644 --- a/templates/admin/editalias.html +++ b/templates/admin/editalias.html @@ -6,7 +6,7 @@ {% load i18n %}

Alias {{ alias.address }}

{% if error %}
{{ error }}
{% endif %} -{% url admin.views.editalias alias.mbox.domain.id alias.id as edit_url %} +{% url admin.views.editalias domain alias.id as edit_url %}
{% include "common/genericform.html" %}
diff --git a/templates/admin/mailboxes.html b/templates/admin/mailboxes.html index f0c49ee7c..ff348cd1d 100644 --- a/templates/admin/mailboxes.html +++ b/templates/admin/mailboxes.html @@ -30,7 +30,7 @@ - {% url admin.views.newalias domain.id mb.id as alias_url %} + {% url admin.views.newalias domain.id as alias_url %} diff --git a/templates/admin/newalias.html b/templates/admin/newalias.html index 834529f4a..3375e38b2 100644 --- a/templates/admin/newalias.html +++ b/templates/admin/newalias.html @@ -6,7 +6,7 @@ {% block content %}

{% trans "New alias" %}

{% if error %}
{{ error }}
{% endif %} -{% url admin.views.newalias mbox.domain_id mbox.id as box_url %} +{% url admin.views.newalias domain as box_url %} {% include "common/genericform.html" %}