166 lines
9.1 KiB
HTML
166 lines
9.1 KiB
HTML
<!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>
|