SetupController - Need better bootstrap to support localization
authorTim Otten <totten@civicrm.org>
Sat, 4 Jul 2020 03:54:49 +0000 (20:54 -0700)
committerTim Otten <totten@civicrm.org>
Mon, 6 Jul 2020 08:56:13 +0000 (01:56 -0700)
While trying the setup UI on Backdrop, I found that changing the language
led to a crash.  The problem: it needed to load the `l10n` files, which led
to more path resolution, which led to failures - because `civicrm.settings.php`
hasn't been loaded. (It doesn't exist yet!)

Fortunately, most of the needful information is available.  The
`Setup::init()` should have found the info and put it into `$model`.  We
just need to load the configuration into the right globals/constants.

setup/src/Setup/UI/SetupController.php

index 444bea24d315213819f4157212ebb45f8d01f566..032582ff992e3e4bf16d1e6733b0a1b5c3893efd 100644 (file)
@@ -137,14 +137,27 @@ class SetupController implements SetupControllerInterface {
    * Partially bootstrap Civi services (such as localization).
    */
   protected function boot($method, $fields) {
+    /** @var \Civi\Setup\Model $model */
     $model = $this->setup->getModel();
 
     define('CIVICRM_UF', $model->cms);
+    define('CIVICRM_TEMPLATE_COMPILEDIR', $model->templateCompilePath);
+    define('CIVICRM_UF_BASEURL', $model->cmsBaseUrl);
+
+    global $civicrm_root;
+    $civicrm_root = $model->srcPath;
 
     // Set the Locale (required by CRM_Core_Config)
     global $tsLocale;
     $tsLocale = 'en_US';
 
+    global $civicrm_paths;
+    foreach ($model->paths as $pathVar => $pathValues) {
+      foreach (['url', 'path'] as $aspectName => $aspectValue) {
+        $civicrm_paths[$pathVar][$aspectName] = $aspectValue;
+      }
+    }
+
     // CRM-16801 This validates that lang is valid by looking in $langs.
     // NB: the variable is initial a $_REQUEST for the initial page reload,
     // then becomes a $_POST when the installation form is submitted.