5685fea13c2239b64247e41cbf8ddec2d32db508
[yaffs-website] / vendor / drupal / console-extend-plugin / src / Extender.php
1 <?php
2
3 namespace Drupal\Console\Composer\Plugin;
4
5 use Composer\Composer;
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;
12
13 class Extender implements PluginInterface, EventSubscriberInterface
14 {
15     /**
16      * @var Composer $composer
17      */
18     protected $composer;
19
20     /**
21      * @var IOInterface $io
22      */
23     protected $io;
24
25     /**
26      * Apply plugin modifications to composer
27      *
28      * @param Composer    $composer
29      * @param IOInterface $io
30      */
31     public function activate(Composer $composer, IOInterface $io)
32     {
33         $this->composer = $composer;
34         $this->io = $io;
35     }
36
37     /**
38      * Returns an array of event names this subscriber wants to listen to.
39      */
40     public static function getSubscribedEvents()
41     {
42         return array(
43             PackageEvents::POST_PACKAGE_INSTALL => "processPackages",
44             PackageEvents::POST_PACKAGE_UPDATE => "processPackages",
45             PackageEvents::POST_PACKAGE_UNINSTALL => "processPackages",
46         );
47     }
48
49     /**
50      * @param PackageEvent $event
51      * @throws \Exception
52      */
53     public function processPackages(PackageEvent $event)
54     {
55         $extenderManager = new ExtenderManager();
56         $directory = realpath(__DIR__.'/../../../../');
57         $extenderManager->processProjectPackages($directory);
58
59         if (is_dir($directory.'/vendor/drupal/console')) {
60             $directory = $directory.'/vendor/drupal/console';
61         } else {
62             $configFile = $directory.'/console.config.yml';
63             $servicesFile = $directory.'/console.services.yml';
64             $extenderManager->addConfigFile($configFile);
65             $extenderManager->addServicesFile($servicesFile);
66         }
67
68         $configFile = $directory . '/extend.console.config.yml';
69         $servicesFile = $directory . '/extend.console.services.yml';
70         $servicesUninstallFile = $directory . '/extend.console.uninstall.services.yml';
71
72         if (file_exists($configFile)) {
73             unlink($configFile);
74             $this->io->write('<info>Removing config cache file:</info>' . $configFile);
75         }
76
77         if (file_exists($servicesFile)) {
78             unlink($servicesFile);
79             $this->io->write('<info>Removing services cache file:</info>' . $servicesFile);
80         }
81
82         if (file_exists($servicesUninstallFile)) {
83             unlink($servicesUninstallFile);
84             $this->io->write('<info>Removing services cache file:</info>' . $servicesUninstallFile);
85         }
86
87         if ($configData = $extenderManager->getConfigData()) {
88             file_put_contents(
89                 $configFile,
90                 Yaml::dump($configData, 6, 2)
91             );
92             $this->io->write('<info>Creating config cache file:</info>' . $configFile);
93         }
94
95         $servicesData = $extenderManager->getServicesData();
96         if ($servicesData && array_key_exists('install', $servicesData)) {
97             file_put_contents(
98                 $servicesFile,
99                 Yaml::dump($servicesData['install'], 4, 2)
100             );
101             $this->io->write('<info>Creating services cache file: </info>' . $servicesFile);
102         }
103
104         $servicesData = $extenderManager->getServicesData();
105         if ($servicesData && array_key_exists('uninstall', $servicesData)) {
106             file_put_contents(
107                 $servicesUninstallFile,
108                 Yaml::dump($servicesData['uninstall'], 4, 2)
109             );
110             $this->io->write('<info>Creating services cache file: </info>' . $servicesUninstallFile);
111         }
112     }
113 }