CiviReport and the state of open source reporting packages

This week i've spent a fair amount of time trying to figure out what we could potentially do to make reporting part of CiviCRM. A few joomla folks on the list have successfully used a Joomla component DBQ and were fairly happy with it. I did read a fair amount of it and took the next step of actually installing and playing around with it.

DBQ is quite nice, easy to install and works as expected. However, as Dan Robinson pointed out on the email list, it is not a reporting tool, but more a simpler way to execute queries and format them in some manner. A lot of "reporting" functionality is missing (in all fairness to DBQ, it does not claim to be a reporting tool either).

CiviCRM 1.5 works with Drupal 5.0 with some very minor adjustments...

I installed CiviCRM 1.5 with Drupal 5.0 following the same steps I took installing it with Drupal 4.7 and got no errors.

CiviCRM wouldn't show up in the modules list in the admin section, so I poked around a bit to see what the overall setup was of the Drupal 5.0 modules.

I moved the civicrm.css file into the main civicrm folder, moved the civicrm.module file into the main civicrm folder and then created a civicrm.info file and follwed the same format as the other .info files (a couple of lines of code describing the module) to write to the civicrm.info file. I copied the civicrm.settings.php file to drupal/sites/default folder and went back to the Drupal 5.0 admin area and lo and behold, CiviCRM 1.5 was there. I enabled it and it worked.

Full-text Search for CiviCRM: Initial Thoughts ...

It is important for CiviCRM to have a full fledged un-structured search engine in addition to the current structured query. I don't think MySQL full text searching (MFTS) is a good model for a couple of reasons. Firstly MFTS is restricted to myisam tables and CiviCRM uses innodb tables. Secondly MFTS is still a table level search and i don't think it can handle hierarchical data. CiviCRM contacts are hierarchical data sets.

Would be great to integrate something like Lucene into CiviCRM. A potential work flow could be as follows:

1. Publish an xml specification of the CiviCRM data model. We have done a fair amount of this work for the Branner project. We could extend and automate this quite nicely using our code generator. Also xml fits quite nicely since we can represent hierarchical data

Announcing CiviCRM v1.6 Alpha ...

We are happy to announce that our 1.6 Alpha release is now available for preview and testing on our servers. We'd like to get as many folks trying out the new features as possible over the next week. This will help us move quickly to a downloadable Beta release - which is currently scheduled for November 29.

You can login to the sandbox at:

http://sandbox.trunk.civicrm.org

User - demo
Password - demo

Highlights of the release - and things we especially like folks to try out are:
* Ajax-based suggestive search in the Contact Search box (left column)
* Dynamically loaded sections in Advanced Search and Contact View Screens

Users, Organizations and Contributions in 1.6

There's been a lively discussion on the mailing list about requirements for linking CMS (Drupal / Joomla) Users to CiviCRM contacts and handling contributions from both types of contacts. We recognize that there is still work needed to handle the variety of use cases out there - but we've made decent progress in the upcoming 1.6 release:

  • CMS (Drupal / Joomla) users can be "linked" to either an Individual contact (default behavior) OR and Organization contact.
  • Sites will be able to provide a separate user registration link which will expose Organization profile(s) and create a user record, a new contact Organization record - and "link" them.

Team Goals for the Week of November 13

Closing in on the 1.6 release...

We made our goal for last week - reducing the existing queue items to 4! Most of the team has switched to unit testing mode. Each team member is taking on a group of Resolved issues from the master 1.6 queue and retesting the functionality. This has surfaced 2 new problems - bringing the total open count to 6 as of this morning.

In general, we are trying to make sure that a person other than the original assignee does the unit tests - so there is another set of eyes. After testing, team members are "signing off" on the issue by marking it Closed.

CiviCRM Architecture - Templating System

This installment of our architecture series will introduce the templating system used by CiviCRM as the presentation layer (e.g. to actually render forms and pages). Every CiviCRM screen is "composed" from one or more template files. These files contain a combination of HTML tags, text, variables and (often) some code to control presentation logic. CiviCRM uses an open-source templating engine called Smarty. If you are planning on examining, debugging and/or and modifying CiviCRM screens - you'll want to spend some time reviewing Smarty's online documentation.

CiviCRM Search Demystified

A common question on the mailing list has been about CiviCRM search, scalability and speed. Currently basic/advanced search has been designed to try to get as many matches as possible from your contact data. However trying to get as many matches as possible results in some major inefficiencies which does not work for data sets of reasonable size

Currently the default search does the following:

1. For any value typed in the name field, it searches the civicrm_contact table and the civicrm_email table. It connects the two tables using two LEFT JOIN's via the civicrm_location table. LEFT JOIN's are not very efficient sql operators

CiviCRM Architecture - CiviCRM Forms and Wizards

CiviCRM Forms and Wizards (multi-page forms) are based on PEAR's HTML_QuickForm_Controller. (QFC). QFC in turn is based on HTML_QuickForm (QF). It was easier for us to model a single form as a one page wizard, and hence all CiviCRM forms are instances of QFC

The basic Form object is CRM_Core_Form. All forms are derived from this class. Each derived class is expected to implement the following functions

  • function preProcess( ): This function is called before a form is built. All objects needed to build the form should be built in this function.
  • function buildQuickForm( ): This function builds the form. There are some helper functions in CRM_Core_Form to build some elements (Radio, Select, Yes/No etc). Classes typically call a mixture of these helper functions and QF functions directly