/** * Determine whether provided name begins from any available modules, according to namespaces priority * If matched, returns as the matched module "factory" name or a fully qualified module name * * @param string $name * @param bool $asFullModuleName * @return string */ public function determineOmittedNamespace($name, $asFullModuleName = false) { if (null === $this->_moduleNamespaces) { $this->_moduleNamespaces = array(); foreach ($this->_moduleList->getModules() as $module) { $moduleName = $module['name']; $module = strtolower($moduleName); $this->_moduleNamespaces[substr($module, 0, strpos($module, '_'))][$module] = $moduleName; } } $explodeString = strpos($name, \Magento\Framework\Autoload\IncludePath::NS_SEPARATOR) === false ? '_' : \Magento\Framework\Autoload\IncludePath::NS_SEPARATOR; $name = explode($explodeString, strtolower($name)); $partsNum = count($name); $defaultNamespaceFlag = false; foreach ($this->_moduleNamespaces as $namespaceName => $namespace) { // assume the namespace is omitted (default namespace only, which comes first) if ($defaultNamespaceFlag === false) { $defaultNamespaceFlag = true; $defaultNS = $namespaceName . '_' . $name[0]; if (isset($namespace[$defaultNS])) { return $asFullModuleName ? $namespace[$defaultNS] : $name[0]; // return omitted as well } } // assume namespace is qualified if (isset($name[1])) { $fullNS = $name[0] . '_' . $name[1]; if (2 <= $partsNum && isset($namespace[$fullNS])) { return $asFullModuleName ? $namespace[$fullNS] : $fullNS; } } } return ''; }
/** * Retrieve fully-qualified module name, path belongs to * * @param string $path Full path to file or directory * @return string|null */ public function getModuleName($path) { $path = str_replace('\\', '/', $path); foreach (array_keys($this->_moduleList->getModules()) as $moduleName) { $moduleDir = $this->_moduleDirs->getDir($moduleName); $moduleDir = str_replace('\\', '/', $moduleDir); if ($path == $moduleDir || strpos($path, $moduleDir . '/') === 0) { return $moduleName; } } return null; }
/** * @param \Magento\Framework\Data\Form\Element\AbstractElement $element * @return string */ public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element) { $html = $this->_getHeaderHtml($element); $modules = array_keys($this->_moduleList->getModules()); $dispatchResult = new \Magento\Framework\Object($modules); $this->_eventManager->dispatch('adminhtml_system_config_advanced_disableoutput_render_before', array('modules' => $dispatchResult)); $modules = $dispatchResult->toArray(); sort($modules); foreach ($modules as $moduleName) { if ($moduleName === 'Magento_Adminhtml' || $moduleName === 'Magento_Backend') { continue; } $html .= $this->_getFieldHtml($element, $moduleName); } $html .= $this->_getFooterHtml($element); return $html; }
/** * Apply database data updates whenever needed * * @return void */ public function updateData() { foreach (array_keys($this->_moduleList->getModules()) as $moduleName) { foreach ($this->_resourceResolver->getResourceList($moduleName) as $resourceName) { if (!$this->_moduleManager->isDbDataUpToDate($moduleName, $resourceName)) { $this->_setupFactory->create($resourceName, $moduleName)->applyDataUpdates(); } } } }
/** * Apply database data updates whenever needed * * @return void */ public function updateData() { if (!$this->_isUpdatedSchema) { return; } foreach (array_keys($this->_moduleList->getModules()) as $moduleName) { foreach ($this->_resourceResolver->getResourceList($moduleName) as $resourceName) { $this->_setupFactory->create($resourceName, $moduleName)->applyDataUpdates(); } } }
/** * Check if DB is up to date * * @return bool */ private function isDbUpToDate() { foreach (array_keys($this->moduleList->getModules()) as $moduleName) { foreach ($this->resourceResolver->getResourceList($moduleName) as $resourceName) { $isSchemaUpToDate = $this->moduleManager->isDbSchemaUpToDate($moduleName, $resourceName); $isDataUpToDate = $this->moduleManager->isDbDataUpToDate($moduleName, $resourceName); if (!$isSchemaUpToDate || !$isDataUpToDate) { return false; } } } return true; }
/** * Retrieve priority of a module relatively to other modules in the system * * @param string $moduleName * @return int */ protected function getModulePriority($moduleName) { if ($this->orderedModules === null) { $this->orderedModules = array(); foreach ($this->moduleList->getModules() as $module) { $this->orderedModules[] = $module['name']; } } $result = array_search($moduleName, $this->orderedModules); // Assume unknown modules have the same priority, distinctive from known modules if ($result === false) { return -1; } return $result; }
/** * Retrieve list of module action files * * @return array */ public function getActionFiles() { $actions = array(); foreach (array_keys($this->modulesList->getModules()) as $moduleName) { $actionDir = $this->getModuleDir('Controller', $moduleName); if (!file_exists($actionDir)) { continue; } $dirIterator = new \RecursiveDirectoryIterator($actionDir, \RecursiveDirectoryIterator::SKIP_DOTS); $recursiveIterator = new \RecursiveIteratorIterator($dirIterator, \RecursiveIteratorIterator::LEAVES_ONLY); /** @var \SplFileInfo $actionFile */ foreach ($recursiveIterator as $actionFile) { $actions[] = $this->modulesDirectory->getRelativePath($actionFile->getPathname()); } } return $actions; }
/** * 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()); } }