Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Dependency.php
Go to the documentation of this file.
1 <?php
7 
13 use Magento\Framework\Config\Composer\PackageFactory;
16 
21 {
25  const SAMPLE_DATA_SUGGEST = 'Sample Data version:';
26 
31 
35  private $packageFactory;
36 
40  private $componentRegistrar;
41 
45  private $directoryReadFactory;
46 
57  public function __construct(
60  PackageFactory $packageFactory,
61  ComponentRegistrarInterface $componentRegistrar,
62  \Magento\Framework\Filesystem\Directory\ReadFactory $directoryReadFactory = null
63  ) {
64  $this->composerInformation = $composerInformation;
65  $this->packageFactory = $packageFactory;
66  $this->componentRegistrar = $componentRegistrar;
67  $this->directoryReadFactory = $directoryReadFactory ?:
68  ObjectManager::getInstance()->get(ReadFactory::class);
69  }
70 
77  public function getSampleDataPackages()
78  {
79  $installExtensions = [];
80  $suggests = $this->composerInformation->getSuggestedPackages();
81  $suggests = array_merge($suggests, $this->getSuggestsFromModules());
82  foreach ($suggests as $name => $version) {
83  if (strpos($version, self::SAMPLE_DATA_SUGGEST) === 0) {
84  $installExtensions[$name] = trim(substr($version, strlen(self::SAMPLE_DATA_SUGGEST)));
85  }
86  }
87  return $installExtensions;
88  }
89 
96  protected function getSuggestsFromModules()
97  {
98  $suggests = [];
99  foreach ($this->componentRegistrar->getPaths(ComponentRegistrar::MODULE) as $moduleDir) {
100  $package = $this->getModuleComposerPackage($moduleDir);
101  $suggest = json_decode(json_encode($package->get('suggest')), true);
102  if (!empty($suggest)) {
103  $suggests += $suggest;
104  }
105  }
106  return $suggests;
107  }
108 
116  private function getModuleComposerPackage($moduleDir)
117  {
118  /*
119  * Also look in parent directory of registered module directory to allow modules to follow the pds/skeleton
120  * standard and have their source code in a "src" subdirectory of the repository
121  *
122  * see: https://github.com/php-pds/skeleton
123  */
124  foreach ([$moduleDir, $moduleDir . DIRECTORY_SEPARATOR . '..'] as $dir) {
126  $directory = $this->directoryReadFactory->create($dir);
127  if ($directory->isExist('composer.json') && $directory->isReadable('composer.json')) {
129  return $this->packageFactory->create(['json' => json_decode($directory->readFile('composer.json'))]);
130  }
131  }
132  return $this->packageFactory->create(['json' => new \stdClass]);
133  }
134 }
$componentRegistrar
Definition: bootstrap.php:23
__construct(ComposerInformation $composerInformation, Filesystem $filesystem, PackageFactory $packageFactory, ComponentRegistrarInterface $componentRegistrar, \Magento\Framework\Filesystem\Directory\ReadFactory $directoryReadFactory=null)
Definition: Dependency.php:57
$filesystem
if(!isset($_GET['name'])) $name
Definition: log.php:14