diff --git a/CRM/Utils/System/WordPress.php b/CRM/Utils/System/WordPress.php index bfab40510f32..579f647d28b5 100644 --- a/CRM/Utils/System/WordPress.php +++ b/CRM/Utils/System/WordPress.php @@ -266,6 +266,12 @@ public function url( } /** + * 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 @@ public function url( */ 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; } /** diff --git a/Civi/Core/Paths.php b/Civi/Core/Paths.php index 13efe656f717..fc2f6706934f 100644 --- a/Civi/Core/Paths.php +++ b/Civi/Core/Paths.php @@ -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 @@ public function __construct() { ->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(), diff --git a/install/civicrm.php b/install/civicrm.php index 50e427108110..591079d3cd73 100644 --- a/install/civicrm.php +++ b/install/civicrm.php @@ -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']); diff --git a/templates/CRM/common/civicrm.settings.php.template b/templates/CRM/common/civicrm.settings.php.template index b580e27638bf..507b96b13308 100644 --- a/templates/CRM/common/civicrm.settings.php.template +++ b/templates/CRM/common/civicrm.settings.php.template @@ -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 *