PageRenderTime 44ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/magento/module-new-relic-reporting/Model/Module/Collect.php

https://gitlab.com/yousafsyed/easternglamor
PHP | 313 lines | 185 code | 39 blank | 89 comment | 19 complexity | c3a176bea89efcb8e6d0dd217727e470 MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\NewRelicReporting\Model\Module;
  7. use Magento\Framework\Module\FullModuleList;
  8. use Magento\Framework\Module\ModuleListInterface;
  9. use Magento\Framework\Module\Manager;
  10. use Magento\NewRelicReporting\Model\Config;
  11. use Magento\NewRelicReporting\Model\Module;
  12. class Collect
  13. {
  14. /**
  15. * @var ModuleListInterface
  16. */
  17. protected $moduleList;
  18. /**
  19. * @var Manager
  20. */
  21. protected $moduleManager;
  22. /**
  23. * @var fullModuleList
  24. */
  25. protected $fullModuleList;
  26. /**
  27. * @var \Magento\NewRelicReporting\Model\ModuleFactory
  28. */
  29. protected $moduleFactory;
  30. /**
  31. * @var \Magento\NewRelicReporting\Model\ResourceModel\Module\CollectionFactory
  32. */
  33. protected $moduleCollectionFactory;
  34. /**
  35. * Constructor
  36. *
  37. * @param ModuleListInterface $moduleList
  38. * @param FullModuleList $fullModuleList
  39. * @param Manager $moduleManager
  40. * @param \Magento\NewRelicReporting\Model\ModuleFactory $moduleFactory
  41. * @param \Magento\NewRelicReporting\Model\ResourceModel\Module\CollectionFactory $moduleCollectionFactory
  42. */
  43. public function __construct(
  44. ModuleListInterface $moduleList,
  45. FullModuleList $fullModuleList,
  46. Manager $moduleManager,
  47. \Magento\NewRelicReporting\Model\ModuleFactory $moduleFactory,
  48. \Magento\NewRelicReporting\Model\ResourceModel\Module\CollectionFactory $moduleCollectionFactory
  49. ) {
  50. $this->moduleList = $moduleList;
  51. $this->fullModuleList = $fullModuleList;
  52. $this->moduleManager = $moduleManager;
  53. $this->moduleFactory = $moduleFactory;
  54. $this->moduleCollectionFactory = $moduleCollectionFactory;
  55. }
  56. /**
  57. * Retrieve all disabled modules from the configuration
  58. *
  59. * @return array
  60. */
  61. protected function getDisabledModules()
  62. {
  63. $allModules = $this->fullModuleList->getNames();
  64. $enabledModules = $this->moduleList->getNames();
  65. $disabledModules = array_diff($allModules, $enabledModules);
  66. return $disabledModules;
  67. }
  68. /**
  69. * Retrieve all modules array
  70. *
  71. * @return array
  72. */
  73. protected function getAllModules()
  74. {
  75. return $this->fullModuleList->getAll();
  76. }
  77. /**
  78. * Get changes of module not in DB
  79. *
  80. * @param string $moduleName
  81. * @param string $active
  82. * @param string $setupVersion
  83. * @param string $state
  84. *
  85. * @return array
  86. */
  87. protected function getNewModuleChanges($moduleName, $active, $setupVersion, $state)
  88. {
  89. /** @var \Magento\NewRelicReporting\Model\Module $newModule */
  90. $newModule = $this->moduleFactory->create();
  91. $data = [
  92. 'name' => $moduleName,
  93. 'active' => $active,
  94. 'setup_version' => $setupVersion,
  95. 'state' => $state,
  96. ];
  97. $newModule->setData($data);
  98. $newModule->save();
  99. $moduleChanges = [
  100. 'name' => $data['name'],
  101. 'setup_version' => $data['setup_version'],
  102. 'type' => Config::INSTALLED
  103. ];
  104. return $moduleChanges;
  105. }
  106. /**
  107. * Grabs the collection items to get final counts
  108. *
  109. * @param array $moduleChanges
  110. * @return array
  111. */
  112. protected function getFinalCounts($moduleChanges)
  113. {
  114. /** @var Module[] $finalDbModuleArray */
  115. $finalDbModuleArray = $this->moduleCollectionFactory->create()->getItems();
  116. $stateCallback = function (Module $value) {
  117. return $value->getState();
  118. };
  119. $stateValues = array_map($stateCallback, $finalDbModuleArray);
  120. $installedCount = count($stateValues);
  121. $disabledCount = $enabledCount = $uninstalledCount = 0;
  122. foreach ($stateValues as $state) {
  123. switch($state){
  124. case Config::ENABLED:
  125. $enabledCount++;
  126. break;
  127. case Config::DISABLED:
  128. $disabledCount++;
  129. break;
  130. case Config::UNINSTALLED:
  131. $uninstalledCount++;
  132. break;
  133. }
  134. }
  135. $installedCount -= $uninstalledCount;
  136. $finalObject = [
  137. Config::INSTALLED => $installedCount,
  138. Config::UNINSTALLED => $uninstalledCount,
  139. Config::ENABLED => $enabledCount,
  140. Config::DISABLED => $disabledCount,
  141. 'changes' => $moduleChanges
  142. ];
  143. return $finalObject;
  144. }
  145. /**
  146. * Get module state by it name
  147. *
  148. * @param string $moduleName
  149. * @return string
  150. */
  151. protected function getState($moduleName)
  152. {
  153. if ($this->moduleManager->isOutputEnabled($moduleName)) {
  154. $state = Config::ENABLED;
  155. } else {
  156. $state = Config::DISABLED;
  157. }
  158. return $state;
  159. }
  160. /**
  161. * Get module active state by it name
  162. *
  163. * @param string $moduleName
  164. * @return string
  165. */
  166. protected function getActive($moduleName)
  167. {
  168. if (in_array($moduleName, $this->getDisabledModules())) {
  169. $active = Config::FALSE;
  170. } else {
  171. $active = Config::TRUE;
  172. }
  173. return $active;
  174. }
  175. /**
  176. * Get clean array of changes
  177. *
  178. * @param array $changes
  179. * @return array mixed
  180. */
  181. protected function getCleanChangesArray($changes)
  182. {
  183. $changesArrayKeys = array_keys($changes);
  184. foreach ($changesArrayKeys as $changesKey) {
  185. if ($changesKey != 'state' && $changesKey != 'active' && $changesKey != 'setup_version') {
  186. unset($changes[$changesKey]);
  187. }
  188. }
  189. return $changes;
  190. }
  191. /**
  192. * Takes module changes if module were uninstalled
  193. *
  194. * @param Module[] $dbModuleArray
  195. * @param string[] $arrayModuleNames
  196. * @return array|bool
  197. */
  198. protected function setUninstalledModuleChanges(array $dbModuleArray, array $arrayModuleNames)
  199. {
  200. foreach ($dbModuleArray as $module) {
  201. /** @var Module $module */
  202. if (!in_array($module->getName(), $arrayModuleNames) && $module->getState() != Config::UNINSTALLED) {
  203. $moduleChanges = [
  204. 'name' => $module->getName(),
  205. 'setup_version' => $module->getSetupVersion(),
  206. 'type' => Config::UNINSTALLED
  207. ];
  208. $module->setData(['entity_id' => $module->getEntityId(), 'state' => Config::UNINSTALLED]);
  209. $module->save();
  210. return $moduleChanges;
  211. }
  212. }
  213. return false;
  214. }
  215. /**
  216. * Collects required data about the modules
  217. *
  218. * @param bool $refresh
  219. * @return array
  220. */
  221. public function getModuleData($refresh = true)
  222. {
  223. $callback = function (Module $value) {
  224. return $value->getName();
  225. };
  226. $configModules = $this->getAllModules();
  227. /** @var Module[] $dbModuleArray */
  228. $dbModuleArray = $this->moduleCollectionFactory->create()->getItems();
  229. $nameValues = array_map($callback, $dbModuleArray);
  230. $moduleChanges = [];
  231. foreach ($configModules as $moduleName => $module) {
  232. unset($module['sequence']);
  233. $state = $this->getState($moduleName);
  234. $active = $this->getActive($moduleName);
  235. $module['state'] = $state;
  236. $module['active'] = $active;
  237. if (!in_array($moduleName, $nameValues)) {
  238. $moduleChanges[] = $this->getNewModuleChanges($moduleName, $active, $module['setup_version'], $state);
  239. } else {
  240. $dbModule = $dbModuleArray[array_search($moduleName, $nameValues)];
  241. $changeTest = $dbModule->getData();
  242. $changes = array_diff($module, $changeTest);
  243. $changesCleanArray = $this->getCleanChangesArray($changes);
  244. if (count($changesCleanArray) > 0 ||
  245. ($this->moduleManager->isOutputEnabled($changeTest['name']) &&
  246. $module['setup_version'] != null)) {
  247. $data = [
  248. 'entity_id' => $changeTest['entity_id'],
  249. 'name' => $changeTest['name'],
  250. 'active' => $active,
  251. 'setup_version' => $module['setup_version'],
  252. 'state' => $state,
  253. ];
  254. if ($refresh) {
  255. $dbModule->setData($data);
  256. $dbModule->save();
  257. }
  258. $moduleChanges[] = [
  259. 'name' => $data['name'],
  260. 'setup_version' => $data['setup_version'],
  261. 'type' => $state
  262. ];
  263. }
  264. }
  265. }
  266. $arrayModuleNames = array_keys($configModules);
  267. $uninstalledModuleChanges = $this->setUninstalledModuleChanges($dbModuleArray, $arrayModuleNames);
  268. if (is_array($uninstalledModuleChanges)) {
  269. $moduleChanges[] = $uninstalledModuleChanges;
  270. }
  271. $finalObject = $this->getFinalCounts($moduleChanges);
  272. return $finalObject;
  273. }
  274. }