Apps
The EMF Flask website is divided into several Flask apps.
Base
The base app is responsible for everything on the website which isn’t handled by other apps.
This includes the front page and all the info pages.
Users
Villages
Villages App
Village registration and management
Volunteer
This app provides functionality for managing volunteers during the event.
Volunteer Registration
Provided by volunteer.sign_up and volunteer.choose_roles, people who are interested in volunteering can register themselves and select the roles they want to do. Some roles
Shift Signup
Provided by volunteer.schedule, shows the user what shifts are currently available and allows them to either sign up for those shifts or cancel existing shifts.
The schedule view also includes some advanced filtering which is available to all users but is particularly intended for use by volunteer admins for quickly locating shifts that need more people.
Training
Some roles require a volunteer to be trained before they can sign up for any shifts. In most cases this is performed by having them go to some sort of training session, or just speaking to a team lead and being briefed, after which they’re marked as trained via the role admin pages.
In the case of bar roles we are legally required to show that our volunteer staff have been properly inducted into licensing law which we do via the forms in volunteer.bar_training.
Role Admin
Users assigned admin privileges for a role can see a list of volunteers signed up to current and upcoming shifts, allowing them to keep track of who should be present, who needs relieving, and who’s due to arrive soon. This view also allows marking volunteers as having arrived or not.
Volunteer Admin
Available to people with the volunteer:admin permission, these views allow management of role configuration such as descriptions and age requirements, shift timings, and tracking down volunteer information.
Volunteer admins also have access to some configuration endpoints. These should only be used if you know what you’re doing, there is a strong potential for data loss.
/volunteer/init-shifts loads shift configuration and creates the required database records.
/volunteer/init-workshop-shifts creates workshop manager shifts that coincide with scheduled workshops.
/volunteer/clear-data available only when debug mode is enabled, deletes all volunteer related data ready for reload.
Configuration Flags
The following flags are used to determine which parts of the public facing volunteer system are visible to people, they get set manually once the neccessary prep has been done.
VOLUNTEERS_SIGNUP = True enables volunteer registration functionality. This should only be enabled once all teams have confirmed which volunteer roles they want to fill.
VOLUNTEERS_SCHEDULE = True enables selection of specific shifts. This should only be enabled once all teams have confirmed their shift preferences.
If neither of these flags are set then going to /volunteer or clicking the Volunteer menu item will redirect people to some static content about volunteering.
Schedule
This app displays what talks are happening from the CfP system. A deceptively complex task.
The schedule for an event can be in one of four modes:
There’s no schedule yet, why not look at previous years’?
There are talks accepted, but they aren’t scheduled yet - show them in a list and maybe let the user favourite them to assist our scheduling algorithm.
There’s actually a schedule and you should probably work out which talks you’re going to.
The event has finished, and we’re displaying an archived schedule.
Configuration Flags
The schedule app uses two configuration flags to determine how to render the schedule for the current event (these don’t affect historic events).
LINE_UP = True indicates that the approved talks should be displayed as a list
SCHEDULE = True indicates that the full schedule browser should be displayed
If neither of these flags are enabled, links will be displayed to schedules for previous events.
Tickets
Tickets App
This handles users selecting tickets, entering their details, and choosing a payment method. Users are then passed onto the appropriate view in the payment app to enter their payment details.