Retrieve session agenda materials by meeting/session instead of by assignment. Commit ready for merge.

- Legacy-Id: 18653
This commit is contained in:
Jennifer Richards 2020-11-02 19:30:23 +00:00
parent bbf04c3fbe
commit 27d9df7bff
7 changed files with 65 additions and 65 deletions

View file

@ -159,13 +159,12 @@ class MeetingTests(TestCase):
self.assertIn(registration_text, agenda_content)
# Make sure there's a frame for the session agenda and it points to the right place
assignment = session.official_timeslotassignment()
assignment_url = urlreverse('ietf.meeting.views.assignment_materials',
kwargs=dict(assignment_id=assignment.pk))
assignment_url = urlreverse('ietf.meeting.views.session_materials',
kwargs=dict(num=meeting.number, session_id=session.pk))
self.assertTrue(
any(
[assignment_url in x.attrib["data-src"]
for x in q('tr div.modal-body div.assignment-materials')]
for x in q('tr div.modal-body div.session-materials')]
)
)
@ -848,50 +847,46 @@ class MeetingTests(TestCase):
self.assertIn('STATUS:CANCELLED',unicontent(r))
self.assertNotIn('STATUS:CONFIRMED',unicontent(r))
def test_assignment_materials(self):
def test_session_materials(self):
meeting = make_meeting_test_data()
session = Session.objects.filter(meeting=meeting, group__acronym="mars").first()
for assignment in session.timeslotassignments.all():
url = urlreverse('ietf.meeting.views.assignment_materials',
kwargs=dict(assignment_id=assignment.pk))
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
url = urlreverse('ietf.meeting.views.session_materials',
kwargs=dict(num=meeting.number, session_id=session.pk))
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
agenda_div = q('div.agenda-frame')
self.assertIsNotNone(agenda_div)
self.assertEqual(agenda_div.attr('data-src'), session.agenda().get_href())
agenda_div = q('div.agenda-frame')
self.assertIsNotNone(agenda_div)
self.assertEqual(agenda_div.attr('data-src'), session.agenda().get_href())
minutes_div = q('div.minutes-frame')
self.assertIsNotNone(minutes_div)
self.assertEqual(minutes_div.attr('data-src'), session.minutes().get_href())
minutes_div = q('div.minutes-frame')
self.assertIsNotNone(minutes_div)
self.assertEqual(minutes_div.attr('data-src'), session.minutes().get_href())
# Make sure undeleted slides are present and deleted slides are not
not_deleted_slides = session.materials.filter(
type='slides'
).exclude(
states__type__slug='slides',states__slug='deleted'
)
self.assertGreater(not_deleted_slides.count(), 0) # make sure this isn't a pointless test
# Make sure undeleted slides are present and deleted slides are not
not_deleted_slides = session.materials.filter(
type='slides'
).exclude(
states__type__slug='slides',states__slug='deleted'
)
self.assertGreater(not_deleted_slides.count(), 0) # make sure this isn't a pointless test
deleted_slides = session.materials.filter(
type='slides', states__type__slug='slides', states__slug='deleted'
)
self.assertGreater(deleted_slides.count(), 0) # make sure this isn't a pointless test
deleted_slides = session.materials.filter(
type='slides', states__type__slug='slides', states__slug='deleted'
)
self.assertGreater(deleted_slides.count(), 0) # make sure this isn't a pointless test
# live slides should be found
for slide in not_deleted_slides:
self.assertTrue(q('ul li a:contains("%s")' % slide.title))
# live slides should be found
for slide in not_deleted_slides:
self.assertTrue(q('ul li a:contains("%s")' % slide.title))
# deleted slides should not be found
for slide in deleted_slides:
self.assertFalse(q('ul li a:contains("%s")' % slide.title))
# deleted slides should not be found
for slide in deleted_slides:
self.assertFalse(q('ul li a:contains("%s")' % slide.title))
for slide in session.slides():
self.assertContains(r, slide.title)
class ReorderSlidesTests(TestCase):
def test_add_slides_to_session(self):

View file

@ -21,6 +21,7 @@ safe_for_all_meeting_types = [
url(r'^session/(?P<session_id>\d+)/doc/%(name)s/remove$' % settings.URL_REGEXPS, views.remove_sessionpresentation),
url(r'^session/(?P<session_id>\d+)\.ics$', views.agenda_ical),
url(r'^sessions/(?P<acronym>[-a-z0-9]+)\.ics$', views.agenda_ical),
url(r'^session/(?P<session_id>\d+)/agenda_materials$', views.session_materials),
url(r'^slidesubmission/(?P<slidesubmission_id>\d+)$', views.approve_proposed_slides)
]
@ -111,7 +112,6 @@ urlpatterns = [
# First patterns which start with unique strings
url(r'^$', views.current_materials),
url(r'^ajax/get-utc/?$', views.ajax_get_utc),
url(r'^assignment/(?P<assignment_id>\d+)/materials.html$', views.assignment_materials),
url(r'^interim/announce/?$', views.interim_announce),
url(r'^interim/announce/(?P<number>[A-Za-z0-9._+-]+)/?$', views.interim_send_announcement),
url(r'^interim/skip_announce/(?P<number>[A-Za-z0-9._+-]+)/?$', views.interim_skip_announcement),

View file

@ -1301,16 +1301,18 @@ def diff_schedules(request, num):
})
@ensure_csrf_cookie
def assignment_materials(request, assignment_id):
"""Assignment details for agenda page pop-up"""
assignments = SchedTimeSessAssignment.objects.filter(pk=int(assignment_id))
def session_materials(request, num, session_id):
"""Session details for agenda page pop-up"""
meeting = get_object_or_404(Meeting, number=num)
schedule = meeting.schedule
assignments = schedule.assignments.filter(session__id=int(session_id))
if len(assignments) == 0:
raise Http404('No such assignment')
raise Http404('No such session in this schedule')
assert len(assignments) == 1
meeting = assignments[0].timeslot.meeting # timeslot is guaranteed to be non-null
assignments = preprocess_assignments_for_agenda(assignments, meeting)
assignment = assignments[0]
return render(request, 'meeting/assignment_materials.html', dict(item=assignment))
return render(request, 'meeting/session_materials.html', dict(item=assignment))
@ensure_csrf_cookie
def agenda(request, num=None, name=None, base=None, ext=None, owner=None, utc=""):

View file

@ -25,7 +25,7 @@
background-color: inherit !important;
border: none !important;
}
.assignment-materials .agenda-frame,.minutes-frame {
.session-materials .agenda-frame,.minutes-frame {
white-space: normal;
}
{% endblock %}
@ -178,7 +178,7 @@
<div class="pull-right padded-left">
{% if item.timeslot.type.slug == 'other' %}
{% if item.session.agenda or item.session.remote_instructions or item.session.agenda_note %}
{% include "meeting/session_buttons_include.html" with show_agenda=True session=item.session meeting=schedule.meeting %}
{% include "meeting/session_buttons_include.html" with show_agenda=True item=item schedule=schedule only %}
{% else %}
{% for slide in item.session.slides %}
<a href="{{slide.get_href}}">{{ slide.title|clean_whitespace }}</a>
@ -459,7 +459,7 @@
}
$(".modal").on("show.bs.modal", function () {
retrieve_session_modal($(this).find(".assignment-materials"));
retrieve_session_modal($(this).find(".session-materials"));
});
</script>

View file

@ -1,21 +1,22 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{# expects slug, session, and timeslot to be in the context #}
{% load origin %}{% origin %}
{% load static %}
{% load textfilters %}
{% load ietf_filters %}
<div class="modal fade text-left" id="modal-{{ item.slug }}" tabindex="-1" role="dialog" aria-labelledby="label-{{ item.slug }}" aria-hidden="true">
<div class="modal fade text-left" id="modal-{{ slug }}" tabindex="-1" role="dialog" aria-labelledby="label-{{ slug }}" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="label-{{item.slug}}">
<h4 class="modal-title" id="label-{{slug}}">
Meeting materials for
{% if item.timeslot.type.slug == 'plenary' %}{{item.timeslot.name}}{% else %}{{item.session.historic_group.name}}{% endif %}
{% if timeslot.type.slug == 'plenary' %}{{timeslot.name}}{% else %}{{session.historic_group.name}}{% endif %}
</h4>
</div>
<div class="modal-body">
<div class="assignment-materials"
data-src="{% url 'ietf.meeting.views.assignment_materials' assignment_id=item.pk %}">
<div class="session-materials"
data-src="{% url 'ietf.meeting.views.session_materials' num=meeting.number session_id=session.pk %}">
</div>
</div>
<div class="modal-footer">

View file

@ -4,12 +4,13 @@
{% load textfilters %}
{% origin %}
{% with slug=item.slug %}{% with session=item.session %}{% with timeslot=item.timeslot %}{% with meeting=schedule.meeting %}
<span id="session-buttons-{{session.pk}}" class="text-nowrap">
{% with acronym=session.historic_group.acronym %}
{% if session.agenda and show_agenda %}
{% include "meeting/session_agenda_include.html" %}
<!-- agenda pop-up button -->
<a class="" data-toggle="modal" data-target="#modal-{{item.slug}}" title="Show meeting materials"><span class="fa fa-fw fa-arrows-alt"></span></a>
<a class="" data-toggle="modal" data-target="#modal-{{slug}}" title="Show meeting materials"><span class="fa fa-fw fa-arrows-alt"></span></a>
<!-- materials tar file -->
<a class="" href="/meeting/{{meeting.number}}/agenda/{{acronym}}-drafts.tgz" title="Download meeting materials as .tar archive"><span class="fa fa-fw fa-file-archive-o"></span></a>
<!-- materials PDF file -->
@ -18,13 +19,13 @@
<!-- etherpad -->
{% if use_codimd %}
{% if item.timeslot.type.slug == 'plenary' %}
<a class="" href="https://codimd.ietf.org/notes-ietf-{{ meeting.number }}-plenary title="Etherpad for note-takers"><span class="fa fa-fw fa-edit"></span></a>
{% if timeslot.type.slug == 'plenary' %}
<a class="" href="https://codimd.ietf.org/notes-ietf-{{ meeting.number }}-plenary" title="Etherpad for note-takers"><span class="fa fa-fw fa-edit"></span></a>
{% else %}
<a class="" href="https://codimd.ietf.org/notes-ietf-{{ meeting.number }}-{{acronym}}" title="Etherpad for note-takers"><span class="fa fa-fw fa-edit"></span></a>
{% endif %}
{% else %}
{% if item.timeslot.type.slug == 'plenary' %}
{% if timeslot.type.slug == 'plenary' %}
<a class="" href="https://etherpad.ietf.org:9009/p/notes-ietf-{{ meeting.number }}-plenary?useMonospaceFont=true" title="Etherpad for note-takers"><span class="fa fa-fw fa-edit"></span></a>
{% else %}
<a class="" href="https://etherpad.ietf.org:9009/p/notes-ietf-{{ meeting.number }}-{{acronym}}?useMonospaceFont=true" title="Etherpad for note-takers"><span class="fa fa-fw fa-edit"></span></a>
@ -32,22 +33,22 @@
{% endif %}
{# show stream buttons up till end of session, then show archive buttons #}
{% if now < item.timeslot.end_time %}
{% if now < timeslot.end_time %}
<!-- Jabber -->
<a class=""
href="xmpp:{{session.jabber_room_name}}@jabber.ietf.org?join"
title="Jabber room for {{session.jabber_room_name}}"><span class="fa fa-fw fa-lightbulb-o"></span></a>
<!-- Video stream (meetecho) -->
{% if item.timeslot.location.video_stream_url %}
{% if timeslot.location.video_stream_url %}
<a class=""
href="{{item.timeslot.location.video_stream_url|format:session }}"
href="{{timeslot.location.video_stream_url|format:session }}"
title="Meetecho video stream"><span class="fa fa-fw fa-video-camera"></span>
</a>
{% endif %}
<!-- Audio stream -->
{% if item.timeslot.location.audio_stream_url %}
{% if timeslot.location.audio_stream_url %}
<a class=""
href="{{item.timeslot.location.audio_stream_url|format:session }}"
href="{{timeslot.location.audio_stream_url|format:session }}"
title="Audio stream"><span class="glyphicon glyphicon-headphones"></span>
</a>
{% endif %}
@ -62,16 +63,16 @@
href="{{ session.remote_instructions|first_url }}"
title="Online conference"><span class="fa fa-fw fd-group"></span>
</a>
{% elif item.timeslot.location.webex_url %}
{% elif timeslot.location.webex_url %}
<a class=""
href="{{item.timeslot.location.webex_url|format:session }}"
href="{{timeslot.location.webex_url|format:session }}"
title="Webex session"><span class="fa fa-fw fd-group"></span>
</a>
{% endif %}
<!-- iCalendar item -->
<a
href="{% url 'ietf.meeting.views.agenda_ical' num=meeting.number session_id=session.id %}"
title="icalendar entry for {{acronym}} session on {{item.timeslot.utc_start_time|date:'Y-m-d H:i'}} UTC">
title="icalendar entry for {{acronym}} session on {{timeslot.utc_start_time|date:'Y-m-d H:i'}} UTC">
<span class="fa fa-fw fa-calendar-o"></span>
</a>
{% else %}
@ -106,7 +107,7 @@
{% endfor %}
{% endif %}
{% endwith %}
{% if item.timeslot.location.video_stream_url %}
{% if timeslot.location.video_stream_url %}
<a class=""
href="http://www.meetecho.com/ietf{{meeting.number}}/recordings#{{acronym.upper}}"
title="Meetecho session recording"><span class="fd fa-fw fd-meetecho"></span></a>
@ -114,4 +115,5 @@
{% endif %}
{% endif %}
{% endwith %}
</span>
</span>
{% endwith %}{% endwith %}{% endwith %}{% endwith %}