Hintergrundbild Willkommensseite

This commit is contained in:
Erik Thiele
2026-06-10 10:32:04 +02:00
parent e860e4b2fe
commit f5f1d52239
6 changed files with 192 additions and 16 deletions

99
app.py
View File

@@ -185,6 +185,44 @@ def prio_redirect(site):
return f"/admin/{site}/priority"
def get_background_url(site):
"""Prüft, ob für einen Standort ein benutzerdefiniertes Hintergrundbild existiert.
Gibt die URL zurück oder None (dann wird das Standard-Wallpaper verwendet)."""
site_dir = os.path.join(MEDIA_DIR, site)
if not os.path.isdir(site_dir):
return None
for f in sorted(os.listdir(site_dir)):
if f.startswith("background."):
ext = os.path.splitext(f)[1].lower()
if ext in (".jpg", ".jpeg", ".png"):
return f"/media/{site}/background/{f}"
return None
def _regenerate_welcome_for_site(site):
"""Regeneriert die Willkommensseite mit aktuellem Hintergrund,
falls zuvor Kundendaten gespeichert wurden."""
config = load_config()
welcome_data = config.get("sites", {}).get(site, {}).get("welcome_data")
if welcome_data:
names = welcome_data.get("names", [])
urls = welcome_data.get("logo_urls", [])
if names:
bg_url = get_background_url(site)
generate_welcome_page.save_welcome_page(names, urls, site=site, background_url=bg_url)
print(f"♻️ Willkommensseite für {site} mit aktualisiertem Hintergrund neu generiert")
# -------------------------------------------------
# Medien ausliefern (statische Dateien)
# -------------------------------------------------
@app.route("/media/<site>/background/<path:filename>")
def media_background(site, filename):
"""Liefert das Hintergrundbild für die Willkommensseite aus."""
path = os.path.join(MEDIA_DIR, site)
return send_from_directory(path, filename)
# -------------------------------------------------
# User & Login (Flask-Login)
# -------------------------------------------------
@@ -285,10 +323,16 @@ def add_customer():
logo_urls[i] = vu
break
html_filename = generate_welcome_page.save_welcome_page(valid_names, valid_urls, site=site)
bg_url = get_background_url(site)
html_filename = generate_welcome_page.save_welcome_page(valid_names, valid_urls, site=site, background_url=bg_url)
if html_filename:
if generate_welcome_page.add_customer_to_lobby_playlist(html_filename, site=site):
# Letzte Kundendaten für Background-Update speichern
config = load_config()
site_cfg = config.setdefault("sites", {}).setdefault(site, {})
site_cfg["welcome_data"] = {"names": valid_names, "logo_urls": valid_urls}
save_config(config)
success = f"✅ Willkommensseite mit {len(valid_names)} Kunden erstellt!"
else:
error = "Fehler beim Hinzufügen zur Playliste"
@@ -301,6 +345,7 @@ def add_customer():
config = load_config()
site_list = get_site_list(config)
background_url = get_background_url(site)
return render_template(
"customer.html",
error=error,
@@ -312,7 +357,8 @@ def add_customer():
current_site=site,
version=APP_VERSION,
year=datetime.now().year,
hostname=os.uname().nodename
hostname=os.uname().nodename,
background_url=background_url
)
@@ -711,6 +757,55 @@ def admin_priority(site):
)
# -------------------------------------------------
# Admin: Hintergrundbild für Willkommensseite hochladen
# -------------------------------------------------
@app.route("/admin/<site>/upload-background", methods=["POST"])
@login_required
def upload_background(site):
"""Lädt ein Hintergrundbild für die Willkommensseite hoch (pro Standort).
Gespeichert als media/<site>/background.<ext>."""
file = request.files.get("background")
if not file:
return redirect(f"/willkommen?site={site}")
ext = os.path.splitext(file.filename)[1].lower()
if ext not in UPLOAD_EXTENSIONS:
return "Ungültiger Dateityp", 400
site_dir = os.path.join(MEDIA_DIR, site)
os.makedirs(site_dir, exist_ok=True)
# Alte Hintergrundbilder löschen
for f in os.listdir(site_dir):
if f.startswith("background."):
os.remove(os.path.join(site_dir, f))
filename = f"background{ext}"
file.save(os.path.join(site_dir, filename))
# Willkommensseite mit neuen Hintergrund neu generieren
_regenerate_welcome_for_site(site)
return redirect(f"/willkommen?site={site}")
@app.route("/admin/<site>/delete-background", methods=["POST"])
@login_required
def delete_background(site):
"""Löscht das Hintergrundbild für die Willkommensseite."""
site_dir = os.path.join(MEDIA_DIR, site)
if os.path.isdir(site_dir):
for f in os.listdir(site_dir):
if f.startswith("background."):
os.remove(os.path.join(site_dir, f))
# Willkommensseite mit Standard-Hintergrund neu generieren
_regenerate_welcome_for_site(site)
return redirect(f"/willkommen?site={site}")
# -------------------------------------------------
# Admin: Screen-Einstellungen speichern
# -------------------------------------------------