🎉 Improvements
- Allow filtering abstracts by custom fields having no value (#5033, #5034)
- Add support for syncing email addresses when logging in using external accounts (#5035)
- Use more space-efficient QR code version in registration tickets (#5052)
- Improve user experience when accessing an event restricted to registered participants while not logged in (#5053)
- When searching external users, prefer results with a name in case of multiple matches with the same email address (#5066)
- Show program codes in additional places (#5075)
- Display localized country names (#5070, #5076)
🐛 Bugfixes
- Show correct placeholders in date picker fields (#5022)
- Correctly preselect the default currency when creating a registration form
- Do not notify registrants when a payment transaction is created in "pending" state
- Keep the order of multi-choice options in registration summary (#5020, #5032)
- Correctly handle relative URLs in PDF generation (#5042, #5044)
- Render markdown in track descriptions in PDF generation (#5043, #5044)
- Fix error when importing chairpersons from an existing event (#5047)
- Fix broken timetable entry permalinks when query string args are present (#5049)
- Do not show "Payments" event management menu entry for registration managers (#5072)
- Replace some hardcoded date formats with locale-aware ones (#5059, #5071)
- Clone the scientific program description together with tracks (#5077)
- Fix database error when importing registrations to an event that already contains a deleted registration form with registrations (#5078)
🔧 Internal Changes
- Add
event.before_check_registration_email
signal (#5021, thanks @OmeGak) - Do not strip image maps in places where HTML is allowed (#5026, thanks @bpedersen2)
- Add
event.registration.after_registration_form_clone
signal (#5037, thanks @vasantvohra) - Add
registration-invite-options
template hook (#5045, thanks @vasantvohra) - Fix Typeahead widget not working with extra validators (#5048, #5050, thanks @jbtwist)