feat: back Buzz Events with Zoom Meetings - #292
Merged
Conversation
* feat: back Buzz Events with Zoom Meetings (create, sync, ticket registration) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * ci: install zoom_integration app for server tests Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * refactor!: follow Zoom Session Registration rename zoom_integration renamed Zoom Webinar Registration to Zoom Session Registration. Point the Event Ticket custom field, its creation in install.py, the registration created on ticket submit and get_ticket_details at the new name, and rename the field itself to zoom_session_registration. rename_field copies values into a field that must already exist, and the after_migrate hook that creates our custom fields runs after patches, so the patch calls create_zoom_integration_custom_fields() first, then copies, then drops the old Custom Field. The old column is left for `bench trim-tables`. Requires zoom_integration to be migrated first: until it is, the custom field points at a doctype that does not exist yet. The dashboard is untouched - get_ticket_details still returns zoom_join_url, zoom_webinar and zoom_meeting under the same keys. BREAKING CHANGE: Event Ticket.zoom_webinar_registration is now zoom_session_registration. Any REST read, custom report or client script naming the old fieldname breaks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(events): group Zoom create/view actions on Buzz Event Move the single "Create Webinar on Zoom" button into a "Create on Zoom" group and add the meeting equivalents, so an event can be backed by either a Zoom Webinar or a Zoom Meeting from the form. Viewing a meeting resolves zoom_link off the Zoom Meeting record rather than building a URL, since Zoom Meeting is named by hash and the docname is not the Zoom id. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * refactor!: follow the Zoom session dynamic reference Zoom Session Registration now carries reference_doctype + reference_name instead of separate webinar and meeting links. Event Ticket builds that pair from whichever the event has, and get_ticket_details returns zoom_reference_doctype / zoom_reference_name in place of zoom_webinar / zoom_meeting. The Buzz Event fields stay two separate links for now; folding those in wants a UX pass on the create/view buttons first. "View Meeting" drops the round-trip that fetched zoom_link. It existed because Zoom Meeting used hash naming; the docname is the Zoom meeting ID now, so the URL is built the same way as the webinar one. BREAKING CHANGE: get_ticket_details no longer returns zoom_webinar or zoom_meeting. Requires zoom_integration with the dynamic session reference. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat(events): pick the Zoom action from the event category Buzz Events could only be backed by a Zoom Webinar: the desk showed a "Create on Zoom" group holding both a webinar and a meeting button, and everything keyed off the literal category name "Webinars". A new "Zoom Meeting" category picks the meeting path instead. Only one session type applies to an event now, so the button group collapses to a single button labelled for that type -- "Create Webinar on Zoom" or "Create Meeting on Zoom", and the matching View button once created. The category name was hardcoded in eight places, and a second session type would have doubled that, so the mapping now lives in one constant per layer: ZOOM_BACKED_CATEGORIES in buzz/utils.py, ZOOM_SESSION_BY_CATEGORY in buzz_event.js, and isZoomBackedCategory in the dashboard. The two depends_on expressions stay inline because eval strings cannot import. Behaviour that was webinar-only now applies to both, since Zoom needs the same things either way: a last name on every registrant, attach_email_ticket off by default, and the free-event checkbox. isWebinar becomes isZoomEvent in the booking form, which is what it actually meant. create_event_categories is called on migrate so the new category reaches existing sites; the insert is ignore_if_duplicate, so re-running it only fills in what is missing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * refactor!: rename free_webinar to free_event The flag hides pricing, payment sections and the ticket type picker. None of that is webinar-specific, and it now applies to Zoom Meeting events too, so the name was wrong on two counts. Both doctypes rename in one patch. Event Proposal maps onto Buzz Event through get_mapped_doc, which matches on fieldname with no field_map, so renaming one side alone would have stopped carrying the flag over without raising anything. A test covers that carry-over. SuccessMessage took an isWebinar prop fed by this flag; it selects registration wording over booking wording, so it becomes isRegistration. BREAKING CHANGE: the booking payloads return free_event instead of free_webinar. API clients reading the old key must be updated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test: stop the ticket webinar test from needing a live Zoom token Zoom Webinar fetches its own token rather than going through api.py, so patching `requests` alone left the token call live. It passed locally, where credentials exist, and failed in CI where they do not. Uses mock_zoom_post, which patches both, matching the fix already applied to the zoom_integration tests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> (cherry picked from commit f3ced3f)
harshtandiya
approved these changes
Jul 27, 2026
harshtandiya
enabled auto-merge
July 27, 2026 13:20
harshtandiya
disabled auto-merge
July 27, 2026 13:21
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated backport of #288 to
main.