Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ComposerInformation.php
Go to the documentation of this file.
1 <?php
7 
8 use Composer\Package\Link;
9 use Composer\Package\CompletePackageInterface;
11 
16 {
20  const THEME_PACKAGE_TYPE = 'magento2-theme';
21 
25  const MODULE_PACKAGE_TYPE = 'magento2-module';
26 
30  const LANGUAGE_PACKAGE_TYPE = 'magento2-language';
31 
35  const METAPACKAGE_PACKAGE_TYPE = 'metapackage';
36 
40  const LIBRARY_PACKAGE_TYPE = 'magento2-library';
41 
45  const COMPONENT_PACKAGE_TYPE = 'magento2-component';
46 
50  const COMPOSER_DEFAULT_REPO_KEY = 'packagist.org';
51 
55  const COMPOSER_SHOW = 'show';
61  const PARAM_COMMAND = 'command';
62  const PARAM_PACKAGE = 'package';
63  const PARAM_AVAILABLE = '--available';
67  private $composer;
68 
72  private $locker;
73 
77  private static $packageTypes = [
84  ];
85 
89  private $composerFactory;
90 
96  public function __construct(ComposerFactory $composerFactory)
97  {
98  $this->composerFactory = $composerFactory;
99  }
100 
107  public function getRequiredPhpVersion()
108  {
109  if ($this->isMagentoRoot()) {
110  $allPlatformReqs = $this->getLocker()->getPlatformRequirements(true);
111  $requiredPhpVersion = $allPlatformReqs['php']->getPrettyConstraint();
112  } else {
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();
122  }
123  }
124  }
125  }
126  }
127 
128  if (!isset($requiredPhpVersion)) {
129  throw new \Exception('Cannot find php version requirement in \'composer.lock\' file');
130  }
131  return $requiredPhpVersion;
132  }
133 
142  public function getRequiredExtensions()
143  {
144  $requiredExtensions = [];
145  $allPlatformReqs = array_keys($this->getLocker()->getPlatformRequirements(true));
146 
147  if (!$this->isMagentoRoot()) {
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);
153  }
154  }
155  foreach ($allPlatformReqs as $reqIndex) {
156  if (substr($reqIndex, 0, 4) === 'ext-') {
157  $requiredExtensions[] = substr($reqIndex, 4);
158  }
159  }
160  return array_unique($requiredExtensions);
161  }
162 
170  public function getSuggestedPackages()
171  {
172  $suggests = [];
174  foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
175  $suggests += $package->getSuggests();
176  }
177 
178  return array_unique($suggests);
179  }
180 
186  public function getRootRequiredPackages()
187  {
188  $packages = [];
190  foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
191  $packages[] = $package->getName();
192  }
193  return $packages;
194  }
195 
201  public function getRootRequiredPackageTypesByName()
202  {
203  $packages = [];
205  foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
206  $packages[$package->getName()] = $package->getType();
207  }
208  return $packages;
209  }
210 
216  public function getInstalledMagentoPackages()
217  {
218  $packages = [];
220  foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
221  if ((in_array($package->getType(), self::$packageTypes))
222  && (!$this->isSystemPackage($package->getPrettyName()))) {
223  $packages[$package->getName()] = [
224  'name' => $package->getName(),
225  'type' => $package->getType(),
226  'version' => $package->getPrettyVersion()
227  ];
228  }
229  }
230  return $packages;
231  }
232 
238  public function getSystemPackages()
239  {
240  $packages = [];
242  foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) {
243  if ($this->isSystemPackage($package->getName())) {
244  $packages[$package->getName()] = [
245  'name' => $package->getName(),
246  'type' => $package->getType(),
247  'version' => $package->getPrettyVersion()
248  ];
249  }
250  }
251  return $packages;
252  }
253 
260  public function isSystemPackage($packageName = '')
261  {
262  if (preg_match('/magento\/product-*/', $packageName) == 1) {
263  return true;
264  }
265  return false;
266  }
267 
273  public function isMagentoRoot()
274  {
275  $rootPackage = $this->getComposer()->getPackage();
276 
277  return (boolean)preg_match('/magento\/magento2...?/', $rootPackage->getName());
278  }
279 
285  public function getRootPackage()
286  {
287  return $this->getComposer()->getPackage();
288  }
289 
296  public function isPackageInComposerJson($packageName)
297  {
298  return (in_array($packageName, array_keys($this->getComposer()->getPackage()->getRequires()))
299  || in_array($packageName, array_keys($this->getComposer()->getPackage()->getDevRequires()))
300  );
301  }
302 
306  public function getPackagesTypes()
307  {
308  return self::$packageTypes;
309  }
310 
317  {
318  $package = $this->getComposer()->getRepositoryManager()->findPackage($name, $version);
319  return $package->getRequires();
320  }
321 
327  public function getRootRepositories()
328  {
329  $repositoryUrls = [];
330 
331  foreach ($this->getComposer()->getConfig()->getRepositories() as $key => $repository) {
332  if ($key !== self::COMPOSER_DEFAULT_REPO_KEY) {
333  $repositoryUrls[] = $repository['url'];
334  }
335  }
336 
337  return $repositoryUrls;
338  }
339 
346  private function getComposerFactory()
347  {
348  if (!$this->composerFactory) {
349  $this->composerFactory = ObjectManager::getInstance()->get(ComposerFactory::class);
350  }
351  return $this->composerFactory;
352  }
353 
359  private function getComposer()
360  {
361  if (!$this->composer) {
362  $this->composer = $this->getComposerFactory()->create();
363  }
364  return $this->composer;
365  }
366 
372  private function getLocker()
373  {
374  if (!$this->locker) {
375  $this->locker = $this->getComposer()->getLocker();
376  }
377  return $this->locker;
378  }
379 }
__construct(ComposerFactory $composerFactory)
if(!isset($_GET['name'])) $name
Definition: log.php:14