Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
PackageInfo.php
Go to the documentation of this file.
1 <?php
7 
9 
15 {
21  private $packageModuleMap;
22 
28  private $modulePackageVersionMap;
29 
35  private $requireMap;
36 
42  private $conflictMap;
43 
49  private $reader;
50 
54  private $componentRegistrar;
55 
59  protected $nonExistingDependencies = [];
60 
64  private $serializer;
65 
72  public function __construct(
73  Dir\Reader $reader,
74  ComponentRegistrar $componentRegistrar,
75  \Magento\Framework\Serialize\Serializer\Json $serializer = null
76  ) {
77  $this->reader = $reader;
78  $this->componentRegistrar = $componentRegistrar;
79  $this->serializer = $serializer?: \Magento\Framework\App\ObjectManager::getInstance()
80  ->get(\Magento\Framework\Serialize\Serializer\Json::class);
81  }
82 
90  private function load()
91  {
92  if ($this->packageModuleMap === null) {
93  $jsonData = $this->reader->getComposerJsonFiles()->toArray();
94  foreach ($this->componentRegistrar->getPaths(ComponentRegistrar::MODULE) as $moduleName => $moduleDir) {
95  $key = $moduleDir . '/composer.json';
96  if (isset($jsonData[$key]) && $jsonData[$key]) {
97  try {
98  $packageData = $this->serializer->unserialize($jsonData[$key]);
99  } catch (\InvalidArgumentException $e) {
100  throw new \InvalidArgumentException(
101  sprintf(
102  "%s composer.json error: %s",
103  $moduleName,
104  $e->getMessage()
105  )
106  );
107  }
108 
109  if (isset($packageData['name'])) {
110  $this->packageModuleMap[$packageData['name']] = $moduleName;
111  }
112  if (isset($packageData['version'])) {
113  $this->modulePackageVersionMap[$moduleName] = $packageData['version'];
114  }
115  if (!empty($packageData['require'])) {
116  $this->requireMap[$moduleName] = array_keys($packageData['require']);
117  }
118  if (!empty($packageData['conflict'])) {
119  $this->conflictMap[$moduleName] = $packageData['conflict'];
120  }
121  }
122  }
123  }
124  }
125 
132  public function getModuleName($packageName)
133  {
134  $this->load();
135 
136  $moduleName = null;
137  if (isset($this->packageModuleMap[$packageName])) {
138  $moduleName = $this->packageModuleMap[$packageName];
139  } elseif ($this->isMagentoPackage($packageName)) {
140  $moduleName = $this->convertPackageNameToModuleName($packageName);
141  $this->addNonExistingDependency($moduleName);
142  }
143 
144  return $moduleName;
145  }
146 
153  protected function addNonExistingDependency($dependency)
154  {
155  if (!isset($this->nonExistingDependencies[$dependency])) {
156  $this->nonExistingDependencies[$dependency] = $dependency;
157  }
158  }
159 
165  public function getNonExistingDependencies()
166  {
168  }
169 
176  protected function convertPackageNameToModuleName($packageName)
177  {
178  $moduleName = str_replace('magento/module-', '', $packageName);
179  $moduleName = str_replace('-', ' ', $moduleName);
180  $moduleName = str_replace(' ', '', ucwords($moduleName));
181 
182  return 'Magento_' . $moduleName;
183  }
184 
191  protected function isMagentoPackage($packageName)
192  {
193  return strpos($packageName, 'magento/module-') === 0;
194  }
195 
202  public function getPackageName($moduleName)
203  {
204  $this->load();
205  return array_search($moduleName, $this->packageModuleMap) ?: '';
206  }
207 
214  private function convertToModuleNames($packageNames)
215  {
216  $moduleNames = [];
217  foreach ($packageNames as $package) {
218  $moduleNames[] = $this->getModuleName($package);
219  }
220  return $moduleNames;
221  }
222 
229  public function getRequire($moduleName)
230  {
231  $this->load();
232  $require = [];
233  if (isset($this->requireMap[$moduleName])) {
234  $require = $this->convertToModuleNames($this->requireMap[$moduleName]);
235  }
236  return $require;
237  }
238 
245  public function getRequiredBy($requiredModuleName)
246  {
247  $this->load();
248  $requiredBy = [];
249  foreach ($this->requireMap as $moduleName => $moduleRequireList) {
250  if (in_array($requiredModuleName, $moduleRequireList)) {
251  $requiredBy[] = $moduleName;
252  }
253  }
254 
255  return $requiredBy;
256  }
257 
264  public function getConflict($moduleName)
265  {
266  $this->load();
267  $conflict = [];
268  if (isset($this->conflictMap[$moduleName])) {
269  $conflict = array_combine(
270  $this->convertToModuleNames(array_keys($this->conflictMap[$moduleName])),
271  $this->conflictMap[$moduleName]
272  );
273  }
274  return $conflict;
275  }
276 
283  public function getVersion($moduleName)
284  {
285  $this->load();
286  return $this->modulePackageVersionMap[$moduleName] ?? '';
287  }
288 }
$componentRegistrar
Definition: bootstrap.php:23
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
__construct(Dir\Reader $reader, ComponentRegistrar $componentRegistrar, \Magento\Framework\Serialize\Serializer\Json $serializer=null)
Definition: PackageInfo.php:72
getRequiredBy($requiredModuleName)