Commit | Line | Data |
---|---|---|
4bcd4c62 TO |
1 | <?php |
2 | /** | |
3 | * @file | |
4 | * | |
5 | * Determine default settings for Drupal 8. | |
6 | */ | |
7 | ||
8 | if (!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 | ||
71 | function _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 | ||
84 | function _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 | } |