diff --git a/pages/mitgliederbereich/api.vue b/pages/mitgliederbereich/api.vue index dabddf2..acedff5 100644 --- a/pages/mitgliederbereich/api.vue +++ b/pages/mitgliederbereich/api.vue @@ -223,7 +223,7 @@

- Hinweis: Ohne id wird ein neues Mitglied erstellt. Mit id wird ein bestehendes Mitglied aktualisiert. geburtsdatum ist Pflichtfeld zur Duplikatsprüfung (Format: YYYY-MM-DD). + Hinweis: Ohne id wird ein neues Mitglied erstellt. Mit id wird ein bestehendes Mitglied aktualisiert. Bei neuen Mitgliedern ist geburtsdatum zur Duplikatsprüfung Pflicht (Format: YYYY-MM-DD). Altdaten ohne Geburtsdatum koennen weiter bearbeitet werden.

diff --git a/pages/mitgliederbereich/profil.vue b/pages/mitgliederbereich/profil.vue index 3898e0c..d7389f5 100644 --- a/pages/mitgliederbereich/profil.vue +++ b/pages/mitgliederbereich/profil.vue @@ -77,6 +77,25 @@ > +
+ + +

+ Sichtbar ist in der Mitgliederliste nur der Geburtstag, wenn Sie ihn unten freigeben. +

+
+

Sichtbarkeit für andere Mitglieder

@@ -299,7 +318,8 @@ if (process.client) { const formData = ref({ name: '', email: '', - phone: '' + phone: '', + geburtsdatum: '' }) // Visibility preferences for other logged-in members @@ -326,7 +346,8 @@ const loadProfile = async () => { formData.value = { name: response.user.name, email: response.user.email, - phone: response.user.phone || '' + phone: response.user.phone || '', + geburtsdatum: response.user.geburtsdatum || '' } visibility.value = response.user.visibility || visibility.value } catch { @@ -430,7 +451,8 @@ const handleSave = async () => { name: formData.value.name, email: formData.value.email, phone: formData.value.phone, - visibility: visibility.value, + geburtsdatum: formData.value.geburtsdatum, + visibility: visibility.value, currentPassword: passwordData.value.current || undefined, newPassword: passwordData.value.new || undefined } diff --git a/server/api/birthdays.get.js b/server/api/birthdays.get.js index 129f12a..5c210eb 100644 --- a/server/api/birthdays.get.js +++ b/server/api/birthdays.get.js @@ -57,7 +57,15 @@ export default defineEventHandler(async (event) => { const candidates = [] for (const m of manualMembers) { - const isAccepted = m.active === true || (m.status && String(m.status).toLowerCase() === 'accepted') || m.accepted === true + const normalizedStatus = m.status ? String(m.status).toLowerCase() : '' + const hasExplicitAcceptanceFlag = m.active !== undefined || m.accepted !== undefined || normalizedStatus !== '' + const isAccepted = hasExplicitAcceptanceFlag + ? ( + m.active === true || + m.accepted === true || + normalizedStatus === 'accepted' + ) + : true if (!isAccepted) continue const vis = m.visibility || {} const showBirthday = vis.showBirthday === undefined ? true : Boolean(vis.showBirthday) diff --git a/server/api/profile.get.js b/server/api/profile.get.js index 47d8fde..25946c4 100644 --- a/server/api/profile.get.js +++ b/server/api/profile.get.js @@ -26,6 +26,7 @@ export default defineEventHandler(async (event) => { name: user.name, email: user.email, phone: user.phone || '', + geburtsdatum: user.geburtsdatum || '', visibility: Object.assign({ showBirthday: true }, (user.visibility || {})) } } diff --git a/server/api/profile.put.js b/server/api/profile.put.js index 113fa4c..3042e29 100644 --- a/server/api/profile.put.js +++ b/server/api/profile.put.js @@ -22,7 +22,7 @@ export default defineEventHandler(async (event) => { } const body = await readBody(event) - const { name, email, phone, currentPassword, newPassword } = body + const { name, email, phone, geburtsdatum, currentPassword, newPassword } = body if (!name || !email) { throw createError({ @@ -58,6 +58,7 @@ export default defineEventHandler(async (event) => { user.name = name user.email = email user.phone = phone || '' + user.geburtsdatum = geburtsdatum || '' // Optional visibility preferences (what to show to other logged-in members) // Expected shape: { showEmail: boolean, showPhone: boolean, showAddress: boolean, showBirthday: boolean } @@ -105,6 +106,7 @@ export default defineEventHandler(async (event) => { email: user.email, name: user.name, phone: user.phone, + geburtsdatum: user.geburtsdatum || '', visibility: user.visibility || {}, roles: roles, role: roles[0] || 'mitglied' // Rückwärtskompatibilität