diff --git a/docs/basics/filesystem.md b/docs/basics/filesystem.md new file mode 100644 index 0000000000000000000000000000000000000000..30580e3aa307a5dd2bca340e463f5b7fa737447a --- /dev/null +++ b/docs/basics/filesystem.md @@ -0,0 +1,110 @@ +# File system + +The file structure of the content management systems that CiviCRM operates in +differs among the different content management systems it installs within, but +the general concepts are the same. One directory contains the CiviCRM +**codebase** (including CMS-specific code to integrate with the website), +another directory contains **local files** that are site-specific, and the site +will have a CiviCRM **settings file**. + +## Codebase + +The codebase consists of the common CiviCRM code (found in the +[civicrm-core](https://github.com/civicrm/civicrm-core/) and +[civicrm-packages](https://github.com/civicrm/civicrm-packages/) repositories) +along with the code to integrate with the CMS. Obviously, Drupal and Backdrop +modules, Joomla components, and WordPress plugins have different structures, so +the [civicrm-drupal](https://github.com/civicrm/civicrm-drupal/), +[civicrm-backdrop](https://github.com/civicrm/civicrm-backdrop/), +[civicrm-joomla](https://github.com/civicrm/civicrm-joomla/), and +[civicrm-wordpress](https://github.com/civicrm/civicrm-wordpress/) repositories +contain the code connecting CiviCRM to the CMS along with some CMS-specific +features. + +### Drupal and Backdrop + +The CiviCRM module is typically found in the `sites/all/modules/civicrm` +directory. As with any module, it is possible to have CiviCRM run from the +`modules` directory within some other subdirectory of `sites` (for site-specific +use), a subdirectory of either of these locations, or within the root `modules` +directory (which is *not advisable*). + +The `sites/all/modules/civicrm/drupal` directory corresponds to the +[civicrm-drupal](https://github.com/civicrm/civicrm-drupal/) repository. It +contains `civicrm.module`, the actual module file, along with the role sync +modules, blocks, and drush and views integration. + +### Joomla + +CiviCRM's codebase exists in *two* places within Joomla: + + - A front-end component at `components/com_civicrm` + - A back-end component at `administrator/components/com_civicrm` + +The back-end component contains the common CiviCRM code, in +`administrator/components/com_civicrm/civicrm`. The +[civicrm-joomla](https://github.com/civicrm/civicrm-joomla/) repository contains +a `site` directory for the front-end files and an `admin` directory for the +back-end files. + +### WordPress + +The CiviCRM plugin is found in `wp-content/plugins/civicrm`. This corresponds +to the [civicrm-wordpress](https://github.com/civicrm/civicrm-wordpress/) +repository, containing the plugin file as well as WP-CLI integration. The +common CiviCRM codebase is found at `wp-content/plugins/civicrm/civicrm`. + +## Local files + +CiviCRM also needs a files directory for storing a variety of site-specific +files, including uploaded files, logs, and the template cache. This directory +is located away from the codebase in a location that is unlikely to be +overwritten during upgrades. + +### Drupal and Backdrop + +CiviCRM stores its files in a folder named `civicrm` within the site-specific +files directory. This is commonly `sites/default/files/civicrm`, though it +could be `sites/example.org/files/civicrm` if such a folder exists. + +### Joomla + +The CiviCRM local files are within the `media/civicrm` directory. + +### WordPress + +Newly-installed CiviCRM sites on WordPress have their local files at +`wp-content/uploads/civicrm`. Many older sites use the previous default: +`wp-content/plugins/files/civicrm`. + +## Settings file + +CiviCRM's database connection, base URL, site key, CMS, and file paths are defined in `civicrm.settings.php`. + +### Drupal and Backdrop + +The `civicrm.settings.php` file will be a sibling of Drupal's `settings.php`, +commonly at `sites/default/civicrm.settings.php`, or +`sites/example.org/civicrm.settings.php` in multi-site. + +### Joomla + +There are two instances of `civicrm.settings.php` in Joomla, within each of the +components: + + - front-end at `components/com_civicrm/civicrm.settings.php` + - back-end at `administrator/components/com_civicrm/civicrm.settings.php` + +The files are *nearly* identical. The one difference is that the front-end file +has the site's normal base URL, while the back-end file has `/administrator/` on +the end, pointing to the back-end of the site. + +### WordPress + +Newly-installed CiviCRM sites on WordPress have the settings file at +`wp-content/uploads/civicrm/civicrm.settings.php`. Many older sites, however, +put the settings file within the CiviCRM plugin folder at +`wp-content/plugins/civicrm/civicrm.settings.php`. This latter location can be +dangerous when upgrading: it is important in this case to keep the `civicrm` +folder until the upgrade is complete and the site is verified to be working +properly.