27 private $magentoComposerApplication;
32 private $composerInfo;
49 $this->magentoComposerApplication = $composerAppFactory->
create();
50 $this->composerInfo = $composerInfo;
64 $systemPackages = $this->getInstalledSystemPackages();
65 foreach ($systemPackages as $systemPackage) {
66 $systemPackageInfo = $this->infoCommand->run($systemPackage);
67 if (!$systemPackageInfo) {
68 throw new \RuntimeException(
"We cannot retrieve information on $systemPackage.");
73 if ($systemPackageInfo[
'name'] == static::EDITION_COMMUNITY) {
77 if (count($versions) > 1) {
78 $versions[0][
'name'] .=
' (latest)';
82 'package' => $systemPackageInfo[
'name'],
83 'versions' => $versions,
87 if (!in_array(static::EDITION_ENTERPRISE, $systemPackages)) {
105 $enterpriseVersions = $this->infoCommand->run(static::EDITION_ENTERPRISE);
109 $enterpriseVersions = $this->
sortVersions($enterpriseVersions);
113 $eeVersions = $this->filterEeVersions($currentCE, $enterpriseVersions, $maxVersion);
116 if (!empty($eeVersions)) {
118 'package' => static::EDITION_ENTERPRISE,
119 'versions' => $eeVersions,
136 if ($systemPackageInfo[
'name'] == static::EDITION_COMMUNITY) {
137 $editionType .=
'CE';
138 }
elseif ($systemPackageInfo[
'name'] == static::EDITION_ENTERPRISE) {
139 $editionType .=
'EE';
143 $versions[] = [
'id' =>
$version,
'name' =>
'Version ' .
$version .
' ' . $editionType,
'current' =>
false];
161 public function getInstalledSystemPackages()
163 $locker = $this->magentoComposerApplication->createComposer()->getLocker();
166 foreach ($locker->getLockedRepository()->getPackages() as $package) {
167 $packageName = $package->getName();
168 if ($this->composerInfo->isSystemPackage($packageName)) {
169 if ($packageName == static::EDITION_COMMUNITY) {
170 if ($this->composerInfo->isPackageInComposerJson($packageName)) {
171 $systemPackages[] = $packageName;
174 $systemPackages[] = $packageName;
178 if (empty($systemPackages)) {
179 throw new \RuntimeException(
180 'We\'re sorry, no components are available because you cloned the Magento 2 GitHub repository. ' .
181 'You must manually update components as discussed in the ' .
182 '<a href="http://devdocs.magento.com/guides/v2.0/install-gde/install/cli/dev_options.html">' .
183 'Installation Guide</a>.' 186 return $systemPackages;
196 if (version_compare($versionOne, $versionTwo,
'==')) {
199 return (version_compare($versionOne, $versionTwo,
'<')) ? 1 : -1;
202 return $enterpriseVersions;
211 private function formatPackages($packages)
215 foreach ($packages as $package) {
216 foreach ($package[
'versions'] as
$version) {
217 $version[
'package'] = $package[
'package'];
219 if (preg_match(
'/^[0-9].[0-9].[0-9]$/',
$version[
'id']) ||
$version[
'current']) {
230 usort($versions,
function ($versionOne, $versionTwo) {
231 if (version_compare($versionOne[
'id'], $versionTwo[
'id'],
'==')) {
232 if ($versionOne[
'package'] === static::EDITION_COMMUNITY) {
237 return (version_compare($versionOne[
'id'], $versionTwo[
'id'],
'<')) ? 1 : -1;
249 public function filterEeVersions($currentCE, $enterpriseVersions, $maxVersion)
253 $requires = $this->composerInfo->getPackageRequirements(static::EDITION_ENTERPRISE,
$version);
254 if (array_key_exists(static::EDITION_COMMUNITY, $requires)) {
256 $ceRequire = $requires[static::EDITION_COMMUNITY];
258 $ceRequire->getConstraint()->getPrettyString(),
264 $name .=
' (latest)';
266 $eeVersions[] = [
'id' =>
$version,
'name' =>
$name,
'current' =>
false];
sortVersions($enterpriseVersions)
__construct(MagentoComposerApplicationFactory $composerAppFactory, ComposerInformation $composerInfo)
elseif(isset( $params[ 'redirect_parent']))
getSystemPackageVersions($systemPackageInfo)
getAllowedEnterpriseVersions($currentCE)
if(!isset($_GET['name'])) $name