diff --git a/admin/forms.py b/admin/forms.py index 770d90b38..5865bc9be 100644 --- a/admin/forms.py +++ b/admin/forms.py @@ -1,5 +1,5 @@ from django import forms -from modoboa.admin.models import Domain, Mailbox, Alias +from modoboa.admin.models import * from django.utils.translation import ugettext as _ from django.contrib.auth.models import User from modoboa.admin.templatetags.admin_extras import gender @@ -14,6 +14,11 @@ class DomainForm(forms.ModelForm): for f in ['name', 'quota']: self.fields[f].widget.attrs['size'] = 14 +class DomainAliasForm(forms.ModelForm): + class Meta: + model = DomainAlias + fields = ('name', 'target', 'enabled') + class MailboxForm(forms.ModelForm): quota = forms.IntegerField(label=_("Quota"), required=False, help_text=_("Mailbox quota in MB (default to domain quota if blank)")) diff --git a/admin/models.py b/admin/models.py index c57dcaddf..0f184f692 100644 --- a/admin/models.py +++ b/admin/models.py @@ -36,6 +36,14 @@ class Domain(models.Model): def __str__(self): return self.name +class DomainAlias(models.Model): + name = models.CharField(_("name"), max_length=100, unique=True, + help_text=_("The alias name")) + target = models.ForeignKey(Domain, verbose_name=_('target'), + help_text=_("The domain this alias points to")) + enabled = models.BooleanField(_('enabled'), + help_text=_("Check to activate this alias")) + class Mailbox(models.Model): name = models.CharField(_('name'), max_length=100, help_text=_("First name and last name of mailbox owner")) diff --git a/admin/templatetags/admin_extras.py b/admin/templatetags/admin_extras.py index 33b8c912b..6b4710905 100644 --- a/admin/templatetags/admin_extras.py +++ b/admin/templatetags/admin_extras.py @@ -120,7 +120,11 @@ def domains_menu(selection, user): {"name" : "domains", "url" : reverse(admin.views.domains), "label" : _("Domains"), - "img" : static_url("pics/domains.png")} + "img" : static_url("pics/domains.png")}, + {"name" : "domaliases", + "url" : reverse(admin.views.domaliases), + "label" : _("Domain aliases"), + "img" : static_url("pics/alias.png")} ] entries += events.raiseQueryEvent("AdminMenuDisplay", target="admin_menu_box", user=user) diff --git a/admin/urls.py b/admin/urls.py index 7c19e5ee3..ada055539 100644 --- a/admin/urls.py +++ b/admin/urls.py @@ -6,6 +6,10 @@ urlpatterns = patterns('modoboa.admin.views', (r'^domains/new/', 'newdomain'), (r'^domains/(?P\d+)/edit/$', 'editdomain'), (r'^domains/(?P\d+)/delete/$', 'deldomain'), + + (r'^aliases/$', "domaliases"), + (r'^aliases/new/(?P\d+)/', 'newdomalias'), + (r'^domains/(?P\d+)/newmailbox/$', 'newmailbox'), (r'^domains/(?P\d+)/editmailbox/(?P\d+)/$', 'editmailbox'), (r'^domains/(?P\d+)/deletemailbox/(?P\d+)/$', 'delmailbox'), diff --git a/admin/views.py b/admin/views.py index 6741b16f0..1bf7def11 100644 --- a/admin/views.py +++ b/admin/views.py @@ -53,6 +53,39 @@ def domains(request): "domains" : domains, "counters" : counters }) +@login_required +def domaliases(request, dom_id=None): + domaliases = DomainAlias.objects.all() + return _render(request, 'admin/domaliases.html', { + "domaliases" : domaliases + }) + +@login_required +def newdomalias(request, dom_id): + domain = Domain.objects.get(pk=dom_id) + if request.method == "POST": + form = DomainAliasForm(request.POST) + error = None + if form.is_valid(): + if DomainAlias.objects.filter(name=request.POST["name"]): + error = _("Alias with this name already exists") + else: + domalias = form.save(commit=False) + domalias.save() + ctx = _ctx_ok(reverse(admin.views.domaliases)) + messages.info(request, _("Domain alias created"), fail_silently=True) + return HttpResponse(simplejson.dumps(ctx), + mimetype="application/json") + content = _render_to_string(request, "admin/newdomalias.html", { + "form" : form, "error" : error + }) + ctx = getctx("ko", content=content) + return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") + form = DomainAliasForm() + return _render(request, 'admin/newdomalias.html', { + "form" : form + }) + @login_required @permission_required("admin.add_domain") def newdomain(request): diff --git a/static/js/form.js b/static/js/form.js index 211f31cec..0c1ef26b8 100644 --- a/static/js/form.js +++ b/static/js/form.js @@ -30,6 +30,9 @@ window.addEvent("domready", function() { domain_submit = function(event) { generic_submit(this, event, "domform", domain_submit); }; + domalias_submit = function(event) { + generic_submit(this, event, "domaliasform", domalias_submit); + }; mailbox_submit = function(event) { generic_submit(this, event, "mboxform", mailbox_submit); }; @@ -60,6 +63,9 @@ window.addEvent("domready", function() { if ($("domform")) $("domform").addEvent("submit", domain_submit); + if ($("domaliasform")) + $("domaliasform").addEvent("submit", domalias_submit); + if ($("mboxform")) $("mboxform").addEvent("submit", mailbox_submit); diff --git a/templates/admin/domains.html b/templates/admin/domains.html index 2d8c3ccbd..edd9e56cc 100644 --- a/templates/admin/domains.html +++ b/templates/admin/domains.html @@ -16,12 +16,11 @@ {% display_messages messages %} {% endif %}
- {% if not domains %} - {% trans "No domain defined." %} + {% if not domains %}
{% trans "No domain defined." %}
{% else %} - + @@ -39,6 +38,11 @@ + {% url admin.views.newdomalias dom.id as new_url %} + + + {% url admin.views.mailboxes dom.id as domurl %} diff --git a/templates/admin/domaliases.html b/templates/admin/domaliases.html new file mode 100644 index 000000000..53b47326a --- /dev/null +++ b/templates/admin/domaliases.html @@ -0,0 +1,34 @@ +{% extends "nlayout.html" %} +{% load i18n admin_extras libextras %} +{% block html_head %} + + +{% endblock %} +{% block middletitle %}{% trans "Available aliases" %}{% endblock %} +{% block menu %}{% domains_menu "domaliases" user %}{% endblock %} +{% block content %} +{% if messages %}{% display_messages messages %}{% endif %} +
+ {% if not domaliases %} +
{% trans "No domain alias defined." %}
+ {% else %} +
{% trans "Actions" %}{% trans "Actions" %} {% trans "Name" %} {% trans "Mailboxes" %} {% trans "Quota" %} {{ dom.name }}
+ + + + + + + {% for domalias in domaliases %} + + + + + + + {% endfor %} +
{% trans "Actions" %}{% trans "Name" %}{% trans "Targeted domain" %}{% trans "Enabled" %}
{{ domalias.name }}{{ domalias.target.name }}{{ domalias.enabled|yesno }}
+ {% endif %} +
+{% endblock %} diff --git a/templates/admin/newdomalias.html b/templates/admin/newdomalias.html new file mode 100644 index 000000000..f670c5a5b --- /dev/null +++ b/templates/admin/newdomalias.html @@ -0,0 +1,17 @@ +{% extends "layout_simple.html" %} +{% load i18n %} +{% block html_head %} + +{% endblock %} +{% block content %} +

{% trans "New domain alias" %}

+{% if error %}
{{ error }}
{% endif %} +{% url admin.views.newdomalias domain as box_url %} +
+ {% include "common/genericform.html" %} +
+
+ +
+
+{% endblock %}