Community: der Chat-Knopf fuehrte auf JEDER Seite ins Leere

ERST DIE METHODE, DANN DER FUND. An einem Tag habe ich in der
Community elf Dinge gefunden, die dort nicht hingehoerten -- jedes
einzelne, weil ich zufaellig hingesehen habe. Das ist keine Methode.
Der Workspace ist fuer die Agentur gebaut worden, und die Community
hat ihn geerbt; solche Reste findet man nicht durch Nachdenken,
sondern indem man ALLE Seiten durchgeht, die ein Mitglied erreichen
kann.

server/pruef-community-sicht.mjs tut genau das. Sie leitet aus
rechte.js ab, welche Seiten offenstehen (4) und welche nicht (27) --
von Hand aufgezaehlt waere das eine Liste, die bei der naechsten Seite
niemand nachzieht --, oeffnet jede davon als Mitglied und fragt
zweierlei: Fuehrt ein sichtbarer Weg auf eine verbotene Seite? Steht
dort die Sprache eines Arbeitsplatzes?

BEIM ERSTEN LAUF: 27 sichtbare Wege, davon ZEHN ins Leere -- und alle
zehn derselbe Knopf. Der Chat steht oben rechts in der Kopfleiste, auf
jeder einzelnen Seite, mit Zaehler. `chat.html` steht einem Mitglied
aber nicht offen: Der Klick landet wieder auf der Startseite. Keine
Meldung, kein Grund, nichts passiert -- an der Stelle, die man am
ehesten drueckt.

Der Knopf haengt jetzt an `darf_chat` aus /api/ich, und das kommt aus
derselben Rechtetabelle wie die Schranke dahinter. Die Oberflaeche
vergleicht keine Rollennamen -- das waere eine zweite Wahrheit, die
bei der naechsten Rechteaenderung auseinanderlaeuft. Dieselbe
Ueberlegung steht zwei Zeilen weiter oben schon einmal.

UND DIE PRUEFUNG HAT GLEICH MEINEN EIGENEN FEHLER GEFUNDEN: Die erste
Fassung stand in `aufbauChat`, wo es die Person gar nicht gibt --
ReferenceError auf allen zehn Seiten. Ohne den Skriptfehler-Abschnitt
waere der Knopf verschwunden UND die Seite kaputt gewesen, und das
haette wie ein Erfolg ausgesehen.

Jetzt haengt es dort, wo die Person ankommt (`werZeigen`) -- ein
vorhandener Knopf laesst sich immer entfernen, auf die Reihenfolge des
Ladens zu bauen waere eine Annahme.

GEGENPROBE: DogFather hat seinen Chat-Knopf weiterhin und 24 Wege auf
andere Seiten. Ohne diesen Abschnitt saehe eine abgeschaffte Funktion
genauso aus wie eine, die richtig entscheidet.

7 Pruefungen, 0 Fehler.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-18 21:59:53 +02:00
co-authored by Claude Opus 5
parent c2a8c5f15f
commit 542070e864
36 changed files with 707 additions and 402 deletions
+23
View File
@@ -20,6 +20,28 @@
Steht hier und nicht in jeder Seitendatei -- jede von ihnen setzte
bisher dieselbe Zeile selbst zusammen, vierzehnmal. */
window.werZeigen = function (ich) {
/* DER CHAT-KNOPF GEHOERT NICHT ZU JEDEM (18.09.2026).
Er wurde auf JEDER Seite gebaut. Fuer ein Mitglied der Community
fuehrte er ins Leere: `chat.html` steht ihm nicht offen, der
Klick landete wieder auf der Startseite -- keine Meldung, kein
Grund, nichts passiert. Gemessen von pruef-community-sicht:
zehn Seiten, zehn tote Wege, und der Knopf steht oben rechts,
wo man ihn am ehesten drueckt.
HIER UND NICHT IN `aufbauChat`: Dort gibt es die Person nicht --
sie kommt als Parameter in diese Funktion, und zwar je nach
Seite frueher oder spaeter als der Knopf gebaut wird. Auf die
Reihenfolge zu bauen waere eine Annahme; ein vorhandener Knopf
laesst sich dagegen immer entfernen.
`=== false` und nicht `!`: Fehlt die Angabe (aeltere Antwort des
Servers), bleibt alles wie bisher. Ein fehlendes Feld soll
niemandem den Chat wegnehmen. */
if (ich && ich.darf_chat === false) {
document.querySelector('.chat-knopf')?.remove();
}
const ziel = document.getElementById('wer');
if (!ziel || !ich) return;
ziel.textContent = '';
@@ -800,6 +822,7 @@
/* Auf der Chatseite selbst gibt es nichts zu verlinken. */
if (/\/chat\.html$/.test(location.pathname)) return;
const el = (tag, klasse, text) => {
const k = document.createElement(tag);
if (klasse) k.className = klasse;