standalone: merge other changes
authorRich Lott / Artful Robot <code.commits@artfulrobot.uk>
Thu, 2 Feb 2023 17:30:46 +0000 (17:30 +0000)
committerRich Lott / Artful Robot <code.commits@artfulrobot.uk>
Fri, 23 Jun 2023 10:47:57 +0000 (11:47 +0100)
CRM/Utils/System/Standalone.php
setup/plugins/init/Standalone.civi-setup.php

index 42932a86a27374edea652cae730fa98bced15303..17f038dbaa20cbd4486a84f125f899269b3eff37 100644 (file)
@@ -212,7 +212,9 @@ class CRM_Utils_System_Standalone extends CRM_Utils_System_Base {
   }
 
   /**
-   * Bootstrap the non-existent CMS
+   * Bootstrap composer libs.
+   *
+   * This is used by cv and civix, but not I (artfulrobot) think, in the main http requests.
    *
    * @param array $params
    *   Either uid, or name & pass.
@@ -226,14 +228,30 @@ class CRM_Utils_System_Standalone extends CRM_Utils_System_Base {
    * @Todo Handle setting cleanurls configuration for CiviCRM?
    */
   public function loadBootStrap($params = [], $loadUser = TRUE, $throwError = TRUE, $realPath = NULL) {
-    static $run_once = FALSE;
-    if ($run_once) {
+    static $runOnce;
+    if (!isset($runOnce)) {
+      $runOnce = TRUE;
       return TRUE;
     }
-    else {
-      $run_once = TRUE;
+
+    if (!($root = $this->cmsRootPath())) {
+      // What does this guard against?
+      return FALSE;
+    }
+    chdir($root);
+
+    // Create a mock $request object
+    require_once $root . '../vendor/autoload.php'; /* assumes $root to be the _web_ root path, not the project root path. */
+
+    if ($loadUser) {
+      // @todo
+      // if (!empty($params['uid']) && ...) {
+      //   $this->loadUser($username);
+      // }
+      // elseif (!empty($params['name']) && !empty($params['pass']) && ...can authenticate...) {
+      //   $this->loadUser($params['name']);
+      // }
     }
-    // @todo ?
     return TRUE;
   }
 
@@ -265,9 +283,7 @@ class CRM_Utils_System_Standalone extends CRM_Utils_System_Base {
     if (!empty($civicrm_paths['cms.root']['path'])) {
       return $civicrm_paths['cms.root']['path'];
     }
-
-    // @todo?
-    throw new \RuntimeException("Standalone requires that you set \$civicrm_paths['cms.root']['path'] in civicrm.settings.php");
+    throw new \RuntimeException("Standalone requires the path is set for now. Set \$civicrm_paths['cms.root']['path'] in civicrm.settings.php to the webroot.");
   }
 
   /**
index 6441d190a93cbe5cb96f396ec36c53553b35d253..b895ef0b07f664e281000afe3d2ac731a30f5cb4 100644 (file)
@@ -29,6 +29,10 @@ if (!defined('CIVI_SETUP')) {
     }
     \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'init'));
 
+    // NOTE: in here, $model->webroot refers to the root of the *application*, not the actual webroot as reachable by http.
+    // Typically this means that $model->webroot might be like /var/www/example.org/ and the actual web root would be
+    // /var/www/example.org/web/
+
     // Compute settingsPath.
     // We use this structure: /var/www/standalone/data/{civicrm.settings.php,templates_c}
     // to reduce the number of directories that admins have to chmod
@@ -37,10 +41,10 @@ if (!defined('CIVI_SETUP')) {
 
     // Compute DSN.
     $model->db = $model->cmsDb = [
-      'server' => 'localhost',
-      'username' => '',
-      'password' => '',
-      'database' => '',
+      'server' => 'mysql',
+      'username' => 'loner',
+      'password' => 'somepass',
+      'database' => 'standalone_civicrm',
     ];
 
     // Compute URLs (@todo?)