Issue #3608937: Let notifications carry token contexts (OrchestraNotificationEvent::$tokenData) so channels can render custom tokens
Closes #3608937
Problem
A token-rendering notification channel (orchestra_easy_email) can only resolve Orchestra's own token types: [orchestra:*] and [orchestra-notification:*]. A dispatcher that wants its own domain tokens in a template has no clean way to supply the data (short of polluting process variables or overloading the notification params).
Changes
OrchestraNotificationEvent: add an optionaltokenDataparameter, a map of token type to value/entity the dispatcher supplies.orchestra_easy_email: merge$event->tokenDatainto the token-replacement data during prerender; Orchestra's ownorchestraandorchestra-notificationtypes keep precedence on a key collision, so a dispatcher can never shadow[orchestra:*].orchestra_mailis unchanged: it renders no tokens (it builds the message straight from params), so it simply ignorestokenData.- Kernel test: a token supplied through
tokenDataresolves in the sent email, with a control asserting it does not resolve when nothing supplies it.
This lets any *_notification module surface its own tokens in a template, e.g. a booking dispatcher passing its order so a template can use that order's tokens.