1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Widget\Model;
- class NamespaceResolver
- {
- /**
- * List of module namespaces
- *
- * @var array
- */
- protected $moduleNamespaces;
- /**
- * @var \Magento\Framework\Module\ModuleListInterface
- */
- protected $moduleList;
- /**
- * @param \Magento\Framework\Module\ModuleListInterface $moduleList
- */
- public function __construct(\Magento\Framework\Module\ModuleListInterface $moduleList)
- {
- $this->moduleList = $moduleList;
- }
- /**
- * 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)
- {
- $this->prepareModuleNamespaces();
- $name = $this->prepareName($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 '';
- }
- /**
- * Prepare module namespaces
- *
- * @return void
- */
- protected function prepareModuleNamespaces()
- {
- if (null === $this->moduleNamespaces) {
- $this->moduleNamespaces = [];
- foreach ($this->moduleList->getNames() as $moduleName) {
- $module = strtolower($moduleName);
- $this->moduleNamespaces[substr($module, 0, strpos($module, '_'))][$module] = $moduleName;
- }
- }
- }
- /**
- * Prepare name
- *
- * @param string $name
- * @return array
- */
- protected function prepareName($name)
- {
- $explodeString = strpos($name, '\\') === false ? '_' : '\\';
- return explode($explodeString, strtolower($name));
- }
- }
|