|
10 | 10 | use Composer\EventDispatcher\EventSubscriberInterface;
|
11 | 11 | use Symfony\Component\Yaml\Yaml;
|
12 | 12 |
|
| 13 | +// Explicitly require ExtenderManager here. |
| 14 | +// When this package is uninstalled, ExtenderManager needs to be available any |
| 15 | +// time this class is available. |
| 16 | +require_once 'ExtenderManager.php'; |
| 17 | + |
13 | 18 | class Extender implements PluginInterface, EventSubscriberInterface
|
14 | 19 | {
|
15 | 20 | /**
|
@@ -53,16 +58,29 @@ public static function getSubscribedEvents()
|
53 | 58 | public function processPackages(PackageEvent $event)
|
54 | 59 | {
|
55 | 60 | $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); |
| 61 | + |
| 62 | + $composer = $event->getComposer(); |
| 63 | + $installationManager = $composer->getInstallationManager(); |
| 64 | + $repositoryManager = $composer->getRepositoryManager(); |
| 65 | + $localRepository = $repositoryManager->getLocalRepository(); |
| 66 | + |
| 67 | + foreach ($localRepository->getPackages() as $package) { |
| 68 | + if ($installationManager->isPackageInstalled($localRepository, $package)) { |
| 69 | + if ($package->getType() === 'drupal-console-library') { |
| 70 | + $extenderManager->addServicesFile($installationManager->getInstallPath($package) . '/console.services.yml'); |
| 71 | + $extenderManager->addConfigFile($installationManager->getInstallPath($package) . '/console.config.yml'); |
| 72 | + } |
| 73 | + } |
| 74 | + } |
| 75 | + |
| 76 | + if ($consolePackage = $localRepository->findPackage('drupal/console', '*')) { |
| 77 | + if ($localRepository->hasPackage($consolePackage)) { |
| 78 | + $directory = $installationManager->getInstallPath($consolePackage); |
| 79 | + } |
| 80 | + } |
| 81 | + if (empty($directory)) { |
| 82 | + // cwd should be the project root. This is the same logic Symfony uses. |
| 83 | + $directory = getcwd(); |
66 | 84 | }
|
67 | 85 |
|
68 | 86 | $configFile = $directory . '/extend.console.config.yml';
|
|
0 commit comments