Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Collect.php
Go to the documentation of this file.
1 <?php
7 
13 
14 class Collect
15 {
19  protected $moduleList;
20 
24  protected $moduleManager;
25 
29  protected $fullModuleList;
30 
34  protected $moduleFactory;
35 
40 
50  public function __construct(
54  \Magento\NewRelicReporting\Model\ModuleFactory $moduleFactory,
55  \Magento\NewRelicReporting\Model\ResourceModel\Module\CollectionFactory $moduleCollectionFactory
56  ) {
57  $this->moduleList = $moduleList;
58  $this->fullModuleList = $fullModuleList;
59  $this->moduleManager = $moduleManager;
60  $this->moduleFactory = $moduleFactory;
61  $this->moduleCollectionFactory = $moduleCollectionFactory;
62  }
63 
69  protected function getDisabledModules()
70  {
71  $allModules = $this->fullModuleList->getNames();
72  $enabledModules = $this->moduleList->getNames();
73  $disabledModules = array_diff($allModules, $enabledModules);
74 
75  return $disabledModules;
76  }
77 
83  protected function getAllModules()
84  {
85  return $this->fullModuleList->getAll();
86  }
87 
98  protected function getNewModuleChanges($moduleName, $active, $setupVersion, $state)
99  {
101  $newModule = $this->moduleFactory->create();
102  $data = [
103  'name' => $moduleName,
104  'active' => $active,
105  'setup_version' => $setupVersion,
106  'state' => $state,
107  ];
108 
109  $newModule->setData($data);
110  $newModule->save();
111  $moduleChanges = [
112  'name' => $data['name'],
113  'setup_version' => $data['setup_version'],
114  'type' => Config::INSTALLED
115  ];
116 
117  return $moduleChanges;
118  }
119 
126  protected function getFinalCounts($moduleChanges)
127  {
129  $finalDbModuleArray = $this->moduleCollectionFactory->create()->getItems();
130 
131  $stateCallback = function (Module $value) {
132  return $value->getState();
133  };
134 
135  $stateValues = array_map($stateCallback, $finalDbModuleArray);
136  $installedCount = count($stateValues);
137  $disabledCount = $enabledCount = $uninstalledCount = 0;
138 
139  foreach ($stateValues as $state) {
140  switch ($state) {
141  case Config::ENABLED:
142  $enabledCount++;
143  break;
144 
145  case Config::DISABLED:
146  $disabledCount++;
147  break;
148 
149  case Config::UNINSTALLED:
150  $uninstalledCount++;
151  break;
152  }
153  }
154 
155  $installedCount -= $uninstalledCount;
156 
157  $finalObject = [
158  Config::INSTALLED => $installedCount,
159  Config::UNINSTALLED => $uninstalledCount,
160  Config::ENABLED => $enabledCount,
161  Config::DISABLED => $disabledCount,
162  'changes' => $moduleChanges
163  ];
164 
165  return $finalObject;
166  }
167 
174  protected function getState($moduleName)
175  {
176  if ($this->moduleManager->isOutputEnabled($moduleName)) {
177  $state = Config::ENABLED;
178  } else {
179  $state = Config::DISABLED;
180  }
181 
182  return $state;
183  }
184 
191  protected function getActive($moduleName)
192  {
193  if (in_array($moduleName, $this->getDisabledModules())) {
194  $active = Config::FALSE;
195  } else {
196  $active = Config::TRUE;
197  }
198 
199  return $active;
200  }
201 
208  protected function getCleanChangesArray($changes)
209  {
210  $changesArrayKeys = array_keys($changes);
211  foreach ($changesArrayKeys as $changesKey) {
212  if ($changesKey != 'state' && $changesKey != 'active' && $changesKey != 'setup_version') {
213  unset($changes[$changesKey]);
214  }
215  }
216 
217  return $changes;
218  }
219 
227  protected function setUninstalledModuleChanges(array $dbModuleArray, array $arrayModuleNames)
228  {
229  foreach ($dbModuleArray as $module) {
231  if (!in_array($module->getName(), $arrayModuleNames) && $module->getState() != Config::UNINSTALLED) {
232  $moduleChanges = [
233  'name' => $module->getName(),
234  'setup_version' => $module->getSetupVersion(),
235  'type' => Config::UNINSTALLED
236  ];
237  $module->setData(['entity_id' => $module->getEntityId(), 'state' => Config::UNINSTALLED]);
238  $module->save();
239  return $moduleChanges;
240  }
241  }
242 
243  return false;
244  }
245 
252  public function getModuleData($refresh = true)
253  {
254  $callback = function (Module $value) {
255  return $value->getName();
256  };
257 
258  $configModules = $this->getAllModules();
260  $dbModuleArray = $this->moduleCollectionFactory->create()->getItems();
261 
262  $nameValues = array_map($callback, $dbModuleArray);
263  $moduleChanges = [];
264 
265  foreach ($configModules as $moduleName => $module) {
266  unset($module['sequence']);
267  $state = $this->getState($moduleName);
268  $active = $this->getActive($moduleName);
269  $module['state'] = $state;
270  $module['active'] = $active;
271 
272  if (!in_array($moduleName, $nameValues)) {
273  $moduleChanges[] = $this->getNewModuleChanges($moduleName, $active, $module['setup_version'], $state);
274  } else {
275  $dbModule = $dbModuleArray[array_search($moduleName, $nameValues)];
276  $changeTest = $dbModule->getData();
277  $changes = array_diff($module, $changeTest);
278  $changesCleanArray = $this->getCleanChangesArray($changes);
279 
280  if (count($changesCleanArray) > 0 ||
281  ($this->moduleManager->isOutputEnabled($changeTest['name']) &&
282  $module['setup_version'] != null)) {
283  $data = [
284  'entity_id' => $changeTest['entity_id'],
285  'name' => $changeTest['name'],
286  'active' => $active,
287  'setup_version' => $module['setup_version'],
288  'state' => $state,
289  ];
290  if ($refresh) {
291  $dbModule->setData($data);
292  $dbModule->save();
293  }
294  $moduleChanges[] = [
295  'name' => $data['name'],
296  'setup_version' => $data['setup_version'],
297  'type' => $state
298  ];
299  }
300  }
301  }
302 
303  $arrayModuleNames = array_keys($configModules);
304  $uninstalledModuleChanges = $this->setUninstalledModuleChanges($dbModuleArray, $arrayModuleNames);
305  if (is_array($uninstalledModuleChanges)) {
306  $moduleChanges[] = $uninstalledModuleChanges;
307  }
308 
309  $finalObject = $this->getFinalCounts($moduleChanges);
310 
311  return $finalObject;
312  }
313 }
$value
Definition: gender.phtml:16
__construct(ModuleListInterface $moduleList, FullModuleList $fullModuleList, Manager $moduleManager, \Magento\NewRelicReporting\Model\ModuleFactory $moduleFactory, \Magento\NewRelicReporting\Model\ResourceModel\Module\CollectionFactory $moduleCollectionFactory)
Definition: Collect.php:50