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 optional tokenData parameter, a map of token type to value/entity the dispatcher supplies.
  • orchestra_easy_email: merge $event->tokenData into the token-replacement data during prerender; Orchestra's own orchestra and orchestra-notification types keep precedence on a key collision, so a dispatcher can never shadow [orchestra:*].
  • orchestra_mail is unchanged: it renders no tokens (it builds the message straight from params), so it simply ignores tokenData.
  • Kernel test: a token supplied through tokenData resolves 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.

Merge request reports

Loading