浏览代码

Taak 130-A: juiste upgrade-route in OneAll gevonden

De billing-address-URL is een losse wizard-stap zonder applicationid en
geeft daarom een security-fout; Change Plan is de werkende ingang.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bob 8 小时之前
父节点
当前提交
80e6e84698
共有 1 个文件被更改,包括 3 次插入3 次删除
  1. 3 3
      TASKS.md

+ 3 - 3
TASKS.md

@@ -28,7 +28,7 @@ Google Play en één doorloop die alleen Bob kan doen.
 |---|---|---|
 | **FOTOBOEK** | Fotoboek: foto's kiezen uit Drupal + beheren | **Claude — bezig** (2026-09-22/23). **Drupal AF.** **App: bottom sheet werkt op de eerste plek** (logo op `uitgaansevenementAanmaken`) — `FotoboekGridComponent` = `Column > TextField(zoek) + Expanded(GridView)`, component state `zoekterm` → Backend Query `zoek`, en een tik roept `bijKeuze(fid, url)` aan en sluit de sheet. `dart analyze` 0 errors. **⚠️ EERST DOEN (Bob, 1 veld): de sheet heeft nog GEEN hoogte** — `ButtonFotoboekLogo` → Actions → de *Bottom Sheet*-actie → **Height (Optional)** op **85 %** (klik eerst het `%`-teken rechts van het label). Zonder hoogte comprimeert de sheet het component tot zijn natuurlijke grootte, en een `Expanded` in een onbegrensde Column geeft dan een leeg vlak. Claude kwam hier niet bij: het veld ligt ~5 px van de vensterrand, elke klik landde op *Select Component* of op de actie-dropdown (4 pogingen). **Daarna testen** met een profile-build op `uitgaansevenementAanmaken`. **Rest:** (a) samenvoegen tot ÉÉN knop *Logo kiezen* → `Alert Dialog → Confirm Dialog` met knoppen Fotoboek/Mobiel → conditional: TRUE = de sheet, FALSE = de bestaande upload-keten (via Copy Action Chain → Delete → Add Conditional → Paste); daarna mag *Uit fotoboek* weg, plus de nu ongebruikte inline `Container` + page state `fotoboekOpen`/`fotoboekDoel`; (b) uitrollen naar de 3 andere upload-plekken (foto's hier, logo + foto's op `stadsactiviteitAanmaken`); (c) 5e tab "Mijn foto's" op `mijnProfiel` voor beheer/verwijderen; (d) EN-vertaling van het zoekveld (Hint Text). **Opruimen (Bob):** `parameter1..4` op `FotoboekGridComponent` (door *Convert to Component* gemaakt, nergens gelezen) en het wegwerp-component `FotoboekGridComponentCopy`. Endpoint-spec + builder-recepten staan in `CLAUDE.md` |
 | **133** | Kopie-knop verkleinen (mijnProfiel 2x + MijnAanmeldingen) | **Claude — bezig** (plan af 2026-09-22, wacht op groen licht voor de browser). Variant A (icoon in de rij) op `mijnProfiel`, variant B (compacte chip) op `MijnAanmeldingen`, tooltip erbij, kleuren meteen goed. Volledig plan + terugvalopties onderaan dit bestand |
-| **134** | Melding bij aan-/afmelden nieuwsbrief | **Eigenaar: Bob** (2026-09-22, Bob's wens). Op `mijnProfiel` tab "Nieuwsbrieven" veranderen de twee toggle-knoppen wel zichtbaar, maar er komt geen bevestiging. Toevoegen: op **beide** `FlutterFlowIconButton`s een tweede actie **Show Snack Bar** ná de bestaande `drupalRequest`. Teksten: `toggle_off` (aanmelden) → "Je bent nu aangemeld voor de nieuwsbrief", `toggle_on` (afmelden) → "Je bent nu afgemeld voor de nieuwsbrief". Snackbar-teksten krijgen géén i18n-sleutel (letterlijke string, net als de bestaande "Dit item staat nog in beoordeling"-snackbar op dezelfde pagina), dus geen EN-vertaling nodig. **Optioneel vervolg:** `drupalRequest` geeft bij een fout stil `[]` terug, dus de melding liegt bij een mislukte call — zie 134-B onderaan dit bestand |
+| **134** | Melding bij aan-/afmelden nieuwsbrief | **Claude — bezig** (sessie 2026-09-22, Bob gaf groen licht voor de builder) (2026-09-22, Bob's wens). Op `mijnProfiel` tab "Nieuwsbrieven" veranderen de twee toggle-knoppen wel zichtbaar, maar er komt geen bevestiging. Toevoegen: op **beide** `FlutterFlowIconButton`s een tweede actie **Show Snack Bar** ná de bestaande `drupalRequest`. Teksten: `toggle_off` (aanmelden) → "Je bent nu aangemeld voor de nieuwsbrief", `toggle_on` (afmelden) → "Je bent nu afgemeld voor de nieuwsbrief". Snackbar-teksten krijgen géén i18n-sleutel (letterlijke string, net als de bestaande "Dit item staat nog in beoordeling"-snackbar op dezelfde pagina), dus geen EN-vertaling nodig. **Optioneel vervolg:** `drupalRequest` geeft bij een fout stil `[]` terug, dus de melding liegt bij een mislukte call — zie 134-B onderaan dit bestand |
 | **G0.6** | Play-screenshots | ✅ Nieuwe set van 10 klaar (2026-09-19 avond). Alleen `tel-04-horeca.png` moet over zodra *Show Test Ads* uit staat |
 
 | **112** | Restje zoek-stad: lege API-call opruimen | **Eigenaar: Bob.** `SelectStateDropDownComponent` → Actions → On Page Load → *Conditional Action 5* (`gemeenteSelectId is set/non-empty`) → TRUE-tak → **Action 13, Custom Action `drupalRequest`** met url/sessionName/sessionId/token/body allemaal Unset. Staat sinds 2026-09-20 op **disabled**; kan weg via ⋮ → Delete Action. Vlak eronder staat **Conditional Action 16** (`apiGemeenteResultInitalize -> Succeeded`) met twee lege takken — mag in dezelfde moeite weg |
@@ -2219,7 +2219,7 @@ OneAll als client. Er verandert dus niets aan de Facebook-instellingen van de si
 
 | # | Wie | Wat |
 |---|---|---|
-| **130-A** | Bob | Upgrade naar Personal Advanced + controleer dat `uitgaanskrant.com` bij de allowed domains staat |
+| **130-A** | Bob | Upgrade naar Personal Advanced. ⚠️ **De upgrade-URL die Bob had (`/order/upgrade/billing-address/`) geeft een security-fout** — dat is een losse wizard-stap zonder `applicationid` en redirect weg. **Juiste route: Sites → uitgaanskrant.com → Subscription Plan → Change Plan** (`/applications/application/order/switch/plans/?applicationid=791421&subscription_planid=20`) → *Upgrade to Advanced*. Betaalmethode + factuuradres staan al goed. Let op: huidig plan is **Annual** Starter ($116,16/jaar, loopt tot 13-06-2027), dus de overstap wordt verrekend — niet de losse $34 |
 | **130-B** | ✅ **Besloten 2026-09-21** | **Automatisch account aanmaken.** De callback maakt zelf een Drupal-account op het *geverifieerde* e-mailadres van het netwerk; zonder geverifieerd e-mailadres weigeren we. Gebruikersnaam afleiden en op uniciteit controleren. `registration_method = manual` in de module blijft ongemoeid — dat geldt alleen voor de website |
 | **130-C** | ✅ **Besloten 2026-09-21** | **Geen iOS op korte termijn** → Apple-login overslaan. Play kent geen tegenhanger van richtlijn 4.8. De provider is een parameter in de URL, dus later bijzetten raakt de app-kant niet. Blijft open punt zodra iOS aan de beurt komt |
 | **130-D** | ✅ **Code klaar** (2026-09-21), Bob deployt | `custom.social_login_app.inc` — callback die de token inwisselt (hergebruikt `social_login_core_get_settings()` / `_do_api_request()` / `_get_user_for_user_token()` / `_get_uid_for_email()` / `_map_identity_token_to_user_token()`), inlogt met `user_login_finalize()` en de sessie onder de `state` in de cache-bin legt (TTL 5 min, eenmalig). `php -l` schoon op PHP 8.1. Staat in `~/tmp/` op aegir-o1 |
@@ -2275,7 +2275,7 @@ vóór de Play-inzending als 130 in de eerste release meegaat.
 
 ---
 
-## 🔔 134 · Melding bij aan-/afmelden nieuwsbrief · Eigenaar: **Bob**
+## 🔔 134 · Melding bij aan-/afmelden nieuwsbrief · Eigenaar: **Claude — bezig**
 
 **Wat er nu gebeurt** (`mijn_profiel_widget.dart` regels ~2285-2355): beide
 toggle-knoppen in de nieuwsbrievenlijst doen precies één actie —