Move NomCom announcements view to nomcom/, move message view to
message/, add tests, add redirects, fix a couple of small bugs in the announcements view - Legacy-Id: 6769
This commit is contained in:
parent
78d9bfff24
commit
d0f2859631
ietf
|
@ -1 +0,0 @@
|
|||
from django.db import models
|
|
@ -1,10 +0,0 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf.urls.defaults import patterns
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
urlpatterns = patterns('',
|
||||
(r'^nomcom/$', 'ietf.announcements.views.nomcom'),
|
||||
(r'^nomcom/(?P<object_id>\d+)/$', 'ietf.announcements.views.message_detail'),
|
||||
)
|
|
@ -1,59 +0,0 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
import re
|
||||
|
||||
from django.views.generic.simple import direct_to_template
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.conf import settings
|
||||
from django.db.models import Q
|
||||
|
||||
from ietf.idtracker.models import ChairsHistory
|
||||
from ietf.idtracker.models import Role
|
||||
from ietf.group.models import Group, GroupEvent
|
||||
from ietf.message.models import Message
|
||||
|
||||
def nomcom(request):
|
||||
address_re = re.compile("<.*>")
|
||||
|
||||
nomcoms = list(Group.objects.filter(acronym__startswith="nomcom").exclude(name="nomcom"))
|
||||
|
||||
regimes = []
|
||||
|
||||
for n in nomcoms:
|
||||
e = GroupEvent.objects.filter(group=n, type="changed_state", changestategroupevent__state="active").order_by('time')[:1]
|
||||
n.start_year = e[0].time.year if e else 0
|
||||
if n.start_year <= 2003:
|
||||
continue
|
||||
e = GroupEvent.objects.filter(group=n, type="changed_state", changestategroupevent__state="conclude").order_by('time')[:1]
|
||||
n.end_year = e[0].time.year if e else ""
|
||||
|
||||
r = n.role_set.select_related().filter(name="chair")
|
||||
chair = None
|
||||
if r:
|
||||
chair = r[0]
|
||||
announcements = Message.objects.filter(related_groups=n).order_by('-time')
|
||||
for a in announcements:
|
||||
a.to_name = address_re.sub("", a.to)
|
||||
|
||||
regimes.append(dict(chair=chair,
|
||||
announcements=announcements,
|
||||
group=n))
|
||||
|
||||
regimes.sort(key=lambda x: x["group"].start_year, reverse=True)
|
||||
|
||||
return direct_to_template(request,
|
||||
"announcements/nomcomREDESIGN.html",
|
||||
{ 'curr_chair' : regimes[0]["chair"],
|
||||
'regimes' : regimes })
|
||||
|
||||
def message_detail(request, object_id):
|
||||
# restrict to nomcom announcements for the time being
|
||||
nomcoms = Group.objects.filter(acronym__startswith="nomcom").exclude(acronym="nomcom")
|
||||
m = get_object_or_404(Message, id=object_id,
|
||||
related_groups__in=nomcoms)
|
||||
|
||||
return direct_to_template(request,
|
||||
"announcements/message_detail.html",
|
||||
dict(message=m))
|
||||
|
||||
|
15
ietf/message/views.py
Normal file
15
ietf/message/views.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
from django.shortcuts import render_to_response, get_object_or_404
|
||||
from django.template import RequestContext
|
||||
|
||||
from ietf.group.models import Group
|
||||
from ietf.message.models import Message
|
||||
|
||||
|
||||
def message(request, message_id, group_type):
|
||||
possible_messages = Message.objects.filter(related_groups__type=group_type)
|
||||
|
||||
message = get_object_or_404(possible_messages, id=message_id)
|
||||
|
||||
return render_to_response("message/message.html",
|
||||
dict(message=message),
|
||||
context_instance=RequestContext(request))
|
7
ietf/nomcom/redirect_ann_urls.py
Normal file
7
ietf/nomcom/redirect_ann_urls.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from django.conf.urls.defaults import patterns
|
||||
from django.views.generic.simple import redirect_to
|
||||
|
||||
urlpatterns = patterns('',
|
||||
(r'^nomcom/$', 'django.views.generic.simple.redirect_to', { 'url': "/nomcom/ann/", 'permanent': True }),
|
||||
(r'^nomcom/(?P<message_id>\d+)/$', 'django.views.generic.simple.redirect_to', { 'url': "/nomcom/ann/%(message_id)s/", 'permanent': True }),
|
||||
)
|
|
@ -6,7 +6,7 @@ from django.core.files import File
|
|||
from django.conf import settings
|
||||
|
||||
from ietf.utils.pipe import pipe
|
||||
from ietf.group.models import Group, Role
|
||||
from ietf.group.models import Group, Role, ChangeStateGroupEvent
|
||||
from ietf.person.models import Email, Person
|
||||
from ietf.name.models import RoleName
|
||||
from ietf.nomcom.models import NomCom, Position, Nominee
|
||||
|
@ -101,6 +101,7 @@ def nomcom_test_data():
|
|||
state_id='active',
|
||||
type_id='nomcom',
|
||||
acronym='nomcom%s' % NOMCOM_YEAR)
|
||||
|
||||
nomcom, created = NomCom.objects.get_or_create(group=group)
|
||||
|
||||
cert_file, privatekey_file = generate_cert()
|
||||
|
@ -159,3 +160,9 @@ def nomcom_test_data():
|
|||
description=description,
|
||||
is_open=True,
|
||||
incumbent=email)
|
||||
|
||||
ChangeStateGroupEvent.objects.get_or_create(group=group,
|
||||
type="changed_state",
|
||||
state_id="active",
|
||||
time=group.time,
|
||||
by=Person.objects.all()[0])
|
||||
|
|
|
@ -8,13 +8,15 @@ from django.db import IntegrityError
|
|||
from django.core.urlresolvers import reverse
|
||||
from django.core.files import File
|
||||
from django.contrib.formtools.preview import security_hash
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from ietf.utils.test_utils import login_testing_unauthorized
|
||||
from ietf.utils.mail import outbox
|
||||
|
||||
|
||||
from ietf.person.models import Email, Person
|
||||
from django.contrib.auth.models import User
|
||||
from ietf.group.models import Group
|
||||
from ietf.message.models import Message
|
||||
|
||||
from ietf.nomcom.test_data import nomcom_test_data, generate_cert, check_comments, \
|
||||
COMMUNITY_USER, CHAIR_USER, \
|
||||
|
@ -365,6 +367,25 @@ class NomcomViewsTest(TestCase):
|
|||
"""Verify home view"""
|
||||
self.check_url_status(self.index_url, 200)
|
||||
|
||||
def test_announcements_view(self):
|
||||
nomcom = Group.objects.get(acronym="nomcom%s" % self.year, type="nomcom")
|
||||
msg = Message.objects.create(
|
||||
by=Person.objects.all()[0],
|
||||
subject="This is a test",
|
||||
to="test@example.com",
|
||||
frm="nomcomchair@example.com",
|
||||
body="Hello World!",
|
||||
content_type="",
|
||||
)
|
||||
msg.related_groups.add(nomcom)
|
||||
|
||||
r = self.client.get(reverse('ietf.nomcom.views.announcements'))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(("Messages from %s" % nomcom.time.year) in r.content)
|
||||
self.assertTrue(nomcom.role_set.filter(name="chair")[0].person.email_address() in r.content)
|
||||
self.assertTrue(msg.subject in r.content)
|
||||
|
||||
|
||||
def test_requirements_view(self):
|
||||
"""Verify requirements view"""
|
||||
self.check_url_status(self.requirements_url, 200)
|
||||
|
|
|
@ -6,6 +6,7 @@ from ietf.nomcom.forms import EditChairForm, EditChairFormPreview, \
|
|||
|
||||
urlpatterns = patterns('ietf.nomcom.views',
|
||||
url(r'^$', 'index'),
|
||||
url(r'^ann/$', 'announcements'),
|
||||
url(r'^(?P<year>\d{4})/private/$', 'private_index', name='nomcom_private_index'),
|
||||
url(r'^(?P<year>\d{4})/private/key/$', 'private_key', name='nomcom_private_key'),
|
||||
url(r'^(?P<year>\d{4})/private/nominate/$', 'private_nominate', name='nomcom_private_nominate'),
|
||||
|
@ -42,3 +43,7 @@ urlpatterns = patterns('ietf.nomcom.views',
|
|||
url(r'^ajax/position-text/(?P<position_id>\d+)/$', 'ajax_position_text', name='nomcom_ajax_position_text'),
|
||||
|
||||
)
|
||||
|
||||
urlpatterns += patterns('',
|
||||
url(r'^ann/(?P<message_id>\d+)/$', 'ietf.message.views.message', {'group_type': "nomcom" }, "nomcom_announcement"),
|
||||
)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import datetime
|
||||
import datetime, re
|
||||
|
||||
from django.views.generic.create_update import delete_object
|
||||
from django.conf import settings
|
||||
|
@ -20,7 +20,8 @@ from django.forms.models import modelformset_factory, inlineformset_factory
|
|||
from ietf.dbtemplate.models import DBTemplate
|
||||
from ietf.dbtemplate.views import template_edit
|
||||
from ietf.name.models import NomineePositionState, FeedbackType
|
||||
from ietf.group.models import Group
|
||||
from ietf.group.models import Group, GroupEvent
|
||||
from ietf.message.models import Message
|
||||
|
||||
from ietf.nomcom.decorators import nomcom_private_key_required
|
||||
from ietf.nomcom.forms import (NominateForm, FeedbackForm, QuestionnaireForm,
|
||||
|
@ -53,7 +54,7 @@ def index(request):
|
|||
else:
|
||||
nomcom.url = None
|
||||
if year >= 2002:
|
||||
nomcom.ann_url = "/ann/nomcom/#%4d" % year
|
||||
nomcom.ann_url = "/nomcom/ann/#%4d" % year
|
||||
else:
|
||||
nomcom.ann_url = None
|
||||
return render_to_response('nomcom/index.html',
|
||||
|
@ -70,6 +71,41 @@ def year_index(request, year):
|
|||
'selected': 'index',
|
||||
'template': template}, RequestContext(request))
|
||||
|
||||
def announcements(request):
|
||||
address_re = re.compile("<.*>")
|
||||
|
||||
nomcoms = Group.objects.filter(type="nomcom")
|
||||
|
||||
regimes = []
|
||||
|
||||
for n in nomcoms:
|
||||
e = GroupEvent.objects.filter(group=n, type="changed_state", changestategroupevent__state="active").order_by('time')[:1]
|
||||
n.start_year = e[0].time.year if e else 0
|
||||
e = GroupEvent.objects.filter(group=n, type="changed_state", changestategroupevent__state="conclude").order_by('time')[:1]
|
||||
n.end_year = e[0].time.year if e else n.start_year + 1
|
||||
|
||||
r = n.role_set.select_related().filter(name="chair")
|
||||
chair = None
|
||||
if r:
|
||||
chair = r[0]
|
||||
|
||||
announcements = Message.objects.filter(related_groups=n).order_by('-time')
|
||||
for a in announcements:
|
||||
a.to_name = address_re.sub("", a.to)
|
||||
|
||||
if not announcements:
|
||||
continue
|
||||
|
||||
regimes.append(dict(chair=chair,
|
||||
announcements=announcements,
|
||||
group=n))
|
||||
|
||||
regimes.sort(key=lambda x: x["group"].start_year, reverse=True)
|
||||
|
||||
return render_to_response("nomcom/announcements.html",
|
||||
{ 'curr_chair' : regimes[0]["chair"] if regimes else None,
|
||||
'regimes' : regimes },
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
@role_required("Nomcom")
|
||||
def private_key(request, year):
|
||||
|
|
|
@ -166,7 +166,6 @@ INSTALLED_APPS = (
|
|||
'ietf.group',
|
||||
'ietf.doc',
|
||||
'ietf.message',
|
||||
'ietf.announcements',
|
||||
'ietf.idindex',
|
||||
'ietf.idtracker',
|
||||
'ietf.ietfauth',
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
{% extends "base.html" %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}Announcement: {{ message.time|date:"F j, Y" }} -- {{ message.subject|escape }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>NomCom Message</h1>
|
||||
<p>
|
||||
From: {{ message.frm|escape }}<br/>
|
||||
To: {{ message.to|escape }}<br/>
|
||||
Date: {{ message.time|date:"F j, Y" }}<br/>
|
||||
Subject: {{ message.subject|escape }}
|
||||
</p>
|
||||
<hr width="400" align="left" />
|
||||
<pre>
|
||||
{{ message.body|escape }}
|
||||
</pre>
|
||||
{% endblock %}
|
20
ietf/templates/message/message.html
Normal file
20
ietf/templates/message/message.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
{% extends "base.html" %}
|
||||
{% load ietf_filters %}
|
||||
|
||||
{% block title %}Announcement: {{ message.time|date:"F j, Y" }} - {{ message.subject }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Announcement: {{ message.time|date:"F j, Y" }} - {{ message.subject }}</h1>
|
||||
|
||||
<p>
|
||||
From: {{ message.frm }}<br/>
|
||||
To: {{ message.to }}<br/>
|
||||
Date: {{ message.time|date:"F j, Y" }}<br/>
|
||||
Subject: {{ message.subject }}
|
||||
</p>
|
||||
|
||||
<hr width="400" align="left" />
|
||||
<pre>
|
||||
{{ message.body }}
|
||||
</pre>
|
||||
{% endblock %}
|
|
@ -8,8 +8,9 @@
|
|||
<h3>Current Committee Chair: <a href="mailto:{{ curr_chair.email.address }}">{{ curr_chair.person.plain_name }}</a></h3>
|
||||
|
||||
{% for regime in regimes %}
|
||||
<hr>
|
||||
<h1 id="{{regime.group.start_year}}">Messages from {{ regime.group.start_year }} - {{ regime.group.end_year }}</h1>
|
||||
<hr style="margin: 1em 0; color: #ddd">
|
||||
|
||||
<h1 id="{{ regime.group.start_year }}">Messages from {{ regime.group.start_year }} - {{ regime.group.end_year }}</h1>
|
||||
|
||||
{# use person email address here rather than the generic nomcom-chair@ietf.org #}
|
||||
<h4>Committee Chair: <a href="mailto:{{ regime.chair.person.email_address }}">{{ regime.chair.person.plain_name }}</a></h4>
|
||||
|
@ -19,17 +20,17 @@
|
|||
<th width="60%">Subject</th>
|
||||
<th width="30%">Sent To</th>
|
||||
</tr>
|
||||
{% for ann in regime.announcements %}
|
||||
{% for m in regime.announcements %}
|
||||
<tr>
|
||||
<td>{{ ann.time|date:"Y-M-d" }}</td>
|
||||
<td style="max-width:50%"><a href="/ann/nomcom/{{ ann.id }}/">{{ ann.subject|escape }}</a></td>
|
||||
<td>{{ ann.to_name }}</td>
|
||||
<td>{{ m.time|date:"Y-M-d" }}</td>
|
||||
<td style="max-width:50%"><a href="{% url nomcom_announcement message_id=m.id %}">{{ m.subject|escape }}</a></td>
|
||||
<td>{{ m.to_name }}</td>
|
||||
<tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endfor %}
|
||||
|
||||
<hr>
|
||||
<hr style="margin: 2em 0; color: #ddd">
|
||||
|
||||
{# somebody ought to import these announcements in the DB instead of this mess #}
|
||||
|
|
@ -50,7 +50,7 @@ urlpatterns = patterns('',
|
|||
(r'^accounts/', include('ietf.ietfauth.urls')),
|
||||
(r'^admin/', include(admin.site.urls)),
|
||||
(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
||||
(r'^ann/', include('ietf.announcements.urls')),
|
||||
(r'^ann/', include('ietf.nomcom.redirect_ann_urls')),
|
||||
(r'^community/', include('ietf.community.urls')),
|
||||
(r'^cookies/', include('ietf.cookies.urls')),
|
||||
(r'^doc/', include('ietf.doc.urls')),
|
||||
|
|
Loading…
Reference in a new issue