diff --git a/server/crew-adresse.js b/server/crew-adresse.js index 720728c2..ade8c7f0 100644 --- a/server/crew-adresse.js +++ b/server/crew-adresse.js @@ -460,3 +460,20 @@ export function crewWeiche(req, res, next) { if (istWorkspacePfad(req.path) || req.path.startsWith("/assets/")) return next(); return res.redirect(302, "/workspace/"); } + +/** WO SICH JEMAND MIT DIESER ROLLE ANMELDET (19.09.2026). + * + * ANLASS: Beim Anlegen eines Zugangs zeigt die Verwaltung Name und + * Code -- aber nirgends, WELCHEN Link man dazuschicken muss. DogFather + * ruft den Code durchs Zimmer und der andere fragt "und wo?". + * Ausgerechnet der Kasten, der sagt "jetzt weitergeben", gab die + * Haelfte nicht mit, die man weitergeben muss. + * + * ABGELEITET AUS DENSELBEN MENGEN wie die Weiche selbst -- nicht aus + * einer zweiten Liste. Wer eine Rolle nach TEAM_DOGI_ROLLEN oder + * AUSSEN_ROLLEN verschiebt, verschiebt die Adresse mit. */ +export function anmeldeAdresseFuer(rolle) { + return (TEAM_DOGI_ROLLEN.has(rolle) || AUSSEN_ROLLEN.has(rolle)) + ? CREW_ADRESSE + : "https://workspace.dogfather-universe.com"; +} diff --git a/server/workspace-bereiche.js b/server/workspace-bereiche.js index f829051f..f1c08513 100644 --- a/server/workspace-bereiche.js +++ b/server/workspace-bereiche.js @@ -1527,7 +1527,7 @@ function pruefe(bereich, körper, { neu }) { if (neu || körper.titel !== undefined) { const t = String(körper.titel ?? "").trim(); - if (t.length < 2) fehler.push("Titel fehlt."); + if (t.length < 2) fehler.push("Die Überschrift fehlt."); else if (t.length > TITEL_MAX) fehler.push("Titel ist zu lang."); else aus.titel = t; } diff --git a/server/workspace-personen.js b/server/workspace-personen.js index da6fa989..5864d969 100644 --- a/server/workspace-personen.js +++ b/server/workspace-personen.js @@ -14,6 +14,10 @@ ===================================================================== */ import express from "express"; +/* WO SICH DIESE ROLLE ANMELDET -- aus derselben Datei, die auch die + Weiche steuert. Eine zweite Liste von Adressen waere die, die beim + naechsten Umzug stehen bleibt. */ +import { anmeldeAdresseFuer } from "./crew-adresse.js"; import { db, protokolliere, echteIp, sitzungLesen, personAnlegen, codeNeu, sitzungToken, personSperren, betreuungSetzen, scoutZuteilungSetzen, istLeitung, istDogFather, siehtModis, siehtAlles, ROLLEN_SORTIERUNG, ROLLEN_REIHE, istSpicy, verborgeneIds, TEAM_DOGI_ROLLEN, darfAnlegen, darfRollenWechseln, hausBedingung, } from "./workspace.js"; @@ -605,6 +609,7 @@ personenRouter.post("/workspace/api/creator-anlegen", gleicheHerkunft, nurLeitun /* Der Code steht NUR hier in der Antwort. Danach ist er weg. */ res.status(201).json({ id: neu.id, name: neu.name, rolle: neu.rolle, code: neu.code, + adresse: anmeldeAdresseFuer(neu.rolle), betreuer_id: betreuerId }); } catch (fehler) { console.error("[workspace] Creator anlegen:", fehler?.message); @@ -675,7 +680,8 @@ function teamTuer(rolle) { if (vorhanden) return res.status(409).json({ fehler: "Diesen Namen gibt es schon." }); const neu = personAnlegen(name, rolle, { ...person, ip: echteIp(req) }); - res.status(201).json({ id: neu.id, name: neu.name, rolle: neu.rolle, code: neu.code }); + res.status(201).json({ id: neu.id, name: neu.name, rolle: neu.rolle, code: neu.code, + adresse: anmeldeAdresseFuer(neu.rolle) }); } catch (fehler) { console.error(`[workspace] ${rolle} anlegen:`, fehler?.message); res.status(503).json({ fehler: "nicht_verfuegbar" }); @@ -785,7 +791,8 @@ personenRouter.post("/workspace/api/verwaltung/personen", gleicheHerkunft, (req, const neu = personAnlegen(name, rolle, { ...req.person, ip: echteIp(req) }); /* Der Code steht NUR hier in der Antwort. Danach ist er weg. */ - res.status(201).json({ id: neu.id, name: neu.name, rolle: neu.rolle, code: neu.code }); + res.status(201).json({ id: neu.id, name: neu.name, rolle: neu.rolle, code: neu.code, + adresse: anmeldeAdresseFuer(neu.rolle) }); } catch (fehler) { console.error("[workspace] Person anlegen:", fehler?.message); res.status(503).json({ fehler: "nicht_verfuegbar" }); @@ -813,7 +820,7 @@ personenRouter.post("/workspace/api/verwaltung/personen/:id/code", gleicheHerkun } const neu = codeNeu(id, { ...req.person, ip: echteIp(req) }, eigener ? sitzungToken(req) : null); - res.json({ id: neu.id, name: neu.name, rolle: neu.rolle, code: neu.code }); + res.json({ id: neu.id, name: neu.name, rolle: neu.rolle, code: neu.code, adresse: anmeldeAdresseFuer(neu.rolle) }); } catch (fehler) { if (/Keine Person/.test(fehler?.message || "")) { return res.status(404).json({ fehler: "nicht_gefunden" }); diff --git a/server/workspace-zentrale.js b/server/workspace-zentrale.js index 883b89c6..06a030e3 100644 --- a/server/workspace-zentrale.js +++ b/server/workspace-zentrale.js @@ -345,7 +345,21 @@ zentraleRouter.get("/workspace/api/zentrale", (req, res) => { return res.json({ art: "tag", titel: dran ? "Heute geschafft" : "Heute nichts offen", - prozent: dran ? Math.round((heuteFertig / dran) * 100) : 100, + /* KEINE 100 %, WENN ES NICHTS ZU TUN GAB (19.09.2026). + + Hier stand `prozent: 100` fuer den Fall "nichts offen". Der + Titel sagt es zwar in Worten -- gelesen wird aber zuerst die + Zahl in der Mitte, und 100 % heisst fuer jeden Menschen + "fertig", nicht "leer". Am ersten Tag, ohne eine einzige + zugeteilte Aufgabe, stand damit das groesste Element der + Startseite auf "100 % -- HEUTE NICHTS OFFEN". + + Derselbe Fehler wurde am 17.09. schon einmal behoben, nur + andersherum ("0 % TAG GESCHAFFT"). Und die Community-Antwort + zwanzig Zeilen weiter oben macht es bereits richtig: `mitte` + mit einem Strich statt einer Zahl, die nichts misst. */ + mitte: dran ? undefined : "–", + prozent: dran ? Math.round((heuteFertig / dran) * 100) : 0, segmente, zahlen: [ /* "TERMINE HEUTE", NICHT NUR "HEUTE" (17.09.2026). diff --git a/server/workspace.js b/server/workspace.js index c219fe3b..14311640 100644 --- a/server/workspace.js +++ b/server/workspace.js @@ -1032,7 +1032,26 @@ const TREFF_BEREICHE = [ { ...TREFF_GRUPPE, name: "Highlights", unter: "Eure Clips und Bilder", zeichen: "live", ton: 29, ziel: "bereich.html?b=highlight", szene: "arena" }, { ...TREFF_GRUPPE, name: "Regeln & Hilfe", unter: "Wie es hier l\u00e4uft", - zeichen: "schutz", ton: 28, ziel: "bereich.html?b=regeln", szene: "studio" }, + /* ZEIGT JETZT AUF DIE SEITE, DIE DIE ANTWORT HAT (19.09.2026). + + Sie fuehrte auf `bereich.html?b=regeln` -- ein Brett, auf das die + Leitung Regeln eintragen KANN und das am ersten Tag leer ist + ("Hier stehen die Regeln des Treffs -- sobald sie eingetragen + sind."). + + Die Regeln, die es WIRKLICH gibt, stehen auf `treff-regeln.html`: + Begruessung, die fuenf Regeln, die drei Stufen, das Mindestalter, + was bei Aerger zu tun ist. Diese Seite war von genau EINER Stelle + aus erreichbar -- einem kleinen Textlink unter der Unterzeile + einer Brettseite. Keine der elf Kacheln fuehrte hin. + + Damit war die einzige "So laeuft das hier"-Seite des Hauses fuer + einen neuen Zuschauer praktisch unsichtbar, waehrend die Kachel, + die ihren Namen trug, auf eine leere Liste zeigte. + + Das Brett gibt es weiter; treff-regeln.html verlinkt darauf. Ein + Ort fuer die Frage, nicht zwei. */ + zeichen: "schutz", ton: 28, ziel: "treff-regeln.html", szene: "studio" }, { ...TREFF_GRUPPE, name: "Mitmachen", unter: "Wie du dazugeh\u00f6ren kannst", zeichen: "personen", ton: 32, ziel: "bereich.html?b=mitmachen", szene: "garage" }, /* UNSERE SEITEN (19.09.2026) -- die einzige Kachel, die HINAUSFUEHRT. @@ -1131,7 +1150,7 @@ export const TREFF_ROLLEN = new Set(["gast", "modi", "hand", "admin"]); sich aus der Liste, die Sortierung in start.js fasst beide ans Ende. */ const HILFE_KACHEL = { gruppe: "Für dich", gruppeUnter: "Deine eigene Seite", - name: "Vertraulich melden", unter: "Probleme, die niemand sonst sieht", + name: "Vertraulich melden", unter: "Nur DogFather und die rechte Hand", zeichen: "schutz", ton: 39, ziel: "hilfe.html", szene: "studio", }; @@ -1653,6 +1672,18 @@ const HAND_ROLLENTEXT = "Rechte Hand · du hast alles im Blick und entscheidest export function rollentextFuer(person) { if (person?.rolle === "modi") return MODI_ROLLENTEXT; if (person?.rolle === "hand") return HAND_ROLLENTEXT; + /* DIE COMMUNITY HATTE NUR EIN WORT (nachgetragen 19.09.2026). + + Bei jeder anderen Rolle steht unter dem Titel ein Satz. Beim + Community-Mitglied stand dort das nackte Wort "Community" -- und + das ist woertlich derselbe Mangel, den der Kommentar bei + MODI_ROLLENTEXT beschreibt und fuer den Modi behebt: "das sieht + nicht verborgen aus, sondern unfertig." + + Fuer den Menschen, der von aussen kommt und niemanden hier kennt, + ist der erste Satz nach dem Anmelden der wichtigste im ganzen + Haus. */ + if (person?.rolle === "gast") return "Community · dein Platz im Treff"; return null; } diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 9ad1c0ec..c745c28a 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,15 +16,15 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +