{# settings.tpl.html – Profil-Bearbeitung mit Tab-Navigation Wichtig: Filter (|raw, |length etc) nur in {{ }}, NIE in {% %} Funktionsaufrufe wie profile_field_schema() laufen direkt #}
{{ t('settings_einstellungen') }}
{# ──── Tab-Navigation ──── #}
{{ t('settings_profil') }} {{ t('settings_sicherheit') }} {{ t('settings_sessions') }} {% if count(sessions) > 0 %} {{ count(sessions) }} {% endif %} {{ t('settings_benachrichtigungen') }} {{ t('settings_darstellung') }} {{ t('settings_konto') }}
{% if error %}
{{ error }}
{% endif %} {# TAB: Profil #} {% if activeTab == 'profile' %}

{{ t('settings_so_sehen_andere_user') }}
{{ t('settings_mein_oeffentliches_profil_anschauen') }}

Aktuelles Avatar
{{ t('settings_max_512_kb_jpeg') }}
{% if profile.avatar %} {% endif %}
{% if profile.profile_banner %} {% else %} {% endif %}
{{ t('settings_max_2_mb_ideal') }}
{% if profile.profile_banner %} {% endif %}
{{ render_editor('sig_editor', 'signature', profile.signature, t('settings_signature_placeholder'), false, false) | raw }}
{{ t('settings_wird_unter_deinen_beitraegen') }}

{{ t('settings_persoenliche_angaben') }}

{{ t('settings_alle_felder_sind_optional') }} {{ t('settings_oeffentlich') }} · {{ t('settings_nur_mitglieder') }} · {{ t('settings_nur_ich') }}

{# Da Engine kein loop.key hat, rendern wir die Felder mit einem Helper-Aufruf der bereits HTML zurückgibt — kompakte Lösung #} {% set privacy = profile_privacy_settings(profile) %} {{ render_profile_field_inputs(profile, privacy) | raw }}
{% endif %} {# TAB: Sicherheit #} {% if activeTab == 'security' %} {# ─── E-Mail-Adresse ─── #}

{{ t('settings_e_mail_adresse') }}

{% if profile.pending_email %} {# Aktive Änderungs-Anfrage → Status anzeigen #}
{{ t('settings_aktuelle_adresse_noch_aktiv') }}
{{ profile.email }}
{{ t('settings_ausstehende_aenderung_auf') }}
{{ profile.pending_email }}
{{ t('settings_bitte_den_bestaetigungs_link') }}
{% else %} {# Normaler Zustand → aktuelle Mail read-only + Button "Ändern" #}
🔒 {{ profile.email | default(t('settings_nicht_gesetzt')) }}
{{ t('settings_wird_fuer_passwort_reset') }}
{{ t('settings_e_mail_adresse_aendern') }}
{{ t('settings_wir_senden_einen_bestaetigungs') }}
{% endif %}
{# ─── Passwort ändern ─── #}

{{ t('settings_passwort_aendern') }}

{{ t('settings_zur_bestaetigung_deiner_identitaet') }}
{{ t('settings_mindestens_6_zeichen') }}
{{ t('settings_bei_passwort_aenderung_werden') }}
{# JS für Passwort-Match-Live-Check #}

{{ t('settings_zwei_faktor_authentifizierung') }}

{% if newBackupCodes %} {# Frisch aktiviert: Backup-Codes EINMALIG zeigen #}

{{ t('settings_deine_backup_codes_jetzt') }}

{{ t('settings_codes_sicher_aufbewahren') | raw }} {{ t('settings_jeder_code_ist_nur') }} {{ t('settings_diese_liste_wird_nicht') }}

{% for bc in newBackupCodes %} {{ bc }} {% endfor %}

{% endif %} {% if has2fa %} {# 2FA ist aktiv → Deaktivieren-Form #}

{{ t('settings_2fa_ist') }} aktiv. Du wirst bei jedem Login nach einem 6-stelligen Code gefragt. {{ t('settings_backup_code_hinweis') }}

{{ t('settings_2fa_deaktivieren_mit_passwort') }}
{% else %} {# 2FA noch nicht aktiv → Setup-UI #}

{{ t('settings_mit_2fa_ist_dein') }}

{{ t('settings_2fa_jetzt_einrichten') }}

{{ t('settings_schritt_1') }} {{ t('settings_scanne_den_qr_code') }}

{# QR wird auf dem eigenen Server erzeugt (lib/qrcode.php) — der Schluessel verlaesst die Maschine nicht. #}
{{ otpSvg|raw }}
{{ t('settings_secret_code_fuer_manuelle') }}
{{ newSecret }}

{{ t('settings_schritt_2') }} {{ t('settings_gib_den_6_stelligen') }}

{% endif %}
{% endif %} {# TAB: Sessions #} {% if activeTab == 'sessions' %}

Aktive Sitzungen ({{ count(sessions) }})

{% if not sessions %}

{{ t('settings_keine_aktiven_angemeldet_bleiben') }}
{{ t('settings_du_wirst_beim_naechsten') }}

{% else %}

{{ t('settings_diese_geraete_sind_aktuell') }}

{% for s in sessions %} {% set isCurrent = s.token_id == currentSessionId %}
{{ remember_format_user_agent(s.user_agent) }} {% if isCurrent %} {{ t('settings_diese_sitzung') }} {% endif %}
{{ t('settings_ip') }} {{ s.ip_address | default('–') }} · {{ t('settings_erstellt_am', s.created_at | date(t('datum_format_tag'))) }} · {{ t('settings_zuletzt_am', s.last_used | date(t('datum_format'))) }} · {{ t('settings_laeuft_ab_am', s.expires_at | date(t('datum_format_tag'))) }}
{% if not isCurrent %}
{% endif %}
{% endfor %}
{% if count(sessions) > 1 %}
{% endif %} {% endif %}
{% endif %} {# TAB: Benachrichtigungen #} {% if activeTab == 'notifications' %}

{{ t('settings_benachrichtigungen') }}

{{ t('settings_wenn_aktiviert_bekommst_du') }}
{{ t('settings_voraussetzung_eine_gueltige_e') }} {{ t('settings_sicherheit_tab') }} hinterlegt. Aktuell: {{ profile.email | default('—') }}
{% endif %} {# TAB: Darstellung #} {% if activeTab == 'preferences' %}

{{ t('settings_darstellung') }}

{% set currentTheme = profile.theme %} {% if not currentTheme %}{% set currentTheme = 'auto' %}{% endif %}
{{ t('settings_theme_hinweis') }}
{% set currentLang = profile.language %} {% if not currentLang %}{% set currentLang = 'de' %}{% endif %} {# Die Liste stand hier fest als zwei Zeilen. Seit sich Sprachen im Adminbereich anlegen lassen, kommt sie aus available_languages() — sonst nimmt das Konto eine neue Sprache nie an. #}
{{ t('settings_sprache_hinweis') }}
{% endif %} {# TAB: Konto / Danger #} {% if activeTab == 'danger' %}

{{ t('settings_account_loeschen') }}

{% if can_user_delete_self_ok(profile.user_id) %}

{{ t('settings_wenn_du_dein_konto') }} {{ t('settings_diese_aktion_ist_unwiderruflich') }}

{{ t('settings_meinen_account_loeschen') }} {% else %}

{{ t('settings_dein_konto_kann_momentan') }}

{% endif %}
{% endif %}