Files
pingu-concerts/app/templates/edit_concert.html
T
2026-08-26 18:24:22 +02:00

166 lines
9.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ concert.artist }} bearbeiten · Pingu Concerts</title>
<link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
<header>
<div class="header-inner">
<a href="/" class="logo">🎸 Pingu <span>Concerts</span></a>
{% include '_user_menu.html' %}
</div>
</header>
<main>
<div class="page-title">
<h1>✏️ Veranstaltung bearbeiten</h1>
<p>Änderungen werden direkt bei der Veranstaltung gespeichert.</p>
</div>
<section class="empty">
<form method="post" action="/concerts/{{ concert.id }}/edit" enctype="multipart/form-data">
{% if can_edit_details %}
<p>
<label>Kategorie<br>
<select name="event_type" id="event-type" required {% if not can_manage_access %}disabled{% endif %}>
<option value="concert" {% if concert.event_type == 'concert' %}selected{% endif %}>Konzert</option>
<option value="festival" {% if concert.event_type == 'festival' %}selected{% endif %}>Festival</option>
<option value="other" {% if concert.event_type == 'other' %}selected{% endif %}>Sonstiges</option>
</select>
</label>
</p>
<p id="parent-event-field" {% if concert.event_type != 'other' %}hidden{% endif %}>
<label>Gehört zu<br>
<select name="parent_event_id" id="parent-event-id">
<option value="">Keine Verknüpfung eigenständige Karte</option>
{% for event in linkable_events %}
<option value="{{ event.id }}" {% if concert.parent_event and concert.parent_event.id == event.id %}selected{% endif %}>{{ event.event_type_label }} · {{ event.title }} · {{ event.date }}</option>
{% endfor %}
</select>
</label>
</p>
{% if can_manage_access %}<fieldset id="event-visibility-field" {% if concert.event_type != 'other' %}hidden{% endif %}>
<legend>Sichtbarkeit</legend>
<label><input type="radio" name="visibility" value="public" {% if concert.visibility == 'public' %}checked{% endif %}> Öffentlich</label><br>
<label><input type="radio" name="visibility" value="friends" {% if concert.visibility == 'friends' %}checked{% endif %}> Nur Freunde</label><br>
<label><input type="radio" name="visibility" value="private" {% if concert.visibility == 'private' %}checked{% endif %}> Privat nur eingeladene Mitglieder</label>
</fieldset>
<fieldset id="event-invitations-field" {% if concert.event_type != 'other' or concert.visibility != 'private' %}hidden{% endif %}>
<legend>Mitglieder einladen</legend>
{% for member in invitable_users %}
<label style="display:block;margin:7px 0"><input type="checkbox" name="invited_user_ids" value="{{ member.id }}" {% if member.id in invited_user_ids %}checked{% endif %}> {{ member.display_name }} <small>@{{ member.username }}</small></label>
{% else %}<p>Noch keine weiteren Mitglieder vorhanden.</p>{% endfor %}
</fieldset>
{% endif %}
{% endif %}
<p>
<label>Titel / Künstler / Band<br>
<input type="text" name="artist" value="{{ concert.artist }}" {% if not can_edit_title %}disabled{% endif %} required>
</label>
</p>
{% if can_edit_details %}
<p>
<label>Veranstaltungsort<br>
<input type="text" name="venue_name" value="{{ concert.venue.name if concert.venue.id else '' }}" placeholder="Name des Veranstaltungsorts">
</label>
</p>
<p>
<label>Straße<br>
<input type="text" name="street" value="{{ concert.venue.street or '' }}">
</label>
</p>
<p>
<label>PLZ und Ort<br>
<input type="text" name="postal_code" value="{{ concert.venue.postal_code or '' }}" placeholder="PLZ">
<input type="text" name="city" value="{{ concert.venue.city or '' }}" placeholder="Ort">
</label>
</p>
<p>
<label>Land<br>
<input type="text" name="country" value="{{ concert.venue.country or '' }}" placeholder="Land">
</label>
</p>
<input type="hidden" name="latitude" value="{{ concert.venue.latitude or '' }}">
<input type="hidden" name="longitude" value="{{ concert.venue.longitude or '' }}">
<p>
<label>Beginn<br>
<input type="datetime-local" name="start_datetime" value="{{ concert.start_local }}" required>
</label>
</p>
<p id="festival-end-field" {% if concert.event_type != 'festival' %}hidden{% endif %}>
<label>Ende<br>
<input type="datetime-local" name="end_datetime" id="festival-end-datetime" value="{{ concert.end_local }}" {% if concert.event_type == 'festival' %}required{% endif %}>
</label>
</p>
<p>
<label>Beschreibung<br>
<textarea name="description" rows="5">{{ concert.description or '' }}</textarea>
</label>
</p>
<p>
<label>Ticket-Link<br>
<input type="url" name="ticket_url" value="{{ concert.ticket_url or '' }}" placeholder="https://...">
</label>
</p>
<p>
<label>Ticketpreis<br>
<input type="number" name="ticket_price" value="{{ concert.ticket_price or '' }}" step="0.01" min="0">
</label>
</p>
<p>
<label>Flyer extern verlinken <small>(bevorzugt)</small><br>
<input type="url" name="flyer_url" value="{{ concert.flyer_url or '' }}" placeholder="https://veranstalter.example/flyer.jpg">
</label>
<small>Bitte möglichst die offizielle Quelle verwenden. Ein externer Link wird gegenüber einem Upload bevorzugt und unter dem Bild genannt. Feld leeren, um wieder den Upload zu verwenden.</small>
</p>
<p>
<label>Neuen Flyer hochladen<br>
<input type="file" name="flyer" accept="image/jpeg,image/png,image/webp">
</label>
<small>Ohne neue Datei bleibt der bisherige Flyer erhalten.</small>
</p>
{% if concert.flyer_url or concert.flyer_path %}
<p><img src="{{ concert.flyer_url or concert.flyer_path }}" alt="Aktueller Flyer" referrerpolicy="no-referrer" style="max-width: 300px; max-height: 400px; border-radius: 10px;"></p>
{% endif %}
{% endif %}
<div>
<button type="submit" class="button">💾 Änderungen speichern</button>
<a href="/concerts/{{ concert.id }}" class="button button-secondary">Abbrechen</a>
</div>
</form>
</section>
</main>
{% if can_edit_details %}
<script>
const eventType = document.getElementById("event-type");
const parentEventField = document.getElementById("parent-event-field");
const parentEventId = document.getElementById("parent-event-id");
const festivalEndField = document.getElementById("festival-end-field");
const festivalEndDatetime = document.getElementById("festival-end-datetime");
const eventVisibilityField = document.getElementById("event-visibility-field");
const eventInvitationsField = document.getElementById("event-invitations-field");
const visibilityInputs = [...document.querySelectorAll('input[name="visibility"]')];
function updateEventFields() {
const isFestival = eventType.value === "festival";
const isOther = eventType.value === "other";
festivalEndField.hidden = !isFestival;
festivalEndDatetime.required = isFestival;
parentEventField.hidden = !isOther;
if (eventVisibilityField) {
eventVisibilityField.hidden = !isOther;
const isPrivate = isOther && document.querySelector('input[name="visibility"]:checked').value === "private";
eventInvitationsField.hidden = !isPrivate;
}
if (!isFestival) festivalEndDatetime.value = "";
if (!isOther) parentEventId.value = "";
}
eventType.addEventListener("change", updateEventFields);
visibilityInputs.forEach(input => input.addEventListener("change", updateEventFields));
</script>
{% endif %}
</body>
</html>