Skip to content

Commit 5131a0b

Browse files
committed
Allow to send reminders from the django admin interface. Fixes ietf-tools#377
- Legacy-Id: 2510
1 parent dec12a7 commit 5131a0b

5 files changed

Lines changed: 158 additions & 6 deletions

File tree

ietf/liaisons/admin.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
#coding: utf-8
2+
from django import template
23
from django.contrib import admin
4+
from django.contrib.admin.util import unquote
5+
from django.core.exceptions import PermissionDenied
6+
from django.core.management import load_command_class
7+
from django.http import Http404
8+
from django.shortcuts import render_to_response
9+
from django.utils.encoding import force_unicode
10+
from django.utils.functional import update_wrapper
11+
from django.utils.html import escape
12+
from django.utils.translation import ugettext as _
13+
314
from ietf.liaisons.models import (FromBodies, LiaisonDetail, LiaisonPurpose,
415
SDOs, LiaisonManagers, SDOAuthorizedIndividual)
516

@@ -37,6 +48,67 @@ class SDOAuthorizedIndividualAdmin(admin.ModelAdmin):
3748
class SDOsAdmin(admin.ModelAdmin):
3849
inlines = [LiaisonManagersInline, SDOAuthorizedIndividualInline]
3950

51+
def get_urls(self):
52+
from django.conf.urls.defaults import patterns, url
53+
54+
def wrap(view):
55+
def wrapper(*args, **kwargs):
56+
return self.admin_site.admin_view(view)(*args, **kwargs)
57+
return update_wrapper(wrapper, view)
58+
59+
info = self.model._meta.app_label, self.model._meta.module_name
60+
61+
urls = patterns('',
62+
url(r'^reminder/$',
63+
wrap(self.send_reminder),
64+
name='%s_%s_reminder' % info),
65+
url(r'^(.+)/reminder/$',
66+
wrap(self.send_one_reminder),
67+
name='%s_%s_one_reminder' % info),
68+
)
69+
urls += super(SDOsAdmin, self).get_urls()
70+
return urls
71+
72+
def send_reminder(self, request, sdo=None):
73+
opts = self.model._meta
74+
app_label = opts.app_label
75+
76+
output = None
77+
sdo_pk = sdo and sdo.pk or None
78+
if request.method == 'POST' and request.POST.get('send', False):
79+
command = load_command_class('ietf.liaisons', 'remind_update_sdo_list')
80+
output=command.handle(return_output=True, sdo_pk=sdo_pk)
81+
output='\n'.join(output)
82+
83+
context = {
84+
'opts': opts,
85+
'has_change_permission': self.has_change_permission(request),
86+
'app_label': app_label,
87+
'output': output,
88+
'sdo': sdo,
89+
}
90+
return render_to_response('admin/liaisons/sdos/send_reminder.html',
91+
context,
92+
context_instance = template.RequestContext(request, current_app=self.admin_site.name),
93+
)
94+
95+
def send_one_reminder(self, request, object_id):
96+
model = self.model
97+
opts = model._meta
98+
99+
try:
100+
obj = self.queryset(request).get(pk=unquote(object_id))
101+
except model.DoesNotExist:
102+
obj = None
103+
104+
if not self.has_change_permission(request, obj):
105+
raise PermissionDenied
106+
107+
if obj is None:
108+
raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})
109+
110+
return self.send_reminder(request, sdo=obj)
111+
40112

41113
class RelatedAdmin(admin.ModelAdmin):
42114
pass

ietf/liaisons/management/commands/remind_update_sdo_list.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,26 @@ def send_mail_to(self, person, sdo):
3232
body = body)
3333
if not settings.DEBUG:
3434
mail.send()
35-
print '%05s#: %s Mail Sent!' % (sdo.pk, sdo.sdo_name)
35+
msg = '%05s#: %s Mail Sent!' % (sdo.pk, sdo.sdo_name)
3636
else:
37-
print '%05s#: %s Mail Not Sent because in DEBUG mode!' % (sdo.pk, sdo.sdo_name)
38-
return
37+
msg = '%05s#: %s Mail Not Sent because in DEBUG mode!' % (sdo.pk, sdo.sdo_name)
38+
return msg
3939

4040
def handle(self, *args, **options):
4141
query = SDOs.objects.all().order_by('pk')
4242
sdo_pk = options.get('sdo_pk', None)
43+
return_output = options.get('return_output', False)
4344
if sdo_pk:
4445
query = query.filter(pk=sdo_pk)
4546

47+
msg_list = []
4648
for sdo in query:
4749
manager = sdo.liaisonmanager()
4850
if manager:
49-
self.send_mail_to(manager.person, sdo)
51+
msg = self.send_mail_to(manager.person, sdo)
5052
else:
51-
print '%05s#: %s has no liaison manager' % (sdo.pk, sdo.sdo_name)
52-
53+
msg = '%05s#: %s has no liaison manager' % (sdo.pk, sdo.sdo_name)
54+
print msg
55+
msg_list.append(msg)
56+
if return_output:
57+
return msg_list
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{% extends "admin/change_form.html" %}
2+
{% load i18n %}
3+
4+
{% block object-tools %}
5+
{% if change %}{% if not is_popup %}
6+
<ul class="object-tools">
7+
<li><a href="reminder/">Update Authorized List Reminder</a></li>
8+
<li><a href="history/" class="historylink">{% trans "History" %}</a></li>
9+
{% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
10+
</ul>
11+
{% endif %}{% endif %}
12+
{% endblock %}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{% extends "admin/change_list.html" %}
2+
{% load i18n %}
3+
4+
5+
{% block object-tools %}
6+
{% if has_add_permission %}
7+
<ul class="object-tools">
8+
<li><a href="reminder/">Update Authorized List Reminder</a></li>
9+
<li>
10+
<a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">
11+
{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
12+
</a>
13+
</li>
14+
</ul>
15+
{% endif %}
16+
{% endblock %}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{% extends "admin/base_site.html" %}
2+
3+
{% load i18n admin_modify adminmedia %}
4+
5+
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
6+
7+
{% block bodyclass %}change-form{% endblock %}
8+
9+
{% block breadcrumbs %}{% if not is_popup %}
10+
<div class="breadcrumbs">
11+
<a href="../../../">{% trans "Home" %}</a> &rsaquo;
12+
<a href="../../">{{ app_label|capfirst|escape }}</a> &rsaquo;
13+
{% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} &rsaquo;
14+
{% trans "Send reminder" %}
15+
</div>
16+
{% endif %}{% endblock %}
17+
18+
{% block content %}<div id="content-main">
19+
<div>
20+
<h1>Send a reminder to each SDO Liaison Manager</h1>
21+
{% if output %}
22+
<p>
23+
Reminder sent successfully. See the output of the command:
24+
</p>
25+
<pre>
26+
{{ output }}
27+
</pre>
28+
{% else %}
29+
{% if sdo %}
30+
<p>
31+
You can send a reminder to the {{ sdo }} SDO Liaison Manager to request an updated list of persons authorized to send liaison statements on behalf of {{ sdo }}</h1>
32+
</p>
33+
{% else %}
34+
<p>
35+
You can send a reminder to each SDO Liaison Manager to request an updated list of persons authorized to send liaison statements on behalf of his SDO</h1>
36+
</p>
37+
<p>
38+
By clicking the 'Send' button you will send a request to <b>all</b> the SDO Liaison Managers. In order to send the request to one SDO Liaison Manager go to the SDO edit page.
39+
</p>
40+
{% endif %}
41+
<form action="" method="post">
42+
<input type="submit" name="send" value="Send" />
43+
</form>
44+
{% endif %}
45+
</div>
46+
</div>
47+
{% endblock %}

0 commit comments

Comments
 (0)