- Move 29 display-only event fields (subtitles, audience, tags, prices,
price types, organizer) from columns into the jsonData storage; fields
used for filtering, joins and calculations stay real columns
- Add EventFieldsToVirtualMigration, which copies the values and drops
the columns on contao:migrate
- Read and write the fields in the import, the preview and the booking
through EventRowCodec; other bundles' keys in the storage are kept
- Validate prices in a save callback instead of the percent check that
rejected every price above 100; accept a decimal comma
- Do not report events as changed after a backend save: ignore the
spelling of HTML entities in teaser and topics and the order of the
speakers
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>