From aa3a2a88f57602f9704649907786454bc3e2c512 Mon Sep 17 00:00:00 2001 From: Rob Bayliss Date: Tue, 2 May 2017 01:36:43 -0400 Subject: [PATCH] Use composer API instead of checking explicit paths (#3) * Use composer to find installed packages, and determine the directory to write config and service files to * Add an explicit require_once for ExtenderManager * Move require for ExtenderManager * Fix variable name * Fix CS * Fix duplicate call to addConfigFile --- src/Extender.php | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/Extender.php b/src/Extender.php index 5685fea..1f77feb 100644 --- a/src/Extender.php +++ b/src/Extender.php @@ -10,6 +10,11 @@ use Composer\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Yaml\Yaml; +// Explicitly require ExtenderManager here. +// When this package is uninstalled, ExtenderManager needs to be available any +// time this class is available. +require_once 'ExtenderManager.php'; + class Extender implements PluginInterface, EventSubscriberInterface { /** @@ -53,16 +58,29 @@ public static function getSubscribedEvents() public function processPackages(PackageEvent $event) { $extenderManager = new ExtenderManager(); - $directory = realpath(__DIR__.'/../../../../'); - $extenderManager->processProjectPackages($directory); - - if (is_dir($directory.'/vendor/drupal/console')) { - $directory = $directory.'/vendor/drupal/console'; - } else { - $configFile = $directory.'/console.config.yml'; - $servicesFile = $directory.'/console.services.yml'; - $extenderManager->addConfigFile($configFile); - $extenderManager->addServicesFile($servicesFile); + + $composer = $event->getComposer(); + $installationManager = $composer->getInstallationManager(); + $repositoryManager = $composer->getRepositoryManager(); + $localRepository = $repositoryManager->getLocalRepository(); + + foreach ($localRepository->getPackages() as $package) { + if ($installationManager->isPackageInstalled($localRepository, $package)) { + if ($package->getType() === 'drupal-console-library') { + $extenderManager->addServicesFile($installationManager->getInstallPath($package) . '/console.services.yml'); + $extenderManager->addConfigFile($installationManager->getInstallPath($package) . '/console.config.yml'); + } + } + } + + if ($consolePackage = $localRepository->findPackage('drupal/console', '*')) { + if ($localRepository->hasPackage($consolePackage)) { + $directory = $installationManager->getInstallPath($consolePackage); + } + } + if (empty($directory)) { + // cwd should be the project root. This is the same logic Symfony uses. + $directory = getcwd(); } $configFile = $directory . '/extend.console.config.yml';