Custom CMS Functionality


The National Association of Addiction Treatment Providers (NAATP) is a society of addiction treatment providers in the United States. Their mission is to provide leadership, advocacy, training and other member support services to assure the continued availability and highest quality of addiction treatment. The organization provides clinical and operational resources as well as law and policy advocacy to bring the industry together to promote collegiality and best practices. To manage their memberships, event registrations, and email campaigns, NAATP utilizes CiviCRM, an open-source constituent relationship management (CRM) tool, that is fully integrated into their website’s content management system (CMS), Drupal 7.


Prior to the May 2016 launch of the Drupal / CiviCRM version of the website, the organization faced a problem that is often too common, splintering their data into multiple systems and not having their website fully integrated into their CRM and membership management system. The previous website was built on Wordpress which posed some access control issues to the resources available for their members. Members could apply online, but the rest of the process to invoice, approve, communicate with them and renew their membership was all manual. Different systems were used to manage membership data, collect payments online, manage their contacts, email marketing, event registrations, and surveys. This posed a major challenge for the staff to understand the full picture of member’s activities and their level of involvement with NAATP. They needed a website that was integrated with each of these features and has all of the data in one central location.

While the new CiviCRM / Drupal websites can handle a lot of great stuff out of the box, NAATP realized they needed some custom functionality to fit their business needs and improve the user’s experience.


Hosting and Custom Development

In October 2017, Skvare was approached to take over hosting and development services for the website. Skvare has a long history of custom development with CiviCRM and Drupal and has become known as the “Drupal guys” in the CiviCRM community. NAATP realized that Skvare was a perfect partner as they could continue to improve the site’s user experience and implement new custom features as workflows and processes changed in the organization. Aside from custom development, Skvare hosts the NAATP website. Skvare’s hosting infrastructure is custom tailored for Drupal and CiviCRM. With Skvare hosting, you can expect your website to run faster, and you’ll spend less time worrying about bandwidth, hacker attacks, and software updates.

Dynamic Buttons for Event Registrations

One of the biggest events that NAATP hosts each year is the National Addiction Leadership Conference. It includes speaker sessions, exhibitors, an awards banquet and even a golf tournament to raise funds for Addiction Policy Advocacy. On average, the conference has over 100 vendors and 700+ attendees. Since there is a lot of information about the conference, the default CiviCRM event info pages were not flexible enough to provide all of the information related to the conference. Instead, the organization created Drupal pages so they could have more control over the content and the layout of the page. To register for the event, users click a button to jump to the CiviCRM event registration page. The challenge was that only users with a website account can register for their events. They needed a dynamic button that would send users directly to the registration page if they were logged in, or send them to the page to create an account if they were not logged in.

To solve this problem, Skvare used the Bean Drupal module. Essentially Bean allows you to create fields for Block entities that can then be placed on your website using Drupal’s default block system. Similar to content types, block types can be created and contain a unique set of fields for each block type. For the dynamic buttons, fields were created to allow admins to define the button text, the URL for logged-in users, the URL for logged-out users, and the option to redirect not logged-in users to the logged-in URL after their account has been created. To further improve the experience, URL aliases were set for the event registration pages so they could easily be typed. For example “”. URL aliases can be set by going to Configuration > Search and metadata > URL aliases in the Drupal admin menu. To create a URL alias, click the add alias button, enter the CiviCRM form page in the “existing system path” field, and a custom URL in the Path alias field. Once the alias is created, you will use the alias in the “logged-in link” field of the Bean block type. This allows users to be redirected to the registration page after completing the create your account form.


Create new membership records upon Rejoin

A common complaint we’ve heard from a few our clients is how CiviCRM handles the membership records when there has been a lapse in their membership. For example, a user has a membership that is valid from January 1, 2016 - December 31, 2016. CiviCRM will show a Member Since date of 01/01/16, a start date of 01/01/16, and an end date of 12/31/15. The user decides to NOT renew their membership right away and lets it expire. However, they decide to renew their membership on June 1, 2016. By default, CiviCRM will update the expired membership record and will show a Member Since date of 01/01/16, a start date of 06/01/17, and an end date of 05/31/18. It’s not really clear by looking at the record that the user did NOT have a membership between Jan. 01, 2017 and June 1, 2017.

Instead of the default CiviCRM behavior to update an existing membership record and change the start and end dates, it would be much easier to identify a lapse in membership by having separate membership records. Thanks to the benefits of working with open-source software and an active community of contributors, others have experienced the same frustration and Eileen McNaughton from Fuzion developed an extension that would allow some membership statuses to be renewed and force other types to create new membership records.  See an example of membership records with the extension installed below.


Team Activities

NAATP offers memberships at the organization level and individuals inherit memberships. Very often the NAATP team gets calls from one of their members that asks, “how many people from our team have registered for the Annual Conference,” or “who on our team still needs to register for the conference.” If the NAATP team wants to understand how different users interact with the website, it can be tedious to look up in CiviCRM. They would need to find the organization contact, look at the relationships tab, click on each individual, then go to each individual’s Activities tab, and maybe even filter the activity type to Event Registrations. Thanks to one of the modules that Skvare maintains, CiviCRM Entity, we can aggregate all of the Activities of an organization using Drupal Views. Using a Views filter, we automatically filter out activity types that aren’t that important to the NAATP team, like Bulk Emails. We have also exposed a filter for the Activity dates, so users can see activities for just a given time frame. Now, the NAATP team just needs to go to the new Team Activities View page, enter an organization’s name, and see a list of activities for the organization and all its related individuals. In the example below, we can quickly see that Joe Dirt still hasn’t registered for the conference, Peter and Daria have registered for the conference, and Daria has also registered for the banquet dinner.


Other Key Features

Relationship Permissions

As mentioned in the previous section, NAATP’s memberships are inherited by all individuals related to the organization. However, their needs are a little more complex than that. Some organizations have branches in other parts of the country, and those branches have their own employees. The membership records are tied together for all of the relationship levels. If the status changes, its reflected across all related contact records. Even if a NAATP administrator manually changes the dates on a membership record, it changes the date on all related contact records. This is accomplished by using the Relationship Permissions as ACLs extension available for CiviCRM.

Administering Your Organization & its Branches

When a user first signs up for a membership, both an individual and organization contact record are created. The individual is related to the organization and has permissioned relationship, internally referred to as the “Administrator” of the organization. Now the individual can log into the NAATP website and manage their parent org’s information, set up additional branches, and disable access to individuals that have been granted access.


Membership Directory

Thanks again to CiviCRM Entity and Drupal Views, CiviCRM contact data is able to be pulled into Drupal and allow users to find details stored on CiviCRM contact records without having permission to access CiviCRM contact records. Using exposed filters in Views, users can filter results in the Membership Directory from a variety of custom fields from organization contact records.

M2M Forums

NAATP members have access to a tool that allows for meaningful information exchange between treatment center professionals. Using Drupal’s Content Type and Commenting systems that are available out of the box, users can create new conversation nodes and other users can reply by leaving comments. A subscription system is also in place that not only notifies authors if there is a new comment, but users can choose to receive notifications if any new conversations are started in the forum.

Job Listings

Members of can list job openings on the website for free. Non-members can also post a job listing to be listed in the job center as well. Non-members can purchase via a CiviCRM contribution page. Once purchased, a “Job Poster” role is given to the user. After a Job Listing is created, the role is removed with a Drupal rule. Once a user creates a new job post, all users of the Job Manager role are notified that a new listing is available for review. Once the job manager publishes the job listing, a Rule triggers a notification to the author of the content that the listing is live. Jobs are automatically removed from the website after 90 days by using the Node Expire module. Once the node has expired, a rule triggers an email notification to the author that the post has been removed.


NAATP’s goal of having a single integrated system is a huge success. Not only is all of their data housed in one place, but the new system handles membership management, event registration management, and email marketing. The new site is full of custom features that allow members to self-service several activities and provides a pleasant user experience.

Share this post