29 January, 2015
By Eileen
Filed under API

In general we try to keep the CiviCRM developer interface with CiviCRM as stable as possible. Ideally hooks, payment processor extensions and api calls should change as little as possible between releases.

In every release there are some improvements and additions. Generally the place to find out about these is the api change log - ie,


Unintentional changes can also happen. Our first line defence against these is the unit test suite. Basically if something is tested then with very few exceptions it should continue to work. So, if you want your code to be stable - get to know our tests!

Very very occassionally we make intentional changes to api behaviour. In 4.6 I have changed the behaviour of relationship api so that it will no longer fail if you try to update the contacts on an existing relationship. This error doesn'...

Read more
16 January, 2015

Do you use CiviCRM for contributions, pledges, and related financial data? Does your organization use the financial reports in CiviCRM? Does your organization export data from CiviCRM to your general ledger? Or do you want to start doing some of these things?  If so, your input is needed on CiviAccounts.  (You do not need to be a CPA to give input, but having a general understanding of how CiviCRM financial areas work currently is helpful)  

Give your input via the survey at: http://pogstone.com/civicrm/petition/sign?sid=15&reset=1    

(Thanks to the CiviCampaign component, I am using CiviPetition to handle my online surveys)

Background:  One of the bigger structural changes to CiviCRM in the last few versions has been CiviAccounts. CiviAccounts includes many things you may use day-to-day, such as using multiple financial types within a single priceset, partial...

Read more
15 January, 2015
Filed under API, Extensions

This week we have been working for MAF Norway to automate the sending of SMS, E-mail and PDF creation. What we have done in the past for them is that we created a Trigger/Action module to automate their donor journeys. The actions in the trigger/action module are API calls. But what was missing up-to-today was to functionality to send e-mail, or to create a PDF Letter or send an SMS by invoking an API Call.

Note: the trigger/action module is a very experimental module just developed for the MAF. At the same time we are developing a CiviRules modules which will work in a similair way as the Drupal Rules module.

This week we developed three extensions to accomplish this:


Read more
12 November, 2014
By Stoob
Filed under API, Extensions

CiviCRM has had an array of powerful import tools for as long as I can remember but the availble options have been limited. Contacts, Contributions, Participants, Memberships and Activities...sure....but what about the Events themselves? Sorry. What about Grants? Nope.

Enter the API CSV import GUI extension, created by awesome community member Eileen McNaughton! That's a whole lot of acronyms, but basically what it allows you to do is import potentially any entity into Civi. Grants? Yes. Events? Yes. Cases? Yes! Pledges? Why not?

Translations: For those that don't know, CSV is a common, simplified spreadsheet format that can be opened using Excel, Libre Office, etc. API is some programmer-speak and GUI just means you...

Read more
01 December, 2013
By totten
Filed under CiviCase, API, Extensions

CiviCase is generally described as "a container for activities". As a container, it's well-suited to two scenarios:

  • The activities in the case are identified and scheduled on an adhoc basis -- there's always a person (a case manager) making the decision about when to schedule the activities.
  • The activities are performed according to a fixed timeline based on a reference date -- e.g. the first meeting is scheduled 3 days after the case opens; the next meeting is 14 days after; etc.

However, a container of activities can be useful in other scenarios -- for example, consider the case of hiring a volunteer to work in the children's art program:

  • The director of the children's art program needs to meet with the volunteer to determine whether she has the proper skills and experience in art.
  • The HR manager needs to obtain consent and details from the volunteer for running a background check...
Read more
26 July, 2013
By Eileen
Filed under API, Architecture, CiviCRM

In New Zealand workplaces it's common to see a sign in the smoko* room saying "Your mother doesn't live here - do your own dishes".


People tend to follow this instruction as longs as: 

a) there is not already a pile of dirty dishes next to the sink

b) and they can see where to wash the dishes, and where to put them afterwards.

c) their colleagues aren't setting a bad example.


If they see a pile of washed cups beside the sink, another pile on a shelf above the sink and a third pile in a cupboard on the other side of the room if might not be obvious to them that the sign writer meant them to notice the new dishwasher recently installed below the sink & that was the correct place to put the dishes (and actually they didn't need to wash them first).


Code maintenance can be bit like that. If you tidy up a chunk of code people untidy it because

a) they are copying...

Read more
24 May, 2013
By totten
Filed under API, Architecture, Extensions

CiviCRM configuration is largely driven through the web interface and the database: if an administrator wants to add a new "report" or new "relationship type", he can accomplish this with a few clicks of the web interface. The new item is inserted into the database and immediately becomes live. This is great for web-based administration, but it's inconvenient for developers: if a developer writes a module or extension that registers something in the database, then he needs to write an installation routine to insert the item (and an uninstallation routine to delete the item). CiviCRM 4.2+ includes a better way: use the API and hook_civicrm_managed. This technique is already used in "civix" based extensions, but it also works with Drupal modules, Joomla plugins, etc.

Example Use-Case

As an example, suppose we are creating a module/extension called "fancyreports" which defines three new report classes. Each of these classes...

Read more
18 February, 2013
By jcm55

One of the most common phone calls we receive at Bay Area Children's Theatre is "Are tickets still available for performance xyz?"  That call is especially common on show days, when most of our staff is at the performance venue and not in the office to answer the phone.

BACT already uses Asterisk to provide our virtual PBX and I wanted to see if there was a way to automatically give callers a list of sold-out performances based on CiviCRM event data.  I discovered an Asterisk AGI script called GoogleTTS that uses Google's text-to-speach API to read arbitrary text to callers:


The only thing that was left was to come up with a little php to get the list of sold-out events from CiviCRM and pass it to GoogleTTS to read it to callers.  The php is pretty straightforward -- it uses the CiviCRM API to fetch the list of events with start_date > today.  Two small...

Read more
23 November, 2012

For the past few months we have been working with Future First, who have an ambitious mission of 'creating an alumni network for every state school in the UK'. A key part of this work is the ability to track and engage with recent school leavers and we've spent a fair amount of time building tools that allow them to do this. One of these is an extension that allows them to hold scripted SMS conversations with their contacts in CIviCRM.  We've just piloted this functionality with them and the results look quite promising.

The background

Over the summer Future First signed up over 25,000 school leavers to their alumni networks. They did this in two ways. Approx. 50% filled in their details just before they left school using an online form that we built with webform_civicrm. The form collected their name, email, mobile number and optionally facebook details. The other half filled in paper forms that were later electronicified...

Read more
27 October, 2012
By xavier
Filed under v4.2, API, Training


Node.js allows to run javascript on the server and is great for real time applications when you want to have lots of users and connections at the same time

I wrote a node module to easily connect to a civicrm server from that node.js. I found a cool module that makes it easy to generate names, addresses, phone number and emails and hacked a quick example of how civi can be used from node.js.

Without further intro:


Imaginary friends on CiviCRM

You have installed civicrm, but realised you don't have friends or contacts? Fed up of having activities with the same 102 contacts that ship by default with civi?

civi-charlatan is going to fill your social life with lots of interesting sounding contacts from all around the world. You will even have their emails, addresses and phones!

It's like...

Read more