3 namespace Drupal\Console\Composer\Plugin;
6 use Composer\IO\IOInterface;
7 use Composer\Plugin\PluginInterface;
8 use Composer\Installer\PackageEvent;
9 use Composer\Installer\PackageEvents;
10 use Composer\EventDispatcher\EventSubscriberInterface;
11 use Symfony\Component\Yaml\Yaml;
13 class Extender implements PluginInterface, EventSubscriberInterface
16 * @var Composer $composer
21 * @var IOInterface $io
26 * Apply plugin modifications to composer
28 * @param Composer $composer
29 * @param IOInterface $io
31 public function activate(Composer $composer, IOInterface $io)
33 $this->composer = $composer;
38 * Returns an array of event names this subscriber wants to listen to.
40 public static function getSubscribedEvents()
43 PackageEvents::POST_PACKAGE_INSTALL => "processPackages",
44 PackageEvents::POST_PACKAGE_UPDATE => "processPackages",
45 PackageEvents::POST_PACKAGE_UNINSTALL => "processPackages",
50 * @param PackageEvent $event
53 public function processPackages(PackageEvent $event)
55 $extenderManager = new ExtenderManager();
56 $directory = realpath(__DIR__.'/../../../../');
57 $extenderManager->processProjectPackages($directory);
59 if (is_dir($directory.'/vendor/drupal/console')) {
60 $directory = $directory.'/vendor/drupal/console';
62 $configFile = $directory.'/console.config.yml';
63 $servicesFile = $directory.'/console.services.yml';
64 $extenderManager->addConfigFile($configFile);
65 $extenderManager->addServicesFile($servicesFile);
68 $configFile = $directory . '/extend.console.config.yml';
69 $servicesFile = $directory . '/extend.console.services.yml';
70 $servicesUninstallFile = $directory . '/extend.console.uninstall.services.yml';
72 if (file_exists($configFile)) {
74 $this->io->write('<info>Removing config cache file:</info>' . $configFile);
77 if (file_exists($servicesFile)) {
78 unlink($servicesFile);
79 $this->io->write('<info>Removing services cache file:</info>' . $servicesFile);
82 if (file_exists($servicesUninstallFile)) {
83 unlink($servicesUninstallFile);
84 $this->io->write('<info>Removing services cache file:</info>' . $servicesUninstallFile);
87 if ($configData = $extenderManager->getConfigData()) {
90 Yaml::dump($configData, 6, 2)
92 $this->io->write('<info>Creating config cache file:</info>' . $configFile);
95 $servicesData = $extenderManager->getServicesData();
96 if ($servicesData && array_key_exists('install', $servicesData)) {
99 Yaml::dump($servicesData['install'], 4, 2)
101 $this->io->write('<info>Creating services cache file: </info>' . $servicesFile);
104 $servicesData = $extenderManager->getServicesData();
105 if ($servicesData && array_key_exists('uninstall', $servicesData)) {
107 $servicesUninstallFile,
108 Yaml::dump($servicesData['uninstall'], 4, 2)
110 $this->io->write('<info>Creating services cache file: </info>' . $servicesUninstallFile);