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 %} + + + + + + + + + + {% for mx in domain.mxrecord_set.all %} + + + + + + {% empty %} + + + + {% endfor %} + +
{% trans "Name" %}{% trans "Address" %}{% trans "Updated" %}
{{ mx.name }}{{ mx.address }}{{ mx.updated|date:"SHORT_DATETIME_FORMAT" }}
{% trans "No MX record found for this domain." %}
+{% 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"