datatracker/ietf/templates/meeting/group_materials.html
Robert Sparks e6138ca126
feat: session apis (#7173)
* 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>
2024-03-12 10:22:24 -05:00

101 lines
4.5 KiB
HTML

{# Copyright The IETF Trust 2015-2024, All Rights Reserved #}
{% load origin %}
{% origin %}
{% load ietf_filters proceedings_filters managed_groups %}
{% load tz %}
<tr>
<td>
{% if entry.name %}
<div id="{{ entry.name|slugify }}">{{ entry.name }}</div>
{% else %}
<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.slug == "bof" %}
<span class="badge rounded-pill text-bg-success">{{ entry.group.state.slug|upper }}</span>
{% endif %}
{% endif %}
</td>
{% if entry.canceled %}
<td colspan="{% if user|has_role:'Secretariat' or user_groups %}6{% else %}5{% endif %}">
<span class="badge rounded-pill text-bg-danger">Session cancelled</span>
</td>
{% else %}
<td>
{% for agenda in entry.agendas %}
{% if entry.agendas|length == 1 and agenda.time > old %}
<i class="small bi bi-bell"
title="Last Update: {{ agenda.time|utc|date:"Y-m-d H:i:s" }} UTC"></i>
{% endif %}
<a href="{{ agenda.material|meeting_href:meeting }}">
Agenda {% if agenda.time %}{{agenda.time|date:"D G:i"}}{% endif %}
</a>
<br>
{% empty %}
{% if show_agenda == "True" %}<span class="badge rounded-pill text-bg-warning">No agenda</span>{% endif %}
{% endfor %}
</td>
<td>
{% 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 == "True" %}<span class="badge rounded-pill text-bg-warning">No minutes</span>{% endif %}
{% endfor %}
{% if entry.session.type_id == 'regular' and show_agenda == "True" %}
{% 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 %}
{% endif %}
</td>
<td>
{% for slide in entry.slides %}
{% if slide.time > old %}
<i class="small bi bi-bell"
title="Last Update: {{ slide.time|utc|date:"Y-m-d H:i:s" }} UTC"></i>
{% endif %}
<a href="{{ slide.material|meeting_href:meeting }}">{{ slide.material.title|clean_whitespace }}</a>
<br>
{% empty %}
<span class="badge rounded-pill text-bg-warning">No slides</span>
{% endfor %}
</td>
<td>
{% for draft in entry.drafts %}
{% if draft.time > old %}
<i class="small bi bi-bell"
title="Last Update: {{ draft.time|utc|date:"Y-m-d H:i:s" }} UTC"></i>
{% endif %}
<a href="{% url "ietf.doc.views_doc.document_main" name=draft.material.name %}">
{{ draft.material.name }}
</a>
<br>
{% empty %}
<span class="badge rounded-pill text-bg-warning">No Internet-Drafts</span>
{% endfor %}
</td>
<td>
{% if entry.last_update %}
{{ entry.last_update|utc|date:"Y-m-d" }}
<br>
<small class="text-body-secondary">{{ entry.last_update|utc|date:"H:i:s" }}&nbsp;UTC</small>
{% endif %}
</td>
{% if user|has_role:"Secretariat" or user_groups %}
<td>
{% if user|has_role:"Secretariat" or entry.group in user_groups %}
<div class="float-end">{% include "meeting/edit_materials_button.html" with session=entry.session only %}</div>
{% endif %}
</td>
{% endif %}
{% endif %}
</tr>