Ver Fonte

CLAUDE.md: gemeenterechten-versimpeling (field_town_access plaats->gemeente) vastgelegd als duurzaam Drupal-patroon

Bevestigd werkend op devbob (bobcity), incl. term_reference_tree
widget-instellingen (Leaves only/Maximum Depth), resave-drops-oude-
waarden-gedrag, en het niveau-agnostische gedrag van de "places"-view.
Volledige patch + analyse staan in het Redactierechten & Contentschema-
artifact (link in memory, sessie drupal-events-inventory-artifact.md).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob há 2 semanas atrás
pai
commit
1f76cf70d5
1 ficheiros alterados com 57 adições e 0 exclusões
  1. 57 0
      CLAUDE.md

+ 57 - 0
CLAUDE.md

@@ -1521,6 +1521,63 @@ exacte veldnaam+type-specificatie (kost hem seconden per veld).
   e.d.) zijn een **bewuste kopie** van `PUitgaanSliderComponent`/
   `UitgaantabelKaartComponent` + een eigen cityid-loze API-call — geen
   dode code, niet meenemen in opschoonacties.
+- **City-editor-stadsrechten (`field_town_access`) zijn sinds 2026-08-27
+  gemeente-niveau, niet meer plaats-niveau — taxonomie zelf (Provincie→
+  Gemeente→Plaats, vid 5) is en blijft 3 niveaus, alleen de rechten-laag
+  is versimpeld.** `custom_field_widget_form_alter()` in `custom.module`
+  (het enige stuk code dat `field_town_access` afdwingt, voor het
+  `field_act_state_municipality_tow`-veld op `activity`) leest de
+  opgeslagen tids nu als gemeenten en zoekt daar de kind-plaatsen bij op
+  (`taxonomy_term_hierarchy`, `h.parent IN (...)`, `vid = 5`) i.p.v. een
+  letterlijke tid-match — repareert meteen de oude array-vs-scalar-bug
+  (`array_column(...,'tid')` i.p.v. het hele veld doorgeven aan
+  `condition('tid', ...)`). Bewust **niet** de taxonomie zelf platgeslagen
+  naar 2 niveaus: de Flutter-app toont de Plaats-naam wél degelijk aan
+  eindgebruikers (horeca-kaarten, evenement-infopagina, fallback
+  `'Plaats onbekend'`), dus dat zou zichtbare precisie kosten + een
+  bulk-hertag-migratie vereisen. Volledige analyse + de patch staan in
+  het levende Artifact, zie [[drupal-events-inventory-artifact]].
+  - **Het veld `field_town_access` gebruikt widget `term_reference_tree`**
+    (vendored contrib-module) — om een admin bij het instellen van een
+    City-editor alleen gemeenten te laten aanvinken (geen Plaats-niveau
+    meer te zien/aan te vinken), moet je op dat veld (Manage Fields →
+    potlood-edit) de widget-instellingen aanpassen: **"Leaves only"
+    uitvinken** (anders krijgt alleen een knooppunt zónder kinderen —
+    dus Plaats — een vinkje; Provincie/Gemeente blijven dan puur
+    uitklap-navigatie zonder checkbox) én **"Maximum Depth" op `2`**
+    zetten (Provincie=niveau 1, Gemeente=niveau 2, Plaats=niveau 3 in
+    deze widget's telling — met `2` wordt Plaats niet meer opgebouwd/
+    getoond). Geen "minimum depth"-optie beschikbaar in deze widget, dus
+    een Provincie-rij krijgt na het uitvinken van "Leaves only" ook een
+    vinkje — puur een kwestie van zelf alleen op gemeente-niveau
+    aanvinken, geen harde blokkade tegen per ongeluk een provincie
+    kiezen (de code hierboven gaat er dan wel gewoon vanuit dat het een
+    gemeente is en zoekt de kind-termen op).
+  - **Widget-instellingen wijzigen raakt nooit al opgeslagen waarden —
+    alleen het bewerkformulier.** Oude, al-opgeslagen plaats-tids in
+    `field_town_access` verdwijnen niet vanzelf door de instelling te
+    wijzigen; je moet het account echt opnieuw opslaan. Bevestigd via
+    `_term_reference_tree_widget_validate()`: bij het opslaan wordt het
+    veld volledig herbouwd uit alléén wat op dat moment daadwerkelijk
+    *gerenderd* is in de boom (geen verborgen-oude-waarde-passthrough)
+    — dus zodra Max depth = 2 staat en je het account opnieuw opslaat
+    (ook zonder verder iets aan te raken), vallen niet-gerenderde
+    plaats-tids er vanzelf uit. Sneller/rechtstreeks via drush, zonder
+    door de UI te hoeven: `taxonomy_get_parents_all($tid)`-lengte === 3
+    identificeert een Plaats-tid (dezelfde check die `custom.module`
+    zelf ook gebruikt voor de vergelijkbare `?city=`-prefill-guard, zie
+    hieronder) — filter die eruit en `user_save()`.
+  - **De "Nieuw stadsactiviteit"-snelkoppelingen (View `places`, block
+    "Towns Owned By User", reverse-relatie op `field_town_access`)
+    blijven werken zonder wijziging** — die view is volledig
+    niveau-agnostisch, toont gewoon elke term die aan de gebruiker
+    gekoppeld is. Enige neveneffect: de link stuurt `?city=<tid>` mee,
+    en `custom_form_activity_node_form_alter()` vult het "Plaats"-veld
+    alléén automatisch voor als `count(taxonomy_get_parents_all($tid))
+    === 3` (dus alleen bij een echte Plaats-tid) — bij een gemeente-tid
+    slaat de auto-invulling gewoon over (geen crash), en moet de
+    gebruiker de plaats 1x zelf uit de (al correct beperkte) dropdown
+    kiezen.
 - Favorieten/login zijn P0. Backend-endpoint bestaat al; Drupal 7
   views die de respons voeden hebben soms nog aanpassing nodig.
 - **Fout-/leeg-afhandeling bij API-calls: het "geen enkele