22 May, 2016
By Eileen
Filed under API, Architecture

Busy sites have often encountered problems with deadlocks on the group contact cache. There were no less that 3 different code contributions to mitigate this problem put up for 4.7.8 and a number of other discussions have been going on in JIRA.


Merged into 4.7.8 are some improvements which we hope will mitigate this problem for those sites that experience it. JIRA is the primary source of information on this, however I wanted to share a brief overview.


The focus of the fix so far has been very much on deadlocks when clearing the contact cache. The reason being that these have been causing the most havoc. In analysing the problem it turned out that when someone edits pretty much anything the code looks for stale groups & tries to flush the cache. Depending on the size of the cache that can take a few seconds and it doesn't update the cache last flushed date until afterwards. So if the...

Read more
11 March, 2016

Our customer Werk met Zin (Network of job coaches in Flanders) has a Wordpress site and uses CiviCRM to manage their relations and cases. On their Wordpress site they allow users to register for some events, which they solve with the civicrm event info and registration pages.

However, they also allow an individual to request the start of individual job coaching with a form. This should end up in CiviCRM as a special activity with the fields on the website form as custom data. And the Wordpress website is on another server, although that would not make such a big difference. Anyway, we (as in CiviCooP) developed a specific solution that takes the data from the Wordpress website on server A and sends it to CiviCRM on server B. The solution has a Wordpress part and a CiviCRM part.

The Wordpress plugin

This plugin can be found at...

Read more
09 March, 2016
By totten
Filed under API, Architecture, Extensions

Automated tests are important when collaborating with other developers in a large project. Even if you focus your attention on a small piece of the puzzle, your piece depends on other pieces, and others may depend on you. There will be inevitable occasions when a change in one causes an unexpected change or break in another. Automated tests form the first line of defense, providing timely feedback so that problems can be addressed while the material is mentally fresh.

Testing CiviCRM is trickier than testing a basic library -- tests may involve system services (from Civi or the CMS), and CiviCRM developers may use different CMS's, file structures, and URLs. This problem can be mitigated by creating more configuration files (for each extension, test-suite, or installation), but that grows unwieldy with multiple extensions.

We've published some updated documentation and tooling to support tests in extensions. The remainder of this post assumes that you have...

Read more
06 March, 2016
Filed under API

Mark your calendars, the api team will be doing a webinar introducing api version 4 on Thurs March 24 12:15pm EST.

For anyone that's developed an extension or other integration with CiviCRM, you know how important a good api is. CiviCRM's api version 3 is incredibly useful - it's mature, stable, tested, robust, and even has a handy gui explorer that writes code for you!

Great as it is, api v3 is now 5 years old, and while it may well last another 5 years before being retired, it's time to think about the future. Over the last 5 years it's managed to build up a fair amount of cruft and oddities, which we keep around for the sake of backward-compatability. Bumping up to version 4 represents a chance to start with a clean slate, lose the cruft, and embrace new technologies and techniques.

As of this writing, api v4 is in its infancy. It supports a single entity (Participant, which I picked for no other reason than it's one of the cruftiest and worst-supported by...

Read more
22 February, 2016
By Eileen
Filed under API, Extensions

Using extensions on 4.7 I discovered that if you add entities but don't define them via hook you can get errors.


So, if you have an extension that defines entities you need a hook like the one below


 * Implements hook_civicrm_entityTypes.
 * @param array $entityTypes
 *   Registered entity types.
function accountsync_civicrm_entityTypes(&$entityTypes) {
  $entityTypes['CRM_Accountsync_DAO_AccountContact'] = array(
    'name' => 'AccountContact',
    'class' => 'CRM_Accountsync_DAO_AccountContact',
    'table' => 'civicrm_account_contact',
  $entityTypes['CRM_Accountsync_DAO_AccountInvoice'] = array(
    'name' => 'AccountInvoice',
    'class' => 'CRM_Accountsync_DAO_AccountInvoice',
    'table' => 'civicrm_account_invoice',
09 February, 2016
Filed under API, Extensions, WordPress

Our customer Werk Met Zin (platform of independent 'job' coaches and trainers in Flanders) use a Wordpress site as a front end and CiviCRM as their back end. There is now one specific instance where an individual can apply for a series of coaching sessions on the website. This has to be passed to CiviCRM and rather than updating the website to Drupal we are passing the data from the Wordpress site to CiviCRM. The company that develops the Wordpress website knows nothing about CiviCRM (and want to keep it that way.) Any remarks and/or suggestions are very welcome, and obiously we will share the solution with the CiviCRM community once it is complete. Here is what we plan to do (and thank you to Werk Met Zin for funding the development and us at CiviCooP for developing.....):

  • create a Wordpress plugin that catches the form (with the save_post action) and...
Read more
19 January, 2016
By Eileen
Filed under API

Someone really did give me a kitten for Christmas once. He was cute and funny and unwillingly cuddly. I got a lot of enjoyment out of him, not to mention years of semi-safe passwords. He also chased away our existing cat and eventually we couldn't look after him as our living circumstances changed. To his credit the giver of the kitten was honest that he didn't actually have any other way of looking after the kitten and didn't blame us when the kitten, grown to a scrappy cat, disappeared under a cloud of neglect.


I mention the kitten because I am still recovering from Christmas (I know it's almost been a month) and there is some sort of cyclic track running through my mind merging two quotes “CiviCRM is free as in kittens not free as in beer” with “Kittens are for life not just Christmas”. Sometimes my mind just munges it all down to “free beer” and “Merry Civimess” but I feel like something worth saying is trying to free itself from the brain-mush.



Read more
04 January, 2016

Last week was a busy one for the CiviEvent Widget plugin for WordPress.  Not only did it cross the 2,000 download threshold, but new features were added to help you display upcoming events in a flexible way.

First, an overview of the plugin.  I wrote CiviEvent Widget in response to the fact that CiviCRM sites on WordPress need an easy-to-use way to show their upcoming events.  Prior to CiviCRM 4.6, CiviCRM wouldn't render more than one instance of itself per page, including widgets; for example, you couldn't have CiviCRM list upcoming events in the sidebar alongside an individual event page....

Read more
02 June, 2015

I am Tahir Ramzan, pursuing Masters in Computer Science at Virtual University of Pakistan. I am working on refunds, partial refunds and partial payments development for CiviCRM. Parvez Saleh and Joe Murray are mentoring this project.

Refunds and Partial Refunds:

Often, we need to tackle situation where one needs to make partial or full refunds. After this project users will be able to make refunds with friendly user interface and proper database records.


  • How to represent an administrative fee for refund? Who will pay this, buyer or seller?
  • How to link the refund with the original contribution?
  • Which method to use for processing refunds?  Check, payment processor or both.

Partial Payments:

Partial payments on the other hand need to be done when someone pays a part of payment contribution in installments. This will be very useful for CiviCRM users for...

Read more
25 February, 2015
Filed under API, Documentation, Tips

Whether you're just getting started with customizing CiviCRM or you already think you know everything about it, I invite you to spend a few minutes playing with the new API Explorer in 4.6. You'll be glad you did.

New look

Building on Xavier's great previous work (thanks X for writing the original explorer) I rewrote the interface in 4.5 to reflect new api techniques and take advantage of new user-friendly UI widgets like select2. In 4.6 I've added even more goodies, so be sure to upgrade when it is released - some of the features listed below (marked with a *) are only in 4.6.

Interactive option lists

No need to type in secret codes, you can...

Read more