From 92864c233d2e8c13a71dd876056e95e05f0e6322 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Fri, 2 Mar 2018 16:37:58 +0000 Subject: [PATCH] Refactored ical_agenda() to be more general. Added parameters and code to permit generation of per-group and per-session ical pages. Added url entries for per-group and per-session ical pages. Changed some parameter names to better reflect their semantics ('session'->'acronym'). - Legacy-Id: 14717 --- ietf/meeting/urls.py | 6 ++++-- ietf/meeting/views.py | 26 ++++++++++++++++---------- ietf/templates/meeting/agenda.html | 2 +- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/ietf/meeting/urls.py b/ietf/meeting/urls.py index 2c15b1ffb..f6f4fe496 100644 --- a/ietf/meeting/urls.py +++ b/ietf/meeting/urls.py @@ -49,8 +49,8 @@ type_ietf_only_patterns = [ url(r'^timeslot/(?P\d+).json$', ajax.timeslot_sloturl), url(r'^agendas$', ajax.agenda_infosurl), url(r'^agendas.json$', ajax.agenda_infosurl), - url(r'^agenda/(?P[A-Za-z0-9-]+)-drafts.pdf$', views.session_draft_pdf), - url(r'^agenda/(?P[A-Za-z0-9-]+)-drafts.tgz$', views.session_draft_tarfile), + url(r'^agenda/(?P[-a-z0-9]+)-drafts.pdf$', views.session_draft_pdf), + url(r'^agenda/(?P[-a-z0-9]+)-drafts.tgz$', views.session_draft_tarfile), url(r'^sessions.json', ajax.sessions_json), url(r'^session/(?P\d+).json', ajax.session_json), url(r'^session/(?P\d+)/constraints.json', ajax.session_constraints), @@ -73,6 +73,8 @@ type_ietf_only_patterns_id_optional = [ url(r'^requests$', views.meeting_requests), url(r'^agenda/agenda.ics$', views.ical_agenda), url(r'^agenda.ics$', views.ical_agenda), + url(r'^session/(?P\d+)\.ics$', views.ical_agenda), + url(r'^session/(?P[-a-z0-9]+).ics$', views.ical_agenda), url(r'^agenda.json$', views.json_agenda), url(r'^agenda/week-view(?:.html)?/?$', views.week_view), url(r'^agenda/room-view(?:.html)?/?$', views.room_view), diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 1a19c5317..075fe598f 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -607,11 +607,11 @@ def agenda_by_type_ics(request,num=None,type=None): updated = meeting.updated() return render(request,"meeting/agenda.ics",{"schedule":schedule,"updated":updated,"assignments":assignments},content_type="text/calendar") -def session_draft_list(num, session): +def session_draft_list(num, acronym): try: agendas = Document.objects.filter(type="agenda", session__meeting__number=num, - session__group__acronym=session, + session__group__acronym=acronym, states=State.objects.get(type="agenda", slug="active")).distinct() except Document.DoesNotExist: raise Http404 @@ -636,18 +636,18 @@ def session_draft_list(num, session): except Document.DoesNotExist: pass - for sp in SessionPresentation.objects.filter(session__meeting__number=num, session__group__acronym=session, document__type='draft'): + for sp in SessionPresentation.objects.filter(session__meeting__number=num, session__group__acronym=acronym, document__type='draft'): doc_name = sp.document.name + "-" + sp.document.rev if doc_name not in result: result.append(doc_name) return sorted(result) -def session_draft_tarfile(request, num, session): - drafts = session_draft_list(num, session); +def session_draft_tarfile(request, num, acronym): + drafts = session_draft_list(num, acronym); response = HttpResponse(content_type='application/octet-stream') - response['Content-Disposition'] = 'attachment; filename=%s-drafts.tgz'%(session) + response['Content-Disposition'] = 'attachment; filename=%s-drafts.tgz'%(acronym) tarstream = tarfile.open('','w:gz',response) mfh, mfn = mkstemp() os.close(mfh) @@ -674,8 +674,8 @@ def session_draft_tarfile(request, num, session): os.unlink(mfn) return response -def session_draft_pdf(request, num, session): - drafts = session_draft_list(num, session); +def session_draft_pdf(request, num, acronym): + drafts = session_draft_list(num, acronym); curr_page = 1 pmh, pmn = mkstemp() os.close(pmh) @@ -829,7 +829,7 @@ def room_view(request, num=None, name=None, owner=None): template = "meeting/room-view.html" return render(request, template,{"meeting":meeting,"schedule":schedule,"unavailable":unavailable,"assignments":assignments,"rooms":rooms,"days":days}) -def ical_agenda(request, num=None, name=None, ext=None): +def ical_agenda(request, num=None, name=None, acronym=None, session_id=None): meeting = get_meeting(num) schedule = get_schedule(meeting, name) updated = meeting.updated() @@ -863,12 +863,18 @@ def ical_agenda(request, num=None, name=None, ext=None): assignments = schedule.assignments.exclude(timeslot__type__in=['lead','offagenda']) assignments = preprocess_assignments_for_agenda(assignments, meeting) - assignments = [a for a in assignments if + if q: + assignments = [a for a in assignments if (a.timeslot.type_id in include_types or (a.session.historic_group and a.session.historic_group.acronym in include) or (a.session.historic_group and a.session.historic_group.historic_parent and a.session.historic_group.historic_parent.acronym in include)) and (not a.session.historic_group or a.session.historic_group.acronym not in exclude)] + if acronym: + assignments = [ a for a in assignments if a.session.historic_group and a.session.historic_group.acronym == acronym ] + elif session_id: + assignments = [ a for a in assignments if a.session_id == int(session_id) ] + return render(request, "meeting/agenda.ics", { "schedule": schedule, "assignments": assignments, diff --git a/ietf/templates/meeting/agenda.html b/ietf/templates/meeting/agenda.html index 237748792..1206bbe5b 100644 --- a/ietf/templates/meeting/agenda.html +++ b/ietf/templates/meeting/agenda.html @@ -130,7 +130,7 @@ {% for p in group_parents %} {{p.acronym|upper}} {% endfor %} - Non-area events + Non-area events