diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py
index 0f91986f77d..90e096b4473 100644
--- a/ietf/meeting/tests_views.py
+++ b/ietf/meeting/tests_views.py
@@ -7710,6 +7710,44 @@ def test_add_session_recordings(self):
self.assertEqual(r.status_code, 404)
self.assertFalse(mock_delete.called)
+ def test_show_chatlog_links(self):
+ meeting = MeetingFactory(type_id='ietf', number='122')
+ session = SessionFactory(meeting=meeting)
+ doc_name = 'chatlog-72-mars-197001010000'
+ SessionPresentation.objects.create(session=session,document=DocumentFactory(type_id='chatlog', name=doc_name))
+
+ session_url = urlreverse('ietf.meeting.views.session_details',
+ kwargs={'num':meeting.number, 'acronym':session.group.acronym})
+
+ r = self.client.get(session_url)
+
+ self.assertEqual(r.status_code, 200)
+
+ q = PyQuery(r.content)
+
+ # Find the chatlog link in the desktop view
+ link_chatlog_box = q(f'a[title="Chat logs for {session.group.acronym}"]')
+ self.assertTrue(link_chatlog_box, 'Expected element with title "Chat logs for {group.acronym}" not found.')
+ self.assertEqual(link_chatlog_box.attr('href'), '/doc/'+ doc_name)
+
+ # Find the chatlog link in the mobile view
+ link_chatlog_list = q('li:contains("Chat logs")')
+ self.assertTrue(link_chatlog_list, 'Expected element containing "Chat logs" not found.')
+ self.assertEqual(link_chatlog_list.find('a').attr('href'), '/doc/'+ doc_name)
+
+ def test_hide_chatlog_links(self):
+ # mock meeting and session, but no chatlog document
+ meeting = MeetingFactory(type_id='ietf', number='122')
+ session = SessionFactory(meeting=meeting)
+
+ session_url = urlreverse('ietf.meeting.views.session_details',
+ kwargs={'num':meeting.number, 'acronym':session.group.acronym})
+
+ r = self.client.get(session_url)
+
+ self.assertEqual(r.status_code, 200)
+ # validate no links for chat logs exist
+ self.assertNotContains(r, 'Chat logs')
class HasMeetingsTests(TestCase):
diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py
index 6a73059d922..45f6842cb8d 100644
--- a/ietf/meeting/views.py
+++ b/ietf/meeting/views.py
@@ -23,6 +23,7 @@
from urllib.parse import parse_qs, unquote, urlencode, urlsplit, urlunsplit, urlparse
from tempfile import mkstemp
from wsgiref.handlers import format_date_time
+from itertools import chain
from django import forms
from django.core.cache import caches
@@ -2496,7 +2497,12 @@ def session_details(request, num, acronym):
session.filtered_artifacts.sort(key=lambda d:artifact_types.index(d.document.type.slug))
session.filtered_slides = session.presentations.filter(document__type__slug='slides').order_by('order')
session.filtered_drafts = session.presentations.filter(document__type__slug='draft')
- session.filtered_chatlog_and_polls = session.presentations.filter(document__type__slug__in=('chatlog', 'polls')).order_by('document__type__slug')
+
+ filtered_polls = session.presentations.filter(document__type__slug=('polls'))
+ filtered_chatlogs = session.presentations.filter(document__type__slug=('chatlog'))
+ session.filtered_chatlog_and_polls = chain(filtered_chatlogs, filtered_polls)
+ session.chatlog = filtered_chatlogs.first()
+
# TODO FIXME Deleted materials shouldn't be in the presentations
for qs in [session.filtered_artifacts,session.filtered_slides,session.filtered_drafts]:
qs = [p for p in qs if p.document.get_state_slug(p.document.type_id)!='deleted']
diff --git a/ietf/templates/meeting/session_buttons_include.html b/ietf/templates/meeting/session_buttons_include.html
index bb5144b45d6..b1fd92ba5be 100644
--- a/ietf/templates/meeting/session_buttons_include.html
+++ b/ietf/templates/meeting/session_buttons_include.html
@@ -2,7 +2,8 @@
{% load origin %}
{% load static %}
{% load textfilters tz %}
-{% load ietf_filters %}
+{% load ietf_filters session_filters %}
+
{% origin %}
{% if item and item|should_show_agenda_session_buttons %}
{% with slug=item.slug session=item.session timeslot=item.timeslot %}
@@ -126,10 +127,10 @@
{% else %}
{# chat logs #}
- {% if meeting.has_chat_logs %}
+ {% if meeting.has_chat_logs and session.chatlog %}
@@ -303,10 +304,10 @@
{% else %}
{# chat logs #}
- {% if meeting.has_chat_logs %}
+ {% if meeting.has_chat_logs and session.chatlog %}
+ href="/doc/{{ session.chatlog.document.name }}">
Chat logs