change main menu meeting->upcoming, add navigation tabs
- Legacy-Id: 11127
This commit is contained in:
parent
bd96d89c85
commit
f46fdcfa14
ietf
meeting
templates
|
@ -341,6 +341,36 @@ class EditTests(TestCase):
|
|||
# -------------------------------------------------
|
||||
|
||||
class InterimTests(TestCase):
|
||||
def check_interim_tabs(self, url):
|
||||
'''Helper function to check interim meeting list tabs'''
|
||||
# no logged in - no tabs
|
||||
r = self.client.get(url)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEqual(len(q("ul.nav-tabs")),0)
|
||||
# plain user - no tabs
|
||||
username = "plain"
|
||||
self.client.login(username=username, password= username + "+password")
|
||||
r = self.client.get(url)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEqual(len(q("ul.nav-tabs")),0)
|
||||
self.client.logout()
|
||||
# privileged user
|
||||
username = "ad"
|
||||
self.client.login(username=username, password= username + "+password")
|
||||
r = self.client.get(url)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEqual(len(q("a:contains('Pending')")),1)
|
||||
self.assertEqual(len(q("a:contains('Announce')")),0)
|
||||
self.client.logout()
|
||||
# secretariat
|
||||
username = "ad"
|
||||
self.client.login(username=username, password= username + "+password")
|
||||
r = self.client.get(url)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEqual(len(q("a:contains('Pending')")),1)
|
||||
self.assertEqual(len(q("a:contains('Announce')")),1)
|
||||
self.client.logout()
|
||||
|
||||
def test_interim_announce(self):
|
||||
make_meeting_test_data()
|
||||
url = urlreverse("ietf.meeting.views.interim_announce")
|
||||
|
@ -373,7 +403,8 @@ class InterimTests(TestCase):
|
|||
|
||||
def test_upcoming(self):
|
||||
make_meeting_test_data()
|
||||
r = self.client.get("/meeting/upcoming/")
|
||||
url = urlreverse("ietf.meeting.views.upcoming")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
today = datetime.date.today()
|
||||
mars_interim = Meeting.objects.filter(date__gt=today,type='interim',session__group__acronym='mars',session__status='sched').first()
|
||||
|
@ -383,6 +414,7 @@ class InterimTests(TestCase):
|
|||
# cancelled session
|
||||
q = PyQuery(r.content)
|
||||
self.assertTrue('CANCELLED' in q('[id*="-ames"]').text())
|
||||
self.check_interim_tabs(url)
|
||||
|
||||
def test_upcoming_ics(self):
|
||||
make_meeting_test_data()
|
||||
|
@ -598,6 +630,7 @@ class InterimTests(TestCase):
|
|||
self.assertEqual(len(q("#pending-interim-meetings-table tr"))-1, count)
|
||||
self.client.logout()
|
||||
|
||||
|
||||
def test_can_approve_interim_request(self):
|
||||
make_meeting_test_data()
|
||||
# unprivileged user
|
||||
|
|
|
@ -46,6 +46,16 @@ from ietf.utils.pdf import pdf_pages
|
|||
from .forms import InterimRequestForm, InterimSessionForm
|
||||
|
||||
|
||||
def get_menu_entries(request):
|
||||
'''Setup menu entries for interim meeting view tabs'''
|
||||
entries = []
|
||||
if has_role(request.user, ('Area Director','Secretariat','IRTF Chair','WG Chair', 'RG Chair')):
|
||||
entries.append(("Upcoming", reverse("ietf.meeting.views.upcoming")))
|
||||
entries.append(("Pending", reverse("ietf.meeting.views.interim_pending")))
|
||||
if has_role(request.user, "Secretariat"):
|
||||
entries.append(("Announce", reverse("ietf.meeting.views.interim_announce")))
|
||||
return entries
|
||||
|
||||
# -------------------------------------------------
|
||||
# View Functions
|
||||
# -------------------------------------------------
|
||||
|
@ -908,8 +918,13 @@ def ajax_get_utc(request):
|
|||
def interim_announce(request):
|
||||
'''View which shows interim meeting requests awaiting announcement'''
|
||||
meetings = Meeting.objects.filter(type='interim',session__status='scheda')
|
||||
menu_entries = get_menu_entries(request)
|
||||
selected_menu_entry = 'announce'
|
||||
|
||||
return render(request, "meeting/interim_announce.html", {"meetings":meetings})
|
||||
return render(request, "meeting/interim_announce.html", {
|
||||
'menu_entries': menu_entries,
|
||||
'selected_menu_entry': selected_menu_entry,
|
||||
'meetings' :meetings})
|
||||
|
||||
@role_required('Secretariat',)
|
||||
def interim_send_announcement(request,number):
|
||||
|
@ -922,13 +937,19 @@ def interim_send_announcement(request,number):
|
|||
def interim_pending(request):
|
||||
'''View which shows interim meeting requests pending approval'''
|
||||
meetings = Meeting.objects.filter(type='interim',session__status='apprw')
|
||||
menu_entries = get_menu_entries(request)
|
||||
selected_menu_entry = 'pending'
|
||||
|
||||
|
||||
meetings = [ m for m in meetings if can_view_interim_request(m,request.user)]
|
||||
for meeting in meetings:
|
||||
if can_approve_interim_request(meeting,request.user):
|
||||
meeting.can_approve = True
|
||||
|
||||
return render(request, "meeting/interim_pending.html", {"meetings":meetings})
|
||||
return render(request, "meeting/interim_pending.html", {
|
||||
'menu_entries': menu_entries,
|
||||
'selected_menu_entry':selected_menu_entry,
|
||||
'meetings': meetings})
|
||||
|
||||
@role_required('Area Director','Secretariat','IRTF Chair','WG Chair', 'RG Chair')
|
||||
def interim_request(request):
|
||||
|
@ -1004,7 +1025,7 @@ def upcoming(request):
|
|||
today = datetime.datetime.today()
|
||||
meetings = Meeting.objects.filter(date__gte=today,session__status__in=('sched','canceled')).order_by('date')
|
||||
|
||||
# extract groups hierarchy
|
||||
# extract groups hierarchy for display filter
|
||||
seen = set()
|
||||
groups = [ m.session_set.first().group for m in meetings.filter(type='interim') ]
|
||||
group_parents = []
|
||||
|
@ -1023,6 +1044,10 @@ def upcoming(request):
|
|||
|
||||
p.group_list.sort(key=lambda g: g.acronym)
|
||||
|
||||
# add menu entries
|
||||
menu_entries = get_menu_entries(request)
|
||||
selected_menu_entry = 'upcoming'
|
||||
|
||||
# add menu actions
|
||||
actions = []
|
||||
if can_request_interim_meeting(request.user):
|
||||
|
@ -1031,5 +1056,7 @@ def upcoming(request):
|
|||
return render(request, "meeting/upcoming.html",
|
||||
{ 'meetings':meetings,
|
||||
'menu_actions': actions,
|
||||
'menu_entries': menu_entries,
|
||||
'selected_menu_entry':selected_menu_entry,
|
||||
'group_parents':group_parents,
|
||||
})
|
|
@ -85,7 +85,7 @@
|
|||
<li><a href="/meeting/agenda/">Agenda</a></li>
|
||||
<li><a href="/meeting/">Materials</a></li>
|
||||
<li><a href="https://www.ietf.org/meeting/proceedings.html">Past proceedings</a></li>
|
||||
<li><a href="https://www.ietf.org/meeting/upcoming.html">Upcoming</a></li>
|
||||
<li><a href="/meeting/upcoming">Upcoming</a></li>
|
||||
<li><a href="/secr/sreq/">Request a session</a></li>
|
||||
<li><a href="/meeting/requests">Session requests</a></li>
|
||||
{% if flavor == "top" %}</ul>{% endif %}
|
||||
|
|
|
@ -14,6 +14,16 @@
|
|||
{% origin %}
|
||||
<h1>Announce Interim Meeting</h1>
|
||||
|
||||
{% if menu_entries %}
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
{% for name, url in menu_entries %}
|
||||
<li {% if selected_menu_entry == name.lower %}class="active"{% endif %}>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if meetings %}
|
||||
<table id="announce-interim-meetings-table" class="table table-condensed table-striped">
|
||||
<thead>
|
||||
|
|
|
@ -14,6 +14,15 @@
|
|||
{% origin %}
|
||||
<h1>Pending Interim Meetings</h1>
|
||||
|
||||
{% if menu_entries %}
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
{% for name, url in menu_entries %}
|
||||
<li {% if selected_menu_entry == name.lower %}class="active"{% endif %}>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if meetings %}
|
||||
<table id="pending-interim-meetings-table" class="table table-condensed table-striped">
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
<h1>IETF Upcoming Meetings</h1>
|
||||
|
||||
<p>See also <a href="https://www.ietf.org/meeting/upcoming.html">here</a></p>
|
||||
<div class="panel-group" id="accordion">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
|
@ -81,6 +82,16 @@
|
|||
</div> <!-- panel -->
|
||||
</div> <!-- panel-group -->
|
||||
|
||||
{% if menu_entries %}
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
{% for name, url in menu_entries %}
|
||||
<li {% if selected_menu_entry == name.lower %}class="active"{% endif %}>
|
||||
<a href="{{ url }}">{{ name }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if menu_actions %}
|
||||
<div class="buttonlist">
|
||||
{% for name, url in menu_actions %}
|
||||
|
|
Loading…
Reference in a new issue