8 use Composer\Package\Link;
9 use Composer\Package\CompletePackageInterface;
77 private static $packageTypes = [
89 private $composerFactory;
98 $this->composerFactory = $composerFactory;
107 public function getRequiredPhpVersion()
110 $allPlatformReqs = $this->getLocker()->getPlatformRequirements(
true);
111 $requiredPhpVersion = $allPlatformReqs[
'php']->getPrettyConstraint();
113 $packages = $this->getLocker()->getLockedRepository()->getPackages();
115 foreach ($packages as $package) {
116 if ($package instanceof CompletePackageInterface) {
117 $packageName = $package->getPrettyName();
118 if ($packageName ===
'magento/product-community-edition') {
119 $phpRequirementLink = $package->getRequires()[
'php'];
120 if ($phpRequirementLink instanceof Link) {
121 $requiredPhpVersion = $phpRequirementLink->getPrettyConstraint();
128 if (!isset($requiredPhpVersion)) {
129 throw new \Exception(
'Cannot find php version requirement in \'composer.lock\' file');
131 return $requiredPhpVersion;
142 public function getRequiredExtensions()
144 $requiredExtensions = [];
145 $allPlatformReqs = array_keys($this->getLocker()->getPlatformRequirements(
true));
149 foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
150 $requires = array_keys($package->getRequires());
151 $requires = array_merge($requires, array_keys($package->getDevRequires()));
152 $allPlatformReqs = array_merge($allPlatformReqs, $requires);
155 foreach ($allPlatformReqs as $reqIndex) {
156 if (substr($reqIndex, 0, 4) ===
'ext-') {
157 $requiredExtensions[] = substr($reqIndex, 4);
160 return array_unique($requiredExtensions);
170 public function getSuggestedPackages()
174 foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
175 $suggests += $package->getSuggests();
178 return array_unique($suggests);
186 public function getRootRequiredPackages()
190 foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
191 $packages[] = $package->getName();
201 public function getRootRequiredPackageTypesByName()
205 foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
206 $packages[$package->getName()] = $package->getType();
216 public function getInstalledMagentoPackages()
220 foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
221 if ((in_array($package->getType(), self::$packageTypes))
223 $packages[$package->getName()] = [
224 'name' => $package->getName(),
225 'type' => $package->getType(),
226 'version' => $package->getPrettyVersion()
238 public function getSystemPackages()
242 foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
244 $packages[$package->getName()] = [
245 'name' => $package->getName(),
246 'type' => $package->getType(),
247 'version' => $package->getPrettyVersion()
262 if (preg_match(
'/magento\/product-*/', $packageName) == 1) {
275 $rootPackage = $this->getComposer()->getPackage();
277 return (
boolean)preg_match(
'/magento\/magento2...?/', $rootPackage->getName());
287 return $this->getComposer()->getPackage();
298 return (in_array($packageName, array_keys($this->getComposer()->getPackage()->getRequires()))
299 || in_array($packageName, array_keys($this->getComposer()->getPackage()->getDevRequires()))
308 return self::$packageTypes;
318 $package = $this->getComposer()->getRepositoryManager()->findPackage(
$name,
$version);
319 return $package->getRequires();
329 $repositoryUrls = [];
331 foreach ($this->getComposer()->getConfig()->getRepositories() as $key =>
$repository) {
332 if ($key !== self::COMPOSER_DEFAULT_REPO_KEY) {
337 return $repositoryUrls;
346 private function getComposerFactory()
348 if (!$this->composerFactory) {
351 return $this->composerFactory;
359 private function getComposer()
361 if (!$this->composer) {
362 $this->composer = $this->getComposerFactory()->create();
364 return $this->composer;
372 private function getLocker()
374 if (!$this->locker) {
375 $this->locker = $this->getComposer()->getLocker();
377 return $this->locker;
if(!isset($_GET['name'])) $name