lobo's blog
- Not Just a Contact Database
-
These optional components give you more power to connect and engage your supporters.

civiCONTRIBUTE
Online fundraising and donor management.

civiEVENT
Online event registration and participant tracking.

civiMEMBER
Online signup and membership management.

civiMAIL
Personalized email blasts and newsletters.
- Recent Blog and Forum Posts
-
Recent Blog Posts
Recent Forum Posts
Make your Voice Heard
CiviCRM integration with views ...
The Drupal Views module has some pretty cool functionality. Views 2 fixed the "everything is a node" concept from Views 1, this enables integration with CiviCRM (which does nothing with nodes). A concise description of Views from its project page: This tool is essentially a smart query builder that, given enough information, can build the proper query, execute it, and display the results.
CiviCRM profiles (in view/search mode) behaves like views. However it is not a flexible or configurable as views is for the end user. Integrating with views also allows the potential of integrating CiviCRM information with other Drupal specific information. e.g. Contact information on folks who are most active on your blog / forum / comments
I took user.views.inc as a model and started hacking away to create civicrm.views.inc. You can get a copy of that file from our svn respository. So far its quite simple and just integrates the civicrm_contact and civicrm_email tables. I hope to add the phone/address fields in the next couple of hours/days and get a better idea of how to potentially generalize it.
Implementing a custom ACL system in CiviCRM
From a forum post by Chris Burgess (with Green Party NZ). A related blog post is: Another approach to ACL and permissioning for hierarchical organizations
Our (Drupal5+CiviCRM2.0) site needed a regional ACL implementation in order to give us the ability to easily grant access for our internal staff to contacts in their geographic region. Because we have staff at a provincial, regional and branch level, we needed to be able to configure permissions for each level.
We did this by implementing code which overrides the ACL implementation in CiviCRM. I'd appreciate any input and suggestions on our methodology - it's a work in progress, but it's working well for us so far.
Event Price Sets and some explorations with custom search
CiviEvent is one of the more popular components in CiviCRM (followed by CiviContribute, CiviMember and CiviMail). We have improved CiviEvent significantly in the past few releases and more improvements are slated for CiviEvent in v2.1. With this increased usage, we've seen more folks using Price Sets. Briefly, price sets gives admins the option to break an event into smaller pieces and charge for each selected piece. Price Sets was one of the first significant of code contributions to CiviCRM (thanx to Ideal Solutions and Marshal Newrock). We were planning to restructure this code in 2.2, but there were two missing features which came up a few times with some of our 'regular' users.
The first missing feature was that two options in a price set item could not have the same amount. In order to include meals on multiple days with the same price, you would have to separate them into different items. Price Sets did not allow an amount of 0 either in an option. Fixing this was relatively easy, we just shuffled around a few fields that we used in the civicrm_option_value table to fix the above problems.
Injecting CiviCRM profiles in Joomla Registration Flow ..
We've had the ability to add one/more CiviCRM Profiles to the drupal registration page since the first release (thanx to the flexibility of Drupal hooks). This was not possible in Joomla 1.0.x and we hoped the 1.5.x series might help solve this issue and be more open. While Joomla 1.5 is a major step forward in multiple aspects, it did not address this issue. So to some extent we were stuck. I was hoping for someone in the community to step up and do the needful. But that did not seem to be happening either :(
After yet another forum post on this topic, i decided to take a look at the code and figure out what needs to be done. We had abstracted most of the pieces from drupal already, so we just need to make a few function calls at the right places. I started looking for an example component that does something similar, that I could base my work on. Had heard good things about Community Builder, so that was my first choice. The CB 1.1 release does not support Joomla 1.5 and you need to become a "paid subscriber" to get the 1.2 RC. I'm not really a big fan of the pay money to get the latest version of the software, so I moved on from CB and started looking at other possibilities. Found a couple of others, but realized that all these components are commercial and require registration / payment to download it etc. Definitely a very different ecosystem than drupal.
Missing features in CiviCRM ...
With Blackbaud's acquisition of Kintera, there has been some talk of what this means for the nonprofit sector. This along with Convio's acquistion of GetActive last year reduces the options available for the medium-large size NPO's. This is not a bad thing for us, since it makes open source software like Joomla, Drupal and CiviCRM a more attractive option.
On that line, I started thinking about some of the big holes in the CiviCRM feature set / ecosystem. Here's my current list:
More hooks coming in 2.1 ...
So while doing the custom data hook, CRM-1594, I also implemented a hook for setting the default values of a 'Form' in CiviCRM, CRM-3176. So now we have a defaults and validate hook for the form object. The two missing hooks are for buildQuickForm and postProcess, which I'm planning to implement in the next couple of days. This coupled with template customization will allow developers to inject form elements and save them to the database (similar to drupal hook_form_alter). I'm also planning to implement the ACL improvements as an ACL related hook (along with a sample implementation). These new features should give CiviCRM developers more power and flexibility in tailoring CiviCRM to their specific needs without hacking core.
Associating PHP Code with a custom data group ..
With the new custom data model in 2.0, it seemed a good time to allow developers to add columns to a custom group that are computed rather than entered. Some examples of this is computing the GPA of a student given the student's individual grades, computing the age of a contact given his/her birthday. This has been an outstanding issue, CRM-1594, for quite some time.
Amazon EC2: a foundation for a CiviCRM based ASP?
Earlier this month Evan posted a query about a CiviCRM AMI for Amazon EC2. Joe Murray responded with some proof of concept scripts along with the persistent storage space limitations in EC2. Seems like the folks at EC2 have been busy addressing these limitations and have introduced persistent storage support for EC2 (its currently in beta).
CiviCRM team meeting now on IRC ...
Most of you are probably aware that CiviCRM is developed and maintained by a team of dedicated developers spread around the world (India, Poland, USA and New Zealand). We have had regular team meeting over IM / Skype the past couple of years on a weekly basis. We figured it might make sense to try holding the meeting in a public forum so more community folks can participate in the development and running of CiviCRM. We plan on evaluating this after a few meetings to see if it's useful to the community and the team.
Our current meeting time is 5 am UTC on Wednesday May 21st, which means 5 pm in NZ, 10:30 am in India, 7 am in Poland and
10 pm (Tuesday) in San Francisco. We will meet in the #civicrm channel on IRC (irc.freenode.net). We try to keep the meeting time to 60 minutes or less. You can find more information on IRC here.
The agenda of the meeting is:
- Status and team reports. Progress on issue queue, any issues to highlight/defer etc
- Testing status from various groups (http://wiki.civicrm.org/confluence/display/CRM/Test+Coverage+-+2.1)
- Other items (Schedules, dates, consulting projects)
Performance improvements in 2.1
So i've been looking a bit closely at performance for 2.1 (both database and usability) and am attempting to boost it up significantly compared to 2.0 (and prior). Here are some of the highlights
- We've introduced a new database cache table (civicrm_cache) to cache a few database queries that are repeated a lot. Some of the specific queries include listing all the fields available for the contact types (individual/org/household). This is a combination of the built-in fields (name, address etc) and the custom fields added by the user. This reduces the number of queries invoked from 5 complex queries to 1 simple cache query (and an un-serialize)
- We've added a column (group_type) to the profile table (civicrm_uf_group), so we know the profile type rather than recompute it every time we need it.
- Thanx to Dave Lange who reported and did some analysis on this, we've reduced the number of LOWER( dbColumnName) LIKE 'value' to skip the LOWER part. Email is now stored as lower case, so we can skip the LOWER part in all email comparison. In his tests, these have improved performance a fair bit
- Smart Groups
- Hierarchical Select
- Menu System
- DeDupe
- We will integrate the ACL changes into core either as a pluggable ACL architecture and/or via the hook system.
Overall 2.1 is shaping up to be a significant improvement over 2.0 :). You can get more details on the 2.1 feature set and release schedule on the CiviCRM v2.1 wiki page.





