Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
InstallOptionalConfigHooks
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 modulesInstalled
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3namespace Drupal\crm\Hook;
4
5use Drupal\Core\Hook\Attribute\Hook;
6use Drupal\Core\Config\ConfigInstallerInterface;
7use Drupal\Core\Config\FileStorage;
8use Drupal\Core\Extension\ModuleExtensionList;
9
10/**
11 * Hooks relating to installing optional config.
12 */
13class InstallOptionalConfigHooks {
14
15  /**
16   * Constructs a new InstallOptionalConfigHooks object.
17   *
18   * @param \Drupal\Core\Config\ConfigInstallerInterface $configInstaller
19   *   The config installer.
20   * @param \Drupal\Core\Extension\ModuleExtensionList $moduleExtensionList
21   *   The module extension list.
22   */
23  public function __construct(
24    protected ConfigInstallerInterface $configInstaller,
25    protected ModuleExtensionList $moduleExtensionList,
26  ) {}
27
28  /**
29   * Implements hook_modules_installed().
30   */
31  #[Hook('modules_installed')]
32  public function modulesInstalled(array $modules) {
33    $integrations = [
34      'comment',
35      'search',
36    ];
37    if (!array_intersect($integrations, $modules)) {
38      return;
39    }
40
41    // Restrict to only your module's optional config.
42    $storage = new FileStorage($this->moduleExtensionList->getPath('crm') . '/config/optional');
43    foreach ($modules as $module) {
44      if (!in_array($module, $integrations)) {
45        continue;
46      }
47      // Restrict to configs that depend on the module just installed.
48      $this->configInstaller->installOptionalConfig($storage, [
49        'module' => $module,
50      ]);
51    }
52  }
53
54}