diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py
index fd6d39f3a..e27023fd1 100644
--- a/modoboa/admin/models/domain.py
+++ b/modoboa/admin/models/domain.py
@@ -225,6 +225,7 @@ reversion.register(Domain)
class MXRecord(models.Model):
+ """A model used to store MX records for Domain."""
domain = models.ForeignKey(Domain)
name = models.CharField(max_length=254)
diff --git a/modoboa/admin/templates/admin/domains.html b/modoboa/admin/templates/admin/domains.html
index 2b14b3472..b6b6a30ea 100644
--- a/modoboa/admin/templates/admin/domains.html
+++ b/modoboa/admin/templates/admin/domains.html
@@ -34,6 +34,6 @@ $(document).ready(function() {
{% trans "Name" %} |
{% trans "Alias(es)" %} |
{% trans "Tags" %} |
-{% trans "Authentication" %} |
+{% trans "DNS status" %} |
{% trans "Actions" %} |
{% endblock %}
diff --git a/modoboa/admin/templates/admin/domains_table.html b/modoboa/admin/templates/admin/domains_table.html
index c2a5b1de8..34204e3bb 100644
--- a/modoboa/admin/templates/admin/domains_table.html
+++ b/modoboa/admin/templates/admin/domains_table.html
@@ -7,6 +7,7 @@
{% render_tags domain.tags %} |
+ MX
DNSBL
|
diff --git a/modoboa/admin/templates/admin/mx_domain_detail.html b/modoboa/admin/templates/admin/mx_domain_detail.html
new file mode 100644
index 000000000..56950ffdf
--- /dev/null
+++ b/modoboa/admin/templates/admin/mx_domain_detail.html
@@ -0,0 +1,28 @@
+{% extends "common/generic_modal.html" %}
+
+{% load i18n %}
+
+{% block modalbody %}
+
+
+
+ | {% trans "Name" %} |
+ {% trans "Address" %} |
+ {% trans "Updated" %} |
+
+
+
+ {% for mx in domain.mxrecord_set.all %}
+
+ | {{ mx.name }} |
+ {{ mx.address }} |
+ {{ mx.updated|date:"SHORT_DATETIME_FORMAT" }} |
+
+ {% empty %}
+
+ | {% trans "No MX record found for this domain." %} |
+
+ {% endfor %}
+
+
+{% endblock %}
diff --git a/modoboa/admin/urls.py b/modoboa/admin/urls.py
index 58dbee490..d430cd78e 100644
--- a/modoboa/admin/urls.py
+++ b/modoboa/admin/urls.py
@@ -14,6 +14,8 @@ urlpatterns = patterns(
name="domain_detail"),
url(r'^domains/(?P\d+)/dnsbl/$', views.DNSBLDomainDetailView.as_view(),
name="dnsbl_domain_detail"),
+ url(r'^domains/(?P\d+)/mx/$', views.MXDomainDetailView.as_view(),
+ name="mx_domain_detail"),
url(r'^domains/list/$', '_domains', name="_domain_list"),
url(r'^domains/flatlist/$', 'domains_list', name="domain_flat_list"),
url(r'^domains/stats/$', 'domain_statistics', name="domain_statistics"),
diff --git a/modoboa/admin/views/__init__.py b/modoboa/admin/views/__init__.py
index 9fa96c833..e63b5b5e1 100644
--- a/modoboa/admin/views/__init__.py
+++ b/modoboa/admin/views/__init__.py
@@ -2,7 +2,7 @@
from .alias import AliasDetailView
from .identity import AccountDetailView
-from .dnsbl import DNSBLDomainDetailView
+from .dns import DNSBLDomainDetailView, MXDomainDetailView
from .domain import DomainDetailView
@@ -11,4 +11,5 @@ __all__ = [
"AliasDetailView",
"DNSBLDomainDetailView",
"DomainDetailView",
+ "MXDomainDetailView",
]
diff --git a/modoboa/admin/views/dnsbl.py b/modoboa/admin/views/dns.py
similarity index 53%
rename from modoboa/admin/views/dnsbl.py
rename to modoboa/admin/views/dns.py
index dad479483..c7381d0a6 100644
--- a/modoboa/admin/views/dnsbl.py
+++ b/modoboa/admin/views/dns.py
@@ -9,9 +9,32 @@ from django.contrib.auth import mixins as auth_mixins
from .. import models
+class MXDomainDetailView(
+ auth_mixins.PermissionRequiredMixin, generic.DetailView):
+ """View to display MX records."""
+
+ model = models.Domain
+ permission_required = "admin.view_domain"
+ template_name = "admin/mx_domain_detail.html"
+
+ def get_queryset(self):
+ """Add some prefetching."""
+ return (
+ super(MXDomainDetailView, self).get_queryset()
+ .prefetch_related("mxrecord_set"))
+
+ def get_context_data(self, **kwargs):
+ """Add extra variables."""
+ context = super(MXDomainDetailView, self).get_context_data(**kwargs)
+ context.update({
+ "title": _("MX records of {}").format(self.object.name)
+ })
+ return context
+
+
class DNSBLDomainDetailView(
auth_mixins.PermissionRequiredMixin, generic.DetailView):
- """DetailView for Domain."""
+ """View to display DNSBL summary."""
model = models.Domain
permission_required = "admin.view_domain"