Merged in [12393] from rjsparks@nostrum.com:
Fixed bug where slides from multiple sessions for a group were not all showing. Improved handling of multiple minutes and agendas for groups. Fixes #2058. Commit should be patched into production.
- Legacy-Id: 12395
Note: SVN reference [12393] has been migrated to Git commit 2b0ec6df16
This commit is contained in:
commit
09259ae556
|
@ -1045,32 +1045,60 @@ class Session(models.Model):
|
|||
return list(self.materials.filter(type='draft'))
|
||||
|
||||
def all_meeting_sessions_for_group(self):
|
||||
if not hasattr(self, "_all_meeting_sessions_for_group_cache"):
|
||||
assignments = self.timeslotassignments.filter(schedule_id=self.meeting.agenda_id).order_by('timeslot__time')
|
||||
self._all_meeting_sessions_for_group_cache = [ a.session for a in assignments ]
|
||||
return self._all_meeting_sessions_for_group_cache
|
||||
if self.group.type_id in ['wg','rg']:
|
||||
if not hasattr(self, "_all_meeting_sessions_for_group_cache"):
|
||||
sessions = [s for s in self.meeting.session_set.filter(group=self.group,type=self.type) if s.official_timeslotassignment()]
|
||||
self._all_meeting_sessions_for_group_cache = sorted(sessions, key = lambda x: x.official_timeslotassignment().timeslot.time)
|
||||
return self._all_meeting_sessions_for_group_cache
|
||||
else:
|
||||
return [self]
|
||||
|
||||
def all_meeting_recordings(self):
|
||||
recordings = []
|
||||
recordings = [] # These are not sets because we need to preserve relative ordering or redo the ordering work later
|
||||
sessions = self.all_meeting_sessions_for_group()
|
||||
for session in sessions:
|
||||
recordings.extend(session.recordings())
|
||||
recordings.extend([r for r in session.recordings() if r not in recordings])
|
||||
return recordings
|
||||
|
||||
def all_meeting_bluesheets(self):
|
||||
bluesheets = []
|
||||
sessions = self.all_meeting_sessions_for_group()
|
||||
for session in sessions:
|
||||
bluesheets.extend(session.bluesheets())
|
||||
bluesheets.extend([b for b in session.bluesheets() if b not in bluesheets])
|
||||
return bluesheets
|
||||
|
||||
def all_meeting_drafts(self):
|
||||
drafts = []
|
||||
sessions = self.all_meeting_sessions_for_group()
|
||||
for session in sessions:
|
||||
drafts.extend(session.drafts())
|
||||
drafts.extend([d for d in session.drafts() if d not in drafts])
|
||||
return drafts
|
||||
|
||||
def all_meeting_agendas(self):
|
||||
agendas = []
|
||||
sessions = self.all_meeting_sessions_for_group()
|
||||
for session in sessions:
|
||||
agenda = session.agenda()
|
||||
if agenda and agenda not in agendas:
|
||||
agendas.append(agenda)
|
||||
return agendas
|
||||
|
||||
def all_meeting_slides(self):
|
||||
slides = []
|
||||
sessions = self.all_meeting_sessions_for_group()
|
||||
for session in sessions:
|
||||
slides.extend([s for s in session.slides() if s not in slides])
|
||||
return slides
|
||||
|
||||
def all_meeting_minutes(self):
|
||||
minutes = []
|
||||
sessions = self.all_meeting_sessions_for_group()
|
||||
for session in sessions:
|
||||
minutes_doc = session.minutes()
|
||||
if minutes_doc and minutes_doc not in minutes:
|
||||
minutes.append(minutes_doc)
|
||||
return minutes
|
||||
|
||||
def can_manage_materials(self, user):
|
||||
return can_manage_materials(user,self.group)
|
||||
|
||||
|
|
|
@ -25,8 +25,14 @@
|
|||
{% endif %}
|
||||
{% else %}
|
||||
<td>
|
||||
{% if session.agenda %}
|
||||
<a href="https://www.ietf.org/proceedings/{{ meeting_num }}/agenda/{{ session.agenda.external_url }}">Agenda</a>
|
||||
{% if session.all_meeting_agendas %}
|
||||
{% if session.all_meeting_agendas|length == 1 %}
|
||||
<a href="{{ session.all_meeting_agendas.0|meeting_href:session.meeting }}">Agenda</a><br>
|
||||
{% else %}
|
||||
{% for agenda in session.all_meeting_agendas %}
|
||||
<a href="{{agenda|meeting_href:session.meeting}}">Agenda {{agenda.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i"}}</a></br>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if show_agenda == "True" %}
|
||||
<span class="label label-warning">No agenda</span>
|
||||
|
@ -34,8 +40,14 @@
|
|||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if session.minutes %}
|
||||
<a href="https://www.ietf.org/proceedings/{{ meeting_num }}/minutes/{{ session.minutes.external_url }}">Minutes</a>
|
||||
{% if session.all_meeting_minutes %}
|
||||
{% if session.all_meeting_minutes|length == 1 %}
|
||||
<a href="{{ session.all_meeting_minutes.0|meeting_href:session.meeting }}">Minutes</a><br>
|
||||
{% else %}
|
||||
{% for minutes in sesison.all_meeting_minutes %}
|
||||
<a href="{{ minutes|meeting_href:session.meeting}}">Minutes {{minutes.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i"}}</a></br>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if show_agenda == "True" %}
|
||||
<span class="label label-warning">No minutes</span>
|
||||
|
@ -43,9 +55,9 @@
|
|||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% with session.slides as slides %}
|
||||
{% with session.all_meeting_slides as slides %}
|
||||
{% for slide in slides %}
|
||||
<a href="https://www.ietf.org/proceedings/{{ meeting_num }}/slides/{{ slide.external_url }}">{{ slide.title|clean_whitespace }}</a>
|
||||
<a href="{{ slide|meeting_href:session.meeting}}">{{ slide.title|clean_whitespace }}</a>
|
||||
<br>
|
||||
{% empty %}
|
||||
<span class="label label-warning">No slides</span>
|
||||
|
|
|
@ -22,15 +22,27 @@
|
|||
<td colspan="3"><span class="label label-danger">Session cancelled</span></td>
|
||||
{% else %}
|
||||
<td>
|
||||
{% if session.agenda %}
|
||||
<a href="{{ session.agenda|meeting_href:meeting }}">Agenda</a><br>
|
||||
{% if session.all_meeting_agendas %}
|
||||
{% if session.all_meeting_agendas|length == 1 %}
|
||||
<a href="{{ session.all_meeting_agendas.0|meeting_href:meeting }}">Agenda</a><br>
|
||||
{% else %}
|
||||
{% for agenda in session.all_meeting_agendas %}
|
||||
<a href="{{agenda|meeting_href:meeting}}">Agenda {{agenda.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i"}}</a></br>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if show_agenda == "True" and not meeting.proceedings_final %}
|
||||
<span class="label label-warning">No agenda</span><br>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if session.minutes %}
|
||||
<a href="{{ session.minutes|meeting_href:meeting }}">Minutes</a><br>
|
||||
{% if session.all_meeting_minutes %}
|
||||
{% if session.all_meeting_minutes|length == 1 %}
|
||||
<a href="{{ session.all_meeting_minutes.0|meeting_href:meeting }}">Minutes</a><br>
|
||||
{% else %}
|
||||
{% for minutes in session.all_meeting_minutes %}
|
||||
<a href="{{ minutes|meeting_href:meeting}}">Minutes {{minutes.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i"}}</a></br>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if show_agenda == "True" and not meeting.proceedings_final %}
|
||||
<span class="label label-warning">No minutes</span><br>
|
||||
|
@ -64,7 +76,7 @@
|
|||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% with session.slides as slides %}
|
||||
{% with session.all_meeting_slides as slides %}
|
||||
{% for slide in slides %}
|
||||
<a href="{{ slide|meeting_href:meeting }}">{{ slide.title|clean_whitespace }}</a>
|
||||
<br>
|
||||
|
|
Loading…
Reference in a new issue