We conducted our first ever developer bootcamp for a group of developers from TechSoup. The bootcamp was spread over two days and four sessions. Each session was approx three hours long. Overall we felt the bootcamp was a success. We also ended up with a couple of new features for CiviCRM v2.0.
- The first session was a quick introduction to some of the basic and advanced features of CiviCRM. We also covered the schema changes in v2.0. We ended the session with a quick overview of the code structure along with some of the basic building blocks in the system (page, form, selector, DAO and BAO objects)
- The second session focussed on some hands on coding. One of their needs was the ability to share option groups among custom fields, CRM-2478. The database model had support for this feature. We had not exposed it in the UI. We spent the next few hours designing and writing the needed code to implement this feature in the create, edit and view pages. It proved to be a good exercise in touching various pieces of the code base, at the form, page and template level.
- We spent the next session focussed on allowing the civicrm admin to customize the form validation process. This was split into two parts. The first part was exposing the element 'id' in the smarty '$form' variable so they could use the jQuery validator, CRM-2479. Extending QuickForm to output 'id' turned out to be fairly easy once we found the right place to do so.
- We then tried to solve the problem of how we could have any module validate any CiviCRM form. We went through a few proposals before concluding that we could solve the problem very cleanly by using a 'civicrm_validate' hook, CRM-2480. We did a few code iterations before figuring out a clean implementation at the form level which calls this hook for all CiviCRM forms. It was pretty cool to realize we did not need to change all form code :)
- To end the bootcamp, we gave a quick overview of the BIRT reporting solution and demo'ed a few of the our default civicrm reports. While our sample reports dont do full justice to the power of BIRT, it does give folks an idea of what is possible using an external reporting engine. We do hope at some point, the community steps up and builds a few awesome reports :)
Thanx to the folks at techsoup/compumentor for participating in the bootcamp. We are quite pleased with the outcome and very happy that we added some new features to v2.0.
Sounds like a productive session!
If there is any material which you could share from the overview of the code structure it would make a useful contribution to the wiki documentation. The entity relationship diagram currently in the wiki helps to understand the database schema, but I've found the learning curve for understanding the organization of the code, uses of common variables, and operation of the basic building blocks (page, form, etc..) long and steady when just parsing the source code.
A Quick Start CiviCRM Programming Guide would bump up the quantity and quality of contributions from community outside the core team.
Thanks to Lobo, Kurund and Dave for putting on a very productive session. I'm excited about the _civicrm_validate hook, and hope it will be used on many civicrm installs to add extra validation logic to the civicrm forms.
CiviCRM is a great application and I'm glad to see that the road map contains a lot of new key features for the version 2.0 (especially the field validation).