Some of the important directories under CiviCRM svn root are:
- CRM: Most of the CiviCRM specific source code is stored in the directory. This directory is further sub-divided into other directories based on functionality (Core, Utils, Contact, Contribute, Mailing etc).
- xml: CiviCRM schema and the base Data access objects (DAO) are automatically generated from a simplified xml scheme which contains a fair amount of sql and type information. This makes it relatively easy for us to change the sql code, figure out what changes were made in a version and add meta information to a table within PHP.
- api: This directory implements the CiviCRM api functionality. We are moving towards a model where the api code is a thin wrapper around the core code in CRM
- templates: All the smarty templates reside under this directory. This directory closely mirrors the CRM code directory. Most "destination" php pages refer to a corresponding template (tpl) file. This can be overwritten by the individual class using a virtual function
- packages,tools: All the external packages reside in the packages directory. These include PEAR, Smarty, Dojo, PayPal SDK. amavisd resides in the tools directory.
- drupal,joomla: CMS specific code is localized within these two directories. There are a few other system specific files which serve as the link between CiviCRM and a CMS (CRM/Utils/System/Drupal.php,CRM/Utils/System/Joomla.php, CRM/Core/Permission/Drupal.php,CRM/Core/Permission/Joomla.php)
- distmaker: A set of scripts which generate the downloadable tar.gz packages. These scripts also take care of the php5 -> php4 conversion
- test:Location for unit tests, web tests and selenium tests
- extern: There are some php scripts that are called from "outside" the CMS. Examples include soap.php, ipn.php, open.php.