public function addComposerPlugins()
{
if (!$this->vendorPath) {
return;
}
$installedJsonPath = rtrim($this->vendorPath, '/') . '/composer/installed.json';
if (!file_exists($installedJsonPath)) {
return;
}
$installedJsonContents = file_get_contents($installedJsonPath);
if (!$installedJsonContents) {
return;
}
$installed = json_decode($installedJsonContents, true);
if (!$installed || !is_array($installed)) {
return;
}
$plugins = array_filter($installed, function ($package) {
return !empty($package['extra']['craft-cli']['commands']) || !empty($package['extra']['craft-cli']['commandDirs']);
});
foreach ($plugins as $package) {
$namespace = isset($package['extra']['craft-cli']['namespace']) ? rtrim($package['extra']['craft-cli']['namespace'], '\\') . '\\' : null;
if (!empty($package['extra']['craft-cli']['commandDirs'])) {
foreach ($package['extra']['craft-cli']['commandDirs'] as $commandDir) {
$path = rtrim($this->vendorPath, '/') . '/' . $package['name'] . '/' . $commandDir;
$commands = $this->findCommandsInDir($path, $namespace);
foreach ($commands as $command) {
$this->registerCommand($command);
}
}
}
if (!empty($package['extra']['craft-cli']['commands'])) {
foreach ($package['extra']['craft-cli']['commands'] as $command) {
$this->registerCommand($namespace . $command);
}
}
}
}