/event_registration

poor man's event registration setup

Primary LanguagePHPGNU Affero General Public License v3.0AGPL-3.0

Poor Man's Registration System

event registration pic

This is a very pedestrian collection of scripts to handle registrations for events. It is very simple and very fast to set up. It was born out of the need for a registration mechanism that dynamically changes state (with reaching certain thresholds of the number of registrations for sub-events).

The design is also determined by an institutional CMS that is very limiting. The only requirement for the CMS that presents the registration is that you can include iFrames. The Silva CMS used by ETH offers this. The new Adobe AEM CMS to which ETH is transitioning should also offer this, but practical experience is unavailable so far.

We have successfuly used this setup for Klimarunde 2013 and Klimarunde 2014 with more than 400 participants each.

The systems (ab)uses an IMAP mail account, to which registration mails are automatically send, as a database of registrations. This may seem weird, but it saved us from implementing a server-side database of registrations. IMAP is good enough as a database, you can easily remove spurious registrations by simply deleting an email, manually register people by sending an email, and also your IT-department takes care of the backup ;).

Requirements

  • Ability to include iFrames in the institutional CMS
  • A webserver that can serve PHP
  • An IMAP email account
  • A machine running the system ("exec_host") that has bash, cron, sed, awk, R and OfflineIMAP installed.
  • Passwordless ssh login from exec_host to the webserver

Alternatives

IT Services at ETH Zurich offers the Evento Booking System. This is a very useful service, in particular if you need credit card processing. "Evento Light" is cheap, but limted to ca. 150 participants and you'll need quite some time in advance to have it ready.

There are commercial offers such as Eventbrite. However, your potential participants might take issue if you require them to give their personal data to the advertising industry. Also using such tools might be in violation of both, ETH guidelines and Swiss data protection law.

Setup

Note: The "landclim" branch contains a modification for a different event. Have a look to see how the registration form, the filtering script, the response-emails, and thresholds for different participant limits can be accomodated to differing requirements.

  1. clone the git repository
  2. make a directory on the webserver ("WEBSERVER_REGISTRATION_PATH") that holds the registration form.
  3. make a directory on the webserver ("WEBSERVER_RESULTPATH") from which info about the state of registrations are presented (this can be also on a different webserver).
  4. copy the files in "webserver/registration_form" into WEBSERVER_REGISTRATION_PATH and the one in "webserver/result_html" into WEBSERVER_RESULTPATH.
  5. copy the files in exec_machine to exec_host.
  6. Carry out the configurations described below (webserver and exec_machine), that refer to hostnames and paths.
  7. Do a test-registration, run getregistrations.sh, check whether the webpage at WEBSERVER_RESULTPATH/kr_registrations.html shows up as expected and the "download table" link lets you download, well, the table.
  8. Customize the variables that are specific for your event as described below (webserver and exec_machine).
  9. Embed the registration form at WEBSERVER_REGISTRATION_PATH/registration_form.php into your official event-website using an IFrame.
  10. Run getregistrations.sh via cron job.

Files

webserver

registration_form.php:
The registration form proper. You might want to translate the error messages in the function validate_form(). Change the input form (lines 49-53) according to your requirements.

register.php:
Customize the values in the configuration section on top of the file.

confirmation_mail_0.txt and confirmation_mail_1.txt:
Mailtext send in confirmation mails to registrands. The system switches from one to the other upon reaching a threshold that can be set in exec_machine/graphit.R. Modify the text; make use of the placeholders ("$participant\name", ...).

isfull.txt
Initially contains "0". Is overwritten with "1" once participant limit is reached.

kr_registrations.html
Initially the only file in WEBSERVER_RESULT_PATH. Just contains html to display the plot (gfx.svg) and a download link for the table of registrations (registrations.csv). Modify to make that nicer ;).

exec_machine

offlineimaprc:
Configuration for offlineimap. Edit to include your mail specifications in the "[DEFAULT]" section.

getregistrations.sh:
The main script being run by cron. Customize the various hostnames and paths defined at the top of the file.

sedextract.sh
Filters registration emails into a csv -file. Depending on the contents of your registration form you will have to customize the part that extracts the data (below line 33).

graphit.R:
Checks whether the participation limit is reached, in which case it modifies "isfull.txt" on the webserver. Produces a graph that shows the current registration data. Customize the variables set in the CONFIGURE section at the top of the file.

Feedback

If you use this setup, you will likely extend & improve the scripts. I would be glad if you could contribute back via email or pull-request.