aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid/rpki/gui/app/templates/app/alert_confirm_delete.html17
-rw-r--r--rpkid/rpki/gui/app/templates/app/alert_detail.html10
-rw-r--r--rpkid/rpki/gui/app/templates/app/app_base.html3
-rw-r--r--rpkid/rpki/gui/app/templatetags/app_extras.py17
-rw-r--r--rpkid/rpki/gui/app/urls.py5
-rw-r--r--rpkid/rpki/gui/app/views.py12
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()