Add private event invitations

This commit is contained in:
kai
2026-08-26 18:24:22 +02:00
parent a9741b6859
commit c4fa6f077c
9 changed files with 268 additions and 40 deletions
+23 -1
View File
@@ -23,7 +23,7 @@
{% if can_edit_details %}
<p>
<label>Kategorie<br>
<select name="event_type" id="event-type" required>
<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>
@@ -40,6 +40,19 @@
</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>
@@ -125,6 +138,9 @@ 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";
@@ -132,11 +148,17 @@ function updateEventFields() {
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>