Skip to content

Commit

Permalink
[console] Detect ConfigurationDirectories. (#78)
Browse files Browse the repository at this point in the history
  • Loading branch information
jmolivas authored Nov 8, 2016
1 parent 08a1655 commit 60ad2cd
Showing 1 changed file with 78 additions and 40 deletions.
118 changes: 78 additions & 40 deletions src/Utils/ConfigurationManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,72 +17,81 @@ class ConfigurationManager
*/
private $configuration = null;

/**
* @var string
*/
private $applicationDirectory = null;

/**
* @var array
*/
private $missingConfigurationFiles = [];

/**
* @var array
*/
private $configurationDirectories = [];

/**
* @param $applicationDirectory
* @return $this
*/
public function loadConfiguration($applicationDirectory)
{
$this->applicationDirectory = $applicationDirectory;

$input = new ArgvInput();
$root = $input->getParameterOption(['--root'], null);

$configFiles[] = $this->getConsoleDirectory().'config.yml';
if ($this->getHomeDirectory() != getcwd()) {
$configFiles[] = getcwd().'/console/config.yml';
}

if (stripos($applicationDirectory, '/bin/') <= 0) {
$configFiles[] = $applicationDirectory.'/console/config.yml';
}

$files = [
$applicationDirectory.'config.yml',
$applicationDirectory.DRUPAL_CONSOLE_CORE.'config.yml',
$applicationDirectory.DRUPAL_CONSOLE.'config.yml',
$this->getConsoleDirectory().'config.yml',
getcwd().'/console/config.yml',
$applicationDirectory.'console/config.yml',
];

$configurationDirectories[] = $applicationDirectory;
$configurationDirectories[] = $applicationDirectory.DRUPAL_CONSOLE_CORE;
$configurationDirectories[] = $applicationDirectory.DRUPAL_CONSOLE;
$configurationDirectories[] = '/etc/console/';
$configurationDirectories[] = $this->getHomeDirectory() . '/.console/';
$configurationDirectories[] = $applicationDirectory .'/console/';
$configurationDirectories[] = getcwd().'/console/';
if ($root) {
$files[] = $root.'/console/config.yml';
$configFiles[] = $root.'/console/config.yml';
$configurationDirectories[] = $root . '/console/';
}
$configurationDirectories = array_unique($configurationDirectories);

$files = array_unique($files);
$configFiles = array_unique($configFiles);

foreach ($files as $key => $file) {
$configurationFiles = [];
foreach ($configurationDirectories as $configurationDirectory) {
if (!is_dir($configurationDirectory)) {
continue;
}
$configurationDirectory = str_replace('//', '/', $configurationDirectory);
if (stripos($configurationDirectory, '/vendor/') <= 0 &&
stripos($configurationDirectory, 'console/') > 0) {
$this->configurationDirectories[] = $configurationDirectory;
}
$file = $configurationDirectory . 'config.yml';
if (!file_exists($file)) {
unset($files[$key]);
$this->missingConfigurationFiles[] = $file;
continue;
}
if (file_get_contents($file)==='') {
unset($files[$key]);
$this->missingConfigurationFiles[] = $file;
continue;
}
$configurationFiles[] = $file;
}

foreach ($configFiles as $key => $file) {
if (!file_exists($file)) {
$this->missingConfigurationFiles[] = $file;
} else {
$this->missingConfigurationFiles = [];
break;
}
$builder = new YamlFileConfigurationBuilder($configurationFiles);
$this->configuration = $builder->build();
$this->appendCommandAliases();

if ($configurationFiles) {
$this->missingConfigurationFiles = [];
}

$builder = new YamlFileConfigurationBuilder($files);
return $this;
}

$this->configuration = $builder->build();
public function loadConfigurationFromDirectory($directory)
{
$builder = new YamlFileConfigurationBuilder([$directory.'/console/config.yml']);

return $this;
return $builder->build();
}

/**
Expand Down Expand Up @@ -156,7 +165,7 @@ public function getHomeDirectory()
return posix_getpwuid(posix_getuid())['dir'];
}

return rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '/\\');
return realpath(rtrim(getenv('HOME') ?: getenv('USERPROFILE'), '/\\'));
}

/**
Expand Down Expand Up @@ -215,13 +224,42 @@ public function readDrushEquivalents($commandName)
return [];
}

/**
* @deprecated
*/
public function getConsoleDirectory()
{
return sprintf('%s/.console/', $this->getHomeDirectory());
}

public function getMissingConfigurationFiles()
{
/**
* @return array
*/
public function getMissingConfigurationFiles() {
return $this->missingConfigurationFiles;
}

/**
* @return array
*/
public function getConfigurationDirectories() {
return $this->configurationDirectories;
}

/**
* @return string
*/
public function appendCommandAliases() {
foreach ($this->configurationDirectories as $directory) {
$aliasFile = $directory . 'aliases.yml';
$aliases = [];
if (file_exists($aliasFile)) {
$aliases = array_merge(
Yaml::parse(file_get_contents($aliasFile)),
$aliases
);
$this->configuration->set('application', $aliases);
}
}
}
}

0 comments on commit 60ad2cd

Please sign in to comment.