CRM16421 CRM 17633: Changes to support WP in it's own directory. Allow for civicrn...
authorKevin Cristiano <kcristiano@tadpole.cc>
Sat, 22 Apr 2017 21:21:10 +0000 (17:21 -0400)
committerKevin Cristiano <kcristiano@tadpole.cc>
Wed, 27 Sep 2017 13:14:55 +0000 (09:14 -0400)
CRM 16421 CRM 17633 - update CRM_Utils_System_WordPress to allow for common install configurations

CRM-16421 - Convert constants to `$civicrm_paths`

Following up on the discussion from
[#10513](https://github.com/civicrm/civicrm-core/pull/10513), this converts
the proposed constants `CIVICRM_UF_WP_BASEURL` and `CIVICRM_UF_ADMINURL` to
variables in the `Paths` system.

A few benefits:
 * Reduces code duplication between `civicrm.php` and `WordPress.php`.
 * Can construct sub-paths with prettier notation (`Civi::paths()->getUrl('[wp.frontend]/foo.txt')`)
 * Has options to output relative or absolute URLs
 * Can expand on `Paths` to provide more inspection/validation

Notes:

 * `CIVICRM_UF_WP_BASEURL` => `wp.frontend.base`
 * `CIVICRM_UF_ADMINURL` => `wp.backend.base`

----------------------------------------
* CRM-16421: Work to get CiviCRM for WordPress in WordPress' official Repository
  https://issues.civicrm.org/jira/browse/CRM-16421

CRM-16421 - Assimilate `civicrm.settings.extra.php` into `civicrm.settings.php`

----------------------------------------
* CRM-16421: Work to get CiviCRM for WordPress in WordPress' official Repository
  https://issues.civicrm.org/jira/browse/CRM-16421

CRM-17633 merge current master changes to civicrm.settings.php.template

CRM/Utils/System/WordPress.php
Civi/Core/Paths.php
install/civicrm.php
templates/CRM/common/civicrm.settings.php.template

index bfab40510f320e4b51ecaeffba88a7a71cb1e09f..579f647d28b52cd4abae1a57cc00e4221bfeb0f5 100644 (file)
@@ -266,6 +266,12 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
   }
 
   /**
+   * 27-09-2016
+   * CRM-16421 CRM-17633 WIP Changes to support WP in it's own directory
+   * https://wiki.civicrm.org/confluence/display/CRM/WordPress+installed+in+its+own+directory+issues
+   * For now leave hard coded wp-admin references.
+   * TODO: remove wp-admin references and replace with admin_url() in the future.  Look at best way to get path to admin_url
+   *
    * @param $absolute
    * @param $frontend
    * @param $forceBackend
@@ -274,22 +280,12 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
    */
   private function getBaseUrl($absolute, $frontend, $forceBackend) {
     $config = CRM_Core_Config::singleton();
-
-    $base = $absolute ? $config->userFrameworkBaseURL : $config->useFrameworkRelativeBase;
-
     if ((is_admin() && !$frontend) || $forceBackend) {
-      $base .= 'wp-admin/admin.php';
-      return $base;
+      return Civi::paths()->getUrl('[wp.backend]/.', $absolute ? 'absolute' : 'relative');
     }
-    elseif (defined('CIVICRM_UF_WP_BASEPAGE')) {
-      $base .= CIVICRM_UF_WP_BASEPAGE;
-      return $base;
-    }
-    elseif (isset($config->wpBasePage)) {
-      $base .= $config->wpBasePage;
-      return $base;
+    else {
+      return Civi::paths()->getUrl('[wp.frontend]/.', $absolute ? 'absolute' : 'relative');
     }
-    return $base;
   }
 
   /**
index 13efe656f7171fb06c6289ebf3617c9696d50cc3..fc2f6706934fe3036567e0611fef07d20aa6021d 100644 (file)
@@ -30,6 +30,7 @@ class Paths {
    * Class constructor.
    */
   public function __construct() {
+    $paths = $this;
     $this
       ->register('civicrm.root', function () {
         return \CRM_Core_Config::singleton()->userSystem->getCiviSourceStorage();
@@ -55,6 +56,24 @@ class Paths {
       ->register('civicrm.files', function () {
         return \CRM_Core_Config::singleton()->userSystem->getDefaultFileStorage();
       })
+      ->register('wp.frontend.base', function () {
+        return array('url' => CIVICRM_UF_BASEURL);
+      })
+      ->register('wp.frontend', function () use ($paths) {
+        $config = \CRM_Core_Config::singleton();
+        $suffix = defined('CIVICRM_UF_WP_BASEPAGE') ? CIVICRM_UF_WP_BASEPAGE : $config->wpBasePage;
+        return array(
+          'url' => $paths->getVariable('wp.frontend.base', 'url') . $suffix,
+        );
+      })
+      ->register('wp.backend.base', function () {
+        return array('url' => CIVICRM_UF_BASEURL . 'wp-admin/');
+      })
+      ->register('wp.backend', function () use ($paths) {
+        return array(
+          'url' => $paths->getVariable('wp.backend.base', 'url') . 'admin.php',
+        );
+      })
       ->register('cms', function () {
         return array(
           'path' => \CRM_Core_Config::singleton()->userSystem->cmsRootPath(),
index 50e42710811059fb85a438bcf007c5259777be22..591079d3cd73cb6a31f42d3617c1fb8b6d7c4ca7 100644 (file)
@@ -84,8 +84,7 @@ function civicrm_main(&$config) {
 
   if ($installType == 'drupal') {
     $siteDir = isset($config['site_dir']) ? $config['site_dir'] : getSiteDir($cmsPath, $_SERVER['SCRIPT_FILENAME']);
-    civicrm_setup($cmsPath . DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR .
-      $siteDir . DIRECTORY_SEPARATOR . 'files'
+    civicrm_setup($cmsPath . DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . $siteDir . DIRECTORY_SEPARATOR . 'files'
     );
   }
   elseif ($installType == 'backdrop') {
@@ -139,7 +138,6 @@ function civicrm_main(&$config) {
   civicrm_write_file($configFile,
     $string
   );
-
 }
 
 /**
@@ -217,6 +215,9 @@ function civicrm_config(&$config) {
   global $compileDir;
   global $tplPath, $installType;
 
+  // Ex: $extraSettings[] = '$civicrm_settings["domain"]["foo"] = "bar";';
+  $extraSettings = array();
+
   $params = array(
     'crmRoot' => $crmPath,
     'templateCompileDir' => $compileDir,
@@ -274,6 +275,18 @@ function civicrm_config(&$config) {
 
     // CRM-12386
     $params['crmRoot'] = addslashes($params['crmRoot']);
+    //CRM-16421
+
+    $extraSettings[] = sprintf('$civicrm_paths[\'wp.frontend.base\'][\'url\'] = %s;', var_export(home_url() . '/', 1));
+    $extraSettings[] = sprintf('$civicrm_paths[\'wp.backend.base\'][\'url\'] = %s;', var_export(admin_url(), 1));
+    $extraSettings[] = sprintf('$civicrm_setting[\'URL Preferences\'][\'userFrameworkResourceURL\'] = %s;', var_export(plugin_dir_url(CIVICRM_PLUGIN_FILE) . 'civicrm', 1));
+  }
+
+  if ($extraSettings) {
+    $params['extraSettings'] = "Additional settings generated by installer:\n" . implode("\n", $extraSettings);
+  }
+  else {
+    $params['extraSettings'] = "";
   }
 
   $params['siteKey'] = md5(rand() . mt_rand() . rand() . uniqid('', TRUE) . $params['baseURL']);
index b580e27638bf033407c309d35cc81862a94a7661..507b96b13308d78e467662d8c781816ae5e035d1 100644 (file)
@@ -28,7 +28,7 @@
 /**
  * CiviCRM Configuration File.
  */
-global $civicrm_setting;
+global $civicrm_root, $civicrm_setting, $civicrm_paths;
 
 /**
  * Content Management System (CMS) Host:
@@ -76,6 +76,8 @@ if (!defined('CIVICRM_UF_DSN') && CIVICRM_UF !== 'UnitTests') {
   define( 'CIVICRM_UF_DSN'           , 'mysql://%%CMSdbUser%%:%%CMSdbPass%%@%%CMSdbHost%%/%%CMSdbName%%?new_link=true');
 }
 
+// %%extraSettings%%
+
 /**
  * CiviCRM Database Settings
  *