{% extends "basis.html" %}{% block titel %}{{ t.freigabe.verwaltung.titel }} – Timbre{% endblock %} {# Ein Konto mit seinen Aktionen. Jede Aktion ist ein eigenes POST-Formular auf genau dieses Konto. Alle Werte kommen über die Vorlage mit Autoescape in die Seite; es gibt kein Skript. #} {% macro konto(k, zustand) %}{% set v = t.freigabe.verwaltung %}
  • {{ k.email or v.ohne_adresse }} {% if k.id == nutzer.id %}{{ v.du }}{% endif %} {% if k.verwaltung and k.id != nutzer.id %}{{ v.nav }}{% endif %}
    {{ v.angelegt }}
    {{ v.bestaetigt }}
    {{ v.ja if k.email_bestaetigt else v.nein }}
    {% if k.letzter_zugriff %}
    {{ v.zuletzt }}
    {% endif %} {% if zustand != 'wartet' and k.freigabe_am %}
    {{ v.entschieden }}
    {% endif %}
    {{ v.kontingent }}
    {{ k.analysen_genutzt | zahl(sprache) }} {{ v.genutzt }}{% if k.kontingent_grenze is not none %} · {{ k.kontingent_grenze | zahl(sprache) }}{% endif %}
    {% if k.freigabe_vorher %}
    {{ v.vorher }}
    {% endif %} {% if k.freigabe_notiz %}
    {{ v.notiz }}
    {{ k.freigabe_notiz }}
    {% endif %}
    {% if k.id != nutzer.id %} {# Ablehnen mit Rückfrage (H24) – ohne Skript: Der Knopf, der wirklich ablehnt, steht erst in der aufgeklappten Rückfrage. #}
    {% if zustand != 'frei' %}{% endif %} {% if zustand == 'frei' %}{% endif %} {% if zustand == 'abgelehnt' %}{% endif %}
    {% if zustand != 'abgelehnt' %}
    {{ v.ablehnen }}

    {{ v.ablehnen_frage }}

    {% endif %}
    {% endif %} {# Notiz und Analysegrenze aufklappbar (H24): Die Notiz gehört über `form=` zum Formular oben. #}
    {{ v.mehr_feld if k.id != nutzer.id else v.mehr_grenze }} {% if k.id != nutzer.id %}{% endif %}
    {# Timbre-Speicher (Beta, 25.10.2026): nur für freie Konten und nur, wenn es die Tabellen gibt. Freischalten legt im Hintergrund ein Unterkonto der Storage Box an; Entziehen erst nach der aufgeklappten Rückfrage (löscht Tracks und Unterkonto). #} {% if beta and beta.da and zustand == 'frei' %}{% set bv = t.tspeicher.verwaltung %}{% set bz = beta.je_konto.get(k.id) %}
    {{ bv.konto_titel }}{% if bz %} · {{ bv.zustaende[bz.zustand] }}{% endif %}
    {% if bz and bz.zustand != 'entziehen' %}
    {{ bv.entziehen }}

    {{ bv.entziehen_frage }}

    {% endif %}
    {% endif %} {# Designs freischalten (28.10.2026, z. B. Neonlila): nur für freie Konten. Je Design ein POST auf genau dieses Konto. #} {% if zustand == 'frei' and freischaltbar %}{% set dv = t.designs.verwaltung %}{% set frei_liste = k.designs_frei if k.designs_frei is sequence and k.designs_frei is not string else [] %}
    {{ dv.titel }}{% for d in freischaltbar if d in frei_liste %} · {{ t.designs.namen[d] }}{% endfor %}

    {{ dv.hilfe }}

    {% for d in freischaltbar %}{% set an = d in frei_liste %}

    {{ t.designs.namen[d] }} · {{ dv.an if an else dv.aus }}

    {% endfor %}
    {% endif %} {# Upload in den eigenen Speicher (09.11.2026): Freigabe je Konto, nur mit Schema (sonst ist k.upload_eigen leer) #} {% if zustand == 'frei' and k.upload_eigen is not none %}{% set uv = t.upload_eigen.verwaltung %}{% set an = k.upload_eigen %}
    {{ uv.titel }} · {{ uv.an if an else uv.aus }}

    {{ uv.hilfe }}

    {% endif %}
  • {% endmacro %} {% block inhalt %}{% set v = t.freigabe.verwaltung %}
    {{ v.eyebrow }}

    {{ v.titel }}

    {% if beta and beta.da %}

    {{ t.tspeicher.verwaltung.zur_liste }} →{% if not beta.api %} · {{ t.tspeicher.verwaltung.api_aus }}{% endif %}

    {% endif %}
    {% if hinweis %}

    {{ v.hinweise[hinweis] }}

    {% endif %} {# Eine einzige, deutliche Warnung, wenn Mail fehlt – ob eine einzelne Mail rausging, steht im Protokoll (Spalte „Mail“). #} {% if not mail_aktiv %} {% elif not meldung_aktiv %}{% endif %} {% if loesch.alt %}{% endif %} {% if loesch.putz_fehlt %}{% endif %}

    {{ v.kontingent_vorgabe.replace("{b}", vorgabe.bestaetigt | zahl(sprache)).replace("{u}", vorgabe.unbestaetigt | zahl(sprache)) }}

    {% for zustand, titel, leer in (("wartet", v.wartet_titel, v.wartet_leer), ("frei", v.frei_titel, v.frei_leer), ("abgelehnt", v.abgelehnt_titel, v.abgelehnt_leer)) %}

    {{ titel }} {{ konten.anzahl[zustand] }}

    {% if konten[zustand] %} {% if konten.anzahl[zustand] > konten[zustand] | length %}

    {{ v.mehr.replace("{n}", konten[zustand] | length | string) }}

    {% endif %} {% else %}

    {{ leer }}

    {% endif %}
    {% endfor %}

    {{ v.protokoll_titel }}

    {% if protokoll %}
    {% for p in protokoll %} {# Stand der Mail zu diesem Eintrag steht klein unter der Aktion (unterwegs / gesendet / nicht gesendet / keine …) #} {% endfor %}
    {{ v.wann }}{{ v.wer }}{{ v.wen }}{{ v.was }}{{ v.notiz }}
    {{ v.timbre if p.durch_id is none else (p.durch_email or v.geloescht) }} {{ '' if p.konto_id is none else (p.konto_email or v.geloescht) }}{{ v.aktionen.get(p.aktion, p.aktion) }}{% if p.mail %}{{ v.mail_spalte }}: {{ v.mail_stand.get(p.mail, p.mail) }}{% endif %} {{ p.system_text }}{% if p.system_text and p.notiz %} · {% endif %}{{ p.notiz or '' }}
    {% else %}

    {{ v.protokoll_leer }}

    {% endif %}
    {% endblock %}