Spicy Media: sieben stille Luecken -- und der Kalender zeigt wirklich nur noch Eigenes
Filipe hat drei Sachen gemeldet. Zwei davon waren nicht das, wonach sie
aussahen.
1. "BEI DER SPICY ROLLE IST DA EIN PROBLEM" (Creator-Profil laedt nicht)
Nicht diese Seite war kaputt. In NEUN Skripten stand dieselbe Zeile
const LEITUNG = new Set(['admin', 'manager']);
und in keinem davon 'spicy'. profil.js nahm deshalb den Creator-Zweig
und lud das EIGENE Profil -- ein Spicy-Zugang ist kein Creator, also
404. Acht der neun sind nicht kaputtgegangen; sie haben sich still
falsch verhalten.
Die Liste steht jetzt EINMAL in bereiche.js. Beim Aufraeumen kamen mit
derselben Suche sechs weitere Luecken heraus, alle vom selben Typ:
* Aufgaben abbrechen -- Server UND Knopf ohne 'spicy'
* Teilen-Knopf in der Kopfleiste -- ohne 'spicy'
* Chat: die Gespraechsliste laeuft ueber eine feste Rollenfolge.
Wer nicht darin steht, taucht gar nicht auf -- eine Person, die es
fuer die anderen nicht gibt.
* Kalender: dieselbe Rollenfolge, dort landete Spicy Media durch
indexOf() === -1 ganz oben statt an ihrem Platz.
* Dashboard: "Creator anlegen" nur fuer admin/manager -- der Server
haette sie gelassen, den Knopf hat sie nie gesehen.
* Personenliste: ROLLENNAME ohne 'spicy'. Der Auffangwert
`|| p.rolle` schrieb "spicy" statt "Spicy Media" -- plausibel
genug, um jahrelang zu bleiben.
`pruef-css-klassen.mjs` verlangt jetzt, dass kein Workspace-Skript sich
wieder eine eigene Rollenliste baut. Mit Gegenprobe, dass der Sucher so
eine Liste auch wirklich findet.
2. "DIE ZAHLEN DIESE KATEGORIE NICHT SEHEN"
Kachel und Seite waren beim Anlegen der Rolle auf ["spicy","admin"]
gesetzt worden -- "dieselben Rechte ausser Automationen". Beides jetzt
auf DogFather allein.
3. "IN CIGDEMS KALENDER STEHT IMMER NOCH MEIN MANAGER MEETING"
Das war MEIN Denkfehler von heute Frueh, nicht ein vergessener Fall.
Ich hatte "geht alle an" als "kein Teilnehmer eingetragen" definiert --
also entschied der Server, was alle angeht, und nicht der, der den
Termin anlegt. Wer niemanden eintraegt, meint aber meistens nicht
"alle", sondern "mich".
Der Fall ist entfallen. Sichtbar ist ein Termin jetzt nur noch fuer
den, der ihn angelegt hat, dem er zugeordnet ist, der das Gegenueber
ist -- oder der in der Teilnehmerliste steht. Damit ist das Markieren
im Termin die einzige Antwort auf "wen geht das an": eine sichtbare
Entscheidung im Formular statt einer unsichtbaren Regel im Server.
Calls & Protokolle rufen dieselbe Funktion auf und koennen deshalb gar
nicht auseinanderlaufen -- das war Filipes vierter Wunsch, und er ist
mit derselben Zeile erledigt.
Am laufenden System als Cigdem nachgemessen: Profil laedt ("Profil:
Luna"), Zahlen-Kachel weg und Seite gesperrt, im Kalender NUR der
Termin, bei dem sie markiert ist, Calls zeigt genau denselben.
Fuenf Pruefungen auf die endgueltige Regel umgeschrieben statt
geloescht (sicht, spicy, teilnehmer, scout-zuteilung, css-klassen).
Die dritte Drehung bei scout-zuteilung steht mit allen drei Staenden
in der Akte -- eine geloeschte Pruefung hinterlaesst keine Spur davon,
dass hier einmal etwas anderes galt.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -10,7 +10,10 @@
|
||||
|
||||
/* DogFather und Manager haben dieselben Rechte -- die Unterscheidung
|
||||
macht nur die Personenverwaltung, und die prueft der Server. */
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
|
||||
/* `leer` ist der Satz, der in einer leeren Spalte steht. Vorher stand
|
||||
dort in allen vier Spalten ein Gedankenstrich -- vier graue Striche
|
||||
@@ -37,7 +40,10 @@
|
||||
Dieselbe Menge steht im Server (DARF_ABBRECHEN in
|
||||
workspace-aufgaben.js) und DORT sitzt die Sperre. Hier geht es nur
|
||||
darum, niemandem einen Knopf hinzustellen, der dann 403 sagt. */
|
||||
const DARF_ABBRECHEN = new Set(['admin', 'manager', 'scout']);
|
||||
/* Leitung plus Scouts. Aus der einen Rollenquelle abgeleitet statt
|
||||
abgeschrieben -- die abgeschriebene Fassung hatte 'spicy'
|
||||
vergessen, und ein fehlender Knopf faellt niemandem auf. */
|
||||
const DARF_ABBRECHEN = new Set([...window.Bereiche.LEITUNG, 'scout']);
|
||||
const STATUS_NAME = {
|
||||
offen: 'Offen', arbeit: 'In Arbeit', review: 'Review', erledigt: 'Erledigt',
|
||||
};
|
||||
|
||||
@@ -11,7 +11,10 @@
|
||||
|
||||
/* DogFather und Manager haben dieselben Rechte -- die Unterscheidung
|
||||
macht nur die Personenverwaltung, und die prueft der Server. */
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
|
||||
/* Wer hier eintraegt: DogFather, Manager und Scout. Der Creator liest
|
||||
nur mit -- diese Bereiche sind die Betreuungsakte, nicht sein
|
||||
|
||||
@@ -389,7 +389,7 @@
|
||||
wegzunehmen, ohne die Seite zu schliessen, waere nur ein
|
||||
versteckter Weg und keine Regel. */
|
||||
{ name: 'Zahlen', unter: 'Diamanten, LIVE-Tage, Verweildauer', zeichen: 'zahlen', ton: 2,
|
||||
rollen: ['spicy', 'admin'], ziel: 'leistung.html', szene: 'arena' },
|
||||
rollen: ['admin'], ziel: 'leistung.html', szene: 'arena' },
|
||||
{ name: 'Start-Check', unter: 'Erstanalyse, 16 Punkte', zeichen: 'startcheck', ton: 16,
|
||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'startcheck.html', szene: 'wald' },
|
||||
{ name: 'LIVE-Analyse', unter: 'Vorher, während, danach', zeichen: 'live', ton: 3,
|
||||
@@ -759,5 +759,38 @@
|
||||
return s;
|
||||
}
|
||||
|
||||
window.Bereiche = { ZEICHEN, GRUPPEN, zuSeite, zeichenBauen, merkzeichenBauen };
|
||||
/* ===================================================================
|
||||
WER GEHÖRT ZUR LEITUNG? EINE ANTWORT, NICHT NEUN (07.09.2026)
|
||||
|
||||
Filipe hat gemeldet, dass die Seite „Creator-Profile" bei Spicy
|
||||
Media mit „Profil konnte nicht geladen werden" abbricht. Die
|
||||
Ursache war nicht diese eine Seite: In NEUN Skripten stand
|
||||
dieselbe Zeile
|
||||
|
||||
const LEITUNG = new Set(['admin', 'manager']); // <- ohne spicy
|
||||
|
||||
und in keinem davon stand `spicy`. profil.js hat deshalb den
|
||||
Zweig für Creator genommen und das EIGENE Profil geladen -- und
|
||||
ein Spicy-Media-Zugang ist kein Creator, also 404.
|
||||
|
||||
Das ist die Bauart, die von selbst auseinanderläuft: Wer eine
|
||||
Rolle hinzufügt, müsste an neun Stellen daran denken, und die
|
||||
acht, an die er nicht gedacht hat, gehen nicht kaputt -- sie
|
||||
verhalten sich nur still falsch. Deshalb steht die Antwort jetzt
|
||||
hier, an EINER Stelle, in einer Datei, die jede dieser Seiten vor
|
||||
ihrem eigenen Skript lädt.
|
||||
|
||||
`pruef-css-klassen.mjs` verlangt, dass kein Workspace-Skript sich
|
||||
wieder eine eigene Leitungsliste baut. */
|
||||
const LEITUNG = new Set(['spicy', 'admin', 'manager']);
|
||||
|
||||
/* Die Reihenfolge, in der Rollen überall erscheinen -- gleiche
|
||||
Begründung, dieselbe Falle: kalender.js hatte seine eigene, ohne
|
||||
Spicy Media, und sortierte sie damit ans Ende. */
|
||||
const ROLLENFOLGE = ['spicy', 'admin', 'manager', 'scout', 'creator'];
|
||||
|
||||
window.Bereiche = {
|
||||
ZEICHEN, GRUPPEN, zuSeite, zeichenBauen, merkzeichenBauen,
|
||||
LEITUNG, ROLLENFOLGE,
|
||||
};
|
||||
})();
|
||||
|
||||
@@ -14,7 +14,10 @@
|
||||
überall sonst: DogFather und Manager entscheiden, alle anderen
|
||||
benutzen. Der Server prüft es noch einmal -- das hier ist nur die
|
||||
Anzeige. */
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
|
||||
let ich = null;
|
||||
let daten = null;
|
||||
|
||||
@@ -495,7 +495,11 @@
|
||||
|
||||
/* Nach Rollen gruppiert, wie bei der Teilnehmerwahl im Kalender.
|
||||
Die Rolle steht einmal über der Gruppe statt an jedem Namen. */
|
||||
for (const rolle of ['admin', 'manager', 'scout', 'creator']) {
|
||||
/* Die Rollenfolge kommt aus bereiche.js. Stand sie hier selbst,
|
||||
fehlte 'spicy' -- und wer nicht in der Schleife vorkommt, taucht
|
||||
in der Gesprächsliste gar nicht auf. Kein Fehler, nur eine
|
||||
Person, die es fuer die Anderen nicht gibt. */
|
||||
for (const rolle of window.Bereiche.ROLLENFOLGE) {
|
||||
const leute = personen.filter((p) => p.rolle === rolle);
|
||||
if (!leute.length) continue;
|
||||
|
||||
|
||||
@@ -20,7 +20,10 @@
|
||||
(() => {
|
||||
'use strict';
|
||||
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
const darfEintragen = () => ich && ich.rolle !== 'creator';
|
||||
|
||||
const $ = (id) => document.getElementById(id);
|
||||
|
||||
@@ -10,7 +10,10 @@
|
||||
|
||||
/* DogFather und Manager haben dieselben Rechte -- die Unterscheidung
|
||||
macht nur die Personenverwaltung, und die prueft der Server. */
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
|
||||
const $ = (id) => document.getElementById(id);
|
||||
const STATUSNAME = { entwurf: 'Entwurf', review: 'Review', freigegeben: 'Freigegeben' };
|
||||
|
||||
@@ -40,7 +40,10 @@
|
||||
|
||||
/* DogFather und Manager haben dieselben Rechte -- die Unterscheidung
|
||||
macht nur die Personenverwaltung, und die prüft der Server. */
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
|
||||
const $ = (id) => document.getElementById(id);
|
||||
const el = (tag, klasse, text) => {
|
||||
@@ -88,7 +91,12 @@
|
||||
const ROLLENGRUPPE = {
|
||||
admin: 'DogFather', manager: 'Manager', scout: 'Scouts', creator: 'Creator',
|
||||
};
|
||||
const ROLLENFOLGE = ['admin', 'manager', 'scout', 'creator'];
|
||||
/* Auch diese Liste steht in bereiche.js -- sie hatte denselben
|
||||
Mangel wie die Leitungsliste: kein 'spicy'. Eine unbekannte Rolle
|
||||
landet bei indexOf() auf -1 und damit VOR allen anderen; Spicy
|
||||
Media stand dadurch in der Teilnehmerwahl ganz oben statt an
|
||||
ihrem Platz. Kein Absturz, nur still falsch. */
|
||||
const ROLLENFOLGE = window.Bereiche.ROLLENFOLGE;
|
||||
|
||||
/** Ein bis zwei Buchstaben, die als Zeichen im Kreis stehen.
|
||||
* "Filipe Fernandes Ribeiro" -> "FR", "Luna" -> "L".
|
||||
|
||||
@@ -84,7 +84,9 @@
|
||||
Und wo auch das nicht geht (alte Browser, kein sicherer Kontext),
|
||||
erscheint der Knopf gar nicht erst -- ein dritter Ausgang statt
|
||||
einer Schaltfläche, die nichts tut. */
|
||||
const DARF_TEILEN = new Set(['admin', 'manager', 'scout']);
|
||||
/* Gleiche Menge, gleiche Begruendung wie beim Abbrechen: Leitung
|
||||
plus Scouts, abgeleitet statt abgeschrieben. */
|
||||
const DARF_TEILEN = new Set([...window.Bereiche.LEITUNG, 'scout']);
|
||||
|
||||
function teilenKnopf(ich) {
|
||||
const leiste = document.querySelector('.kopfleiste__rechts');
|
||||
|
||||
@@ -23,7 +23,10 @@
|
||||
return k;
|
||||
};
|
||||
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
let ich = null;
|
||||
let creator = [];
|
||||
let offenerCreator = 0;
|
||||
|
||||
@@ -15,10 +15,17 @@
|
||||
|
||||
Zwei Listen fuer dieselbe Frage, eine im Server und eine hier --
|
||||
und beim Hinzufuegen einer Rolle wurde nur die erste gepflegt. */
|
||||
const LEITUNG = new Set(['spicy', 'admin', 'manager']);
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
|
||||
const $ = (id) => document.getElementById(id);
|
||||
const ROLLENNAME = { admin: 'DogFather', manager: 'Manager', scout: 'Scout', creator: 'Creator' };
|
||||
/* 'spicy' fehlte hier bis zum 07.09.2026. Vier Stellen lesen daraus
|
||||
(Codeanzeige, Personenliste, Scout-Zeile, Manager-Zeile), und alle
|
||||
vier haben den Fehlgriff mit `|| p.rolle` aufgefangen -- in der
|
||||
Liste stand dann schlicht „spicy" statt „Spicy Media". Ein
|
||||
Auffangwert, der halbwegs plausibel aussieht, ist der beste Weg,
|
||||
eine Luecke jahrelang zu behalten. */
|
||||
const ROLLENNAME = { spicy: 'Spicy Media', admin: 'DogFather',
|
||||
manager: 'Manager', scout: 'Scout', creator: 'Creator' };
|
||||
|
||||
/* Reihenfolge und Erklaerung an EINER Stelle. Sie gilt fuer die
|
||||
Rollenwahl im Formular und fuer alles, was sonst Rollen auflistet. */
|
||||
@@ -54,7 +61,7 @@
|
||||
|
||||
Aus derselben Liste wie die Beschreibungen, damit die beiden nicht
|
||||
auseinanderlaufen. */
|
||||
const darf = ich?.rolle === 'admin' ? ['spicy', 'admin', 'manager', 'scout', 'creator']
|
||||
const darf = ich?.rolle === 'admin' ? [...window.Bereiche.ROLLENFOLGE]
|
||||
: ich?.rolle === 'spicy' ? ['manager', 'creator']
|
||||
: ['creator'];
|
||||
for (const r of ROLLEN.filter((x) => darf.includes(x.wert))) {
|
||||
|
||||
@@ -10,7 +10,10 @@
|
||||
|
||||
/* DogFather und Manager haben dieselben Rechte -- die Unterscheidung
|
||||
macht nur die Personenverwaltung, und die prueft der Server. */
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
|
||||
const OFFEN = ['handles', 'nische', 'live_zeiten', 'technik',
|
||||
'ziel_live', 'ziel_content', 'ziel_community', 'ziel_technik',
|
||||
|
||||
@@ -10,7 +10,10 @@
|
||||
|
||||
/* DogFather und Manager haben dieselben Rechte -- die Unterscheidung
|
||||
macht nur die Personenverwaltung, und die prueft der Server. */
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
|
||||
const $ = (id) => document.getElementById(id);
|
||||
const BEREICHSNAME = {
|
||||
|
||||
@@ -14,7 +14,10 @@
|
||||
|
||||
/* DogFather und Manager haben dieselben Rechte -- die Unterscheidung
|
||||
macht nur die Personenverwaltung, und die prueft der Server. */
|
||||
const LEITUNG = new Set(['admin', 'manager']);
|
||||
/* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun.
|
||||
Sie stand hier frueher selbst, ohne 'spicy', und genau das war der
|
||||
Fehler, den Filipe am 07.09.2026 gefunden hat. */
|
||||
const LEITUNG = window.Bereiche.LEITUNG;
|
||||
|
||||
const $ = (id) => document.getElementById(id);
|
||||
const WEITER = {
|
||||
|
||||
@@ -311,7 +311,12 @@
|
||||
const knopf = document.getElementById('creator-neu');
|
||||
const dialog = document.getElementById('creator-dialog');
|
||||
if (!knopf || !dialog || !ich) return;
|
||||
if (!['admin', 'manager'].includes(ich.rolle)) return;
|
||||
/* Leitung -- aus der einen Rollenquelle, nicht abgeschrieben.
|
||||
Abgeschrieben stand hier ['admin','manager'], also OHNE Spicy
|
||||
Media: Der Server haette sie anlegen lassen (nurLeitung schliesst
|
||||
sie ein), aber den Knopf dazu hat sie nie gesehen. Ein fehlender
|
||||
Knopf sieht nicht nach Fehler aus, sondern nach Absicht. */
|
||||
if (!window.Bereiche.LEITUNG.has(ich.rolle)) return;
|
||||
knopf.hidden = false;
|
||||
|
||||
const f = (id) => document.getElementById(id);
|
||||
|
||||
Reference in New Issue
Block a user