Skip to content

Commit f46fdcf

Browse files
committed
change main menu meeting->upcoming, add navigation tabs
- Legacy-Id: 11127
1 parent bd96d89 commit f46fdcf

6 files changed

Lines changed: 95 additions & 5 deletions

File tree

ietf/meeting/tests_views.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,36 @@ def test_slot_to_the_right(self):
341341
# -------------------------------------------------
342342

343343
class InterimTests(TestCase):
344+
def check_interim_tabs(self, url):
345+
'''Helper function to check interim meeting list tabs'''
346+
# no logged in - no tabs
347+
r = self.client.get(url)
348+
q = PyQuery(r.content)
349+
self.assertEqual(len(q("ul.nav-tabs")),0)
350+
# plain user - no tabs
351+
username = "plain"
352+
self.client.login(username=username, password= username + "+password")
353+
r = self.client.get(url)
354+
q = PyQuery(r.content)
355+
self.assertEqual(len(q("ul.nav-tabs")),0)
356+
self.client.logout()
357+
# privileged user
358+
username = "ad"
359+
self.client.login(username=username, password= username + "+password")
360+
r = self.client.get(url)
361+
q = PyQuery(r.content)
362+
self.assertEqual(len(q("a:contains('Pending')")),1)
363+
self.assertEqual(len(q("a:contains('Announce')")),0)
364+
self.client.logout()
365+
# secretariat
366+
username = "ad"
367+
self.client.login(username=username, password= username + "+password")
368+
r = self.client.get(url)
369+
q = PyQuery(r.content)
370+
self.assertEqual(len(q("a:contains('Pending')")),1)
371+
self.assertEqual(len(q("a:contains('Announce')")),1)
372+
self.client.logout()
373+
344374
def test_interim_announce(self):
345375
make_meeting_test_data()
346376
url = urlreverse("ietf.meeting.views.interim_announce")
@@ -373,7 +403,8 @@ def test_interim_approve(self):
373403

374404
def test_upcoming(self):
375405
make_meeting_test_data()
376-
r = self.client.get("/meeting/upcoming/")
406+
url = urlreverse("ietf.meeting.views.upcoming")
407+
r = self.client.get(url)
377408
self.assertEqual(r.status_code, 200)
378409
today = datetime.date.today()
379410
mars_interim = Meeting.objects.filter(date__gt=today,type='interim',session__group__acronym='mars',session__status='sched').first()
@@ -383,6 +414,7 @@ def test_upcoming(self):
383414
# cancelled session
384415
q = PyQuery(r.content)
385416
self.assertTrue('CANCELLED' in q('[id*="-ames"]').text())
417+
self.check_interim_tabs(url)
386418

387419
def test_upcoming_ics(self):
388420
make_meeting_test_data()
@@ -598,6 +630,7 @@ def test_interim_pending(self):
598630
self.assertEqual(len(q("#pending-interim-meetings-table tr"))-1, count)
599631
self.client.logout()
600632

633+
601634
def test_can_approve_interim_request(self):
602635
make_meeting_test_data()
603636
# unprivileged user

ietf/meeting/views.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@
4646
from .forms import InterimRequestForm, InterimSessionForm
4747

4848

49+
def get_menu_entries(request):
50+
'''Setup menu entries for interim meeting view tabs'''
51+
entries = []
52+
if has_role(request.user, ('Area Director','Secretariat','IRTF Chair','WG Chair', 'RG Chair')):
53+
entries.append(("Upcoming", reverse("ietf.meeting.views.upcoming")))
54+
entries.append(("Pending", reverse("ietf.meeting.views.interim_pending")))
55+
if has_role(request.user, "Secretariat"):
56+
entries.append(("Announce", reverse("ietf.meeting.views.interim_announce")))
57+
return entries
58+
4959
# -------------------------------------------------
5060
# View Functions
5161
# -------------------------------------------------
@@ -908,8 +918,13 @@ def ajax_get_utc(request):
908918
def interim_announce(request):
909919
'''View which shows interim meeting requests awaiting announcement'''
910920
meetings = Meeting.objects.filter(type='interim',session__status='scheda')
921+
menu_entries = get_menu_entries(request)
922+
selected_menu_entry = 'announce'
911923

912-
return render(request, "meeting/interim_announce.html", {"meetings":meetings})
924+
return render(request, "meeting/interim_announce.html", {
925+
'menu_entries': menu_entries,
926+
'selected_menu_entry': selected_menu_entry,
927+
'meetings' :meetings})
913928

914929
@role_required('Secretariat',)
915930
def interim_send_announcement(request,number):
@@ -922,13 +937,19 @@ def interim_send_announcement(request,number):
922937
def interim_pending(request):
923938
'''View which shows interim meeting requests pending approval'''
924939
meetings = Meeting.objects.filter(type='interim',session__status='apprw')
940+
menu_entries = get_menu_entries(request)
941+
selected_menu_entry = 'pending'
942+
925943

926944
meetings = [ m for m in meetings if can_view_interim_request(m,request.user)]
927945
for meeting in meetings:
928946
if can_approve_interim_request(meeting,request.user):
929947
meeting.can_approve = True
930948

931-
return render(request, "meeting/interim_pending.html", {"meetings":meetings})
949+
return render(request, "meeting/interim_pending.html", {
950+
'menu_entries': menu_entries,
951+
'selected_menu_entry':selected_menu_entry,
952+
'meetings': meetings})
932953

933954
@role_required('Area Director','Secretariat','IRTF Chair','WG Chair', 'RG Chair')
934955
def interim_request(request):
@@ -1004,7 +1025,7 @@ def upcoming(request):
10041025
today = datetime.datetime.today()
10051026
meetings = Meeting.objects.filter(date__gte=today,session__status__in=('sched','canceled')).order_by('date')
10061027

1007-
# extract groups hierarchy
1028+
# extract groups hierarchy for display filter
10081029
seen = set()
10091030
groups = [ m.session_set.first().group for m in meetings.filter(type='interim') ]
10101031
group_parents = []
@@ -1023,6 +1044,10 @@ def upcoming(request):
10231044

10241045
p.group_list.sort(key=lambda g: g.acronym)
10251046

1047+
# add menu entries
1048+
menu_entries = get_menu_entries(request)
1049+
selected_menu_entry = 'upcoming'
1050+
10261051
# add menu actions
10271052
actions = []
10281053
if can_request_interim_meeting(request.user):
@@ -1031,5 +1056,7 @@ def upcoming(request):
10311056
return render(request, "meeting/upcoming.html",
10321057
{ 'meetings':meetings,
10331058
'menu_actions': actions,
1059+
'menu_entries': menu_entries,
1060+
'selected_menu_entry':selected_menu_entry,
10341061
'group_parents':group_parents,
10351062
})

ietf/templates/base/menu.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
<li><a href="/meeting/agenda/">Agenda</a></li>
8686
<li><a href="/meeting/">Materials</a></li>
8787
<li><a href="https://www.ietf.org/meeting/proceedings.html">Past proceedings</a></li>
88-
<li><a href="https://www.ietf.org/meeting/upcoming.html">Upcoming</a></li>
88+
<li><a href="/meeting/upcoming">Upcoming</a></li>
8989
<li><a href="/secr/sreq/">Request a session</a></li>
9090
<li><a href="/meeting/requests">Session requests</a></li>
9191
{% if flavor == "top" %}</ul>{% endif %}

ietf/templates/meeting/interim_announce.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414
{% origin %}
1515
<h1>Announce Interim Meeting</h1>
1616

17+
{% if menu_entries %}
18+
<ul class="nav nav-tabs" role="tablist">
19+
{% for name, url in menu_entries %}
20+
<li {% if selected_menu_entry == name.lower %}class="active"{% endif %}>
21+
<a href="{{ url }}">{{ name }}</a>
22+
</li>
23+
{% endfor %}
24+
</ul>
25+
{% endif %}
26+
1727
{% if meetings %}
1828
<table id="announce-interim-meetings-table" class="table table-condensed table-striped">
1929
<thead>

ietf/templates/meeting/interim_pending.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@
1414
{% origin %}
1515
<h1>Pending Interim Meetings</h1>
1616

17+
{% if menu_entries %}
18+
<ul class="nav nav-tabs" role="tablist">
19+
{% for name, url in menu_entries %}
20+
<li {% if selected_menu_entry == name.lower %}class="active"{% endif %}>
21+
<a href="{{ url }}">{{ name }}</a>
22+
</li>
23+
{% endfor %}
24+
</ul>
25+
{% endif %}
1726

1827
{% if meetings %}
1928
<table id="pending-interim-meetings-table" class="table table-condensed table-striped">

ietf/templates/meeting/upcoming.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
<h1>IETF Upcoming Meetings</h1>
2121

22+
<p>See also <a href="https://www.ietf.org/meeting/upcoming.html">here</a></p>
2223
<div class="panel-group" id="accordion">
2324
<div class="panel panel-default">
2425
<div class="panel-heading">
@@ -81,6 +82,16 @@ <h4 class="panel-title">
8182
</div> <!-- panel -->
8283
</div> <!-- panel-group -->
8384

85+
{% if menu_entries %}
86+
<ul class="nav nav-tabs" role="tablist">
87+
{% for name, url in menu_entries %}
88+
<li {% if selected_menu_entry == name.lower %}class="active"{% endif %}>
89+
<a href="{{ url }}">{{ name }}</a>
90+
</li>
91+
{% endfor %}
92+
</ul>
93+
{% endif %}
94+
8495
{% if menu_actions %}
8596
<div class="buttonlist">
8697
{% for name, url in menu_actions %}

0 commit comments

Comments
 (0)