Loading
Issue #3606607: Fix the webform back-button booking loop
Fixes the webform back-button booking loop. Three root causes, one flow:
- Resume by node, not a fixed token id. When the flow re-enters the form node with a fresh token (a loop, e.g. a step routing "back" to the form), the reopened submission still names the original, now-consumed token.
OrchestraResumeHandlernow resumes the token parked on that node now (InteractionResolver::parkedTokenAtNode()), so a re-submit after going back advances instead of looping on the form. - The binding element now forces prepopulation. Webform tracks an element for prepopulation from its stored
#prepopulateproperty, not the plugin default property (which only seeds the element-edit form), so theorchestra_interactionelement never captured the capability token from the dispatcher link. Forcing it ininitialize()makes the element genuinely zero-config. - Visitor outcomes (back, cancel) resume in one click. The signed capability token in the link is the gate, so the confirmation form is removed:
InteractionController::signal()verifies the token, checks the outcome is one the parked step allows, and resumes immediately.
Adds a functional test driving the full dispatcher to webform to resume to back to resubmit path over HTTP, plus kernel coverage of the loop re-entry and the one-click signal action.