SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
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,	
  
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

Weitere ähnliche Inhalte

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

Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP Extension
Adam Trachtenberg
 
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
David Giard
 
第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource
Kaz Watanabe
 

Ähnlich wie Capitalcamp 2013 - Salsa: Spicy CRM Integration for Drupal-Powered Nonprofits (20)

The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015
 
Why Hacking WordPress Search Isn't Some Big Scary Thing
Why Hacking WordPress Search Isn't Some Big Scary ThingWhy Hacking WordPress Search Isn't Some Big Scary Thing
Why Hacking WordPress Search Isn't Some Big Scary Thing
 
Web::Machine - Simpl{e,y} HTTP
Web::Machine - Simpl{e,y} HTTPWeb::Machine - Simpl{e,y} HTTP
Web::Machine - Simpl{e,y} HTTP
 
Bag Of Tricks From Iusethis
Bag Of Tricks From IusethisBag Of Tricks From Iusethis
Bag Of Tricks From Iusethis
 
Self join in active record association
Self join in active record associationSelf join in active record association
Self join in active record association
 
Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP Extension
 
Can WordPress really do that? A case study of vierderduer.no
Can WordPress really do that? A case study of vierderduer.noCan WordPress really do that? A case study of vierderduer.no
Can WordPress really do that? A case study of vierderduer.no
 
Practical PHP by example Jan Leth-Kjaer
Practical PHP by example   Jan Leth-KjaerPractical PHP by example   Jan Leth-Kjaer
Practical PHP by example Jan Leth-Kjaer
 
Karan chanan
Karan chananKaran chanan
Karan chanan
 
Karan - form search
Karan - form searchKaran - form search
Karan - form search
 
Capstone Website Code
Capstone Website CodeCapstone Website Code
Capstone Website Code
 
Silex meets SOAP & REST
Silex meets SOAP & RESTSilex meets SOAP & REST
Silex meets SOAP & REST
 
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
 
PHP API
PHP APIPHP API
PHP API
 
Daily notes
Daily notesDaily notes
Daily notes
 
Laravel
LaravelLaravel
Laravel
 
Using OpenFire With OpenLDAP
Using OpenFire With OpenLDAPUsing OpenFire With OpenLDAP
Using OpenFire With OpenLDAP
 
Hi5 opensocial-code-lab-presentation-1203814696810018-3
Hi5 opensocial-code-lab-presentation-1203814696810018-3Hi5 opensocial-code-lab-presentation-1203814696810018-3
Hi5 opensocial-code-lab-presentation-1203814696810018-3
 
Redis Developer Day TLV - Redis Stack & RedisInsight
Redis Developer Day TLV - Redis Stack & RedisInsightRedis Developer Day TLV - Redis Stack & RedisInsight
Redis Developer Day TLV - Redis Stack & RedisInsight
 
第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource第49回Php勉強会@関東 Datasource
第49回Php勉強会@関東 Datasource
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Kürzlich hochgeladen (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

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

  • 1. Salsa: Spicy CRM Integration for Drupal-Powered Nonprofits CapitalCamp July 26, 2013 John Shortess 4Site Interactive Studios
  • 2. “Salsa helps nonprofits build, organize & engage a base of support with tools to communicate, fundraise, advocate & build community.”
  • 3. 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)
  • 4. 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’
  • 5. Mild Salsa: Link to Salsa-Hosted Form
  • 9. <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
  • 10. Hot Salsa: Salsa API and Salsa Entity
  • 11. 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
  • 12. • 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
  • 13. •  Forms rendered using FAPI – themeable, alterable •  Entity Reference integration •  Rules integration •  Basic Views integration through efq_views Hot Salsa: Salsa API and Salsa Entity
  • 14.
  • 15.
  • 16. Extra Spicy Salsa: Salsa API and Custom Code
  • 17. 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
  • 18. $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,   salsa_api()->getObject
  • 19. $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
  • 20. $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
  • 21.
  • 22. 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');           }  
  • 23.
  • 24.
  • 25.
  • 26. What’s Next? •  A few new API methods •  A few objects not yet supported in Salsa Entity •  Drupal 8 versions