diff --git a/pages/mitgliederbereich/mitglieder.vue b/pages/mitgliederbereich/mitglieder.vue
index 6cf1c18..a6f5450 100644
--- a/pages/mitgliederbereich/mitglieder.vue
+++ b/pages/mitgliederbereich/mitglieder.vue
@@ -122,7 +122,7 @@
{{ member.name }}
-
+
🎂 {{ formatBirthday(member.birthday) }}
{{ member.name }}
-
+
🎂 {{ formatBirthday(member.birthday) }}
diff --git a/server/set-all-visibility-flags.mjs b/server/set-all-visibility-flags.mjs
new file mode 100644
index 0000000..8f2428b
--- /dev/null
+++ b/server/set-all-visibility-flags.mjs
@@ -0,0 +1,72 @@
+// Script: set-all-visibility-flags.mjs
+// Setzt für alle Mitglieder in allen relevanten Dateien alle visibility-Flags auf true (inkl. Entschlüsselung)
+
+import { readMembers, writeMembers } from './utils/members.js';
+import dotenv from 'dotenv';
+import path from 'path';
+import { fileURLToPath } from 'url';
+import fs from 'fs/promises';
+
+dotenv.config({ path: path.resolve(process.cwd(), '.env') });
+
+const usersPath = path.resolve(process.cwd(), 'server/data/users.json');
+
+async function updateVisibility(obj) {
+ let changed = 0;
+ if (Array.isArray(obj)) {
+ for (const m of obj) {
+ if (!m.visibility) m.visibility = {};
+ if (m.visibility.showEmail !== true) { m.visibility.showEmail = true; changed++; }
+ if (m.visibility.showPhone !== true) { m.visibility.showPhone = true; changed++; }
+ if (m.visibility.showAddress !== true) { m.visibility.showAddress = true; changed++; }
+ if (m.visibility.showBirthday !== true) { m.visibility.showBirthday = true; changed++; }
+ }
+ }
+ return changed;
+}
+
+async function updateUsersFile() {
+ let changed = 0;
+ try {
+ let raw = await fs.readFile(usersPath, 'utf8');
+ let users;
+ if (raw.trim().startsWith('v2:')) {
+ // encrypted, try to use decryptObject from encryption.js
+ const { decryptObject } = await import('./utils/encryption.js');
+ const key = process.env.ENCRYPTION_KEY || 'local_development_encryption_key_change_in_production';
+ users = decryptObject(raw, key);
+ } else {
+ users = JSON.parse(raw);
+ }
+ changed = await updateVisibility(users);
+ // write back (encrypted if vorher encrypted)
+ if (raw.trim().startsWith('v2:')) {
+ const { encryptObject } = await import('./utils/encryption.js');
+ const key = process.env.ENCRYPTION_KEY || 'local_development_encryption_key_change_in_production';
+ const encrypted = encryptObject(users, key);
+ await fs.writeFile(usersPath, encrypted, 'utf8');
+ } else {
+ await fs.writeFile(usersPath, JSON.stringify(users, null, 2), 'utf8');
+ }
+ return changed;
+ } catch (e) {
+ console.error('Fehler beim Bearbeiten von users.json:', e);
+ return 0;
+ }
+}
+
+async function main() {
+ let changedMembers = 0;
+ let changedUsers = 0;
+ // members.json (manuelle Mitglieder)
+ let members = await readMembers();
+ changedMembers = await updateVisibility(members);
+ if (changedMembers > 0) {
+ await writeMembers(members);
+ }
+ // users.json (Login-System)
+ changedUsers = await updateUsersFile();
+ console.log(`members.json: ${changedMembers} Änderungen, users.json: ${changedUsers} Änderungen`);
+}
+
+main();