Presentation is loading. Please wait.

Presentation is loading. Please wait.

CiviCRM Developer Training Extend and customize CiviCRM.

Similar presentations


Presentation on theme: "CiviCRM Developer Training Extend and customize CiviCRM."— Presentation transcript:

1 CiviCRM Developer Training Extend and customize CiviCRM

2 Introduction Matthew Briney (matthew@emotivellc.com) Chang Xiao (chang@emotivellc.com)chang@emotivellc.com IRC: changx Forum changx (xcf33)

3 Development Environment Tools for Local Development – LAMP Stack Acquia Dev Desktop (Mac & Win) http://network.acquia.com/downloads/6.x/ MySQL Workbench – ERD Diagrams http://www.mysql.com/downloads/workbench/

4 Cron Jobs http://www.example.org/sites/all/modules/civicrm/bin/civimail.cronjob.php?name =user&pass=pass&key=key

5 Develop For CiviCRM Topics CiviCRM Architecture Public APIs Hooks

6 CiviCRM Architecture DAO BAO

7 Directory Structure

8 Example CRM/Mailing/BAO/Job.php corresponds to: CRM_Mailing_BAO_Job Snippet: civicrm_initialize(); require_once(‘CRM/Mailing/BAO/Job.php’); $mailing_job = new CRM_Mailing_BAO_Job(); $mailing_job->id = 45 $mailing_job->getMailingSize();

9 How to Customize CiviCRM Write a module (API, hooks) Theme overrides (API, Smarty) Custom report Custom search Custom payment gateway

10 Public APIs http://wiki.civicrm.org/confluence/display/CRMDOC33/ CiviCRM+Public+APIs http://wiki.civicrm.org/confluence/display/CRMDOC33/ CiviCRM+Public+APIs Current Version: V2 Upcoming Version: V3 (CiviCRM 3.4/4.0)

11 Public API For 3.4/4.0 Look for civicrm.settings.php and change the API Define(‘CIVICRM_API_VERSION’, ‘3’); OR explicitly specify in the $param of the API cal $param = array( ‘version’ => ‘2’, );

12 Invoking the API Template level (smarty) REST interface AJAX (http://wiki.civicrm.org/confluence/display/CRMDOC33/ AJAX+Interface) PHP (most common)

13 API Call (Template) {crmAPI entity="nameobject" action="namemethod" var="namevariable" extraparam1="aa" extraparam2="bb”} entity (contact, contribution) action (get, search) [retrieving method] var smarty template variable name extraparam parameters from the API documentation return fields to return.

14 API Call (Template) Example {crmAPI entity='contact' action="search" var="contacts”} {foreach from=$contacts item=contact} {$contact.sort_name} {/foreach} {crmAPI entity='contact' action="search" var="contacts" country="France" contact_type="Individual" return ="sort_name,email"}

15 API (REST Interface) https://www.example.org/path/to/civi/codebase/civicrm/e xtern/rest.php?q=civicrm/ https://www.example.org/path/to/civi/codebase/civicrm/e xtern/rest.php?q=civicrm/<function Has complete access to all public APIs

16 API PHP Default API Most reliable Called by modules Snippet: $params = array( 'contact_id' => 10, 'return_custom_N' => 1 ); $retrieved = civicrm_contact_get( $params ); if ( civicrm_error( $retrieved ) ) { return $retrieved['error_message']; } else { print_r($retrieved); }

17 API V3 Entity-action model Should you use it?

18 Live DEMO API Explorer Access it at: /civicrm/ajax/doc#explorer For version 3.4/4.0

19 CiviCRM Hooks http://wiki.civicrm.org/confluence/display/CRMDOC33/ CiviCRM+hook+specification#CiviCRMhookspecificatio n http://wiki.civicrm.org/confluence/display/CRMDOC33/ CiviCRM+hook+specification#CiviCRMhookspecificatio n Fires before or after an action or at specific time Have specific naming conventions.

20 Example 1 Snippet: (send an email when the contact is created) my_module_civicrm_post( $op, $objectName, $objectId, &$objectRef ) { if($op == ‘create’) { if($objectName == ‘Individual’) { // send the new contact an email mail($objectRef->email, ‘hi, welcome’, ‘Welcome to the site’); } } }

21 function my_module_civicrm_alterMailParams(&$params) { $token_params = array( 'subject' => $params['subject'], 'from' => $params['from'], ); // do token replacement here $tracking = array( 'utm_source' => token_replace(variable_get('civitracker_mailing_pattern_source', '[sitename]'), 'civitracker_mail', NULL, '[', ']', $token_params), 'utm_campaign' => token_replace(variable_get('civitracker_mailing_pattern_campaign', '[date]'), 'civitracker_mail', NULL, '[', ']', $token_params), 'utm_medium' => 'email', ); if(variable_get('civitracker_mailing_toggle', 1) == 1) { if(isset($params['html']) && $params['html'] != '') { $params['html'] = civitracker::url_append($params['html'], $tracking); } if(isset($params['text']) && $params['text'] != '') { $params['text'] = civitracker::url_append($params['text'], $tracking); }

22 Hands on exercise

23 Other useful functions Single Value Query: $query = “Select Blah FROM Blah” CRM_Core_DAO::singleValueQuery( $query );

24 Example (save a record) Create a new dashlet Snippet: civicrm_initiate(); require_once(‘CRM/Core/DAO/Dashboard.php’); $dashboard = new CRM_Core_DAO_Dashboard();$dashboard- >domain_id = 1; $dashboard->label = $title; $dashboard->url = ‘path/to/dashlet’; $dashboard->permission = 'view civicrm_tools dashlets’; $dashboard->is_active = 1; $dashboard->created_date = date('Y-m_d h:i:s'); $dashboard->save();

25 Custom Reports

26 http://wiki.civicrm.org/confluence/display/CRMDOC33/ Custom+Reports+(How+to) http://wiki.civicrm.org/confluence/display/CRMDOC33/ Custom+Reports+(How+to Grab a report that you wish to copy /var/www/htdocs/sites/all/modules/civicrm/CRM/Report/Form/Contact Create a custom report template and copy the file into /var/www/htdocs/custom_templates/CRM/Report/Form/Contact Rename the file name and class name AreaDemoSummary.php CRM_Report_Form_Contact_AreaDemoSummary extends CRM_Report_Form Copy template.tpl file from civicrm/templates/CRM/Report/Form/Contact/Summary.tpl to /var/www/htdocs/custom_templates/CRM/Report/Form/Contact/AreaDemoSummary.tpl

27 Custom Reports Register the report template at civicrm/admin/report/register&reset=1 Make sure you have custom template directory set up at civicrm/admin/setting/path&reset=1

28 Anatomy of a Report __construct() select() from() where()

29 Field Definition __construct() Define display columns, filters http://pastebin.com/FsKELJbX

30 select() http://pastebin.com/0ssZQ9QR

31 from() http://pastebin.com/hPPyGy8w

32 where() http://pastebin.com/2W0ucZnB http://pastebin.com/2W0ucZnB

33 groupBy() orderBy() postProcess()

34 Example Going through examples.

35 Custom Searches

36 Process Build search file Place file in custom search folder Register report with CiviCRM /sites/all/modules/civicrm/CRM/Contact/Form/Search/Cust om

37 Documentation http://wiki.civicrm.org/confluence/display/CRMDOC33/ Custom+Search+Components http://wiki.civicrm.org/confluence/display/CRMDOC33/ Custom+Search+Components /sites/all/modules/civicrm/CRM/contact/Form/Search/Cus tom

38 Template Override

39 Template Structure Templates located in: /civicrm/templates/CRM Organized by feature

40 Overriding Templates Copy the file from /civicrm/templates/CRM to the same folder structure in /sites/all/civicrm_templates/CRM

41 Identify the page you want to edit (template) Find the correct template file Copy the template directory outside of /sites/all/modules/civicrm Set the configuration settings at adminster->global- >directories Make the changes


Download ppt "CiviCRM Developer Training Extend and customize CiviCRM."

Similar presentations


Ads by Google