3 namespace Drupal\Console\Composer\Plugin;
5 use Symfony\Component\Yaml\Yaml;
6 use Symfony\Component\Finder\Finder;
13 protected $configData = [];
18 protected $servicesData = [];
21 * ExtendExtensionManager constructor.
23 public function __construct()
29 * @param string $composerFile
33 public function isValidPackageType($composerFile)
35 if (!is_file($composerFile)) {
39 $composerContent = json_decode(file_get_contents($composerFile), true);
40 if (!$composerContent) {
44 if (!array_key_exists('type', $composerContent)) {
48 return $composerContent['type'] === 'drupal-console-library';
52 * @param string $configFile
54 public function addConfigFile($configFile)
56 $configData = $this->parseData($configFile);
57 if ($this->isValidConfigData($configData)) {
58 $this->configData = array_merge_recursive(
66 * @param string $servicesFile
68 public function addServicesFile($servicesFile)
70 $servicesData = $this->parseData($servicesFile);
71 if ($this->isValidServicesData($servicesData)) {
72 foreach ($servicesData['services'] as $key => $definition) {
73 if (!array_key_exists('tags', $definition)) {
76 $bootstrap = 'install';
77 foreach ($definition['tags'] as $tags) {
78 if (!array_key_exists('name', $tags)) {
82 if ($tags['name'] != 'drupal.command') {
86 if (array_key_exists('bootstrap', $tags)) {
87 $bootstrap = $tags['bootstrap'];
91 $this->servicesData[$bootstrap]['services'][$key] = $definition;
100 private function init()
102 $this->configData = [];
103 $this->servicesData = [];
108 * @return array|mixed
110 private function parseData($file)
112 if (!file_exists($file)) {
117 file_get_contents($file)
127 public function processProjectPackages($directory)
129 $finder = new Finder();
131 ->name('composer.json')
132 ->contains('drupal-console-library')
134 ->ignoreUnreadableDirs();
136 foreach ($finder as $file) {
137 $this->processComposerFile($file->getPathName());
142 * @param $composerFile
144 private function processComposerFile($composerFile)
146 $packageDirectory = dirname($composerFile);
148 $configFile = $packageDirectory.'/console.config.yml';
149 $this->addConfigFile($configFile);
151 $servicesFile = $packageDirectory.'/console.services.yml';
152 $this->addServicesFile($servicesFile);
156 * @param array $configData
160 private function isValidConfigData($configData)
166 if (!array_key_exists('application', $configData)) {
170 if (!array_key_exists('autowire', $configData['application'])) {
174 if (!array_key_exists('commands', $configData['application']['autowire'])) {
182 * @param array $servicesData
186 private function isValidServicesData($servicesData)
188 if (!$servicesData) {
192 if (!array_key_exists('services', $servicesData)) {
202 public function getConfigData()
204 return $this->configData;
210 public function getServicesData()
212 return $this->servicesData;