From 3c12880650b6f468ab41ec5782f791c3e019b6ef Mon Sep 17 00:00:00 2001 From: Russ Housley Date: Wed, 5 Nov 2025 15:27:52 -0500 Subject: [PATCH 001/158] feat: Add tab for IESG view of working groups (#9841) * Add tab for WGs. Fixes#9730. * Update utils.py Only add WG tabe for the IESG (not the IAB) --- ietf/group/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ietf/group/utils.py b/ietf/group/utils.py index 29cfff2c2d..6777ed1933 100644 --- a/ietf/group/utils.py +++ b/ietf/group/utils.py @@ -237,9 +237,10 @@ def construct_group_menu_context(request, group, selected, group_type, others): entries.append(("Review requests", urlreverse(ietf.group.views.review_requests, kwargs=kwargs))) entries.append(("Reviewers", urlreverse(ietf.group.views.reviewer_overview, kwargs=kwargs))) entries.append(("Reviews History", urlreverse(ietf.group.views.review_requests_history, kwargs=kwargs))) - if group.features.has_meetings: entries.append(("Meetings", urlreverse("ietf.group.views.meetings", kwargs=kwargs))) + if group.acronym in ["iesg"]: + entries.append(("Working Groups", urlreverse("ietf.iesg.views.working_groups"))) if group.acronym in ["iab", "iesg"]: entries.append(("Statements", urlreverse("ietf.group.views.statements", kwargs=kwargs))) entries.append(("Appeals", urlreverse("ietf.group.views.appeals", kwargs=kwargs))) @@ -250,7 +251,6 @@ def construct_group_menu_context(request, group, selected, group_type, others): if is_valid_url(group.list_archive): entries.append((mark_safe("List archive »"), group.list_archive)) - # actions actions = [] From d796aa0a9eee4b705bc072d546b9ce634eb7dd92 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Wed, 5 Nov 2025 15:29:08 -0500 Subject: [PATCH 002/158] chore: remove OBE test (#9885) --- ietf/liaisons/tests.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/ietf/liaisons/tests.py b/ietf/liaisons/tests.py index 1209d7f401..d2f4fafca3 100644 --- a/ietf/liaisons/tests.py +++ b/ietf/liaisons/tests.py @@ -1119,17 +1119,6 @@ def test_redirect_for_approval(self): # ------------------------------------------------- # Form validations # ------------------------------------------------- - def test_post_and_send_fail(self): - RoleFactory(name_id='liaiman',person__user__username='ulm-liaiman',group__type_id='sdo',group__acronym='ulm') - GroupFactory(type_id='wg',acronym='mars') - - url = urlreverse('ietf.liaisons.views.liaison_add', kwargs={'type':'incoming'}) - login_testing_unauthorized(self, "ulm-liaiman", url) - - r = self.client.post(url,get_liaison_post_data(),follow=True) - - self.assertEqual(r.status_code, 200) - self.assertContains(r, 'As an IETF Liaison Manager you can not send incoming liaison statements') def test_deadline_field(self): '''Required for action, comment, not info, response''' From 2ac61062b4776933a3bb73554963095bf1503760 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Thu, 6 Nov 2025 10:33:38 -0500 Subject: [PATCH 003/158] feat: show available sdo groups to liaison coordinators and managers (#9856) * feat: show available sdo groups to liaison coordinators and mamagers * fix: better typing delcaration * fix: avoid unneeded whitespace in class declarations --- ietf/liaisons/tests.py | 11 +++ ietf/liaisons/urls.py | 1 + ietf/liaisons/views.py | 14 +++ ietf/templates/base/menu.html | 102 +++++++++++--------- ietf/templates/liaisons/list_other_sdo.html | 41 ++++++++ 5 files changed, 122 insertions(+), 47 deletions(-) create mode 100644 ietf/templates/liaisons/list_other_sdo.html diff --git a/ietf/liaisons/tests.py b/ietf/liaisons/tests.py index d2f4fafca3..5e0a237575 100644 --- a/ietf/liaisons/tests.py +++ b/ietf/liaisons/tests.py @@ -110,6 +110,17 @@ def test_help_pages(self): self.assertEqual(self.client.get('/liaison/help/from_ietf/').status_code, 200) self.assertEqual(self.client.get('/liaison/help/to_ietf/').status_code, 200) + def test_list_other_sdo(self): + GroupFactory(type_id="sdo", state_id="conclude", acronym="third") + GroupFactory(type_id="sdo", state_id="active", acronym="second") + GroupFactory(type_id="sdo", state_id="active", acronym="first") + url = urlreverse("ietf.liaisons.views.list_other_sdo") + login_testing_unauthorized(self, "secretary", url) + r = self.client.get(url) + q = PyQuery(r.content) + self.assertEqual(len(q("h1")), 2) + first_td_elements_text = [e.text for e in q("tr").find("td:first-child")] + self.assertEqual(first_td_elements_text, ["first", "second", "third"]) class UnitTests(TestCase): def test_get_contacts_for_liaison_messages_for_group_primary(self): diff --git a/ietf/liaisons/urls.py b/ietf/liaisons/urls.py index 0fbd29425e..498df3b965 100644 --- a/ietf/liaisons/urls.py +++ b/ietf/liaisons/urls.py @@ -37,4 +37,5 @@ url(r'^add/$', views.redirect_add), url(r'^for_approval/$', views.redirect_for_approval), url(r'^for_approval/(?P\d+)/$', views.redirect_for_approval), + url(r"^list_other_sdo/$", views.list_other_sdo), ] diff --git a/ietf/liaisons/views.py b/ietf/liaisons/views.py index e2abff52ac..59c6ea69fc 100644 --- a/ietf/liaisons/views.py +++ b/ietf/liaisons/views.py @@ -509,3 +509,17 @@ def liaison_resend(request, object_id): messages.success(request,'Liaison Statement resent') return redirect('ietf.liaisons.views.liaison_list') + +@role_required("Secretariat", "IAB", "Liaison Coordinator", "Liaison Manager") +def list_other_sdo(request): + def _sdo_order_key(obj:Group)-> tuple[str,str]: + state_order = { + "active" : "a", + "conclude": "b", + } + return (state_order.get(obj.state.slug,f"c{obj.state.slug}"), obj.acronym) + + sdos = sorted(list(Group.objects.filter(type="sdo")),key = _sdo_order_key) + for sdo in sdos: + sdo.liaison_managers =[r.person for r in sdo.role_set.filter(name="liaiman")] + return render(request,"liaisons/list_other_sdo.html",dict(sdos=sdos)) diff --git a/ietf/templates/base/menu.html b/ietf/templates/base/menu.html index 1e7c1688ff..8ff6e952da 100644 --- a/ietf/templates/base/menu.html +++ b/ietf/templates/base/menu.html @@ -31,19 +31,19 @@ {% if flavor == 'top' %}
  • {% endif %}
  • New work
  • - Chartering groups
  • - BOFs
  • - BOF Requests @@ -51,13 +51,13 @@ {% if flavor == 'top' %}
  • {% endif %}
  • Other groups
  • - Concluded groups
  • - Non-WG lists @@ -81,26 +81,26 @@
  • {% endif %}
  • - Search
  • - Recent I-Ds
  • - Submit an Internet-Draft
  • {% if user and user.is_authenticated %}
  • - My tracked docs @@ -108,7 +108,7 @@ {% if user|has_role:"Area Director,Secretariat" %} {% if flavor == 'top' %}
  • {% endif %}
  • - RFC status changes @@ -121,19 +121,19 @@