capitalcamp 2013 - salsa: spicy crm integration for drupal-powered nonprofits
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 2013TRANSCRIPT
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' = '[email protected]', '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 => '[email protected]', '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