Procházet zdrojové kódy

TASKS: 83 af (watchdog leeg), taak 88 'Mijn aanmeldingen' + kloonknop uitgeschreven

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob před 12 hodinami
rodič
revize
6d31955190
1 změnil soubory, kde provedl 90 přidání a 3 odebrání
  1. 90 3
      TASKS.md

+ 90 - 3
TASKS.md

@@ -17,9 +17,9 @@ half af** — node 220276 geeft 404, alleen de dblog-telling staat nog open.
 
 **Open, in volgorde:**
 
-1. **83 · nog één Drupal-restje** — ~~`node_delete(220276)`~~ (al weg, 404) en de dblog-telling
-   (`SELECT type, severity, COUNT(*) FROM watchdog WHERE type LIKE 'custom%'
-   GROUP BY type, severity;`). Plak de uitkomst, dan kijkt Claude mee.
+1. ~~**83 · twee Drupal-restjes**~~ — **AF 2026-09-18.** Node 220276 geeft 404, en
+   de dblog-telling gaf **nul rijen**: er staat geen enkele `custom%`-regel in
+   `watchdog`, dus er ligt geen backlog aan debug-logging (raakt ook P2-25).
 2. ~~**84 · taak 82 naar productie**~~ — **AF**, nagemeten op productie 2026-09-18.
 3. **85 · account-verwijderen-knop** naar `/nl/support/mobieleapp` (besluit is
    genomen, zie het blok verderop). Claude kan dit ook zelf in de builder doen.
@@ -32,6 +32,93 @@ half af** — node 220276 geeft 404, alleen de dblog-telling staat nog open.
    dáár niet rechtstreeks naartoe linken vanuit de app).
 6. **62 · "Account aanmaken"-route op de Login-pagina** (Claude, builder, klein).
 7. **76 · linkerpadding op de horeca-agendakaart** (klein, eigenaar onbepaald).
+8. **88 · "Mijn aanmeldingen" + kloonknop** — nieuw 2026-09-18, zie het blok
+   hieronder. Deel A (Drupal) bij Bob, deel B (app) bij Claude.
+9. **P2-43 · Tab Bar Scrollable op `HorecagelegenheidCurrent`** (4 tabs: Info /
+   Links / Bezorgen / Agenda — "Bezorgen" kapt af) en **P2-44 · datum-icoon
+   zonder datum op `EventCurrent`** — allebei door Bob naar Claude geschoven
+   2026-09-18.
+
+### 🆕 88 · "Mijn aanmeldingen" + kloonknop · Eigenaar: Bob (Drupal, deel A), Claude (app, deel B)
+
+Bob 2026-09-18: *"Ziet een horecagelegenheid-eigenaar of stadsrechten-eigenaar ook
+een overzicht van hun zelf aangemaakte dingen? En ik wil er een knop achter,
+klone, waardoor het formulier met de eerdere gegevens wordt gevuld."*
+
+**Antwoord op de eerste vraag: nee, dat bestaat nog niet.** Gemeten 2026-09-18 op
+de export: de enige "mijn"-endpoints zijn `mijn_horecagelegenheden.json` (vult de
+dropdown op `uitgaansevenementAanmaken`) en `mijn_stadsrechten.json`. Er is geen
+enkele call die teruggeeft *wat deze gebruiker heeft aangemaakt*. Na het indienen
+van een evenement verdwijnt het dus uit beeld: de gebruiker kan niet zien of het
+erop staat, niet of het al goedgekeurd is, en niets hergebruiken.
+
+**A · Drupal (Bob) — twee endpoints, allebei sessie-geauthenticeerd**
+
+- **A1 · `mijn_aanmeldingen.json`** (zelfde auth-patroon als
+  `mijn_horecagelegenheden.json`). Alle nodes van type `go_out_event` **en**
+  `activity` met `uid` = huidige gebruiker, nieuwste eerst. Per rij: `nid`,
+  `type`, `title`, `datum_start` (rauw `yyyy-MM-dd HH:mm:ss`), `status` (0/1),
+  `plaats`, `logo` (URL, voor een thumbnail).
+- **A2 · `aanmelding_kloonbron.json?nid=X`** — sessie-auth **plus een
+  eigenaarscheck** (`$node->uid == $user->uid`, anders 403; zonder die check kan
+  iemand andermans gegevens uitlezen). Levert de **rauwe** waarden, niet de
+  weergavewaarden: `horecagelegenheid_nid`, `titel`, `omschrijving` (rauwe body),
+  `entree_tid`, `entreeprijs`, `toelichting_entree`, `tickets_url`,
+  `website_url`, `categorie_tids` (lijst), `logo_fid`, `fotos_fids` (lijst).
+
+  *Waarom A2 een eigen endpoint moet zijn en `flutterflow_events.json` niet
+  volstaat — gemeten op nid 214439:* die view geeft `categorie` als **labels**
+  (`['Tweedehands markt']`) i.p.v. tids, `logo`/`fotos` als **URL's** i.p.v.
+  fids, `datum` als `zaterdag 19 sep, 9:00` (geen jaar, niet parseerbaar),
+  `website` verpakt in een `<a href=...>`-tag, en er zit **geen entree-tid** in.
+  Daar is geen formulier mee te vullen.
+
+  **Open vraag voor Bob:** mag een kloon dezelfde `fid`'s hergebruiken (dan moet
+  `file_usage_add()` meelopen voor de nieuwe node), of moet de gebruiker opnieuw
+  uploaden? Hergebruiken is voor de gebruiker veel prettiger — dat is juist de
+  helft van de winst van klonen.
+
+**B · App (Claude, builder)**
+
+- **B1 · Nieuwe pagina `MijnAanmeldingen`** met de standaard header + Drawer
+  (recept staat in `CLAUDE.md`), een `StaggeredView` over A1 met Cross Axis Count
+  1/1/2/3 en een Empty List Widget. Per kaart: titel, datum, **statuslabel**
+  ("Gepubliceerd" bij `status: 1`, "Wacht op goedkeuring" bij `0`) en twee
+  knoppen: *Bekijken* (Navigate → `EventCurrent` met `nid`) en *Klonen*.
+- **B2 · Ingang:** Favorieten tab 4 (Gebruiker), waar *Uitgaansevenement
+  aanmaken* en *Stadsactiviteit aanmaken* al staan. Eén `ListTile` erbij,
+  **binnen** de bestaande `userSessionid`-login-guard. Dupliceer een bestaande
+  rij (Ctrl+D) — dat is hier het bewezen patroon, Insert Widget niet.
+- **B3 · Klonen.** De kloonknop haalt A2 op in zijn eigen actieketen (Backend
+  Call) en geeft de waarden mee als **page parameters** aan de Navigate To naar
+  `uitgaansevenementAanmaken`. **Niet** via een page state die je in On Page Load
+  vult: `Initial Option Value` van een dropdown wordt tijdens de eerste build
+  geëvalueerd en On Page Load draait pas in een `addPostFrameCallback` — dan is
+  de `FormFieldController` al met de lege waarde geïnitialiseerd (staat zo in
+  `CLAUDE.md`).
+
+  Nieuwe parameters op `uitgaansevenementAanmaken`, **allemaal niet-verplicht**
+  (een verplichte parameter genereert een `!` en laat de gewone "nieuw"-route
+  crashen): `kloonHorecaNid`, `kloonTitel`, `kloonOmschrijving`, `kloonEntreeTid`,
+  `kloonEntreeprijs`, `kloonToelichting`, `kloonTicketsUrl`, `kloonWebsiteUrl`
+  (String), `kloonCategorieTids` + `kloonFotosFids` (List<String>), `kloonLogoFid`.
+  Binden: elke `TextField` → *Initial Value*, elke dropdown → *Initial Option
+  Value*.
+
+**Bewust NIET klonen: de twee datumvelden.** Je kloont juist om hetzelfde
+evenement op een níeuwe datum te zetten, dus een overgenomen datum is per
+definitie fout en moet alsnog weg. Twee lege datumvelden zijn meteen ook de rem
+tegen per ongeluk twee keer exact dezelfde aanmelding publiceren.
+
+**Volgorde.** A1 + B1 + B2 (het overzicht) is op zichzelf al waardevol en veel
+kleiner dan de kloonknop — lever dat als eerste op, A2 + B3 daarna. Zonder het
+overzicht heeft de kloonknop trouwens geen plek om te staan.
+
+**Twee valkuilen vooraf.** (1) De `List<String>`-parameters zijn het fragiele
+deel: een List-typed argument dat op `Unset` blijft staan blokkeert de héle
+export met een generieke 400 (zie `CLAUDE.md`) — loopt dat vast, dan is het een
+Bob-stukje. (2) `stadsactiviteitAanmaken` heeft exact hetzelfde formulier­patroon;
+bouw eerst evenementen helemaal af en kopieer daarna pas, niet allebei tegelijk.
 
 ### 🆕 87 · Uitleggen waar je een horecagelegenheid aanmaakt — kan alleen via de website · Eigenaar: Bob (tekst + URL), Claude (app-kant)