|
|
@@ -365,8 +365,9 @@ app-probleem, wel het sterkste argument voor `confirm = FALSE` in de app.
|
|
|
|
|
|
## 🧪 132 · Bevindingen uit de testronde van 2026-09-22 · Eigenaar: nader te bepalen
|
|
|
|
|
|
-Volledige doorloop op **emulator-5556 (telefoon, uitgelogd)** en **emulator-5554
|
|
|
-(tablet, ingelogd als bobcity)**, verse release-APK uit een eigen export.
|
|
|
+Volledige doorloop op **emulator-5556 (telefoon)** en **emulator-5554 (tablet)**
|
|
|
+met een verse release-APK uit een eigen export, zowel uitgelogd als ingelogd als
|
|
|
+bobcity (Bob logde de telefoon halverwege in).
|
|
|
`dart analyze` gaf **0 errors**; er is geen enkele exception of overflow in
|
|
|
`logcat` gevallen. Offline-gedrag, netwerkherstel, zoeken, datumfilters,
|
|
|
categoriefilter, login-foutafhandeling en de nieuwsbrief-toggles werkten alle
|
|
|
@@ -400,15 +401,34 @@ zit achter `if (FFAppState().zoekOpen)` en wordt dus pas gebouwd nadat de state
|
|
|
gevuld is — de bekende "te laat"-valkuil speelt hier niet). Alternatief: de
|
|
|
zoekterm wissen bij het verlaten van de pagina.
|
|
|
|
|
|
-### 132-C · Introtekst `stadsactiviteitAanmaken` belooft iets dat niet gebeurt
|
|
|
-
|
|
|
-Sleutel **`rupw26n4`** (NL én EN) zegt *"Heb je stadsredacteur-rechten voor deze
|
|
|
-plaats, dan staat je activiteit direct online; anders kijken we hem eerst na."*
|
|
|
-`_custom_stadsactiviteit_create()` zet echter **onvoorwaardelijk `status = 0`**,
|
|
|
-óók voor een account met stadsrechten (zie het domeinblok in `CLAUDE.md`). De
|
|
|
-tekst van `uitgaansevenementAanmaken` (`vkjvzuqz`) klopt wél.
|
|
|
-
|
|
|
-Fix: tekst aanpassen naar "we kijken hem eerst na", in beide talen.
|
|
|
+### 132-C · Stadsrechten publiceren NIET direct — backend moet mee · Eigenaar: Bob (Drupal)
|
|
|
+
|
|
|
+**Bob 2026-09-22: "als iemand stadsrechten heeft, mag de activiteit direct
|
|
|
+gepubliceerd worden. Alleen gewone gebruikers die een activiteit aanmaken, die
|
|
|
+moeten eerst in drupal worden goedgekeurd."** De app-tekst klopt dus; de
|
|
|
+**backend** doet het niet.
|
|
|
+
|
|
|
+Huidige stand: `_custom_stadsactiviteit_create()` zet **onvoorwaardelijk
|
|
|
+`$node->status = 0`** en neemt bewust géén `status`-argument aan, en de docblock
|
|
|
+noemt `mijn_stadsrechten` letterlijk *"PUUR INFORMATIEF … GEEN toegangscontrole"*.
|
|
|
+Iedere app-inzending wacht daardoor op de redactie, ook die van bobcity (die
|
|
|
+stadsrechten heeft op Amsterdam, Drechterland, Enkhuizen en Stede Broec).
|
|
|
+
|
|
|
+Wat er moet gebeuren, en waarom het niet triviaal is:
|
|
|
+- De check hoort **server-side**, op de sessie-gebruiker — nooit een `status` uit
|
|
|
+ de client, anders kan iedereen publiceren.
|
|
|
+- Vergelijk `field_town_access` van de gebruiker met de **gekozen plaats** van de
|
|
|
+ activiteit. Let op het niveau-probleem uit `CLAUDE.md`: dat veld kan een
|
|
|
+ **provincie-, gemeente- óf plaats-tid** bevatten (bobcity heeft nu gemeenten,
|
|
|
+ eerder stonden er plaatsen en provincies in). Bepaal het niveau met
|
|
|
+ `count(taxonomy_get_parents_all($tid))` → 1 provincie / 2 gemeente / 3 plaats,
|
|
|
+ en kijk of de gekozen plaats **onder** een van de rechten-tids valt.
|
|
|
+- Valt hij eronder → `status = 1`, anders `status = 0`.
|
|
|
+- ⚠️ Claude komt niet aan Drupal (staande regel). Claude kan hooguit een script
|
|
|
+ met droogdraai aanleveren; uitvoeren doet Bob.
|
|
|
+
|
|
|
+Pas ná deze wijziging klopt de introtekst (`rupw26n4`) met de werkelijkheid. De
|
|
|
+tekst zelf hoeft dus **niet** aangepast; wel controleren zodra de backend om is.
|
|
|
|
|
|
### 132-D · Vier Engelse labels staan op de verkeerde tekst (`Duplicate`-erfenis)
|
|
|
|
|
|
@@ -463,9 +483,17 @@ eerste tab naar die knop (of toon `LegeLijstComponent` met die tekst).
|
|
|
- **Kopie-knop is nog `primary`-rood** (restpunt van 127-C) en staat los
|
|
|
gecentreerd tússen twee kaarten, waardoor hij bij de verkeerde lijkt te horen.
|
|
|
- **Persoonlijke agenda toont overal "Binnenkort meer…"**:
|
|
|
- `favorieten_widget.dart:435` geeft hardcoded `inhoud: null` mee, terwijl alle
|
|
|
- andere velden netjes uit `$.veld` komen. Vraag: levert
|
|
|
- `favorieten_agenda.json` een omschrijvingsveld? Zo ja, binden.
|
|
|
+ `favorieten_widget.dart:435` geeft hardcoded `inhoud: null` mee. **Nagemeten
|
|
|
+ 2026-09-22 (respons uit logcat van de ingelogde app):
|
|
|
+ `favorieten_agenda.json` heeft géén omschrijvingsveld.** Volledige veldenset:
|
|
|
+ `node_type, nid, titel, datum, datum_raw, plaats, categorie, logo, adres,
|
|
|
+ postcode, woonplaats, horecagelegenheid, horecagelegenheidNid, matched_via`.
|
|
|
+ De binding is dus niet "vergeten" — er valt niets te binden. Keuze voor Bob:
|
|
|
+ óf een omschrijvingsveld aan de resource toevoegen (Drupal), óf de
|
|
|
+ placeholderregel weghalen zodat de kaart gewoon zonder tekst staat.
|
|
|
+ *(Terzijde: `horecagelegenheidNid` mét hoofdletter N is voor dít endpoint
|
|
|
+ correct — getest, het horeca-blok op de detailpagina komt gewoon door. Niet
|
|
|
+ "gelijktrekken" met de `$.horecagelegenheidnid` van de views.)*
|
|
|
- **Zoekveld krijgt geen focus** als je het opent met het vergrootglas — je moet
|
|
|
er zelf nog in tikken.
|
|
|
- **Login-melding** zegt *"Controleer je gebruikersnaam en wachtwoord"* terwijl
|
|
|
@@ -476,6 +504,49 @@ eerste tab naar die knop (of toon `LegeLijstComponent` met die tekst).
|
|
|
horeca-overzicht); op het horeca-overzicht legt de 468×60-banner zich over de
|
|
|
onderste kaart heen. Zie ook G0.6.
|
|
|
|
|
|
+### 132-J · Waarschuwing "Je volgt nog geen gemeenten" verschijnt ONTERECHT
|
|
|
+
|
|
|
+Raakt taak 128. Op `mijnProfiel` → Nieuwsbrieven stond bij bobcity de rode regel
|
|
|
+*"Je volgt nog geen gemeenten, dus de wekelijkse agenda blijft leeg"* — terwijl
|
|
|
+die drie favoriete gemeenten heeft (Alblasserdam, Amsterdam, Arnhem, zichtbaar
|
|
|
+op Favorieten tab 2).
|
|
|
+
|
|
|
+De conditie zelf is goed
|
|
|
+(`if (!(FFAppState().favorieteGemeenteIds.isNotEmpty))`, regel 2302). Het
|
|
|
+probleem is de **bron**: `favorieteGemeenteIds` wordt op precies één plek gevuld,
|
|
|
+in de On-Page-Load van `SelectStateDropDownComponent`
|
|
|
+(`select_state_drop_down_component_widget.dart:115`, via `favorieten_gemeenten.json`).
|
|
|
+Dat component staat alleen op **Zoek stad**. Wie na het inloggen direct naar
|
|
|
+Mijn Profiel gaat, heeft dus een lege lijst en krijgt de verkeerde waarschuwing.
|
|
|
+
|
|
|
+**Reproductie en bewijs (2026-09-22, telefoon-emulator, ingelogd):** Mijn Profiel
|
|
|
+→ Nieuwsbrieven → rode regel staat er. Daarna menu → Zoek stad → terug naar
|
|
|
+Nieuwsbrieven → regel is weg. Twee keer zo gelopen.
|
|
|
+
|
|
|
+Fix: `mijnProfiel` zelf de lijst laten ophalen in On Page Load en de conditie op
|
|
|
+een **page state** hangen — exact het patroon dat elders op diezelfde pagina al
|
|
|
+gebruikt wordt (page state type JSON + *Is List*, gevuld uit een Backend Call,
|
|
|
+conditie *Is Set and Not Empty*; recept staat in `CLAUDE.md`). Een App State die
|
|
|
+maar op één scherm gevuld wordt, is hier de verkeerde bron.
|
|
|
+
|
|
|
+Let op: de tweede, oranje regel eronder (*"De wekelijkse uitgaansagenda gebruikt
|
|
|
+de gemeenten die je volgt"*) staat er altijd en is de algemene toelichting. Met
|
|
|
+0 gemeenten staan er dus twee bijna gelijke regels onder elkaar — overweeg er één
|
|
|
+van te maken.
|
|
|
+
|
|
|
+### 132-K · `&` in de categorie van `favorieten_horeca.json` · Eigenaar: Bob (Drupal)
|
|
|
+
|
|
|
+Favorieten tab 3 toont bij Luxor Live het label **`Kunst & Cultuur`**.
|
|
|
+Nagemeten in de rauwe respons:
|
|
|
+`"categorie":["Kunst & Cultuur","Theater"]`. Dit is het bekende
|
|
|
+`_custom_clean_html()`-patroon uit `CLAUDE.md`: het veld `categorie` staat voor
|
|
|
+dit endpoint niet in de `$fields_to_clean`-lijst. De views leveren diezelfde
|
|
|
+categorie wél schoon uit ("Kunst & Cultuur"), dus het is endpoint-specifiek.
|
|
|
+
|
|
|
+Controleer in dezelfde moeite de andere favorieten-resources
|
|
|
+(`favorieten_agenda.json`, `favorieten_gemeenten.json`) — in de opgevangen
|
|
|
+agenda-respons zaten geen entiteiten, maar daar zat toevallig ook geen `&` in.
|
|
|
+
|
|
|
### Wat expliciet GOED was
|
|
|
|
|
|
Offline starten (rode banner *Geen verbinding met uitgaanskrant.com* + werkende
|
|
|
@@ -1203,7 +1274,7 @@ selecteert de dropdown wél de juiste waarde maar verstuurt de create-actie leeg
|
|
|
De page states worden pas bij het indienen gelezen, dus die mogen gewoon in
|
|
|
On Page Load — daar speelt het timingprobleem niet.
|
|
|
|
|
|
-#### 127-E · Activiteitenformulier voorvullen · Eigenaar: Claude — grotendeels af (2026-09-22)
|
|
|
+#### 127-E · Activiteitenformulier voorvullen · Eigenaar: Claude — bezig (2026-09-22, preview logo/foto's)
|
|
|
|
|
|
**Af en geverifieerd in een verse export (0 analyse-fouten):**
|
|
|
- **On Page Load → Update Page State** (Action 3, ná de bestaande
|
|
|
@@ -1245,7 +1316,7 @@ meekrijgt komen uit de page states, en die zijn nu gezet.
|
|
|
"nieuw aanmaken", krijgt een verse activiteit het vorige kloonformulier te zien.
|
|
|
Dat raakt o.a. de knop "+ Activiteit aanmaken" per stadsrecht op `mijnProfiel`.
|
|
|
|
|
|
-#### 127-F · `kloonBron` wissen · Eigenaar: nader te bepalen
|
|
|
+#### 127-F · `kloonBron` wissen · Eigenaar: Claude — bezig (2026-09-22)
|
|
|
|
|
|
Zonder dit blijft een kloon hangen: wie daarna een **vers** evenement aanmaakt,
|
|
|
krijgt het vorige formulier opnieuw ingevuld.
|