94 lines
4.7 KiB
HTML
94 lines
4.7 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}{{ team.name }}{% endblock %}
|
|
{% block content %}
|
|
<div class="stack stack-sm">
|
|
<h1>{{ team.name }}</h1>
|
|
</div>
|
|
{% include "_flash.html" %}
|
|
|
|
<section class="card">
|
|
<div class="card-header"><h2 class="text-lg">Mitglieder</h2></div>
|
|
<div class="card-body stack">
|
|
<p class="text-sm text-muted">Nur Mitglieder des Teams können Workspaces des Teams anlegen oder in sie aufgenommen werden. Wer entfernt wird, verliert sofort den Zugriff auf alle Workspaces dieses Teams.</p>
|
|
{% if members %}
|
|
<div class="table-wrap"><table>
|
|
<thead><tr><th>Name</th><th>Nutzername</th><th></th></tr></thead>
|
|
<tbody>
|
|
{% for u in members %}
|
|
<tr>
|
|
<td>{{ u.display_name }}{% if not u.active %} <span class="badge badge-default">deaktiviert</span>{% endif %}</td>
|
|
<td>{{ u.username }}</td>
|
|
<td>
|
|
<form method="post" action="/admin/teams/{{ team.id }}/members/{{ u.id }}/remove" data-confirm="{{ u.display_name }} aus dem Team entfernen? Der Zugriff auf alle Workspaces des Teams endet.">
|
|
<input type="hidden" name="_csrf" value="{{ p.csrf }}"><button class="btn btn-ghost btn-sm" type="submit">Entfernen</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table></div>
|
|
{% else %}<p class="text-muted">Noch keine Mitglieder.</p>{% endif %}
|
|
<form method="post" action="/admin/teams/{{ team.id }}/members" class="cluster">
|
|
<input type="hidden" name="_csrf" value="{{ p.csrf }}">
|
|
<input name="username" placeholder="Nutzername" required aria-label="Nutzername">
|
|
<button class="btn btn-secondary btn-sm" type="submit">Hinzufügen</button>
|
|
</form>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<div class="card-header"><h2 class="text-lg">Workspaces</h2></div>
|
|
<div class="card-body">
|
|
{% if workspaces %}
|
|
<div class="table-wrap">
|
|
<table>
|
|
<thead><tr><th>Workspace</th><th>Speicher belegt</th><th>Kontingent (MB)</th></tr></thead>
|
|
<tbody>
|
|
{% for w in workspaces %}{% set st = storage[w.id] %}
|
|
<tr>
|
|
<td>{{ w.name }}{% if w.deleted %} <span class="badge badge-default">Papierkorb</span>{% endif %}<br><span class="text-xs text-muted">angelegt {{ w.created.strftime('%d.%m.%Y') }}</span></td>
|
|
<td><span class="{{ 'text-danger' if st.percent >= 90 }}">{{ (st.used / 1048576)|round(1) }} MB · {{ st.percent }} %</span></td>
|
|
<td>
|
|
<form method="post" action="/admin/teams/{{ team.id }}/workspaces/{{ w.id }}/storage" class="cluster">
|
|
<input type="hidden" name="_csrf" value="{{ p.csrf }}">
|
|
<input name="limit_mb" value="{{ w.storage_limit_mb if w.storage_limit_mb is not none else '' }}" placeholder="Standard {{ default_storage_mb }}" inputmode="numeric" class="aiw-input-narrow" aria-label="Kontingent für {{ w.name }} in MB">
|
|
<button class="btn btn-ghost btn-sm" type="submit">Speichern</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<p class="text-xs text-muted">Nur zur Übersicht: Inhalte sehen auch Plattform-Admins nur als Mitglied. Das Kontingent gilt für Dateien zur Analyse; leer heißt Standard ({{ default_storage_mb }} MB, <code>AIW_WORKSPACE_STORAGE_MB</code>).</p>
|
|
{% else %}<p class="text-muted">Noch kein Workspace.</p>{% endif %}
|
|
</div>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<div class="card-header"><h2 class="text-lg">Stammdaten</h2></div>
|
|
<div class="card-body">
|
|
<form method="post" action="/admin/teams/{{ team.id }}" class="cluster">
|
|
<input type="hidden" name="_csrf" value="{{ p.csrf }}">
|
|
<input name="name" value="{{ team.name }}" required aria-label="Name">
|
|
<input name="slug" value="{{ team.slug }}" required aria-label="Kürzel">
|
|
<button class="btn btn-secondary btn-sm" type="submit">Speichern</button>
|
|
</form>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="card aiw-danger-zone">
|
|
<div class="card-header"><h2 class="text-lg">Team löschen</h2></div>
|
|
<div class="card-body stack stack-sm">
|
|
{% if workspaces %}
|
|
<p class="text-sm text-muted">Nur möglich, wenn das Team keine Workspaces mehr hat. Workspaces löschen deren Admins in den Workspace-Einstellungen.</p>
|
|
{% else %}
|
|
<p class="text-sm text-muted">Mitgliedschaften und die API-Keys des Teams werden gelöscht. Verbrauch und Audit-Log bleiben.</p>
|
|
<form method="post" action="/admin/teams/{{ team.id }}/delete" data-confirm="Team {{ team.name }} löschen?">
|
|
<input type="hidden" name="_csrf" value="{{ p.csrf }}">
|
|
<button class="btn btn-danger btn-sm" type="submit">Team löschen</button>
|
|
</form>
|
|
{% endif %}
|
|
</div>
|
|
</section>
|
|
{% endblock %}
|