Wednesday, August 24, 2011 - 10:28
Written by

In May, Giant Rabbit relaunched CompassPoint Nonprofit Services’ website and CRM, transitioning them away from a proprietary CMS and CRM to a Drupal/CiviCRM solution.  We came across a lot of unique requirements and challenges throughout the transition process.  This post will focus on one feature that required significant customizations to CiviCRM:  A multiple event registration shopping cart.


The Goal

CompassPoint offers a large selection of workshops and trainings for nonprofits throughout the year.  On their old proprietary platform, individuals were able to add events to a shopping cart and pay for them in a single transaction.  In addition to their workshop offerings, CompassPoint also organizes a number of conferences throughout the year, with each conference containing a number of sessions for the attendee to choose from, organized by time slots.  It was decided that both of these features were “must-haves” for the new Drupal/CiviCRM platform we were transitioning to.


The Solution

When we decide to make heavy customizations to CiviCRM for one of our clients, we always do a cost-benefit analysis to ensure that whatever solution we implement gives our clients the most amount of functionality for the least amount of investment.  Since CiviCRM releases updates on a regular basis, we wanted to ensure that our solution could flow with those updates, rather than force the platform to remain on an older release because of compatibility issues.

When a user visits CompassPoint’s website, they can view a list of workshops being offered, organized by category and location.  The list is generated by a custom Drupal View that allows for filtering by category and location, as well.



When a user clicks “Add To Cart” on one or more of the listed workshops, there is a notification confirming the addition along with a link to the user’s cart.


From the View Cart page, the user can click “Check Out” to move on to the event participants and price level selection page.  This page allows users to add participants to each event.  If a custom profile is associated with the event, those fields will appear below the standard email and name fields for each participant.  All participants for an event share the same price point selected for each event.


Once the user enters the participants and selects the price level for each event, they are taken to the payment page, which gives an overview of the full transaction and allows the user to enter billing details.


Conferences work much the same way as standard workshops, except that after the participants have been added for the conference event, there are subsequent pages, allowing the user to select sessions for each participant.  Users are able to select a single session per time slot, with full session being designated with “Session is Full” and having their radio button disabled, preventing users from selecting them.


CompassPoint has been successfully using the multiple event registration shopping cart since launching the rebuilt platform in May.  We are continuing to improve upon the system and are hoping to have a version of the code merged into CiviCRM core eventually.  Until then, we’ve created a CiviCRM issue at with a patch to CiviCRM 3.4.4.


About Giant Rabbit

Giant Rabbit is a technology consultancy dedicated to serving the needs of organizations making a positive impact on local and global communities.  We are specialists in Drupal and CiviCRM, managing both large and small-scale deployments of both. We pride ourselves in knowing both platforms well enough that we can keep custom development to a minimum by helping our clients make the most of existing features, but we also have extensive experience implementing large and small customizations when necessary.


About CompassPoint Nonprofit Services

CompassPoint believes that nonprofit organizations and leaders need relevant support that builds on their strengths, experiences, and achievements and that those individuals and organizations that invest in increasing their leadership and management capacities are better poised to achieve progress.  For over 35 years, CompassPoint has worked to carry out this purpose by guiding nonprofits as they become better managed, more adaptive, and achieve higher impact.


Sounds great and thanks for the blog. Can you flesh out a bit more about the Cart you are using. I take it this isn't Ubercart - so was this another Cart module that already worked with Drupal or have you started from scratch. 

We have a client want to be able to sell products, events and memberships all in the same transaction. We are about to do some more testing on the civicrm-ubercart integration since the client is on D6 but would be interested in knowing if our efforts would be better applied to trying to extend your work.

The cart is really just a custom solution to allow for purchasing multiple events at once and does not currently extend to selling products.  I would recommend using another solution for that, such as ubercart.

This looks like a great enhancement to CiviCRM. I would like to know how this feature uses contribution types for paid events. If someone puts 5 events in their cart, each of which have a different contribution type configured then which contribution type is recorded in the final transaction/contribution record?

The way the system currently works, a separate contribution record is created for each participant for each event in the cart.  The contribution record inherits the contribution type for each event.  So, if there are 5 events in the cart, each with a different contribution type and each with 1 participant, there will be 5 contribution records created and each will have the corresponding contribution type from the respective event.

Another question -

If someone is logged in, does your solution assume they are registering themselves for the events? (ie what happens with the standard event registration pages.)

What I would like to use this enhancement for is events for children's programs (such as camp, school, after-school activities, etc) where the person filling out the forms is the parent, who is typically registering several children for various programs.

The system autofills the first participants info for each event in the cart with the info of the person registering everyone.  However, you can easily change that to someone else directly on that page, so I think this would work for you.  The person registering does not have to register themselves, but their email address will be the one to receive the master billing receipt.

Nice work, guys!  Has this been updated for CiviCRM 4.x and Drupal 7.x?