diff options
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/alert_confirm_delete.html | 17 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/alert_detail.html | 10 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templates/app/app_base.html | 3 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/templatetags/app_extras.py | 17 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/urls.py | 5 | ||||
-rw-r--r-- | rpkid/rpki/gui/app/views.py | 12 |
6 files changed, 60 insertions, 4 deletions
diff --git a/rpkid/rpki/gui/app/templates/app/alert_confirm_delete.html b/rpkid/rpki/gui/app/templates/app/alert_confirm_delete.html new file mode 100644 index 00000000..78c84917 --- /dev/null +++ b/rpkid/rpki/gui/app/templates/app/alert_confirm_delete.html @@ -0,0 +1,17 @@ +{% extends "app/alert_detail.html" %} +{% load url from future %} + +{% block action %} +<div class="row-fluid"> + <div class="alert"> + Please confirm that you would like to delete this alert. + </div> + <form method="POST"> + {% csrf_token %} + <div class="form-actions"> + <button class="btn btn-danger" type="submit"><i class="icon-trash"></i> Delete</button> + <a class="btn" href="{{ object.get_absolute_url }}">Cancel</a> + </div> + </form> +</div> +{% endblock action %} diff --git a/rpkid/rpki/gui/app/templates/app/alert_detail.html b/rpkid/rpki/gui/app/templates/app/alert_detail.html index 2cf129c0..b3a73b7e 100644 --- a/rpkid/rpki/gui/app/templates/app/alert_detail.html +++ b/rpkid/rpki/gui/app/templates/app/alert_detail.html @@ -1,4 +1,5 @@ {% extends "app/app_base.html" %} +{% load url from future %} {% load app_extras %} {% block content %} @@ -6,6 +7,7 @@ <h1>Alert Detail <small>{{ object.subject }}</small></h1> </div> +<div class="row-fluid"> <table class="table"> <tr> <th>Date:</th><td> {{ object.when }}</td> @@ -18,4 +20,12 @@ <p> {{ object.text }} +</div> + +{% block action %} +<div class="row-fluid"> +<a class="btn btn-danger" title="delete this alert" href="{% url "alert-delete" object.pk %}"><i class="icon-trash"></i> Delete</a> +</div> +{% endblock action %} + {% endblock content %} diff --git a/rpkid/rpki/gui/app/templates/app/app_base.html b/rpkid/rpki/gui/app/templates/app/app_base.html index f7556299..7f3e52c3 100644 --- a/rpkid/rpki/gui/app/templates/app/app_base.html +++ b/rpkid/rpki/gui/app/templates/app/app_base.html @@ -1,6 +1,7 @@ {% extends "base.html" %} {# this can be removed when django 1.4 is EOL, because it is the default behavior in 1.5 #} {% load url from future %} +{% load app_extras %} {# This template defines the common structure for the rpki.gui.app application. #} @@ -13,7 +14,7 @@ <ul class='nav nav-list'> <li><a href="{% url "rpki.gui.app.views.dashboard" %}">dashboard</a></li> <li><a href="{% url "rpki.gui.app.views.route_view" %}">routes</a></li> - <li><a href="{% url "alert-list" %}">alerts</a><span class="badge">{{ request.session.handle.alerts.count }}<span></li> + <li><a href="{% url "alert-list" %}">alerts</a>{% alert_count request.session.handle %}</li> <li class="divider"></li> <li><a href="{% url "rpki.gui.app.views.conf_list" %}" title="select a different resource handle to manage">select identity</a></li> {% if request.user.is_superuser %} diff --git a/rpkid/rpki/gui/app/templatetags/app_extras.py b/rpkid/rpki/gui/app/templatetags/app_extras.py index e0a5d9e1..93d3a9ad 100644 --- a/rpkid/rpki/gui/app/templatetags/app_extras.py +++ b/rpkid/rpki/gui/app/templatetags/app_extras.py @@ -33,3 +33,20 @@ def severity_class(severity): 2: 'label-important', } return css.get(severity) + + +@register.simple_tag +def alert_count(conf): + qs = conf.alerts.filter(seen=False) + unread = len(qs) + if unread: + severity = max([x.severity for x in qs]) + css = { + 0: 'badge-info', + 1: 'badge-warning', + 2: 'badge-important' + } + css_class = css.get(severity) + else: + css_class = 'badge-default' + return u'<span class="badge %s">%d</span>' % (css_class, unread) diff --git a/rpkid/rpki/gui/app/urls.py b/rpkid/rpki/gui/app/urls.py index 6c2d4b9a..8e61337c 100644 --- a/rpkid/rpki/gui/app/urls.py +++ b/rpkid/rpki/gui/app/urls.py @@ -22,7 +22,10 @@ urlpatterns = patterns( '', (r'^$', views.dashboard), url(r'^alert/$', views.AlertListView.as_view(), name='alert-list'), - url(r'^alert/(?P<pk>\d+)/$', views.AlertDetailView.as_view(), name='alert-detail'), + url(r'^alert/(?P<pk>\d+)/$', views.AlertDetailView.as_view(), + name='alert-detail'), + url(r'^alert/(?P<pk>\d+)/delete$', views.AlertDeleteView.as_view(), + name='alert-delete'), (r'^conf/export$', views.conf_export), (r'^conf/list$', views.conf_list), (r'^conf/select$', views.conf_select), diff --git a/rpkid/rpki/gui/app/views.py b/rpkid/rpki/gui/app/views.py index 70579871..088df8a3 100644 --- a/rpkid/rpki/gui/app/views.py +++ b/rpkid/rpki/gui/app/views.py @@ -32,9 +32,9 @@ from django.contrib.auth.decorators import login_required from django.shortcuts import get_object_or_404, render, redirect from django.utils.http import urlquote from django import http -from django.core.urlresolvers import reverse +from django.core.urlresolvers import reverse, reverse_lazy from django.contrib.auth.models import User -from django.views.generic import DetailView, ListView +from django.views.generic import DetailView, ListView, DeleteView from django.core.paginator import Paginator from django.forms.formsets import formset_factory, BaseFormSet import django.db.models @@ -1267,3 +1267,11 @@ class AlertDetailView(DetailView): obj.seen = True obj.save() return obj + + +class AlertDeleteView(DeleteView): + success_url = reverse_lazy('alert-list') + + def get_queryset(self, **kwargs): + conf = self.request.session['handle'] + return conf.alerts.all() |