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
14 * @package Drupal\Console\Core\Utils
19 * @var ConfigurationManager
21 protected $configurationManager;
31 private $directories = [];
34 * ChainDiscovery constructor.
36 * @param string $appRoot
37 * @param ConfigurationManager $configurationManager
39 public function __construct(
41 ConfigurationManager $configurationManager
43 $this->appRoot = $appRoot;
44 $this->configurationManager = $configurationManager;
46 $this->addDirectories(
48 $this->configurationManager->getHomeDirectory() . DIRECTORY_SEPARATOR . '.console'. DIRECTORY_SEPARATOR .'chain',
49 $this->appRoot . DIRECTORY_SEPARATOR . 'console'. DIRECTORY_SEPARATOR .'chain',
50 $this->appRoot . DIRECTORY_SEPARATOR . '.console'. DIRECTORY_SEPARATOR .'chain',
56 * @param array $directories
58 public function addDirectories(array $directories)
60 $this->directories = array_merge($this->directories, $directories);
64 * @param bool $onlyFiles
67 public function getChainFiles($onlyFiles = false)
70 foreach ($this->directories as $directory) {
71 if (!is_dir($directory)) {
74 $finder = new Finder();
78 foreach ($finder as $file) {
79 $chainFiles[$file->getPath()][] = sprintf(
89 foreach ($chainFiles as $chainDirectory => $chainFileList) {
90 $files = array_merge($files, $chainFileList);
101 public function getChainCommands()
104 $files = $this->getChainFiles(true);
105 foreach ($files as $file) {
106 $chain = Yaml::parse(file_get_contents($file));
107 if (!array_key_exists('command', $chain)) {
110 if (!array_key_exists('name', $chain['command'])) {
113 $name = $chain['command']['name'];
115 if (array_key_exists('description', $chain['command'])) {
116 $description = $chain['command']['description'];
118 $chainCommands[$name] = [
119 'description' => $description,
124 return $chainCommands;