|
1 | | -# Copyright The IETF Trust 2023, All Rights Reserved |
| 1 | +# Copyright The IETF Trust 2023-2025, All Rights Reserved |
| 2 | +from django.contrib import messages |
2 | 3 |
|
3 | 4 | import debug # pyflakes: ignore |
4 | 5 |
|
5 | 6 | from pathlib import Path |
6 | 7 |
|
7 | 8 | from django import forms |
8 | 9 | from django.conf import settings |
9 | | -from django.http import FileResponse, Http404 |
| 10 | +from django.http import FileResponse, Http404, HttpResponseRedirect |
10 | 11 | from django.views.decorators.cache import cache_control |
11 | 12 | from django.shortcuts import get_object_or_404, render, redirect |
12 | 13 | from django.template.loader import render_to_string |
| 14 | + |
| 15 | +from ietf.doc.forms import ChangeStatementStateForm |
| 16 | +from ietf.doc.utils import add_state_change_event |
13 | 17 | from ietf.utils import markdown |
14 | 18 | from django.utils.html import escape |
15 | 19 |
|
@@ -278,3 +282,40 @@ def new_statement(request): |
278 | 282 | } |
279 | 283 | form = NewStatementForm(initial=init) |
280 | 284 | return render(request, "doc/statement/new_statement.html", {"form": form}) |
| 285 | + |
| 286 | + |
| 287 | +@role_required("Secretariat") |
| 288 | +def change_statement_state(request, name): |
| 289 | + """Change state of a statement Document""" |
| 290 | + statement = get_object_or_404( |
| 291 | + Document.objects.filter(type_id="statement"), |
| 292 | + name=name, |
| 293 | + ) |
| 294 | + if request.method == "POST": |
| 295 | + form = ChangeStatementStateForm(request.POST) |
| 296 | + if form.is_valid(): |
| 297 | + new_state = form.cleaned_data["state"] |
| 298 | + prev_state = statement.get_state() |
| 299 | + if new_state == prev_state: |
| 300 | + messages.info(request, f"State not changed, remains {prev_state}.") |
| 301 | + else: |
| 302 | + statement.set_state(new_state) |
| 303 | + e = add_state_change_event( |
| 304 | + statement, |
| 305 | + request.user.person, |
| 306 | + prev_state, |
| 307 | + new_state, |
| 308 | + ) |
| 309 | + statement.save_with_history([e]) |
| 310 | + messages.success(request, f"State changed to {new_state}.") |
| 311 | + return HttpResponseRedirect(statement.get_absolute_url()) |
| 312 | + else: |
| 313 | + form = ChangeStatementStateForm(initial={"state": statement.get_state()}) |
| 314 | + return render( |
| 315 | + request, |
| 316 | + "doc/statement/change_statement_state.html", |
| 317 | + { |
| 318 | + "form": form, |
| 319 | + "statement": statement, |
| 320 | + }, |
| 321 | + ) |
0 commit comments