diff --git a/buzz/api/__init__.py b/buzz/api/__init__.py index 2e657fd..0181841 100644 --- a/buzz/api/__init__.py +++ b/buzz/api/__init__.py @@ -317,6 +317,14 @@ def get_event_booking_data(event_route: str) -> dict: return data +def validate_custom_fields(custom_fields_data: dict, phone_field_map: dict) -> None: + for field_name, field_value in custom_fields_data.items(): + if field_value and field_name in phone_field_map: + frappe.utils.validate_phone_number_with_country_code( + str(field_value), phone_field_map[field_name] + ) + + @frappe.whitelist(allow_guest=True) # nosemgrep: frappe-semgrep-rules.rules.security.guest-whitelisted-method def process_booking( attendees: list[dict], @@ -416,6 +424,14 @@ def process_booking( "fieldtype": field_def["fieldtype"], }, ) + + phone_fields = frappe.db.get_all( + "Buzz Custom Field", + filters={"event": event, "enabled": 1, "fieldtype": "Phone"}, + fields=["fieldname", "label"], + ) + phone_map = {cf["fieldname"]: cf["label"] for cf in phone_fields} + if event_doc.category == "Webinars": for attendee in attendees: if not (attendee.get("last_name") or "").strip(): @@ -440,6 +456,8 @@ def process_booking( ) custom_fields = attendee.get("custom_fields", {}) + if custom_fields: + validate_custom_fields(custom_fields, phone_map) attendee_row = { "first_name": first_name, "last_name": last_name, diff --git a/buzz/api/forms.py b/buzz/api/forms.py index 8eb95ff..72c7b28 100644 --- a/buzz/api/forms.py +++ b/buzz/api/forms.py @@ -154,9 +154,8 @@ def get_auto_set_fields(form_doctype: str): def get_custom_form_data(event_route: str, form_route: str) -> dict: event_doc, form_row = validate_custom_form(event_route, form_route) form_doctype = form_row.form_doctype - allow_guest_submission = sbool(event_doc.allow_guest_booking) - if not allow_guest_submission and frappe.session.user == "Guest": + if sbool(form_row.login_required) and frappe.session.user == "Guest": frappe.throw(_("Please log in to submit this form"), frappe.AuthenticationError) event_data = { @@ -239,7 +238,7 @@ def submit_custom_form( event_doc, form_row = validate_custom_form(event_route, form_route) form_doctype = form_row.form_doctype - if not event_doc.allow_guest_booking and frappe.session.user == "Guest": + if sbool(form_row.login_required) and frappe.session.user == "Guest": frappe.throw(_("Please login to submit this form"), frappe.AuthenticationError) if form_row.auto_close_at and get_datetime(form_row.auto_close_at) < now_datetime(): diff --git a/buzz/events/doctype/buzz_event_form/buzz_event_form.json b/buzz/events/doctype/buzz_event_form/buzz_event_form.json index b1b7662..39e5d3a 100644 --- a/buzz/events/doctype/buzz_event_form/buzz_event_form.json +++ b/buzz/events/doctype/buzz_event_form/buzz_event_form.json @@ -10,6 +10,7 @@ "route", "copy_to_clipboard", "publish", + "login_required", "column_break_main", "auto_close_at", "section_break_success", @@ -42,6 +43,13 @@ "in_list_view": 1, "label": "Publish" }, + { + "default": "0", + "fieldname": "login_required", + "fieldtype": "Check", + "in_list_view": 1, + "label": "Login Required?" + }, { "fieldname": "column_break_main", "fieldtype": "Column Break" @@ -92,7 +100,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2026-04-14 19:33:17.779162", + "modified": "2026-05-21 16:15:20.760801", "modified_by": "Administrator", "module": "Events", "name": "Buzz Event Form", diff --git a/buzz/events/doctype/buzz_event_form/buzz_event_form.py b/buzz/events/doctype/buzz_event_form/buzz_event_form.py index 9f9245b..24e95ce 100644 --- a/buzz/events/doctype/buzz_event_form/buzz_event_form.py +++ b/buzz/events/doctype/buzz_event_form/buzz_event_form.py @@ -16,6 +16,7 @@ class BuzzEventForm(Document): closed_message: DF.SmallText | None closed_title: DF.Data | None form_doctype: DF.Link + login_required: DF.Check parent: DF.Data parentfield: DF.Data parenttype: DF.Data diff --git a/dashboard/src/components/LoginDialog.vue b/dashboard/src/components/LoginDialog.vue index 7e818f4..c1b510d 100644 --- a/dashboard/src/components/LoginDialog.vue +++ b/dashboard/src/components/LoginDialog.vue @@ -94,7 +94,7 @@ {{ __("Don't have an account?") }}