Overview
Status of install and setup subsystems
The CiviCRM setup subsystem is a refactored/rewritten version of the older install subsystem.
There is a Gitlab issue for tracking the migration from install to setup.
The CiviCRM setup subsystem facilitates installation and configuration. It aims to support multiple installers, such
as a generic CLI (cv core:install and cv core:uninstall), a generic web-based installer, and specialized/scripted installers
for different environments and use-cases.
Key features:
- The subsystem can be used by other projects -- such as
cv,civicrm-drupal,civicrm-wordpress-- to provide an installation process. - It is a leap. It can coexist with the old installer.
- Example: The
civicrm-wordpressintegration is phasing-in support for the new installer. By default, it uses the old installer. If you create a filecivicrm/.use-civicrm-setup, then it will use the new installer.
- Example: The
- It has minimal external dependencies. (The codebase for CiviCRM and its dependencies must be available -- but nothing else is needed.)
General design:
- Installers call a high-level API (Civi\Setup) which supports all major installation tasks/activities -- such as:
- Check system requirements (
$setup->checkRequirements()) - Check installation status (
$setup->checkInstalled()) - Install data files (
$setup->installFiles()) - Install database (
$setup->installDatabase())
- Check system requirements (
- A data-model (Civi\Setup\Model) lists all the standard configuration parameters. This data-model is available when executing each task. For example, it includes:
- The path to CiviCRM's code (
$model->srcPath) - The system language (
$model->lang) - The DB credentials (
$model->db)
- The path to CiviCRM's code (
- Each major task corresponds to an event -- such as:
civi.setup.checkRequirementscivi.setup.checkInstalledcivi.setup.installFilescivi.setup.installDatabase
- Plugins (
plugins/*/*.civi-setup.php) work with the model and the events. For example:- The plugin
init/WordPress.civi-setup.phpruns during initialization (civi.setup.init). It reads the WordPress config (e.g.get_locale()andDB_HOST) then updates the model ($model->langand$model->db). - The plugin
installDatabase/SetLanguage.civi-setup.phpruns when installing the database (civi.setup.installDatabase). It reads the$model->langand updates various Civi settings.
- The plugin