Skip to content

Move initial custom form creation to server #8205

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion app/api/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@
NotFoundError,
UnprocessableEntityError,
)
from app.api.helpers.events import create_custom_forms_for_attendees
from app.api.helpers.events import (
create_custom_forms_for_attendees,
create_custom_forms_for_speakers,
create_custom_forms_for_sessions,
)
from app.api.helpers.export_helpers import create_export_job
from app.api.helpers.permission_manager import has_access, is_logged_in
from app.api.helpers.permissions import jwt_required, to_event_id
Expand Down Expand Up @@ -396,6 +400,12 @@ def after_create_object(self, event, data, view_kwargs):
# create custom forms for compulsory fields of attendee form.
create_custom_forms_for_attendees(event)

# create custom forms for compulsory fields of speakers form.
create_custom_forms_for_speakers(event)

# create custom forms for compulsory fields of sessions form.
create_custom_forms_for_sessions(event)

if event.state == Event.State.PUBLISHED and event.schedule_published_on:
start_export_tasks(event)

Expand Down
115 changes: 78 additions & 37 deletions app/api/helpers/events.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
from app.api.helpers.db import save_to_db
from app.models.custom_form import CustomForms
from app.api.helpers.utilities import to_snake_case
from app.models.custom_form import (
CustomForms,
ATTENDEE_FORM,
SPEAKER_FORM,
SESSION_FORM,
CUSTOM_FORM_IDENTIFIER_NAME_MAP,
)


def create_custom_forms_for_attendees(event):
Expand All @@ -10,42 +17,76 @@ def create_custom_forms_for_attendees(event):
"""
# common values
form = 'attendee'
is_required = True
is_included = True
is_fixed = True
event_id = event.id
form_dict = CUSTOM_FORM_IDENTIFIER_NAME_MAP[form]

for x in form_dict:
form_type = 'email' if x == 'email' else 'text'

is_required = bool(ATTENDEE_FORM[to_snake_case(x)]['require'])
is_included = bool(ATTENDEE_FORM[to_snake_case(x)]['include'])

form_name = CustomForms(
form=form,
event_id=event_id,
type=form_type,
is_required=is_required,
is_included=is_included,
field_identifier=x,
)
save_to_db(form_name, x.upper() + 'Form saved')


def create_custom_forms_for_speakers(event):
"""
Create and save the custom forms for the required fields of speakers.
:param event:
:return:
"""
# common values
form = 'speaker'
event_id = event.id

form_dict = CUSTOM_FORM_IDENTIFIER_NAME_MAP[form]
for x in form_dict:
form_type = 'email' if x == 'email' else 'text'

is_required = bool(SPEAKER_FORM[to_snake_case(x)]['require'])
is_included = bool(SPEAKER_FORM[to_snake_case(x)]['include'])

form_name = CustomForms(
form=form,
event_id=event_id,
type=form_type,
is_required=is_required,
is_included=is_included,
field_identifier=x,
)
save_to_db(form_name, x.upper() + 'Form saved')


def create_custom_forms_for_sessions(event):
"""
Create and save the custom forms for the required fields of sessions.
:param event:
:return:
"""
# common values
form = 'session'
event_id = event.id
form_type = 'text'

first_name_form = CustomForms(
form=form,
is_required=is_required,
is_included=is_included,
is_fixed=is_fixed,
event_id=event_id,
type=form_type,
field_identifier='firstname',
)

last_name_form = CustomForms(
form=form,
is_required=is_required,
is_included=is_included,
is_fixed=is_fixed,
event_id=event_id,
type=form_type,
field_identifier='lastname',
)

email_form = CustomForms(
form=form,
is_required=is_required,
is_included=is_included,
is_fixed=is_fixed,
event_id=event_id,
type='email',
field_identifier='email',
)

save_to_db(first_name_form, 'First name form saved')
save_to_db(last_name_form, 'Last name form saved')
save_to_db(email_form, 'Email form saved')
form_dict = CUSTOM_FORM_IDENTIFIER_NAME_MAP[form]
for x in form_dict:
is_required = bool(SESSION_FORM[to_snake_case(x)]['require'])
is_included = bool(SESSION_FORM[to_snake_case(x)]['include'])

form_name = CustomForms(
form=form,
event_id=event_id,
type=form_type,
is_required=is_required,
is_included=is_included,
field_identifier=x,
)
save_to_db(form_name, x.upper() + 'Form saved')
38 changes: 30 additions & 8 deletions app/models/custom_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,29 +12,47 @@
"short_abstract": {"include": 1, "require": 0},
"long_abstract": {"include": 0, "require": 0},
"comments": {"include": 1, "require": 0},
"track": {"include": 0, "require": 0},
"track": {"include": 1, "require": 1},
"session_type": {"include": 0, "require": 0},
"language": {"include": 0, "require": 0},
"slides": {"include": 1, "require": 0},
"video": {"include": 0, "require": 0},
"audio": {"include": 0, "require": 0},
"slides_url": {"include": 0, "require": 0}, # needs to be removed
"video_url": {"include": 0, "require": 0},
"audio_url": {"include": 0, "require": 0},
"level": {"include": 0, "require": 0},
"website": {"include": 1, "require": 0},
"facebook": {"include": 0, "require": 0},
"twitter": {"include": 0, "require": 0},
"github": {"include": 0, "require": 0},
"instagram": {"include": 0, "require": 0},
"mastodon": {"include": 0, "require": 0},
"linkedin": {"include": 0, "require": 0},
"gitlab": {"include": 0, "require": 0},
}

SPEAKER_FORM = {
"name": {"include": 1, "require": 1},
"email": {"include": 1, "require": 1},
"photo": {"include": 1, "require": 0},
"photo_url": {"include": 1, "require": 0},
"organisation": {"include": 1, "require": 0},
"position": {"include": 1, "require": 0},
"country": {"include": 1, "require": 0},
"address": {"include": 0, "require": 0},
"country": {"include": 0, "require": 0},
"city": {"include": 0, "require": 0},
"gender": {"include": 0, "require": 0},
"short_biography": {"include": 1, "require": 0},
"long_biography": {"include": 0, "require": 0},
"mobile": {"include": 0, "require": 0},
"website": {"include": 1, "require": 0},
"facebook": {"include": 0, "require": 0},
"twitter": {"include": 1, "require": 0},
"twitter": {"include": 0, "require": 0},
"github": {"include": 0, "require": 0},
"instagram": {"include": 0, "require": 0},
"mastodon": {"include": 0, "require": 0},
"linkedin": {"include": 0, "require": 0},
"heard_from": {"include": 0, "require": 0},
"sponsorship_required": {"include": 0, "require": 0},
"speaking_experience": {"include": 0, "require": 0},
}

ATTENDEE_FORM = {
Expand All @@ -59,9 +77,13 @@
"twitter": {"include": 1, "require": 0},
"facebook": {"include": 0, "require": 0},
"github": {"include": 1, "require": 0},
"linkedin": {"include": 0, "require": 0},
"instagram": {"include": 0, "require": 0},
"gender": {"include": 0, "require": 0},
"age_group": {"include": 0, "require": 0},
"accept_video_recording": {"include": 0, "require": 0},
"accept_video_recording": {"include": 0, "require": 1},
"accept_share_details": {"include": 0, "require": 0},
"accept_receive_emails": {"include": 0, "require": 0},
}

session_form_str = json.dumps(SESSION_FORM, separators=(',', ':'))
Expand All @@ -80,7 +102,7 @@
"sessionType": "Session Type",
"level": "Level",
"language": "Language",
"slidesUrl": "Slide",
"slidesUrl": "Slide", # needs to be removed
"slides": "Slides",
"videoUrl": "Video",
"audioUrl": "Audio",
Expand Down
24 changes: 22 additions & 2 deletions tests/all/integration/api/helpers/test_events.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import unittest

from app.api.helpers.db import get_count, save_to_db
from app.api.helpers.events import create_custom_forms_for_attendees
from app.api.helpers.events import (
create_custom_forms_for_attendees,
create_custom_forms_for_speakers,
create_custom_forms_for_sessions,
)
from app.models.custom_form import CustomForms
from tests.all.integration.utils import OpenEventTestCase
from tests.factories.event import EventFactoryBasic
Expand All @@ -14,7 +18,23 @@ def test_should_create_attendee_forms(self):
event = EventFactoryBasic()
save_to_db(event)
create_custom_forms_for_attendees(event)
assert get_count(CustomForms.query) == 3
self.assertEqual(get_count(CustomForms.query), 28)

def test_should_create_speaker_forms(self):
"""Method to test custom forms for speakers of an event."""
with self.app.test_request_context():
event = EventFactoryBasic()
save_to_db(event)
create_custom_forms_for_speakers(event)
self.assertEqual(get_count(CustomForms.query), 22)

def test_should_create_session_forms(self):
"""Method to test custom forms for sessions of an event."""
with self.app.test_request_context():
event = EventFactoryBasic()
save_to_db(event)
create_custom_forms_for_sessions(event)
self.assertEqual(get_count(CustomForms.query), 21)


if __name__ == '__main__':
Expand Down