- Move document to {{ next_states|pluralize:"to one of" }} the recommended next state{{ next_states|pluralize }}:
+ Move document to {{ next_states|pluralize:"one of" }} the recommended next state{{ next_states|pluralize }}:
{% for state in next_states %}
- {% if state.slug == 'sub-pub' %}
- {{ state.name }}
- {% else %}
+ {% if state.slug != 'sub-pub' and state.slug != "wg-lc" %}
{% endif %}
{% endfor %}
@@ -28,7 +25,13 @@
{% csrf_token %}
{% bootstrap_form form %}
- Back
+ Back
{% endblock %}
{% block js %}
diff --git a/ietf/templates/doc/draft/issue_working_group_call_for_adoption.html b/ietf/templates/doc/draft/issue_working_group_call_for_adoption.html
new file mode 100644
index 0000000000..61094b053a
--- /dev/null
+++ b/ietf/templates/doc/draft/issue_working_group_call_for_adoption.html
@@ -0,0 +1,61 @@
+{% extends "base.html" %}
+{# Copyright The IETF Trust 2025, All Rights Reserved #}
+{% load origin django_bootstrap5 static %}
+={% block title %}Issue Working Group Call for Adoption of {{ doc }}{% endblock %}
+{% block pagehead %}
+
+{% endblock %}
+{% block content %}
+ {% origin %}
+
+ Issue Working Group Call for Adoption
+
+ {{ doc }}
+
+ {% if form.errors %}
+
+ Please correct the following:
+
+ {% endif %}
+ {% bootstrap_form_errors form %}
+
+{% endblock %}
+{% block js %}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/ietf/templates/doc/draft/issue_working_group_last_call.html b/ietf/templates/doc/draft/issue_working_group_last_call.html
new file mode 100644
index 0000000000..d6f35a0e82
--- /dev/null
+++ b/ietf/templates/doc/draft/issue_working_group_last_call.html
@@ -0,0 +1,61 @@
+{% extends "base.html" %}
+{# Copyright The IETF Trust 2025, All Rights Reserved #}
+{% load origin django_bootstrap5 static %}
+={% block title %}Issue Working Group Last Call for {{ doc }}{% endblock %}
+{% block pagehead %}
+
+{% endblock %}
+{% block content %}
+ {% origin %}
+
+ Issue Working Group Last Call
+
+ {{ doc }}
+
+ {% if form.errors %}
+
+ Please correct the following:
+
+ {% endif %}
+ {% bootstrap_form_errors form %}
+
+{% endblock %}
+{% block js %}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/ietf/templates/doc/draft/wg_action_helpers.html b/ietf/templates/doc/draft/wg_action_helpers.html
new file mode 100644
index 0000000000..d21f3c0926
--- /dev/null
+++ b/ietf/templates/doc/draft/wg_action_helpers.html
@@ -0,0 +1,25 @@
+{% extends "base.html" %}
+{# Copyright The IETF Trust 2015-2025, All Rights Reserved #}
+{% load django_bootstrap5 ietf_filters origin %}
+{% block title %}Change IETF WG state for {{ doc }}{% endblock %}
+{% block content %}
+ {% origin %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/ietf/templates/doc/mail/wg_call_for_adoption_issued.txt b/ietf/templates/doc/mail/wg_call_for_adoption_issued.txt
index c4a2401bc2..15ace9495b 100644
--- a/ietf/templates/doc/mail/wg_call_for_adoption_issued.txt
+++ b/ietf/templates/doc/mail/wg_call_for_adoption_issued.txt
@@ -1,15 +1,13 @@
-{% load ietf_filters %}{% load mail_filters %}{% autoescape off %}{% filter wordwrap:78 %}
-Subject: {{ subject }}
+{% load ietf_filters %}{% load mail_filters %}{% autoescape off %}{% filter wordwrap:78 %}This message starts a {{group.acronym}} WG Call for Adoption of:
+{{ doc.name }}-{{ doc.rev }}
-This message starts a {{ cfa_duration_weeks }}-week Call for Adoption for this document.
+
+This Working Group Call for Adoption ends on {{ end_date }}
Abstract:
{{ doc.abstract }}
-File can be retrieved from:
-{{ url }}
-
-Please reply to this message keeping {{ wg_list }} in copy by indicating whether you support or not the adoption of this draft as a WG document. Comments to motivate your preference are highly appreciated.
+Please reply to this message and indicate whether or not you support adoption of this Internet-Draft by the {{group.acronym}} WG. Comments to explain your preference are greatly appreciated. Please reply to all recipients of this message and include this message in your response.
Authors, and WG participants in general, are reminded of the Intellectual Property Rights (IPR) disclosure obligations described in BCP 79 [2]. Appropriate IPR disclosures required for full conformance with the provisions of BCP 78 [1] and BCP 79 [2] must be filed, if you are aware of any. Sanctions available for application to violators of IETF IPR Policy can be found at [3].
@@ -17,5 +15,17 @@ Thank you.
[1] https://datatracker.ietf.org/doc/bcp78/
[2] https://datatracker.ietf.org/doc/bcp79/
[3] https://datatracker.ietf.org/doc/rfc6701/
+
+The IETF datatracker status page for this Internet-Draft is:
+{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name=doc.name %}
+{% if doc.submission.xml_version == "3" %}
+There is also an HTML version available at:
+{{ settings.IETF_ID_ARCHIVE_URL }}{{ doc.name }}-{{ doc.rev }}.html{% else %}
+There is also an HTMLized version available at:
+{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_html' name=doc.name rev=doc.rev %}{% endif %}
+{% if doc.rev != "00" %}
+A diff from the previous version is available at:
+{{settings.RFCDIFF_BASE_URL}}?url2={{ doc.name }}-{{ doc.rev }}
+{% endif %}
{% endfilter %}
{% endautoescape %}
diff --git a/ietf/templates/doc/mail/wg_last_call_issued.txt b/ietf/templates/doc/mail/wg_last_call_issued.txt
index 35b1e149d7..114f8bc5e2 100644
--- a/ietf/templates/doc/mail/wg_last_call_issued.txt
+++ b/ietf/templates/doc/mail/wg_last_call_issued.txt
@@ -1,7 +1,7 @@
-{% load ietf_filters %}{% load mail_filters %}{% autoescape off %}{% filter wordwrap:78 %}
-Subject: {{ subject }}
+{% load ietf_filters %}{% load mail_filters %}{% autoescape off %}{% filter wordwrap:78 %}This message starts a WG Last Call for:
+{{ doc.name }}-{{ doc.rev }}
-This message starts a {{ wglc_duration_weeks }}-week WG Last Call for this document.
+This Working Group Last Call ends on {{ end_date }}
Abstract:
{{ doc.abstract }}
@@ -9,14 +9,26 @@ Abstract:
File can be retrieved from:
{{ url }}
-Please review and indicate your support or objection to proceed with the publication of this document by replying to this email keeping {{ wg_list }} in copy. Objections should be motivated and suggestions to resolve them are highly appreciated.
+Please review and indicate your support or objection to proceed with the publication of this document by replying to this email keeping {{ wg_list }} in copy. Objections should be explained and suggestions to resolve them are highly appreciated.
-Authors, and WG participants in general, are reminded again of the Intellectual Property Rights (IPR) disclosure obligations described in BCP 79 [1]. Appropriate IPR disclosures required for full conformance with the provisions of BCP 78 [1] and BCP 79 [2] must be filed, if you are aware of any. Sanctions available for application to violators of IETF IPR Policy can be found at [3].
+Authors, and WG participants in general, are reminded of the Intellectual Property Rights (IPR) disclosure obligations described in BCP 79 [1]. Appropriate IPR disclosures required for full conformance with the provisions of BCP 78 [1] and BCP 79 [2] must be filed, if you are aware of any. Sanctions available for application to violators of IETF IPR Policy can be found at [3].
Thank you.
[1] https://datatracker.ietf.org/doc/bcp78/
[2] https://datatracker.ietf.org/doc/bcp79/
[3] https://datatracker.ietf.org/doc/rfc6701/
+
+The IETF datatracker status page for this Internet-Draft is:
+{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name=doc.name %}
+{% if doc.submission.xml_version == "3" %}
+There is also an HTML version available at:
+{{ settings.IETF_ID_ARCHIVE_URL }}{{ doc.name }}-{{ doc.rev }}.html{% else %}
+There is also an HTMLized version available at:
+{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_html' name=doc.name rev=doc.rev %}{% endif %}
+{% if doc.rev != "00" %}
+A diff from the previous version is available at:
+{{settings.RFCDIFF_BASE_URL}}?url2={{ doc.name }}-{{ doc.rev }}
+{% endif %}
{% endfilter %}
{% endautoescape %}
diff --git a/ietf/templates/meeting/upcoming.ics b/ietf/templates/meeting/upcoming.ics
deleted file mode 100644
index 5eca7ec81d..0000000000
--- a/ietf/templates/meeting/upcoming.ics
+++ /dev/null
@@ -1,32 +0,0 @@
-{% load humanize tz %}{% autoescape off %}{% load ietf_filters textfilters %}BEGIN:VCALENDAR
-VERSION:2.0
-METHOD:PUBLISH
-PRODID:-//IETF//datatracker.ietf.org ical upcoming//EN
-{{vtimezones}}{% for item in assignments %}BEGIN:VEVENT
-UID:ietf-{{item.session.meeting.number}}-{{item.timeslot.pk}}
-SUMMARY:{% if item.session.name %}{{item.session.group.acronym|lower}} - {{item.session.name|ics_esc}}{% else %}{{item.session.group.acronym|lower}} - {{item.session.group.name}}{%endif%}
-{% if item.schedule.meeting.city %}LOCATION:{{item.schedule.meeting.city}},{{item.schedule.meeting.country}}
-{% endif %}STATUS:{{item.session.ical_status}}
-CLASS:PUBLIC
-DTSTART{% ics_date_time item.timeslot.local_start_time item.schedule.meeting.time_zone %}
-DTEND{% ics_date_time item.timeslot.local_end_time item.schedule.meeting.time_zone %}
-DTSTAMP{% ics_date_time item.timeslot.modified|utc 'utc' %}{% if item.session.agenda %}
-URL:{{item.session.agenda.get_href}}{% endif %}
-DESCRIPTION:{% if item.timeslot.name %}{{item.timeslot.name|ics_esc}}\n{% endif %}{% if item.session.agenda_note %}
- Note: {{item.session.agenda_note|ics_esc}}\n{% endif %}{% for material in item.session.materials.all %}
- \n{{material.type}}{% if material.type.name != "Agenda" %}
- ({{material.title|ics_esc}}){% endif %}:
- {{material.get_href}}\n{% endfor %}{% if item.session.remote_instructions %}
- Remote instructions: {{ item.session.remote_instructions }}\n{% endif %}
-END:VEVENT
-{% endfor %}{% for meeting in ietfs %}BEGIN:VEVENT
-UID:ietf-{{ meeting.number }}
-SUMMARY:IETF {{ meeting.number }}{% if meeting.city %}
-LOCATION:{{ meeting.city }},{{ meeting.country }}{% endif %}
-CLASS:PUBLIC
-DTSTART;VALUE=DATE{% if meeting.time_zone %};TZID={{ meeting.time_zone|ics_esc }}{% endif %}:{{ meeting.date|date:"Ymd" }}
-DTEND;VALUE=DATE{% if meeting.time_zone %};TZID={{ meeting.time_zone|ics_esc }}{% endif %}:{{ meeting.end_date|next_day|date:"Ymd" }}
-DTSTAMP{% ics_date_time meeting.cached_updated|utc 'utc' %}
-URL:{{ request.scheme }}://{{ request.get_host }}{% url 'agenda' num=meeting.number %}
-END:VEVENT
-{% endfor %}END:VCALENDAR{% endautoescape %}
diff --git a/ietf/utils/admin.py b/ietf/utils/admin.py
index 6c1c8726e1..e6324ad7cd 100644
--- a/ietf/utils/admin.py
+++ b/ietf/utils/admin.py
@@ -51,6 +51,19 @@ def _link(self):
_link.admin_order_field = ordering
return _link
+
+class SaferStackedInline(admin.StackedInline):
+ """StackedInline without delete by default"""
+ can_delete = False # no delete button
+ show_change_link = True # show a link to the resource (where it can be deleted)
+
+
+class SaferTabularInline(admin.TabularInline):
+ """TabularInline without delete by default"""
+ can_delete = False # no delete button
+ show_change_link = True # show a link to the resource (where it can be deleted)
+
+
from .models import DumpInfo
class DumpInfoAdmin(admin.ModelAdmin):
list_display = ['date', 'host', 'tz']
diff --git a/patch/django-cookie-delete-with-all-settings.patch b/patch/django-cookie-delete-with-all-settings.patch
index fb8bbbe4fe..4ceaf8fceb 100644
--- a/patch/django-cookie-delete-with-all-settings.patch
+++ b/patch/django-cookie-delete-with-all-settings.patch
@@ -9,9 +9,9 @@
samesite=settings.SESSION_COOKIE_SAMESITE,
)
---- django/http/response.py.orig 2020-08-13 11:16:04.060627793 +0200
-+++ django/http/response.py 2020-08-13 11:54:03.482476973 +0200
-@@ -282,20 +282,28 @@
+--- django/http/response.py.orig 2025-12-02 22:12:05.197283001 +0000
++++ django/http/response.py 2025-12-02 22:26:01.396576013 +0000
+@@ -286,20 +286,28 @@
value = signing.get_cookie_signer(salt=key + salt).sign(value)
return self.set_cookie(key, value, **kwargs)