Skip to content

Commit

Permalink
Add signals to intercept regform field processing
Browse files Browse the repository at this point in the history
  • Loading branch information
OmeGak authored and ThiefMaster committed Sep 30, 2020
1 parent f7a7003 commit 2d7eaad
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
8 changes: 8 additions & 0 deletions CHANGES.rst
Expand Up @@ -19,6 +19,14 @@ Bugfixes
- Only show the warning about draft mode in a conference if it actually has any
contributions or timetable entries

Internal Changes
^^^^^^^^^^^^^^^^

- Add ``registration_form_wtform_created`` signal and send form data in
``registration_created`` and ``registration_updated`` signals (:pr:`4642`,
thanks :user:`omegak`)


Version 2.3
-----------

Expand Down
11 changes: 11 additions & 0 deletions indico/core/signals/event/registration.py
Expand Up @@ -30,18 +30,29 @@

registration_created = _signals.signal('registration-created', """
Called when a new registration has been created. The `sender` is the `Registration` object.
The `data` kwarg contains the form data used to populate the registration fields.
The `management` kwarg is set to `True` if the registration was created from the event management area.
""")

registration_updated = _signals.signal('registration-updated', """
Called when a registration has been updated. The `sender` is the `Registration` object.
The `data` kwarg contains the form data used to populate the registration fields.
The `management` kwarg is set to `True` if the registration was updated from the event management area.
""")

registration_deleted = _signals.signal('registration-deleted', """
Called when a registration is removed. The `sender` is the `Registration` object.
""")

registration_form_wtform_created = _signals.signal('registration_form_wtform_created', """
Called when a the wtform is created for rendering/processing a registration form.
The sender is the `RegistrationForm` object. The generated WTForm class is
passed in the `wtform_cls` kwarg and it may be modified. The `registration`
kwarg contains a `Registration` object when called from registration edit
endpoints. The `management` kwarg is set to `True` if the registration form is
rendered/processed from the event management area.
""")

registration_form_created = _signals.signal('registration-form-created', """
Called when a new registration form is created. The `sender` is the
`RegistrationForm` object.
Expand Down
6 changes: 4 additions & 2 deletions indico/modules/events/registration/util.py
Expand Up @@ -161,6 +161,8 @@ def validate_email(self, field):

field_impl = form_item.field_impl
setattr(RegistrationFormWTF, form_item.html_field_name, field_impl.create_wtf_field())
signals.event.registration_form_wtform_created.send(regform, registration=registration, management=management,
wtform_cls=RegistrationFormWTF)

RegistrationFormWTF.modified_registration = registration
return RegistrationFormWTF
Expand Down Expand Up @@ -235,7 +237,7 @@ def create_registration(regform, data, invitation=None, management=False, notify
invitation.registration = registration
registration.sync_state(_skip_moderation=skip_moderation)
db.session.flush()
signals.event.registration_created.send(registration, management=management)
signals.event.registration_created.send(registration, management=management, data=data)
notify_registration_creation(registration, notify_user)
logger.info('New registration %s by %s', registration, user)
registration.log(EventLogRealm.management if management else EventLogRealm.participants,
Expand Down Expand Up @@ -286,7 +288,7 @@ def modify_registration(registration, data, management=False, notify_user=True):
old_price, registration.price)
if personal_data_changes:
signals.event.registration_personal_data_modified.send(registration, change=personal_data_changes)
signals.event.registration_updated.send(registration, management=management)
signals.event.registration_updated.send(registration, management=management, data=data)
notify_registration_modification(registration, notify_user)
logger.info('Registration %s modified by %s', registration, session.user)
registration.log(EventLogRealm.management if management else EventLogRealm.participants,
Expand Down

0 comments on commit 2d7eaad

Please sign in to comment.