snapshot: preserve current tubco portal baseline

This commit is contained in:
Md Bayazid Bostame
2026-03-26 10:49:59 +01:00
parent af10a5fdee
commit 08971abc28
2 changed files with 55 additions and 0 deletions

View File

@@ -139,4 +139,49 @@
</div> </div>
<p class="hint">{% trans "Hinweis: Der aktuell angemeldete Super Admin kann sich hier nicht selbst deaktivieren oder auf eine niedrigere Rolle setzen." %}</p> <p class="hint">{% trans "Hinweis: Der aktuell angemeldete Super Admin kann sich hier nicht selbst deaktivieren oder auf eine niedrigere Rolle setzen." %}</p>
</section> </section>
<section class="card">
<div class="toolbar">
<div>
<h2>{% trans "Letzte Benutzeraktionen" %}</h2>
<p class="sub">{% trans "Die letzten Änderungen an Benutzerkonten und Rollen." %}</p>
</div>
<a class="btn btn-secondary" href="/admin-tools/audit-log/">{% trans "Zum Audit Log" %}</a>
</div>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>{% trans "Zeit" %}</th>
<th>{% trans "Aktion" %}</th>
<th>{% trans "Betroffen" %}</th>
<th>{% trans "Durch" %}</th>
<th>{% trans "Details" %}</th>
</tr>
</thead>
<tbody>
{% for row in recent_user_events %}
<tr>
<td>{{ row.created_at|date:"d.m.Y H:i" }}</td>
<td>{{ row.action_label }}</td>
<td>{{ row.target_label|default:"-" }}</td>
<td>{{ row.actor_display|default:"-" }}</td>
<td>
{% if row.details.username %}<div class="mini"><strong>{% trans "Benutzername" %}:</strong> {{ row.details.username }}</div>{% endif %}
{% if row.role_label %}<div class="mini"><strong>{% trans "Rolle" %}:</strong> {{ row.role_label }}</div>{% endif %}
{% if row.details.email %}<div class="mini"><strong>{% trans "E-Mail" %}:</strong> {{ row.details.email }}</div>{% endif %}
{% if row.details.invitation_sent %}<div class="mini">{% trans "Einladung versendet" %}</div>{% endif %}
{% if row.details.password_changed %}<div class="mini">{% trans "Passwort geändert" %}</div>{% endif %}
{% if not row.details %}-{% endif %}
</td>
</tr>
{% empty %}
<tr>
<td colspan="5">{% trans "Noch keine Benutzeraktionen vorhanden." %}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</section>
{% endblock %} {% endblock %}

View File

@@ -363,6 +363,15 @@ def _user_management_rows():
def _render_user_management(request, create_form=None, status_code: int = 200): def _render_user_management(request, create_form=None, status_code: int = 200):
recent_user_events = list(
AdminAuditLog.objects.select_related('actor')
.filter(action__in=['user_created', 'user_updated', 'user_password_reset_sent', 'user_deleted'])
.order_by('-created_at', '-id')[:12]
)
for row in recent_user_events:
row.action_label = _audit_action_label(row.action)
role_key = (row.details or {}).get('role')
row.role_label = str(ROLE_LABELS[role_key]) if role_key in ROLE_LABELS else role_key
return render( return render(
request, request,
'workflows/user_management.html', 'workflows/user_management.html',
@@ -370,6 +379,7 @@ def _render_user_management(request, create_form=None, status_code: int = 200):
'create_form': create_form or UserManagementCreateForm(), 'create_form': create_form or UserManagementCreateForm(),
'rows': _user_management_rows(), 'rows': _user_management_rows(),
'role_choices': [(key, str(ROLE_LABELS[key])) for key in ROLE_GROUP_NAMES], 'role_choices': [(key, str(ROLE_LABELS[key])) for key in ROLE_GROUP_NAMES],
'recent_user_events': recent_user_events,
}, },
status=status_code, status=status_code,
) )