Skip to content

Commit

Permalink
ACMS-3507: Updated classes to make sure switchSiteContext medhod work…
Browse files Browse the repository at this point in the history
…s fine.
  • Loading branch information
vishalkhode1 committed Feb 2, 2024
1 parent 12c37b6 commit 4349c5c
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 13 deletions.
60 changes: 56 additions & 4 deletions src/Config/ConfigInitializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Consolidation\Config\Config;
use Consolidation\Config\ConfigInterface;
use Consolidation\Config\Loader\YamlConfigLoader;
use Symfony\Component\Console\Input\InputInterface;

/**
* Config init.
Expand All @@ -29,28 +30,62 @@ class ConfigInitializer {
*/
protected YamlConfigProcessor $processor;

/**
* Input.
*
*/
protected ?InputInterface $input;

/**
* Site.
*/
protected string $site;
protected string $site = "";

/**
* ConfigInitializer constructor.
*
* @param string $site
* Drupal site uri. Ex: site1, site2 etc.
*/
public function __construct(ConfigInterface $config) {
public function __construct(ConfigInterface $config, ?InputInterface $input = NULL) {
$this->config = $config;
$this->loader = new YamlConfigLoader();
$this->processor = new YamlConfigProcessor();
$this->initialize();
$this->input = $input;
}

/**
* Set site.
*
* @param string $site
* Site.
*/
public function setSite(string $site): void {
$this->site = $site;
$this->config->set("site", $site);
$this->config->set("drush.uri", $site);
}

/**
* Determine site.
*/
protected function determineSite(): string {
// If input parameter has site option, then use that.
if ($this->input instanceof InputInterface && $this->input->hasOption("uri") && $this->input->getOption("uri")) {
return $this->input->getOption("uri");
}

return 'default';
}

/**
* Initialize.
*/
public function initialize(): ConfigInitializer {
if (!$this->site) {
$this->site = $this->determineSite();
$this->setSite($this->site);
}
$environment = $this->determineEnvironment();
$this->config->set('environment', $environment);
return $this;
Expand All @@ -62,6 +97,7 @@ public function initialize(): ConfigInitializer {
public function loadAllConfig(): ConfigInitializer {
$this->loadDefaultConfig();
$this->loadProjectConfig();
$this->loadSiteConfig();
return $this;
}

Expand All @@ -82,7 +118,23 @@ protected function loadDefaultConfig(): ConfigInitializer {
* Config.
*/
public function loadProjectConfig(): ConfigInitializer {
$this->processor->extend($this->loader->load($this->config->get('repo.root') . self::CONFIG_FILE_PATH));
$this->processor->extend($this->loader->load($this->config->get('repo.root') . "/drs/config.yml"));
return $this;
}

/**
* Load config.
*
* @return $this
* Config.
*/
public function loadSiteConfig(): ConfigInitializer {
if ($this->site) {
// Since docroot can change in the project, we need to respect that here.
$this->config->replace($this->processor->export());
$this->processor->extend($this->loader->load($this->config->get('docroot') . "/sites/{$this->site}/drs/config.yml"));
}

return $this;
}

Expand Down
2 changes: 0 additions & 2 deletions src/Config/DefaultDrushConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ public function __construct(ConfigInterface $config) {
$config->set('repo.root', $config->get("runtime.project"));
$config->set('docroot', $config->get("options.root"));
$config->set('composer.bin', $config->get("drush.vendor-dir") . '/bin');
$config->set('drush.uri', $config->get("options.uri"));
$config->set('site', $config->get("options.uri"));
if ($config->get("options.ansi")) {
$config->set('drush.ansi', $config->get("options.ansi"));
}
Expand Down
33 changes: 28 additions & 5 deletions src/Drush/Commands/BaseDrushCommands.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Acquia\Drupal\RecommendedSettings\Config\DefaultDrushConfig;
use Acquia\Drupal\RecommendedSettings\Robo\Config\ConfigAwareTrait;
use Acquia\Drupal\RecommendedSettings\Robo\Tasks\LoadTasks;
use Acquia\Drupal\RecommendedSettings\Settings;
use Consolidation\AnnotatedCommand\AnnotationData;
use Consolidation\AnnotatedCommand\Hooks\HookManager;
use Drush\Attributes as Cli;
Expand Down Expand Up @@ -41,7 +42,7 @@ class BaseDrushCommands extends DrushCommands implements ConfigAwareInterface, L
*/
#[CLI\Hook(type: HookManager::INITIALIZE)]
public function init(InputInterface $input, AnnotationData $annotationData): void {
$this->switchSiteContext("default");
$this->initializeConfig();
}

/**
Expand Down Expand Up @@ -98,6 +99,17 @@ protected function invokeCommand(string $command_name, array $args = []): void {
});
}

/**
* An Example command.
*/
#[CLI\Command(name: 'example')]
public function example() {
$settings = new Settings($this->getConfigValue("docroot"), $this->getConfigValue("drush.uri"));
$settings->generate();
// dump($this->getConfigValue("drush.uri"));
// $this->switchSiteContext("xyz");
// dump($this->getConfigValue("site"));
}
/**
* Sets multisite context by settings site-specific config values.
*
Expand All @@ -107,11 +119,22 @@ protected function invokeCommand(string $command_name, array $args = []): void {
*/
public function switchSiteContext(string $site_name) {
$this->logger->debug("Switching site context to <comment>$site_name</comment>.");
$this->initializeConfig($site_name);
}

/**
* Initialize the configuration.
*
* @param string $site_name
* Given site name
*/
protected function initializeConfig(string $site_name = ""): void {
$config = new DefaultDrushConfig($this->getConfig());
$configInitializer = new ConfigInitializer($config);
$config = $configInitializer->loadAllConfig()->processConfig();
$config->set('drush.uri', $site_name);
$config->set('site', $site_name);
$configInitializer = new ConfigInitializer($config, $this->input());
if ($site_name) {
$configInitializer->setSite($site_name);
}
$config = $configInitializer->initialize()->loadAllConfig()->processConfig();
$this->setConfig($config);
}

Expand Down
11 changes: 9 additions & 2 deletions src/Settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Acquia\Drupal\RecommendedSettings\Config\SettingsConfig;
use Acquia\Drupal\RecommendedSettings\Exceptions\SettingsException;
use Acquia\Drupal\RecommendedSettings\Helpers\Filesystem;
use Consolidation\Config\ConfigInterface;

/**
* Core class of the plugin.
Expand All @@ -17,6 +18,11 @@
*/
class Settings {

/**
* Config.
*/
protected ConfigInterface $config;

/**
* Settings warning.
*
Expand Down Expand Up @@ -97,15 +103,16 @@ protected function copySiteSettings(): bool {
*/
public function generate(array $overrideData = []): void {
try {
$site = $this->config->get("site");
// Replace variables in local.settings.php file.
$config = new ConfigInitializer($this->config);
$config = $config->loadAllConfig();
$config->setSite($site);
$config = $config->initialize()->loadAllConfig();
if ($overrideData) {
$config->addConfig($overrideData);
}
$config = $config->processConfig();

$site = $config->get("site");
$docroot = $config->get("docroot");
$this->copyGlobalSettings();
$this->copySiteSettings();
Expand Down

0 comments on commit 4349c5c

Please sign in to comment.