diff --git a/djrill/__init__.py b/djrill/__init__.py index fa6d9a2..7cc2051 100644 --- a/djrill/__init__.py +++ b/djrill/__init__.py @@ -8,8 +8,9 @@ __version__ = '.'.join([str(x) for x in VERSION]) class DjrillAdminSite(AdminSite): index_template = "djrill/index.html" custom_views = [] + custom_urls = [] - def register_view(self, path, view, name=None): + def register_view(self, path, view, name, display_name=None): """Add a custom admin view. * `path` is the path in the admin where the view will live, e.g. @@ -18,25 +19,33 @@ class DjrillAdminSite(AdminSite): * `name` is an optional pretty name for the list of custom views. If empty, we'll guess based on view.__name__. """ - self.custom_views.append((path, view, name)) + self.custom_views.append((path, view, name, display_name)) + + def register_url(self, path, view, name): + self.custom_urls.append((path, view, name)) def get_urls(self): """Add our custom views to the admin urlconf.""" urls = super(DjrillAdminSite, self).get_urls() from django.conf.urls.defaults import patterns, url - for path, view, name in self.custom_views: + for path, view, name, display_name in self.custom_views: urls += patterns('', - url(r'^%s$' % path, self.admin_view(view)), + url(r'^%s$' % path, self.admin_view(view), name=name), ) + for path, view, name in self.custom_urls: + urls += patterns('', + url(r'^%s$' % path, self.admin_view(view), name=name), + ) + return urls def index(self, request, extra_context=None): """Make sure our list of custom views is on the index page.""" if not extra_context: extra_context = {} - custom_list = [(path, name if name else - capfirst(view.__name__)) for path, view, name in - self.custom_views] + custom_list = [(path, display_name if display_name else + capfirst(view.__name__)) for path, view, name, display_name in + self.custom_views] # Sort views alphabetically. custom_list.sort(key=lambda x: x[1]) extra_context.update({ diff --git a/djrill/admin.py b/djrill/admin.py index 50073e4..fc0ebcd 100644 --- a/djrill/admin.py +++ b/djrill/admin.py @@ -1,7 +1,12 @@ from django.contrib import admin -from djrill.views import DjrillIndexView, DjrillSendersListView +from djrill.views import (DjrillIndexView, DjrillSendersListView, + DjrillDisableSenderView) admin.site.register_view("djrill/senders/", DjrillSendersListView.as_view(), - "senders") -admin.site.register_view("djrill/status/", DjrillIndexView.as_view(), "status") + "djrill_sender", "senders") +admin.site.register_view("djrill/status/", DjrillIndexView.as_view(), + "djrill_status", "status") + +admin.site.register_url("djrill/disable/sender/", + DjrillDisableSenderView.as_view(), "djrill_disable_sender") diff --git a/djrill/templates/djrill/senders_list.html b/djrill/templates/djrill/senders_list.html index b768610..1083fc5 100644 --- a/djrill/templates/djrill/senders_list.html +++ b/djrill/templates/djrill/senders_list.html @@ -89,7 +89,7 @@ {{ item }} {% endfor %} {% if result.is_enabled and result.approved_at %} - + {% else %} {% endif %} diff --git a/djrill/views.py b/djrill/views.py index 617e361..b76d035 100644 --- a/djrill/views.py +++ b/djrill/views.py @@ -1,7 +1,8 @@ from django.conf import settings from django.core.exceptions import ImproperlyConfigured +from django.http import HttpResponse, HttpResponseForbidden from django.utils import simplejson as json -from django.views.generic import TemplateView +from django.views.generic import TemplateView, View try: import requests @@ -60,3 +61,22 @@ class DjrillSendersListView(DjrillApiMixin, DjrillApiJsonObjectsMixin, def get(self, request): objects = self.get_json_objects() return self.render_to_response({"objects": json.loads(objects)}) + + +class DjrillDisableSenderView(DjrillApiMixin, View): + + def post(self, request): + email = request.POST.get("email", None) + + if email: + payload = { + "key": self.api_key, + "email": email + } + req = requests.post("%s/users/disable-sender.json" % self.api_url, + data=json.dumps(payload)) + + if req.status_code == 200: + return HttpResponse("success") + + return HttpResponseForbidden()