Files
tesm-license/apps/tesm-license/src/tesm_license/templates/license/settings_system.html
T

139 lines
6.6 KiB
HTML

{% extends "tesm_core/base.html" %}
{% from "tesm_core/macros.html" import field, select_field, checkbox, alert, nav_order_card %}
{% block page_title %}Systemeinstellungen{% endblock %}
{% block page_sub %}Portal, Self-Service, Protokolle, Host{% endblock %}
{% block content %}
{% if not sysops_available %}
{{ alert('Systemhelfer nicht verfügbar -- Hostname und Zeitzone können hier nur angezeigt,
nicht geändert werden.', 'info') }}
{% endif %}
<div class="grid grid--split">
<div class="stack">
<section class="card">
<div class="card__header">
<div class="flex-1">
<div class="card__title">{{ icon('users', size=17) }} Kundenportal und Self-Service</div>
<div class="card__sub">Zwei unabhängige Zeitfenster: Link und Sitzung</div>
</div>
</div>
<form method="post" action="{{ url_for('settings.system_save') }}">
<input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
<div class="card__body stack">
{{ checkbox('portal_enabled', 'Kundenportal aktiv', checked=values.portal_enabled) }}
<div class="form-grid">
{{ field('portal_link_minutes', 'Zugangslink gültig (Minuten)',
value=values.portal_link_minutes, type='number',
hint_text=specs['portal_link_minutes'].hint) }}
{{ field('portal_session_minutes', 'Portalsitzung gültig (Minuten)',
value=values.portal_session_minutes, type='number',
hint_text=specs['portal_session_minutes'].hint) }}
</div>
<div class="divider"></div>
{{ checkbox('self_service_enabled', 'Self-Service-Link je Ticket aktiv',
checked=values.self_service_enabled,
hint_text=specs['self_service_enabled'].hint) }}
{{ checkbox('allow_customer_revoke', 'Kunden dürfen ihre Lizenz selbst freigeben',
checked=values.allow_customer_revoke,
hint_text=specs['allow_customer_revoke'].hint) }}
</div>
<div class="card__footer"><button class="btn btn--primary" type="submit">Speichern</button></div>
</form>
</section>
<section class="card">
<div class="card__header">
<div class="flex-1">
<div class="card__title">{{ icon('ticket', size=17) }} Vorgaben und Protokolle</div>
</div>
</div>
<form method="post" action="{{ url_for('settings.system_save') }}">
<input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
<div class="card__body">
<div class="form-grid">
{{ field('default_valid_days', 'Vorgeschlagene Laufzeit neuer Tickets (Tage)',
value=values.default_valid_days, type='number') }}
{{ select_field('log_rotate_interval', 'Rotationsintervall',
specs['log_rotate_interval'].choices,
selected=values.log_rotate_interval) }}
{{ field('log_rotate_keep', 'Aufbewahrte Rotationen', value=values.log_rotate_keep,
type='number') }}
{{ field('trash_retention_days', 'Papierkorb-Aufbewahrung (Tage)',
value=values.trash_retention_days, type='number') }}
</div>
</div>
<div class="card__footer"><button class="btn btn--primary" type="submit">Speichern</button></div>
</form>
</section>
</div>
<div class="stack">
{# Eigene Karte: die Abmeldung stand zwischen Protokollrotation und
Papierkorb -- drei Dinge ohne Zusammenhang. Wer die Sitzungsdauer sucht,
sucht sie nicht unter "Protokolle". #}
<section class="card">
<div class="card__header">
<div class="flex-1">
<div class="card__title">{{ icon('clock', size=17) }} Sitzungen</div>
<div class="card__sub">Wie lange eine Anmeldung gilt</div>
</div>
</div>
<form method="post" action="{{ url_for('settings.system_save') }}">
<input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
<div class="card__body">
<div class="form-grid">
{{ field('session_idle_minutes', 'Automatische Abmeldung nach Leerlauf (Minuten)',
value=values.session_idle_minutes, type='number',
attrs='min="5" max="1440" step="1"',
hint_text=specs['session_idle_minutes'].hint) }}
{{ field('session_absolute_hours', 'Längstmögliche Sitzungsdauer (Stunden)',
value=values.session_absolute_hours, type='number',
attrs='min="1" max="168" step="1"',
hint_text=specs['session_absolute_hours'].hint) }}
</div>
</div>
<div class="card__footer"><button class="btn btn--primary" type="submit">Speichern</button></div>
</form>
</section>
<section class="card">
<div class="card__header">
<div class="flex-1"><div class="card__title">{{ icon('server', size=17) }} Host</div></div>
</div>
<div class="card__body stack">
<form method="post" action="{{ url_for('settings.set_hostname') }}" class="stack stack--tight">
<input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
{{ field('hostname', 'Hostname', value=hostname, disabled=not sysops_available) }}
<button class="btn btn--sm" type="submit" {% if not sysops_available %}disabled{% endif %}>
Hostname setzen
</button>
</form>
<div class="divider"></div>
<form method="post" action="{{ url_for('settings.set_timezone') }}" class="stack stack--tight">
<input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
<label class="field">
<span class="field__label">Zeitzone</span>
<select class="select" name="timezone" {% if not sysops_available %}disabled{% endif %}>
{% for zone in timezones %}
<option value="{{ zone }}" {% if zone == timezone %}selected{% endif %}>{{ zone }}</option>
{% endfor %}
</select>
</label>
<button class="btn btn--sm" type="submit" {% if not sysops_available %}disabled{% endif %}>
Zeitzone setzen
</button>
</form>
</div>
</section>
{% if current_user.is_admin %}
{{ nav_order_card(nav_items, nav_order, nav_child_order,
url_for('admin.nav_order'), csrf_field_name, csrf_token(),
sub='Gilt für alle Benutzer') }}
{% endif %}
</div>
</div>
{% endblock %}