Capitalcamp 2013 - Salsa: Spicy CRM Integration for Drupal-Powered Nonprofits

Preview:

DESCRIPTION

Salsa is a SaaS platform that helps nonprofits and political campaigns of all sizes to fundraise, advocate, communicate and organize online. This session from CapitalCamp 2013

Citation preview

Salsa: Spicy CRM Integration for Drupal-Powered Nonprofits

CapitalCamp July 26, 2013

John Shortess

4Site Interactive Studios

“Salsa helps nonprofits build, organize & engage a base of support with tools to communicate, fundraise, advocate & build community.”

Over 2,000 clients managing over 75 million supporters, including:

•  Electronic Frontier Foundation

•  Democratic Legislative Campaign Committee

•  League of Women Voters

•  Robert Wood Johnson Foundation

•  National Association of Court Appointed Special Advocates (CASA)

Organize

• Supporter

• Signup page

• Event

Fundraise

• Donate page

• Donation

Communicate

• Questionnaire

• Email Blast

• Tell-a-friend Page

Advocate

• Petition

• Targeted Action

Salsa 101: Modules & ‘Objects’

Mild Salsa: Link to Salsa-Hosted Form

Medium Salsa: Unauthenticated Forms

Medium Salsa: Unauthenticated Forms

Medium Salsa: Unauthenticated Forms

<script  src="http://sandbox.salsalabs.com/api/flashMessageJS.sjs"  type="text/javascript"></script>    <form  action="http://sandbox.salsalabs.com/save">    <input  type="hidden"  value="supporter"  name="object”  />    <input  type="hidden"  value="1234"  name="organization_KEY”  />    Your  email:  <input  type="text"  value=""  name="Email”  />    Your  ZIP  Code:  <input  type="text"  value=""  name=”Zip”  />      <input  type="hidden"  name="required"  value="Email,Zip"/>      <input  type="Submit"  value="Submit  Form”  />  </form>  

Medium Salsa: Unauthenticated Forms

Hot Salsa: Salsa API and Salsa Entity

Salsa API module Connects Drupal to Salsa’s RESTful API, to read from or write to nearly any Salsa object

Salsa Entity module Exposes Salsa objects as Drupal entities

Hot Salsa: Salsa API and Salsa Entity

• Supporters

• Groups

• Signup pages

• Donate pages

• Questionnaires

• Tell-a-friend pages

• Events

• Petitions

• Targeted Actions

• Unsubscribe pages

Supported Objects (so far):

Hot Salsa: Salsa API and Salsa Entity

•  Forms rendered using FAPI – themeable, alterable

•  Entity Reference integration

•  Rules integration

•  Basic Views integration through efq_views

Hot Salsa: Salsa API and Salsa Entity

Extra Spicy Salsa: Salsa API and Custom Code

Extra Spicy Salsa: Salsa API and Custom Code

•  Salsa API module creates a class with several methods

•  Methods correspond to the calls in Salsa’s external API

$supporter_key  =  33333266;  $supporter  =  salsa_api()-­‐>getObject  ('supporter',    

 $supporter_key);    

Returns:  array(      'supporter_KEY'  =>  33333266,      'organization_KEY'  =>  17594,      'Last_Modified'  =>  'Tue  Feb  19  2013  18:30:52  GMT-­‐0500  (EST)',      'Date_Created'  =>  'Tue  Feb  05  2013  17:41:42  GMT-­‐0500  (EST)',      'Title'  =>  '',      'First_Name'  =>  'John',      'MI'  =>  'Q',      'Last_Name'  =>  'Public',      'Suffix'  =>  'Jr.',      'Email'  =  'john@test.null',      'Receive_Email'  =>  1,      'Email_Status'  =>  1,      'Email_Preference'  =>  'html',      'Soft_Bounce_Count'  =>  0,      'Hard_Bounce_Count'  =  0,      ...  

salsa_api()->getObject

$include  =  array('supporter_KEY',  'Last_Modified',          'First_Name',  'Last_Name',  'Email',  'City',    'State',  'Zip');  

$conditions  =  array(      'Last_Modified'  =>  array(          '#operator'  =>  '>’,          '#value'  =>  date("Y-­‐m-­‐d  H:i:s",  $lastrun)        ),  );  $orderBy  =  array('Last_Modified  DESC');  $limit  =  $offset  .  ",500";  $supporters  =  salsa_api()-­‐>getObjects('supporter',  

 $conditions,  $limit,  $include,  $orderBy);  

salsa_api->getObjects

$fields  =  array(      'First_Name'  =>  'John',      'Last_Name'  =>  'Doe',      'Email  =>  'john@zoom.com',      'Zip'  =>  '01234',  );  $links  =  array(      array(          'link'  =>  'supporter_groups',          'linkkey'  =>  10000,      ),      array(        'link'  =>  'supporter_groups',          'linkkey'  =>  10001,      );  );  $new_key  =  salsa_api()-­‐>save('supporter',  $fields,  $links);  

salsa_api()->save

salsa_api()->getReport

try  {      $report  =  salsa_api()-­‐>getReport(12345);      $leaders  =  $report['row']['totalleaders'];      variable_set('pon_leaderboard_leaders',  $leaders);  }  catch  (SalsaQueryException  $e)  {      $leaders  =  variable_get('pon_leaderboard_leaders');  }  catch  (SalsaConectionException  $e)  {      $leaders  =  variable_get('pon_leaderboard_leaders');          }  

What’s Next? •  A few new API methods

•  A few objects not yet supported in Salsa Entity

•  Drupal 8 versions

Questions?

john@4sitestudios.com

4SiteStudios.com

@johnshortess

@4SiteStudios