Merge pull request #19594 from eileenmcnaughton/535m
[civicrm-core.git] / setup / plugins / init / Drupal8.civi-setup.php
CommitLineData
4bcd4c62
TO
1<?php
2/**
3 * @file
4 *
5 * Determine default settings for Drupal 8.
6 */
7
8if (!defined('CIVI_SETUP')) {
9 exit("Installation plugins must only be loaded by the installer.\n");
10}
11
12\Civi\Setup::dispatcher()
13 ->addListener('civi.setup.checkAuthorized', function (\Civi\Setup\Event\CheckAuthorizedEvent $e) {
14 $model = $e->getModel();
15 if ($model->cms !== 'Drupal8' || !is_callable(['Drupal', 'currentUser'])) {
16 return;
17 }
18
19 \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'checkAuthorized'));
20 $e->setAuthorized(\Civi\Setup\DrupalUtil::isDrush() || \Drupal::currentUser()->hasPermission('administer modules'));
21 });
22
23\Civi\Setup::dispatcher()
24 ->addListener('civi.setup.init', function (\Civi\Setup\Event\InitEvent $e) {
25 $model = $e->getModel();
26 if ($model->cms !== 'Drupal8' || !is_callable(['Drupal', 'currentUser'])) {
27 return;
28 }
29 \Civi\Setup::log()->info(sprintf('[%s] Handle %s', basename(__FILE__), 'init'));
30
31 $cmsPath = \Drupal::root();
32
33 // Compute settingsPath.
34 $siteDir = \Civi\Setup\DrupalUtil::getDrupalSiteDir($cmsPath);
eb401bd4 35 $model->settingsPath = implode(DIRECTORY_SEPARATOR, [$cmsPath, $siteDir, 'civicrm.settings.php']);
4bcd4c62
TO
36
37 if (($loadGenerated = \Drupal\Core\Site\Settings::get('civicrm_load_generated', NULL)) !== NULL) {
38 $model->loadGenerated = $loadGenerated;
39 }
40
41 // Compute DSN.
42 $connectionOptions = \Drupal::database()->getConnectionOptions();
fc2b5ff8 43 $ssl_params = \Civi\Setup\DrupalUtil::guessSslParams($connectionOptions);
7fde25fc 44 // @todo Does Drupal support unixsocket in config? Set 'server' => 'unix(/path/to/socket.sock)'
4bcd4c62 45 $model->db = $model->cmsDb = array(
8de4879b 46 'server' => \Civi\Setup\DbUtil::encodeHostPort($connectionOptions['host'], $connectionOptions['port'] ?? NULL),
4bcd4c62
TO
47 'username' => $connectionOptions['username'],
48 'password' => $connectionOptions['password'],
49 'database' => $connectionOptions['database'],
fc2b5ff8 50 'ssl_params' => empty($ssl_params) ? NULL : $ssl_params,
4bcd4c62
TO
51 );
52
53 // Compute cmsBaseUrl.
54 if (empty($model->cmsBaseUrl)) {
55 global $base_url, $base_path;
56 $model->cmsBaseUrl = $base_url . $base_path;
57 }
58
59 // Compute general paths
60 $model->paths['civicrm.files']['url'] = implode('/', [$model->cmsBaseUrl, \Drupal\Core\StreamWrapper\PublicStream::basePath(), 'civicrm']);
61 $model->paths['civicrm.files']['path'] = implode(DIRECTORY_SEPARATOR, [_drupal8_civisetup_getPublicFiles(), 'civicrm']);
62
63 // Compute templateCompileDir.
64 $model->templateCompilePath = implode(DIRECTORY_SEPARATOR, [_drupal8_civisetup_getPrivateFiles(), 'civicrm', 'templates_c']);
65
66 // Compute default locale.
67 $langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();
68 $model->lang = \Civi\Setup\LocaleUtil::pickClosest($langcode, $model->getField('lang', 'options'));
69 });
70
71function _drupal8_civisetup_getPublicFiles() {
72 $filePublicPath = \Drupal\Core\StreamWrapper\PublicStream::basePath();
73
74 if (!$filePublicPath) {
75 throw new \Civi\Setup\Exception\InitException("Failed to identify public files path");
76 }
77 elseif (!CRM_Utils_File::isAbsolute($filePublicPath)) {
78 $filePublicPath = \Drupal::root() . DIRECTORY_SEPARATOR . $filePublicPath;
79 }
80
81 return $filePublicPath;
82}
83
84function _drupal8_civisetup_getPrivateFiles() {
85 $filePrivatePath = \Drupal\Core\StreamWrapper\PrivateStream::basePath();
86
87 if (!$filePrivatePath) {
88 $filePrivatePath = _drupal8_civisetup_getPublicFiles();
89 }
90 elseif ($filePrivatePath && !CRM_Utils_File::isAbsolute($filePrivatePath)) {
91 $filePrivatePath = \Drupal::root() . DIRECTORY_SEPARATOR . $filePrivatePath;
92 }
93
94 return $filePrivatePath;
95}