Contest Pre-Registration

History

The standalone Automated Contest Registration System (ACRS) was sunsetted at the end of the 2016 competition season and replaced in 2018 by a new feature set in the www.iac.org web site.

Overview

Note: This page describes the pre-registration process. For additional context, please read about the overall contest lifecycle.

Contest pre-registration sounds easy: fill out a form and bada bing bada boom you're all set! Um, er... not so fast, folks.

What It Does

Here are the high-level and derived requirements:

  1. Allow current members to pre-register for any upcoming contest
    1. For each upcoming contest on the contests page, provide a link to the corresponding pre-registration page iff the user is a current member.
    2. When displaying a contest node, provide a link to allow the user to pre-register if the contest is eligible
    3. Allow current members to create a pre-registration record.
    4. Prevent users from creating more than one pre-registration record for a given contest.
    5. Populate registration fields (address, phone, category, etc.) from the user's profile, subject to override by the user
    6. Link the pre-registration record to both the contest and the user
    7. Allow pre-registered contestants to reserve a practice slot (Nationals only, more details here)
  2. Handle pre-payment (optional for each contest; if enabled, optional for each registrant)
    1. Contest organizer enables pre-payment by populating their chapter's PayPal account ID (email address) in the Contest record
      1. Options are governed by taxonomy entries
    2. Contest organizer defines various charges (registration fee, meals, overnight hangar, merchandise, etc.)
    3. The system displays the charges to the registrant
    4. The registrant selects items from the list
    5. The system totals up the various items that the registrant has selected
    6. The system generates a PayPal button that will charge the registrant accordingly
  3. Allow contest organizers to retrieve registration info
    1. Pre-print entry forms for pre-registered users
      • Retrieve data and insert it into PDF forms (via the PHP fpdf library)
      • Download the resulting PDF(s)
    2. Download spreadsheet of registrants w/amts paid
    3. Practice slot assignments

Step-by-Step

The first step in the process is creating a Contest listing. The author can set the pre-registration deadline and PayPal account ID if desired. They can also enter the price of the registration fee, meals, t-shirts, etc. in the Contest Fees section of the form.

When users visit the contest listing page or an individual contest page (sample), they will see either a blue button with the word Register, a blue button with the words Edit Registration (if they've already registered for that event), a link to the join/renew page labeled Current Members Only (if they're a lapsed member), or the words Reg. Closed if pre-registration is not allowed. Those labels are produced by the _iac_pre_reg_link function in the IAC module (/usr/local/share/drupal7/sites/www.iac.org/modules/iac/iac.module).

Registration is deemed to be available if:

  • The current date is before the pre-registration deadline, or
  • The pre-registration deadline is undefined and the current date is before the practice/registration date, or
  • If the practice/registration date is undefined and the current date is before the contest start date.

If the user clicks on Register and they're not logged they're redirected to the login page. Once logged in, if they click on Register or Edit Registration, the system presents them with an online registration form. That form creates or updates a new node type, Contest Pre-Registration. Each pre-registration node has Drupal Entity References (think: RDBMS relations) to the current user's record and the contest node. The remaining fields capture the information that appears on the contest registration forms (home address, aircraft type, insurance, etc.) The default value for each of those fields is pulled from the member's profile page, allowing them to minimize the amount of data they need to enter.

When the user saves the pre-registration record it triggers a Drupal rule that sends an email to the person who created the contest listing (presumed to be the registrar) and the Contest Director, informing them of the new registration. It then checks to see if the Paypal ID field is populated in the contest record. If so, it redirects the user to a PHP page that invokes the IAC module's _iac_contest_fees function, which tallies up the fees and generates a PayPal button for the corresponding amount.  The ID of the Contest Pre-Registration node is passed to the PHP page as a URL parameter. (The user will see an error message if that parameter is missing.)

Finally, there is a Drupal View that lists all pre-registered users. It also has a CSV "display" that lets IAC staff download the information into a spreadsheet.

This feature has a few shortcomings:

  • The web site doesn't receive feedback from PayPal when payment is sent. There's no obvious solution for this because we expect the host chapter to supply their own PayPal account ID which PayPal won't -- for obvious security reasons -- give us any access to. IAC could theoretically collect and disburse payments for each chapter, but that's a logistical and liability nightmare that we want no part of.
  • It does not print registration forms.
  • The taxonomy list of fee types is not customizable by the end users. That said, I think we've done a pretty good job of identifying all of the types of fees that contests typically charge.