Feat: Fotofilter + Fotobox/graf user
This commit is contained in:
+57
-13
@@ -212,6 +212,18 @@ DEFAULT_INVITATION_GROUPS = [
|
||||
},
|
||||
{"name": "Peter", "password": "Peter!Fest26#", "role": "guest", "members": ["Peter"]},
|
||||
{"name": "Johanna", "password": "Joha!Fest26#", "role": "guest", "members": ["Johanna"]},
|
||||
{
|
||||
"name": "Fotograf",
|
||||
"password": os.environ.get("PHOTOGRAPHER_PASSWORD", "Foto!Graf26#"),
|
||||
"role": "guest",
|
||||
"members": [],
|
||||
},
|
||||
{
|
||||
"name": "Fotobox",
|
||||
"password": os.environ.get("PHOTOBOOTH_PASSWORD", "Foto!Box26#"),
|
||||
"role": "guest",
|
||||
"members": [],
|
||||
},
|
||||
]
|
||||
AGE_REQUIRED_NAMES = {"Lena", "Finn", "Fin", "Bruno"}
|
||||
|
||||
@@ -453,7 +465,15 @@ TEXTS = {
|
||||
"gifts_caption": "Trommelwirbel... in unserer 70-Quadratmeter-Wohnung ist leider kein Platz mehr für Materielles.",
|
||||
"gifts_text": "Also: Money! Ein finanzieller Beitrag zu unserer Reise nach der Hochzeit ist herzlich willkommen.",
|
||||
"gallery_uploaded_by": "von {name}",
|
||||
"gallery_uploaded_by_prefix": "von",
|
||||
"gallery_empty": "Noch keine Bilder vorhanden.",
|
||||
"gallery_filter_label": "Galerie nach Uploader filtern",
|
||||
"gallery_filter_trigger": "Nach Uploader filtern:",
|
||||
"gallery_filter_no_results": "Keine Bilder entsprechen den ausgewählten Filtern.",
|
||||
"gallery_uploader_filter_label": "Uploader auswählen",
|
||||
"gallery_uploader_all": "Alle",
|
||||
"gallery_uploader_none": "Keine",
|
||||
"gallery_uploader_selected": "{count} ausgewählt",
|
||||
"gallery_image_alt": "Upload von {name}",
|
||||
"gallery_save_hint": "Tipp: Halte das Bild länger gedrückt, um es in deiner Mediathek zu speichern.",
|
||||
"flash_enter_group_name": "Bitte Gruppenname eingeben.",
|
||||
@@ -727,7 +747,15 @@ TEXTS = {
|
||||
"gifts_caption": "Drum roll... in our 70-square-meter apartment, we sadly have no room left for material things.",
|
||||
"gifts_text": "So: Money! A financial contribution to our trip after the wedding is very welcome.",
|
||||
"gallery_uploaded_by": "by {name}",
|
||||
"gallery_uploaded_by_prefix": "by",
|
||||
"gallery_empty": "No photos available yet.",
|
||||
"gallery_filter_label": "Filter gallery by uploader",
|
||||
"gallery_filter_trigger": "Filter by uploader:",
|
||||
"gallery_filter_no_results": "No photos match the selected filters.",
|
||||
"gallery_uploader_filter_label": "Select uploaders",
|
||||
"gallery_uploader_all": "All",
|
||||
"gallery_uploader_none": "None",
|
||||
"gallery_uploader_selected": "{count} selected",
|
||||
"gallery_image_alt": "Uploaded by {name}",
|
||||
"gallery_save_hint": "Tip: Touch and hold the photo to save it to your photo library.",
|
||||
"flash_enter_group_name": "Please enter group name.",
|
||||
@@ -1081,12 +1109,15 @@ def init_db() -> None:
|
||||
|
||||
def seed_default_groups() -> None:
|
||||
db = get_db()
|
||||
existing = db.execute("SELECT COUNT(*) AS c FROM groups").fetchone()
|
||||
if int(existing["c"] or 0) > 0:
|
||||
return
|
||||
|
||||
now = datetime.utcnow().isoformat()
|
||||
for entry in DEFAULT_INVITATION_GROUPS:
|
||||
existing = db.execute(
|
||||
"SELECT id FROM groups WHERE LOWER(name) = LOWER(?)",
|
||||
(entry["name"],),
|
||||
).fetchone()
|
||||
if existing is not None:
|
||||
continue
|
||||
|
||||
password_hash = generate_password_hash(entry["password"])
|
||||
cursor = db.execute(
|
||||
"INSERT INTO groups (name, password_hash, role, created_at) VALUES (?, ?, ?, ?)",
|
||||
@@ -1104,13 +1135,14 @@ def seed_default_groups() -> None:
|
||||
)
|
||||
)
|
||||
|
||||
db.executemany(
|
||||
"""
|
||||
INSERT INTO group_members (group_id, name, requires_age, created_at)
|
||||
VALUES (?, ?, ?, ?)
|
||||
""",
|
||||
member_rows,
|
||||
)
|
||||
if member_rows:
|
||||
db.executemany(
|
||||
"""
|
||||
INSERT INTO group_members (group_id, name, requires_age, created_at)
|
||||
VALUES (?, ?, ?, ?)
|
||||
""",
|
||||
member_rows,
|
||||
)
|
||||
|
||||
db.commit()
|
||||
|
||||
@@ -1247,7 +1279,12 @@ def complete_onboarding():
|
||||
@app.get("/gästebereich")
|
||||
@login_required
|
||||
def guest_area():
|
||||
return render_template("guest_area.html")
|
||||
db = get_db()
|
||||
member_row = db.execute(
|
||||
"SELECT 1 FROM group_members WHERE group_id = ? LIMIT 1",
|
||||
(int(session["group_id"]),),
|
||||
).fetchone()
|
||||
return render_template("guest_area.html", has_rsvp_members=member_row is not None)
|
||||
|
||||
|
||||
@app.route("/gastgeberbereich", methods=["GET"])
|
||||
@@ -1322,6 +1359,9 @@ def rsvp():
|
||||
(current_group_id,),
|
||||
).fetchall()
|
||||
|
||||
if not members:
|
||||
return redirect(url_for("guest_area"))
|
||||
|
||||
if request.method == "POST":
|
||||
updates = []
|
||||
for member in members:
|
||||
@@ -1430,7 +1470,11 @@ def gallery():
|
||||
ORDER BY uploads.id DESC
|
||||
"""
|
||||
).fetchall()
|
||||
return render_template("gallery.html", images=images)
|
||||
uploaders = sorted(
|
||||
{str(image["uploaded_by_name"]) for image in images},
|
||||
key=str.casefold,
|
||||
)
|
||||
return render_template("gallery.html", images=images, uploaders=uploaders)
|
||||
|
||||
|
||||
@app.post("/gallery/delete/<int:image_id>")
|
||||
|
||||
Reference in New Issue
Block a user