Architecture

Discuss the Coding structure, libraries used and best practices to extend CiviCRM.

The static is dead. Long live the static!

Published
2015-09-21 20:57
Written by

Civi v4.7 introduces some overhauls to the core CiviCRM development framework. Some of the planning discussions can be found in the forum, but now that it's merged and stablized a bit, I wanted to give a walk-through for other developers. A few highlights:

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Toward CiviConnect

Published
2015-05-06 18:48
Written by

CiviCRM sits in the middle -- exchanging data with your CMS, payment processor, email service, SMS service, spreadsheets, ad nauseum.  CiviCRM is also extremely flexible -- supporting multiple CMSs, multiple payment processors, multiple email providers, multiple SMS providers, ad nauseum.  These are great power features, but they also come with a cost -- complexity.  The on-boarding process for a new organization requires evaluating and configuring a plethora of integration options, and the configuration is not always easy.

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

CiviAccounts Survey and Roadmap

Published
2015-01-16 14:07
Written by

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)  

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Creating an Accounting Batch export format for AccountEdge

Published
2014-12-06 05:10
Written by

I recently had a requirement to allow for export of Accounting Batches to a format that AccountEdge can use. The good news was AccountEdge has many CSV import wizards for many different types of data. The bad news was the layout of the accounting batch export CSV file from CiviCRM did not match what AccountEdge expected.  So I set about creating a new export format for CiviCRM which is compatible with the "File ... Import Data ... General Journal Entries" wizard in AccountEdge.

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Core Recursion: The Recurring Events Engine

Published
2014-09-18 09:30
Written by

If you’ve ever wanted to setup a repeating event in CiviCRM, for example weekly church groups, then you’ll know thats its not the most straightforward task in CiviCRM at the moment, requiring large amounts of manual labour to get the desired end result. Up steps the Zing funded MIH with a large dose of user input from Lindsey @ Woodlandschurch and others who fed back on the wiki.

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Continuous Testing

Published
2014-08-25 00:45
Written by

Good testing is critical for providing quality software. Some testing is always manual but writing automated tests to do the heavy lifting is a key part of modern coding practices. For developers, the discipline of writing automated tests helps to proactively identify and control edge-cases, and regularly running tests helps to identify problems quickly (before they grow and cause greater harm). Fostering a healthy culture of testing requires easy, consistent, timely test-results which in turn requires an easy, consistent, quick way to setup a new test environment.

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Technological advances planned for upcoming releases

Published
2014-04-01 05:35
Written by
CiviCRM has been around for 9 years, and some of the technologies that we use are older and need architectural revamping and improvements. For developers, architectural improvements will make the platform easier to adapt and easier to learn -- which means developers can spend more time creating better features to help our users and our causes.
(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Sneak Peek at 4.5 for Developers

Published
2014-03-10 17:57
Written by

The CiviCRM community is hard at work on version 4.5 and even in its pre-alpha state I have to say it is looking really good! I'll do another blog in a few weeks about all the features and improvements users have to look forward to. But developers, this one is for you. Whether you maintain a CiviCRM extension, submit pull-requests, or develop customizations for your sites, you definitely want to read on...

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

A peek into the world of Doctrine and CiviCRM

Published
2013-12-13 13:12
Written by

A few of us have started exploring how we can integrate Doctrine into future versions of CiviCRM. A large part of this work was initiated by Peter Haight from Giant Rabbit who explained his thinking and approach in this blog post on Persistence Refactoring. One of our goals for the next few releases of CiviCRM is to improve the technology backbone that Civi is based on. It made sense to most of us to start from the database layer and then move outwards and using doctrine and working with peter seemed a good logical next step.

We decided to spend 3 weeks (till mid january) on various exploratory sprints and try and answer a few questions and see how things are done in the doctrine/symfony world of things. We also decided to start adopting more scrum - like technques and iterate on a weekly basis. Our goal is to come up with a list of things that we are curious about going forward and work on some potential answers during the week. So without further ado, here are some of the things that we decided to investigate and research this week:

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Is symfony in harmony?

Published
2013-10-29 06:50
Written by

Fair warning, this post is intended to the technical part of our community, if you don't care about the architecture of civi, please skip this one, I'll come back to you soon with awesome datavisualisation and an interview of Micah about ssl (you'll like it).

And if you read anyway, I'm a bit of a drama queen and some of the mountains I describes are probably hills, at best.

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Persistence Refactoring

Published
2013-10-11 15:45
Written by

We've started to look into changing how objects get persisted in CiviCRM and what can we do to make things easier for people extending CiviCRM. Part of our approach is to try and integrate Doctrine into CiviCRM.

Background

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Doing the dishes (AKA code cleanup)

Published
2013-07-26 16:03
Written by

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.

 

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

API and the Art of Installation

Published
2013-05-24 17:18
Written by

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.

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

MongoDB as civicrm cache with new config

Published
2013-03-16 23:00
Written by

After my previous blog post, i have been working on making progress on working model w.r.t NoSQL and config. Starting with civicrm cache was a good idea. Keeping in mind NoSQL, new config system and what Eileen has already done with settings, here is what i planned and accomplished  :

Placed cache and cache-type (mongodb) settings file on disk with default values

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Gitty-up! CiviCRM moves to Github

Published
2013-03-01 18:22
Written by

As of March 1st, the official source-code repository of CiviCRM has switched from Subversion to Github. Git and Github provide a number of advantages:

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Taking Config Management To Next Level

Published
2013-02-10 04:38
Written by

As part of my course i have been doing research on what would it require plug an external storage engine into CiviCRM, and how other open source systems doing it. Answer lies in a better config system which allows doing it in a scalable pluggable manner. As i make progress i'll be showing more reasons to get excited and curious about building a better config system. Drupal 8 has spent a fair bit of time on configuration management to make things easier. And we shouldn't shy learning from them and others.     
 

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

ERD for CiviCase version 3.3

Published
2012-11-20 00:50
Written by

Just created a quick ERD for CiviCase, and shared it on this page http://wiki.civicrm.org/confluence/display/CRMDOC42/CiviCRM+ERD+3.3.

It is version 3.3, so not the latest and greatest. But I am sure I will have to check the same ERD for version 4 at a near point in the future and update the ERD too. And I do not think there are major differences in the data model......

I have also attached the ERD to this blog post.

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Translations for Extensions

Published
2012-09-26 09:15
Written by

Extensions are a growing part of the CiviCRM way of doing things. We need to develop a process and toolset to facilitate getting them translated and making those translations easily installable. This post is intended to lay out some issues and a potential approach in order to generate discussion.

Here are some assumptions and suggestions I have:

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Simultaneous Editing

Published
2012-07-22 18:01
Written by

Brian Shaughnessy (lcdweb), who has been working with the New York State Senate's CiviCRM project, recently raised the issue of simultaneous editing: What happens when two users simultaneously make changes to same contact record?  We've held a few discussions on IRC to examine the issue and draft some solutions.  We would appreciate further feedback and ideas on how to address the issue.

The Problem

As described by Brian:

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Native Module Development

Published
2012-03-27 08:59
Written by

Many CiviCRM customizations have been packaged and distributed as Drupal modules. This can be desirable when a customization delves into both the CMS and CRM functionality, but -- when a customization focuses only on CiviCRM -- Drupal modules are a drag: they need to be patched for CMS upgrades (D6/D7) as well as CRM upgrades (Civi 2.x/Civi 3.x), and they don't work with CiviCRM's other CMS's (Joomla and WordPress). This article introduces a proof-of-concept solution.

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Can you help with the dishes?

Published
2012-03-26 00:04
Written by

Last week I wrote a blog about technical debt (comparing it to keeping a kitchen in order). I got a lot of feedback - most of it constructive. I'm going to resist belabouring the whole metaphor & limit this blog to a quick summary of some of the discussion that came out of it.

 

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

You owe me 3 tests, a function & a kitchen sink

Published
2012-03-19 03:03
Written by

Do you like to whinge about CiviCRM code? Have you sat through others doing having a rant? I've certainly done both. Being in the drupal world people often like to compare CiviCRM code with drupal & CiviCRM usually comes up a bit short. I think that's like comparing my kitchen with Bill Gate's kitchen. There are a few good reasons why my kitchen is not as nice as his. However, should I look at his kitchen (in a magazine) then I might glean a few good ideas that I could use in designing my own. (Copying the colour scheme would be in my budget :-))

 

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Usability focus at the code sprint: an API with mustache edits in place and html fragments!

Published
2012-03-03 01:41
Written by

Hi,

The code sprint in London has finished yesterday. It's always a pleasure to see old civi friends and meet new ones. Thanks to Michael and Katy to have organized it. Time for a quick update of what I've been working on with the most obscure title I could find. My focus has been on usuability to make civicrm easier and faster to use.

 

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)

Extending APIv3

Published
2011-09-28 18:31
Written by

CiviCRM 3.4.x and 4.0.x introduced API v3, a more consistent set of interfaces for integrating with CiviCRM using PHP, Smarty, Javascript, and REST. Building on this consistent core API, recent CiviCRM updates have introduced even more ways to manipulate your data -- such as chaining and CSV batch importing.

Thus, functions implemented according to the API v3 conventions can be invoked several different ways. If you would like to leverage this infrastructure for use with a new or customized API call, then download the latest release. With 3.4.6/4.0.6, external developers can expose API functions for new entities, new actions, and even generic actions.

(logged-in users can click thumbs up if they thought this blog post was useful) (login to vote or to comment)