/** * Sort module declarations based on module dependencies * * @param array $modules * @return array * @SuppressWarnings(PHPMD.ShortVariable) * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ protected function _sortModules(array $modules) { /** * The following map is needed only for sorting * (in order not to add extra information about dependencies to module config) */ $moduleDependencyMap = array(); foreach ($modules as $moduleName => $value) { $moduleDependencyMap[] = array('moduleName' => $moduleName, 'dependencies' => $this->dependencyManager->getExtendedModuleDependencies($moduleName, $modules)); } // Use "bubble sorting" because usort does not check each pair of elements and in this case it is important $modulesCount = count($moduleDependencyMap); for ($i = 0; $i < $modulesCount - 1; $i++) { for ($j = $i; $j < $modulesCount; $j++) { if (in_array($moduleDependencyMap[$j]['moduleName'], $moduleDependencyMap[$i]['dependencies'])) { $temp = $moduleDependencyMap[$i]; $moduleDependencyMap[$i] = $moduleDependencyMap[$j]; $moduleDependencyMap[$j] = $temp; } } } $sortedModules = array(); foreach ($moduleDependencyMap as $moduleDependencyPair) { $sortedModules[$moduleDependencyPair['moduleName']] = $modules[$moduleDependencyPair['moduleName']]; } return $sortedModules; }
/** * Check all necessary extensions are loaded and available * * @return void * @throws \Exception */ protected function checkExtensionsLoaded() { try { foreach ($this->moduleList->getModules() as $moduleData) { $this->dependencyManager->checkModuleDependencies($moduleData); } } catch (\Exception $exception) { $this->messageManager->addError($exception->getMessage()); throw new \Exception($exception->getMessage()); } }