/** * {@inheritdoc} */ public function getExtensionPackages() { if (!isset($this->packages['extension'])) { $listing = new ExtensionDiscovery($this->root); // Get all profiles, and modules belonging to those profiles. // @todo Scan themes as well? $profiles = $listing->scan('profile'); $profile_directories = array_map(function ($profile) { return $profile->getPath(); }, $profiles); $listing->setProfileDirectories($profile_directories); $modules = $listing->scan('module'); $extensions = $profiles + $modules; $this->packages['extension'] = []; foreach ($extensions as $extension_name => $extension) { $filename = $this->root . '/' . $extension->getPath() . '/composer.json'; if (is_readable($filename)) { $extension_package = JsonFile::read($filename); if (!empty($extension_package['require']) || !empty($extension_package['require-dev'])) { $this->packages['extension'][$extension_name] = JsonFile::read($filename); } } } } return $this->packages['extension']; }
/** * {@inheritdoc} */ public function getExtensionPackages() { if (!isset($this->packages['extension'])) { $listing = new ExtensionDiscovery($this->root); // Get all profiles, and modules belonging to those profiles. // @todo Scan themes as well? $profiles = $listing->scan('profile'); $profile_directories = array_map(function ($profile) { return $profile->getPath(); }, $profiles); $listing->setProfileDirectories($profile_directories); $modules = $listing->scan('module'); $extensions = $profiles + $modules; $installed_packages = $this->getInstalledPackages(); $installed_packages = array_map(function ($package) { return $package['name']; }, $installed_packages); $this->packages['extension'] = []; foreach ($extensions as $extension_name => $extension) { $filename = $this->root . '/' . $extension->getPath() . '/composer.json'; if (is_readable($filename)) { $extension_package = JsonFile::read($filename); // The package must at least have a name and some requirements. if (empty($extension_package['name'])) { continue; } if (empty($extension_package['require']) && empty($extension_package['require-dev'])) { continue; } if (in_array($extension_package['name'], $installed_packages)) { // This extension is already managed with Composer. continue; } // The path is required by rebuildRootPackage(). $extension_package['extra']['path'] = $extension->getPath() . '/composer.json'; $this->packages['extension'][$extension_name] = $extension_package; } } } return $this->packages['extension']; }