* feat: Show bluesheets using Attended tables (#7094) * feat: Show bluesheets using Attended tables (#6898) * feat: Allow users to add themselves to session attendance (#6454) * chore: Correct copyright year * fix: Address review comments * fix: Don't try to generate empty bluesheets * refactor: Complete rewrite of bluesheet.html * refactor: Fill in a few gaps, close a few holes - Rename the live "bluesheet" to "attendance", add some explanatory text. - Add attendance links in materials view and pre-finalized proceedings view. - Don't allow users to add themselves after the corrections cutoff date. * fix: Report file-save errors to caller * fix: Address review comments * fix: typo * refactor: if instead of except; refactor gently * refactor: Rearrange logic a little, add comment * style: Black * refactor: auto_now_add->default to allow override * refactor: jsonschema to validate API payload * feat: Handle new API data format Not yet tested except that it falls back when the old format is used. * test: Split test into deprecated/new version Have not yet touched the new version * style: Black * test: Test new add_session_attendees API * fix: Fix bug uncovered by test * refactor: Refactor affiliation lookup a bit * fix: Order bluesheet by Attended.time * refactor: Move helpers from views.py to utils.py * test: Test that finalize calls generate_bluesheets * test: test_bluesheet_data() * fix: Clean up merge * fix: Remove debug statement * chore: comments * refactor: Renumber migrations --------- Co-authored-by: Paul Selkirk <paul@painless-security.com> * chore: Remove unused import * style: Black * feat: Stub session update notify API * feat: Add order & rev to slides JSON * style: Black * feat: Stub actual Meetecho slide deck mgmt API * refactor: Limit reordering to type="slides" * chore: Remove repository from meetecho API (API changed on their end) * feat: update Meetecho on slide reorder * refactor: drop pytz from meetecho.py * chore: Remove more repository refs * refactor: Eliminate more pytz * test: Test add_slide_deck api * fix: Allow 202 status code / absent Content-Type * test: Test delete_slide_deck api * test: Test update_slide_decks api * refactor: sessionpresentation_set -> presentations * test: Test send_update() * fix: Debug send_update() * test: ajax_reorder_slides calls Meetecho API * test: Test SldesManager.add() * feat: Implement SlidesManager.add() * test: Test that ajax_add_slides... calls API * feat: Call Meetecho API when slides added to session * test: Test SlidesManager.delete() * feat: Implement SlidesManager.delete() * test: ajax_remove_slides... calls Meetecho API * feat: Call Meetecho API when slides removed * chore: Update docstring * feat: rudimentary debug mode for Meetecho API * test: remove_sessionpresentation() calls Meetecho API * feat: Call Meetecho API from remove_sessionpresentation() * test: upload_slides() calls Meetecho API * style: Black * fix: Refactor/debug upload_session_slides Avoids double-save of a SessionPresentation for the session being updated and updates other sessions when apply_to_all is set (previously it only created ones that did not exist, so rev would never be updated). * test: Fix test bug * feat: Call Meetecho API when uploading session slides * fix: Only replace slides actually linked to session * fix: Delint Removed some type checking rather than debugging it * fix: Send get_versionless_href() as url for slides * test: TZ-aware timestamps, please * chore: Add comments * feat: Call Meetecho API in edit_sessionpresentation * feat: Call Meetecho API in remove_sessionpresentation * feat: Call Meetecho API from add_sessionpresentation * fix: Set order in add_sessionpresentation * fix: Restrict API calls to "slides" docs * feat: Call Meetecho API on title changes * test: Check meetecho API calls in test_revise() * fix: better Meetecho API "order" management * fix: no PUT if there are no slides after DELETE * feat: Catch exceptions from SlidesManager Don't let errors in the MeetEcho slides API interfere with the ability to modify slides for a session. * feat: Limit which sessions we send notifications for * fix: handle absence of request_timeout in api config * test: always send slide notifications in tests * fix: save slides before sending notification (#7172) * fix: save slides before sending notification * style: fix indentation It's not a bug, it's a flourish! --------- Co-authored-by: Jennifer Richards <jennifer@staff.ietf.org> Co-authored-by: Paul Selkirk <paul@painless-security.com>
119 lines
4.7 KiB
HTML
119 lines
4.7 KiB
HTML
{# Copyright The IETF Trust 2015-2024, All Rights Reserved #}
|
|
{% load origin %}
|
|
{% origin %}
|
|
{% load ietf_filters %}
|
|
{% load proceedings_filters %}
|
|
<tr>
|
|
<td>
|
|
{% if entry.name %}
|
|
<div id="{{ entry.name|slugify }}">{{ entry.name }}</div>
|
|
{% elif entry.group.acronym %}
|
|
<div id="{{ entry.group.acronym }}">
|
|
<a href="{% url 'ietf.group.views.group_home' acronym=entry.group.acronym %}">{{ entry.group.acronym }}</a>
|
|
</div>
|
|
{% if entry.group.state_id == "bof" %}<span class="badge rounded-pill text-bg-success">BOF</span>{% endif %}
|
|
{% else %}
|
|
<h1>{{ entry.group }}</h1>
|
|
{% endif %}
|
|
</td>
|
|
{% if entry.canceled %}
|
|
<td colspan="4">
|
|
<span class="badge rounded-pill text-bg-danger">Session cancelled</span>
|
|
</td>
|
|
{% else %}
|
|
{# artifacts #}
|
|
<td>
|
|
{% for agenda in entry.agendas %}
|
|
<a href="{{ agenda.material|meeting_href:meeting }}">
|
|
Agenda
|
|
{% if agenda.time %}{{agenda.time|date:"D G:i"}}{% endif %}
|
|
</a>
|
|
<br>
|
|
{% empty %}
|
|
{% if show_agenda and not meeting.proceedings_final %}
|
|
<span class="badge rounded-pill text-bg-warning">No agenda</span>
|
|
<br>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% for minutes in entry.minutes %}
|
|
<a href="{{ minutes.material|meeting_href:meeting }}">
|
|
Minutes
|
|
{% if minutes.time %}{{minutes.time|date:"D G:i"}}{% endif %}
|
|
</a>
|
|
<br>
|
|
{% empty %}
|
|
{% if show_agenda and not meeting.proceedings_final %}
|
|
<span class="badge rounded-pill text-bg-warning">No minutes</span>
|
|
<br>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if not meeting.proceedings_final %}
|
|
{% for attendance in entry.attendances %}
|
|
{% with session=attendance.material %}
|
|
<a href="{% url 'ietf.meeting.views.session_attendance' session_id=session.pk num=session.meeting.number %}">
|
|
Attendance
|
|
{% if attendance.time %}{{ attendance.time|date:"D G:i" }}{% endif %}
|
|
</a>
|
|
{% endwith %}
|
|
<br>
|
|
{% endfor %}
|
|
{% else %}
|
|
{% for bs in entry.bluesheets %}
|
|
<a href="{{ bs.material|meeting_href:meeting }}">
|
|
Bluesheets
|
|
{% if bs.time %}{{ bs.time|date:"D G:i" }}{% endif %}
|
|
</a>
|
|
<br>
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% for chatlog in entry.chatlogs %}
|
|
<a href="{{ chatlog.material|meeting_href:meeting }}">
|
|
Chatlog
|
|
{% if chatlog.time %}{{chatlog.time|date:"D G:i"}}{% endif %}
|
|
</a>
|
|
<br>
|
|
{% empty %}
|
|
<a href="{{ entry.session.chat_archive_url }}">
|
|
Chatlog
|
|
</a>
|
|
<br>
|
|
{% endfor %}
|
|
</td>
|
|
{# recordings #}
|
|
<td>
|
|
{% for rec in entry.recordings %}
|
|
<a href="{{ rec.material|meeting_href:meeting|default:"#" }}">
|
|
{{ rec.material|hack_recording_title }}
|
|
{% if rec.time %}{{ rec.time|date:"D G:i"}}{% endif %}
|
|
</a>
|
|
<br>
|
|
{% endfor %}
|
|
{% if entry.session.video_stream_url %}
|
|
<a href="{{ entry.session.session_recording_url }}">
|
|
Session recording
|
|
</a>
|
|
<br>
|
|
{% endif %}
|
|
</td>
|
|
{# slides #}
|
|
<td>
|
|
{% for slide in entry.slides %}
|
|
<a href="{{ slide.material|meeting_href:meeting }}">{{ slide.material.title|clean_whitespace }}</a>
|
|
<br>
|
|
{% empty %}
|
|
{% if not meeting.proceedings_final %}<span class="badge rounded-pill text-bg-warning">No slides</span>{% endif %}
|
|
{% endfor %}
|
|
</td>
|
|
{# drafts #}
|
|
<td>
|
|
{% for draft in entry.drafts %}
|
|
<a href="{% url "ietf.doc.views_doc.document_main" name=draft.material.name %}">
|
|
{{ draft.material.name }}
|
|
</a>
|
|
<br>
|
|
{% empty %}
|
|
{% if not meeting.proceedings_final %}<span class="badge rounded-pill text-bg-warning">No Internet-Drafts</span>{% endif %}
|
|
{% endfor %}
|
|
</td>
|
|
{% endif %}
|
|
</tr> |