Skip to content
This repository has been archived by the owner on Aug 1, 2021. It is now read-only.

Commit

Permalink
Merge pull request #11 from monishdeb/issue-10
Browse files Browse the repository at this point in the history
Implement D8 initialization for civicrm-setup
  • Loading branch information
totten authored Feb 20, 2018
2 parents 528a1e2 + b0a31d2 commit 92edff3
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 44 deletions.
45 changes: 1 addition & 44 deletions plugins/init/Drupal.civi-setup.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
// Compute settingsPath.
$drupalSystem = new CRM_Utils_System_Drupal();
$cmsPath = $drupalSystem->cmsRootPath();
$siteDir = _drupal_civisetup_getSiteDir($cmsPath, $_SERVER['SCRIPT_FILENAME']);
$siteDir = \Civi\Setup\DrupalUtil::getDrupalSiteDir($cmsPath);
$model->settingsPath = implode(DIRECTORY_SEPARATOR,
[$cmsPath, 'sites', $siteDir, 'civicrm.settings.php']);

Expand Down Expand Up @@ -89,46 +89,3 @@ function _drupal_civisetup_getPrivateFiles() {

return $filePrivatePath;
}

/**
* @param $cmsPath
* @param $str
*
* @return string
*/
function _drupal_civisetup_getSiteDir($cmsPath, $str) {
static $siteDir = '';

if ($siteDir) {
return $siteDir;
}

$sites = CIVICRM_DIRECTORY_SEPARATOR . 'sites' . CIVICRM_DIRECTORY_SEPARATOR;
$modules = CIVICRM_DIRECTORY_SEPARATOR . 'modules' . CIVICRM_DIRECTORY_SEPARATOR;
preg_match("/" . preg_quote($sites, CIVICRM_DIRECTORY_SEPARATOR) .
"([\-a-zA-Z0-9_.]+)" .
preg_quote($modules, CIVICRM_DIRECTORY_SEPARATOR) . "/",
$_SERVER['SCRIPT_FILENAME'], $matches
);
$siteDir = isset($matches[1]) ? $matches[1] : 'default';

if (strtolower($siteDir) == 'all') {
// For this case - use drupal's way of finding out multi-site directory
$uri = explode(CIVICRM_DIRECTORY_SEPARATOR, $_SERVER['SCRIPT_FILENAME']);
$server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.')))));
for ($i = count($uri) - 1; $i > 0; $i--) {
for ($j = count($server); $j > 0; $j--) {
$dir = implode('.', array_slice($server, -$j)) . implode('.', array_slice($uri, 0, $i));
if (file_exists($cmsPath . CIVICRM_DIRECTORY_SEPARATOR .
'sites' . CIVICRM_DIRECTORY_SEPARATOR . $dir
)) {
$siteDir = $dir;
return $siteDir;
}
}
}
$siteDir = 'default';
}

return $siteDir;
}
83 changes: 83 additions & 0 deletions plugins/init/Drupal8.civi-setup.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?php
/**
* @file
*
* Determine default settings for Drupal 8.
*/

if (!defined('CIVI_SETUP')) {
exit("Installation plugins must only be loaded by the installer.\n");
}

\Civi\Setup::dispatcher()
->addListener('civi.setup.checkAuthorized', function (\Civi\Setup\Event\CheckAuthorizedEvent $e) {
$model = $e->getModel();
if ($model->cms !== 'Drupal8' || !function_exists('user_access')) {
return;
}

\Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'checkAuthorized'));
$e->setAuthorized(user_access('administer modules'));
});

\Civi\Setup::dispatcher()
->addListener('civi.setup.init', function (\Civi\Setup\Event\InitEvent $e) {
$model = $e->getModel();
if ($model->cms !== 'Drupal8') {
return;
}
\Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'init'));

$cmsPath = \Drupal::root();

// Compute settingsPath.
$siteDir = \Civi\Setup\DrupalUtil::getDrupalSiteDir($cmsPath);
$model->settingsPath = implode(DIRECTORY_SEPARATOR, [$cmsPath, 'sites', $siteDir, 'civicrm.settings.php']);

// Compute DSN.
$databases = \Drupal\Core\Database\Database::getConnectionInfo();
$model->db = $model->cmsDb = array(
'server' => \Civi\Setup\DbUtil::encodeHostPort($databases['default']['host'], $databases['default']['port'] ?: NULL),
'username' => $databases['default']['username'],
'password' => $databases['default']['password'],
'database' => $databases['default']['database'],
);

// Compute cmsBaseUrl.
global $base_url, $base_path;
$model->cmsBaseUrl = $base_url . $base_path;

// Compute general paths
$model->paths['civicrm.files']['url'] = implode(DIRECTORY_SEPARATOR, [$base_url, \Drupal\Core\StreamWrapper\PublicStream::basePath(), 'civicrm']);
$model->paths['civicrm.files']['path'] = implode(DIRECTORY_SEPARATOR, [_drupal8_civisetup_getPublicFiles(), 'civicrm']);

// Compute templateCompileDir.
$model->templateCompilePath = implode(DIRECTORY_SEPARATOR, [_drupal8_civisetup_getPrivateFiles(), 'civicrm', 'templates_c']);

// Compute default locale.
global $language;
$model->lang = \Civi\Setup\LocaleUtil::pickClosest($language->langcode, $model->getField('lang', 'options'));
});

function _drupal8_civisetup_getPublicFiles() {
$filePublicPath = realpath(\Drupal\Core\StreamWrapper\PublicStream::basePath());

if (!CRM_Utils_File::isAbsolute($filePublicPath)) {
$filePublicPath = \Drupal::root() . DIRECTORY_SEPARATOR . $filePublicPath;
}

return $filePublicPath;
}

function _drupal8_civisetup_getPrivateFiles() {
$filePrivatePath = realpath(\Drupal\Core\StreamWrapper\PrivateStream::basePath());

if (!$filePrivatePath) {
$filePrivatePath = _drupal8_civisetup_getPublicFiles();
}
elseif ($filePrivatePath && !CRM_Utils_File::isAbsolute($filePrivatePath)) {
$filePrivatePath = \Drupal::root() . DIRECTORY_SEPARATOR . $filePrivatePath;
}

return $filePrivatePath;
}
48 changes: 48 additions & 0 deletions src/Setup/DrupalUtil.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php
namespace Civi\Setup;

class DrupalUtil {

/**
* @param $cmsPath
*
* @return string
*/
public static function getDrupalSiteDir($cmsPath) {
static $siteDir = '';

if ($siteDir) {
return $siteDir;
}

$sites = CIVICRM_DIRECTORY_SEPARATOR . 'sites' . CIVICRM_DIRECTORY_SEPARATOR;
$modules = CIVICRM_DIRECTORY_SEPARATOR . 'modules' . CIVICRM_DIRECTORY_SEPARATOR;
preg_match("/" . preg_quote($sites, CIVICRM_DIRECTORY_SEPARATOR) .
"([\-a-zA-Z0-9_.]+)" .
preg_quote($modules, CIVICRM_DIRECTORY_SEPARATOR) . "/",
$_SERVER['SCRIPT_FILENAME'], $matches
);
$siteDir = isset($matches[1]) ? $matches[1] : 'default';

if (strtolower($siteDir) == 'all') {
// For this case - use drupal's way of finding out multi-site directory
$uri = explode(CIVICRM_DIRECTORY_SEPARATOR, $_SERVER['SCRIPT_FILENAME']);
$server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.')))));
for ($i = count($uri) - 1; $i > 0; $i--) {
for ($j = count($server); $j > 0; $j--) {
$dir = implode('.', array_slice($server, -$j)) . implode('.', array_slice($uri, 0, $i));
if (file_exists($cmsPath . CIVICRM_DIRECTORY_SEPARATOR .
'sites' . CIVICRM_DIRECTORY_SEPARATOR . $dir
)) {
$siteDir = $dir;
return $siteDir;
}
}
}
$siteDir = 'default';
}

return $siteDir;
}

}

0 comments on commit 92edff3

Please sign in to comment.