Update links in iCal description to be more useful. Fixes #3349. Commit ready for merge.

- Legacy-Id: 19384
This commit is contained in:
Jennifer Richards 2021-09-22 21:52:21 +00:00
parent fc9864114b
commit 7d59456103
3 changed files with 33 additions and 9 deletions

View file

@ -5,6 +5,7 @@
import bleach
import datetime
import re
from urllib.parse import urljoin
from email.utils import parseaddr
@ -413,7 +414,6 @@ def format_snippet(text, trunc_words=25):
@register.simple_tag
def doc_edit_button(url_name, *args, **kwargs):
"""Given URL name/args/kwargs, looks up the URL just like "url" tag and returns a properly formatted button for the document material tables."""
from django.urls import reverse as urlreverse
return mark_safe('<a class="btn btn-default btn-xs" href="%s">Edit</a>' % (urlreverse(url_name, args=args, kwargs=kwargs)))
@register.filter
@ -613,3 +613,11 @@ def action_holder_badge(action_holder):
else:
return '' # no alert needed
@register.simple_tag
def absurl(viewname, **kwargs):
"""Get the absolute URL for a view by name
Uses settings.IDTRACKER_BASE_URL as the base.
"""
return urljoin(settings.IDTRACKER_BASE_URL, urlreverse(viewname, kwargs=kwargs))

View file

@ -247,6 +247,7 @@ class MeetingTests(BaseMeetingTestCase):
# iCal
r = self.client.get(urlreverse("ietf.meeting.views.agenda_ical", kwargs=dict(num=meeting.number))
+ "?show=" + session.group.parent.acronym.upper())
assert_ical_response_is_valid(self, r)
self.assertContains(r, session.group.acronym)
self.assertContains(r, session.group.name)
self.assertContains(r, slot.location.name)
@ -254,9 +255,18 @@ class MeetingTests(BaseMeetingTestCase):
self.assertContains(r, "END:VTIMEZONE")
self.assertContains(r, session.agenda().get_href())
self.assertContains(r, session.materials.filter(type='slides').exclude(states__type__slug='slides',states__slug='deleted').first().get_href())
# TODO - the ics view uses .all on a queryset in a view so it's showing the deleted slides.
#self.assertNotContains(r, session.materials.filter(type='slides',states__type__slug='slides',states__slug='deleted').first().get_absolute_url())
self.assertContains(
r,
urlreverse(
'ietf.meeting.views.session_details',
kwargs=dict(num=meeting.number, acronym=session.group.acronym)),
msg_prefix='ical should contain link to meeting materials page for session')
self.assertContains(
r,
urlreverse(
'ietf.meeting.views.agenda', kwargs=dict(num=meeting.number)
) + f'#row-{session.official_timeslotassignment().slug()}',
msg_prefix='ical should contain link to agenda entry for session')
# week view
r = self.client.get(urlreverse("ietf.meeting.views.week_view", kwargs=dict(num=meeting.number)))

View file

@ -1,4 +1,4 @@
{% load humanize %}{% autoescape off %}{% load ietf_filters %}{% load cache %}{% cache 1800 ietf_meeting_agenda_ics schedule.meeting.number request.path request.GET %}BEGIN:VCALENDAR
{% load humanize %}{% autoescape off %}{% load ietf_filters textfilters %}{% load cache %}{% cache 1800 ietf_meeting_agenda_ics schedule.meeting.number request.path request.GET %}BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
PRODID:-//IETF//datatracker.ietf.org ical agenda//EN
@ -14,9 +14,15 @@ DTSTAMP:{{ item.timeslot.modified|date:"Ymd" }}T{{ item.timeslot.modified|date:"
URL:{{item.session.agenda.get_versionless_href}}{% endif %}
DESCRIPTION:{{item.timeslot.name|ics_esc}}\n{% if item.session.agenda_note %}
Note: {{item.session.agenda_note|ics_esc}}\n{% endif %}{% if item.timeslot.location.webex_url %}
Webex: {{ item.timeslot.location.webex_url }}\n{% endif %}{% for material in item.session.materials.all %}
\n{{material.type}}{% if material.type.name != "Agenda" %}
({{material.title|ics_esc}}){% endif %}:
{{material.get_versionless_href}}\n{% endfor %}
\n
Webex: {{ item.timeslot.location.webex_url }}\n{% endif %}{% if item.timeslot.location.video_stream_url %}
\n
Meetecho: {{ item.timeslot.location.video_stream_url|format:item.session }}\n{% endif %}{% if item.session.agenda %}{% with agenda=item.session.agenda %}
\n
{{agenda.type}} {{agenda.get_versionless_href}}\n{% endwith %}{% endif %}
\n
Session materials: {% absurl 'ietf.meeting.views.session_details' num=schedule.meeting.number acronym=item.session.group.acronym %}\n{% if schedule.meeting.get_number is not None %}
\n{# link agenda for ietf meetings #}
See in schedule: {% absurl 'ietf.meeting.views.agenda' num=schedule.meeting.number %}#row-{{ item.slug }}\n{% endif %}
END:VEVENT
{% endif %}{% endfor %}END:VCALENDAR{% endcache %}{% endautoescape %}