79 lines
3.9 KiB
HTML
79 lines
3.9 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Workspaces{% endblock %}
|
|
{% block content %}
|
|
<div class="aiw-page-head">
|
|
<div class="flex-1 stack stack-sm">
|
|
<h1>Workspaces</h1>
|
|
<p class="text-sm text-muted">Ein Workspace verbindet freigegebene Repositories, Datenbanken und Dateien mit dem Chat.</p>
|
|
</div>
|
|
{% if can_create %}<a class="btn btn-primary" href="/workspaces/new">Workspace anlegen</a>{% endif %}
|
|
</div>
|
|
|
|
{% if trashed %}
|
|
<div class="alert alert-info" role="status"><div class="alert-content">
|
|
<p>Workspace „{{ trashed }}“ liegt im Papierkorb. Er lässt sich {{ trash_days }} Tage lang wiederherstellen.</p>
|
|
</div></div>
|
|
{% endif %}
|
|
{% if deleted %}
|
|
<div class="alert alert-success" role="status"><div class="alert-content">
|
|
<p>Workspace „{{ deleted }}“ endgültig gelöscht, mit Quellen, Chats, Freigabeanträgen und Uploads. Audit-Log und Verbrauch bleiben erhalten.</p>
|
|
{% if memory %}<p>Bitte in {{ memory }} das Projekt dieses Workspace und seinen Key löschen oder widerrufen; die Plattform hat den Key bereits entfernt.</p>{% endif %}
|
|
</div></div>
|
|
{% endif %}
|
|
|
|
{% if memberships %}
|
|
<div class="aiw-card-grid">
|
|
{% for m in memberships %}
|
|
{% set st = stats.get(m.workspace.id) %}
|
|
<a class="card card-hover aiw-ws-card" href="/workspaces/{{ m.workspace.id }}">
|
|
<div class="card-body stack stack-sm">
|
|
<div class="cluster">
|
|
<strong class="flex-1">{{ m.workspace.name }}</strong>
|
|
<span class="badge {{ 'badge-primary' if m.may_approve else 'badge-default' }}">{{ role_labels[m.role] }}</span>
|
|
</div>
|
|
<p class="text-sm text-muted">{{ teams.get(m.workspace.team_id, '') }}</p>
|
|
{% if m.workspace.description %}<p class="text-sm aiw-clamp">{{ m.workspace.description }}</p>{% endif %}
|
|
<p class="text-xs text-muted aiw-ws-meta">{{ st.chats }} Chat{{ 's' if st.chats != 1 }} · {{ st.sources }} Quelle{{ 'n' if st.sources != 1 }}{% if st.last %} · zuletzt aktiv {{ st.last.strftime('%d.%m.%Y') }}{% endif %}</p>
|
|
</div>
|
|
</a>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<div class="empty">
|
|
<p class="empty-title">Noch kein Workspace</p>
|
|
<p class="empty-description">Ein Workspace verbindet freigegebene Datenquellen mit dem Chat. Ohne Workspace gibt es keinen Chat.</p>
|
|
{% if can_create %}<a class="btn btn-primary" href="/workspaces/new">Workspace anlegen</a>{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if trash %}
|
|
<section class="card" id="trash">
|
|
<div class="card-header"><h2 class="text-lg">Papierkorb</h2></div>
|
|
<div class="card-body stack">
|
|
<p class="text-sm text-muted">Gelöschte Workspaces, in denen du Admin bist. Sie werden nach Ablauf der Frist automatisch endgültig gelöscht.</p>
|
|
<div class="table-wrap"><table>
|
|
<thead><tr><th>Workspace</th><th>Gelöscht</th><th>Endgültig gelöscht ab</th><th></th></tr></thead>
|
|
<tbody>
|
|
{% for t in trash %}
|
|
<tr>
|
|
<td>{{ t.workspace.name }}<p class="text-xs text-muted">{{ teams.get(t.workspace.team_id, '') }}</p></td>
|
|
<td class="text-sm">{{ t.workspace.deleted.strftime('%d.%m.%Y %H:%M') }}</td>
|
|
<td class="text-sm">{{ t.purge_at.strftime('%d.%m.%Y') }}</td>
|
|
<td><div class="cluster">
|
|
<form method="post" action="/workspaces/{{ t.workspace.id }}/restore">
|
|
<input type="hidden" name="_csrf" value="{{ p.csrf }}">
|
|
<button class="btn btn-secondary btn-sm" type="submit">Wiederherstellen</button>
|
|
</form>
|
|
<form method="post" action="/workspaces/{{ t.workspace.id }}/purge" data-confirm="Workspace {{ t.workspace.name }} jetzt endgültig löschen? Das lässt sich nicht rückgängig machen.">
|
|
<input type="hidden" name="_csrf" value="{{ p.csrf }}">
|
|
<button class="btn btn-ghost btn-sm" type="submit">Endgültig löschen</button>
|
|
</form>
|
|
</div></td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table></div>
|
|
</div>
|
|
</section>
|
|
{% endif %}
|
|
{% endblock %}
|