4 * Contains Drupal\Console\Core\Utils\Site.
7 namespace Drupal\Console\Core\Utils;
9 use Symfony\Component\Finder\Finder;
10 use Symfony\Component\Yaml\Yaml;
13 * Class ChainDiscovery
15 * @package Drupal\Console\Core\Utils
20 * @var ConfigurationManager
22 protected $configurationManager;
32 private $directories = [];
35 * ChainDiscovery constructor.
37 * @param string $appRoot
38 * @param ConfigurationManager $configurationManager
40 public function __construct(
42 ConfigurationManager $configurationManager
44 $this->appRoot = $appRoot;
45 $this->configurationManager = $configurationManager;
47 $this->addDirectories(
49 $this->configurationManager->getHomeDirectory() . DIRECTORY_SEPARATOR . '.console'. DIRECTORY_SEPARATOR .'chain',
50 $this->appRoot . DIRECTORY_SEPARATOR . 'console'. DIRECTORY_SEPARATOR .'chain',
51 $this->appRoot . DIRECTORY_SEPARATOR . '.console'. DIRECTORY_SEPARATOR .'chain',
57 * @param array $directories
59 public function addDirectories(array $directories)
61 $this->directories = array_merge($this->directories, $directories);
65 * @param bool $onlyFiles
68 public function getChainFiles($onlyFiles = false)
71 foreach ($this->directories as $directory) {
72 if (!is_dir($directory)) {
75 $finder = new Finder();
79 foreach ($finder as $file) {
80 $chainFiles[$file->getPath()][] = sprintf(
90 foreach ($chainFiles as $chainDirectory => $chainFileList) {
91 $files = array_merge($files, $chainFileList);
102 public function getChainCommands()
105 $files = $this->getChainFiles(true);
106 foreach ($files as $file) {
107 $chain = Yaml::parse(file_get_contents($file));
108 if (!array_key_exists('command', $chain)) {
111 if (!array_key_exists('name', $chain['command'])) {
114 $name = $chain['command']['name'];
116 if (array_key_exists('description', $chain['command'])) {
117 $description = $chain['command']['description'];
119 $chainCommands[$name] = [
120 'description' => $description,
125 return $chainCommands;