@@ -3582,7 +3582,7 @@ def err(code, text):
35823582 return HttpResponse ("Done" , status = 200 , content_type = 'text/plain' )
35833583
35843584
3585- def important_dates (request , num = None ):
3585+ def important_dates (request , num = None , output_format = None ):
35863586 assert num is None or num .isdigit ()
35873587 preview_roles = ['Area Director' , 'Secretariat' , 'IETF Chair' , 'IAD' , ]
35883588
@@ -3602,8 +3602,24 @@ def important_dates(request, num=None):
36023602 or (user and user .is_authenticated and has_role (user , preview_roles ))):
36033603 meetings .append (future_meeting )
36043604
3605- context = {'meetings' :meetings }
3606- return render (request , 'meeting/important-dates.html' , context )
3605+ if output_format == 'ics' :
3606+ for m in meetings :
3607+ m .cached_updated = m .updated ()
3608+ m .important_dates = m .importantdate_set .prefetch_related ("name" )
3609+ for d in m .important_dates :
3610+ d .midnight_cutoff = "UTC 23:59" in d .name .name
3611+
3612+ ics = render_to_string ('meeting/important_dates.ics' , {
3613+ 'meetings' : meetings ,
3614+ }, request = request )
3615+ # icalendar response file should have '\r\n' line endings per RFC5545
3616+ response = HttpResponse (re .sub ("\r (?!\n )|(?<!\r )\n " , "\r \n " , ics ), content_type = 'text/calendar' )
3617+ response ['Content-Disposition' ] = 'attachment; filename="important-dates.ics"'
3618+ return response
3619+
3620+ return render (request , 'meeting/important-dates.html' , {
3621+ 'meetings' : meetings
3622+ })
36073623
36083624TimeSlotTypeForm = modelform_factory (TimeSlot , fields = ('type' ,))
36093625
0 commit comments