Skip to content

Commit e3c3b71

Browse files
committed
Add a view of past meetings. Commit ready for merge.
- Legacy-Id: 12315
1 parent f68d0c6 commit e3c3b71

6 files changed

Lines changed: 176 additions & 2 deletions

File tree

ietf/meeting/tests_views.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,19 @@ def test_interim_approve_by_secretariat(self):
672672
for session in meeting.session_set.all():
673673
self.assertEqual(session.status.slug, 'scheda')
674674

675+
def test_past(self):
676+
today = datetime.date.today()
677+
last_week = today - datetime.timedelta(days=7)
678+
ietf = SessionFactory(meeting__type_id='ietf',meeting__date=last_week,group__state_id='active',group__parent=GroupFactory(state_id='active'))
679+
interim = SessionFactory(meeting__type_id='interim',meeting__date=last_week,status_id='canceled',group__state_id='active',group__parent=GroupFactory(state_id='active'))
680+
url = urlreverse('ietf.meeting.views.past')
681+
r = self.client.get(url)
682+
self.assertEqual(r.status_code, 200)
683+
self.assertTrue('IETF - %02d'%int(ietf.meeting.number) in unicontent(r))
684+
q = PyQuery(r.content)
685+
id="-%s" % interim.group.acronym
686+
self.assertTrue('CANCELLED' in q('[id*="'+id+'"]').text())
687+
675688
def test_upcoming(self):
676689
make_meeting_test_data()
677690
url = urlreverse("ietf.meeting.views.upcoming")

ietf/meeting/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
url(r'^interim/request/(?P<number>[A-Za-z0-9._+-]+)/cancel/?$', views.interim_request_cancel),
9696
url(r'^interim/pending/?$', views.interim_pending),
9797
url(r'^requests.html$', RedirectView.as_view(url='/meeting/requests', permanent=True)),
98+
url(r'^past/?$', views.past),
9899
url(r'^upcoming/?$', views.upcoming),
99100
url(r'^upcoming.ics/?$', views.upcoming_ical),
100101
# Then patterns from more specific to less

ietf/meeting/views.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,6 +1883,36 @@ def interim_request_edit(request, number):
18831883
"form": form,
18841884
"formset": formset})
18851885

1886+
@cache_page(60*60)
1887+
def past(request):
1888+
'''List of past meetings'''
1889+
today = datetime.datetime.today()
1890+
meetings = Meeting.objects.filter(date__lte=today).exclude(
1891+
session__status__in=('apprw', 'scheda', 'canceledpa')).order_by('-date')
1892+
1893+
# extract groups hierarchy for display filter
1894+
seen = set()
1895+
groups = [m.session_set.first().group for m
1896+
in meetings.filter(type='interim')]
1897+
group_parents = []
1898+
for g in groups:
1899+
if g.parent.acronym not in seen:
1900+
group_parents.append(g.parent)
1901+
seen.add(g.parent.acronym)
1902+
1903+
seen = set()
1904+
for p in group_parents:
1905+
p.group_list = []
1906+
for g in groups:
1907+
if g.acronym not in seen and g.parent == p:
1908+
p.group_list.append(g)
1909+
seen.add(g.acronym)
1910+
1911+
p.group_list.sort(key=lambda g: g.acronym)
1912+
1913+
return render(request, 'meeting/past.html', {
1914+
'meetings': meetings,
1915+
'group_parents': group_parents})
18861916

18871917
def upcoming(request):
18881918
'''List of upcoming meetings'''

ietf/templates/base/menu.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
<li><a href="/meeting/">Materials</a></li>
8787
<li><a href="https://www.ietf.org/meeting/proceedings.html">Past proceedings</a></li>
8888
<li><a href="/meeting/upcoming">Upcoming</a></li>
89+
<li><a href="/meeting/past">Past</a></li>
8990
<li><a href="/secr/sreq/">Request a session</a></li>
9091
<li><a href="/meeting/requests">Session requests</a></li>
9192
{% if flavor == "top" %}</ul>{% endif %}

ietf/templates/meeting/past.html

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
{% extends "base.html" %}
2+
{# Copyright The IETF Trust 2015, All Rights Reserved #}
3+
{% load origin %}
4+
5+
{% load ietf_filters staticfiles %}
6+
7+
{% block pagehead %}
8+
<link rel="stylesheet" href="{% static "jquery.tablesorter/css/theme.bootstrap.min.css" %}">
9+
{% endblock %}
10+
11+
{% block bodyAttrs %}data-spy="scroll" data-target="#affix"{% endblock %}
12+
13+
{% block title %}Past Meetings{% endblock %}
14+
15+
{% block content %}
16+
{% origin %}
17+
<div class="row">
18+
<div class="col-md-10">
19+
20+
<h1>Past Meetings</h1>
21+
22+
<div class="panel-group" id="accordion">
23+
<div class="panel panel-default">
24+
<div class="panel-heading">
25+
<h4 class="panel-title">
26+
<a data-toggle="collapse" data-parent="#accordion" href="#customize">
27+
<span class="fa fa-caret-down"></span> Customize the meeting list...
28+
</a>
29+
</h4>
30+
</div> <!-- panel-heading -->
31+
32+
<div id="customize" class="panel-collapse collapse">
33+
<div class="panel-body">
34+
<p>
35+
You can customize the list to show only selected groups
36+
by clicking on groups and areas in the table below.
37+
To be able to return to the customized view later, bookmark the resulting URL.
38+
</p>
39+
40+
{% if group_parents|length %}
41+
<p>Groups displayed in <b><i>italics</i></b> are BOFs.</p>
42+
43+
<table class="table table-condensed">
44+
<thead>
45+
<tr>
46+
{% for p in group_parents %}
47+
<th style="width:{% widthratio 1 group_parents|length 100 %}%">
48+
<button class="btn btn-default btn-block pickview {{p.acronym|lower}}">{{p.acronym|upper}}</button>
49+
</th>
50+
{% endfor %}
51+
</tr>
52+
</thead>
53+
<tbody>
54+
<tr>
55+
{% for p in group_parents %}
56+
<td class="view {{p.acronym|lower}}">
57+
<div class="btn-group-vertical btn-block">
58+
{% for group in p.group_list %}
59+
<div class="btn-group btn-group-xs btn-group-justified">
60+
<button class="btn btn-default pickview {{group.acronym}}">
61+
{% if group.is_bof %}
62+
<i>{{group.acronym}}</i>
63+
{% else %}
64+
{{group.acronym}}
65+
{% endif %}
66+
</button>
67+
</div> <!-- button-group -->
68+
{% endfor %}
69+
</div> <!-- button-group-vertical -->
70+
</td>
71+
{% endfor %}
72+
</tr>
73+
</tbody>
74+
</table>
75+
{% else %}
76+
<blockquote><i>No past meetings are available.</i></blockquote>
77+
{% endif %}
78+
79+
</div> <!-- panel-body -->
80+
</div> <!-- panel-collapse -->
81+
</div> <!-- panel -->
82+
</div> <!-- panel-group -->
83+
84+
{% if meetings %}
85+
<h3></h3>
86+
<table class="table table-condensed table-striped tablesorter">
87+
<thead>
88+
<tr>
89+
<th>Date</th>
90+
<th>Group</th>
91+
<th>Name</th>
92+
</tr>
93+
</thead>
94+
<tbody>
95+
{% for meeting in meetings %}
96+
{% if meeting.type.slug == 'interim' %}
97+
<tr id="row-{{ forloop.counter }}-{{ meeting.session_set.first.group.parent.acronym }}-{{ meeting.session_set.first.group.acronym }}">
98+
{% else %}
99+
<tr id="row-{{ forloop.counter }}-ietf">
100+
{% endif %}
101+
<td>{{ meeting.date }}</td>
102+
{% if meeting.type.slug == 'interim' %}
103+
<td>{{ meeting.session_set.all.0.group.acronym }}</td>
104+
{% else %}
105+
<td>ietf</td>
106+
{% endif %}
107+
<td>
108+
{% if meeting.type.slug == "interim" %}
109+
<a href="{% url 'ietf.meeting.views.session_details' num=meeting.number acronym=meeting.session_set.all.0.group.acronym %}">{{ meeting.number }}{% if meeting.session_set.all.0.status.slug == "canceled" %}&nbsp&nbsp<span class="label label-warning">CANCELLED</span>{% endif %}</a>
110+
{% else %}
111+
<a href="{% url 'ietf.meeting.views.agenda' num=meeting.number %}">IETF - {{ meeting.number }}</a>
112+
{% endif %}
113+
</td>
114+
</tr>
115+
{% endfor %}
116+
</tbody>
117+
</table>
118+
{% else %}
119+
<h3>No past meetings</h3>
120+
{% endif %}
121+
122+
</div>
123+
</div>
124+
{% endblock %}
125+
126+
{% block js %}
127+
<script src="{% static "jquery.tablesorter/js/jquery.tablesorter.combined.min.js" %}"></script>
128+
<script src="{% static 'ietf/js/toggle-visibility.js' %}"></script>
129+
{% endblock %}

ietf/templates/meeting/upcoming.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010

1111
{% block bodyAttrs %}data-spy="scroll" data-target="#affix"{% endblock %}
1212

13-
{% block title %}Upcoming IETF Meetings{% endblock %}
13+
{% block title %}Upcoming Meetings{% endblock %}
1414

1515
{% block content %}
1616
{% origin %}
1717
<div class="row">
1818
<div class="col-md-10">
1919

20-
<h1>IETF Upcoming Meetings</h1>
20+
<h1>Upcoming Meetings</h1>
2121

2222
<p>For more on regular IETF meetings see <a href="https://www.ietf.org/meeting/upcoming.html">here</a></p>
2323
<div class="panel-group" id="accordion">

0 commit comments

Comments
 (0)