Allow to send reminders from the django admin interface. Fixes #377

- Legacy-Id: 2510
This commit is contained in:
Emilio A. Sánchez López 2010-08-26 13:43:40 +00:00
parent dec12a71b8
commit 5131a0b3cd
5 changed files with 158 additions and 6 deletions

View file

@ -1,5 +1,16 @@
#coding: utf-8
from django import template
from django.contrib import admin
from django.contrib.admin.util import unquote
from django.core.exceptions import PermissionDenied
from django.core.management import load_command_class
from django.http import Http404
from django.shortcuts import render_to_response
from django.utils.encoding import force_unicode
from django.utils.functional import update_wrapper
from django.utils.html import escape
from django.utils.translation import ugettext as _
from ietf.liaisons.models import (FromBodies, LiaisonDetail, LiaisonPurpose,
SDOs, LiaisonManagers, SDOAuthorizedIndividual)
@ -37,6 +48,67 @@ class SDOAuthorizedIndividualAdmin(admin.ModelAdmin):
class SDOsAdmin(admin.ModelAdmin):
inlines = [LiaisonManagersInline, SDOAuthorizedIndividualInline]
def get_urls(self):
from django.conf.urls.defaults import patterns, url
def wrap(view):
def wrapper(*args, **kwargs):
return self.admin_site.admin_view(view)(*args, **kwargs)
return update_wrapper(wrapper, view)
info = self.model._meta.app_label, self.model._meta.module_name
urls = patterns('',
url(r'^reminder/$',
wrap(self.send_reminder),
name='%s_%s_reminder' % info),
url(r'^(.+)/reminder/$',
wrap(self.send_one_reminder),
name='%s_%s_one_reminder' % info),
)
urls += super(SDOsAdmin, self).get_urls()
return urls
def send_reminder(self, request, sdo=None):
opts = self.model._meta
app_label = opts.app_label
output = None
sdo_pk = sdo and sdo.pk or None
if request.method == 'POST' and request.POST.get('send', False):
command = load_command_class('ietf.liaisons', 'remind_update_sdo_list')
output=command.handle(return_output=True, sdo_pk=sdo_pk)
output='\n'.join(output)
context = {
'opts': opts,
'has_change_permission': self.has_change_permission(request),
'app_label': app_label,
'output': output,
'sdo': sdo,
}
return render_to_response('admin/liaisons/sdos/send_reminder.html',
context,
context_instance = template.RequestContext(request, current_app=self.admin_site.name),
)
def send_one_reminder(self, request, object_id):
model = self.model
opts = model._meta
try:
obj = self.queryset(request).get(pk=unquote(object_id))
except model.DoesNotExist:
obj = None
if not self.has_change_permission(request, obj):
raise PermissionDenied
if obj is None:
raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})
return self.send_reminder(request, sdo=obj)
class RelatedAdmin(admin.ModelAdmin):
pass

View file

@ -32,21 +32,26 @@ class Command(BaseCommand):
body = body)
if not settings.DEBUG:
mail.send()
print '%05s#: %s Mail Sent!' % (sdo.pk, sdo.sdo_name)
msg = '%05s#: %s Mail Sent!' % (sdo.pk, sdo.sdo_name)
else:
print '%05s#: %s Mail Not Sent because in DEBUG mode!' % (sdo.pk, sdo.sdo_name)
return
msg = '%05s#: %s Mail Not Sent because in DEBUG mode!' % (sdo.pk, sdo.sdo_name)
return msg
def handle(self, *args, **options):
query = SDOs.objects.all().order_by('pk')
sdo_pk = options.get('sdo_pk', None)
return_output = options.get('return_output', False)
if sdo_pk:
query = query.filter(pk=sdo_pk)
msg_list = []
for sdo in query:
manager = sdo.liaisonmanager()
if manager:
self.send_mail_to(manager.person, sdo)
msg = self.send_mail_to(manager.person, sdo)
else:
print '%05s#: %s has no liaison manager' % (sdo.pk, sdo.sdo_name)
msg = '%05s#: %s has no liaison manager' % (sdo.pk, sdo.sdo_name)
print msg
msg_list.append(msg)
if return_output:
return msg_list

View file

@ -0,0 +1,12 @@
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block object-tools %}
{% if change %}{% if not is_popup %}
<ul class="object-tools">
<li><a href="reminder/">Update Authorized List Reminder</a></li>
<li><a href="history/" class="historylink">{% trans "History" %}</a></li>
{% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
</ul>
{% endif %}{% endif %}
{% endblock %}

View file

@ -0,0 +1,16 @@
{% extends "admin/change_list.html" %}
{% load i18n %}
{% block object-tools %}
{% if has_add_permission %}
<ul class="object-tools">
<li><a href="reminder/">Update Authorized List Reminder</a></li>
<li>
<a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">
{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
</a>
</li>
</ul>
{% endif %}
{% endblock %}

View file

@ -0,0 +1,47 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_modify adminmedia %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
{% block bodyclass %}change-form{% endblock %}
{% block breadcrumbs %}{% if not is_popup %}
<div class="breadcrumbs">
<a href="../../../">{% trans "Home" %}</a> &rsaquo;
<a href="../../">{{ app_label|capfirst|escape }}</a> &rsaquo;
{% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} &rsaquo;
{% trans "Send reminder" %}
</div>
{% endif %}{% endblock %}
{% block content %}<div id="content-main">
<div>
<h1>Send a reminder to each SDO Liaison Manager</h1>
{% if output %}
<p>
Reminder sent successfully. See the output of the command:
</p>
<pre>
{{ output }}
</pre>
{% else %}
{% if sdo %}
<p>
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>
</p>
{% else %}
<p>
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>
</p>
<p>
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.
</p>
{% endif %}
<form action="" method="post">
<input type="submit" name="send" value="Send" />
</form>
{% endif %}
</div>
</div>
{% endblock %}