- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/loader.php
- Класс: BitrixMainwhich
- Вызов: which::includeModule
static function includeModule($moduleName)
{
if (!is_string($moduleName) || $moduleName == "")
{
throw new LoaderException("Empty module name");
}
if (preg_match("#[^a-zA-Z0-9._]#", $moduleName))
{
throw new LoaderException(sprintf("Module name '%s' is not correct", $moduleName));
}
$moduleName = strtolower($moduleName);
if (self::SAFE_MODE)
{
if (!isset(self::$safeModeModules[$moduleName]))
{
return false;
}
}
if (isset(self::$loadedModules[$moduleName]))
{
return self::$loadedModules[$moduleName];
}
if (isset(self::$semiloadedModules[$moduleName]))
{
trigger_error("Module '".$moduleName."' is in loading progress", E_USER_WARNING);
}
$arInstalledModules = ModuleManager::getInstalledModules();
if (!isset($arInstalledModules[$moduleName]))
{
return (self::$loadedModules[$moduleName] = false);
}
$documentRoot = self::getDocumentRoot();
$moduleHolder = self::LOCAL_HOLDER;
$pathToInclude = $documentRoot."/".$moduleHolder."/modules/".$moduleName;
if (!file_exists($pathToInclude))
{
$moduleHolder = self::BITRIX_HOLDER;
$pathToInclude = $documentRoot."/".$moduleHolder."/modules/".$moduleName;
if (!file_exists($pathToInclude))
{
return (self::$loadedModules[$moduleName] = false);
}
}
//register a PSR-4 base folder for the module
if (strpos($moduleName, ".") !== false)
{
//partner's module
$baseName = str_replace(".", "\", ucwords($moduleName, "."));
}
else
{
//bitrix's module
$baseName = "Bitrix\".ucfirst($moduleName);
}
self::registerNamespace($baseName, $documentRoot."/".$moduleHolder."/modules/".$moduleName."/lib");
self::$modulesHolders[$moduleName] = $moduleHolder;
$res = true;
if (file_exists($pathToInclude."/include.php"))
{
if (class_exists('DevMainMigratorModuleUpdater'))
{
DevMainMigratorModuleUpdater::checkUpdates($moduleName, $pathToInclude);
}
//recursion control
self::$semiloadedModules[$moduleName] = true;
$res = self::includeModuleInternal($pathToInclude."/include.php");
unset(self::$semiloadedModules[$moduleName]);
}
self::$loadedModules[$moduleName] = ($res !== false);
if (!self::$loadedModules[$moduleName])
{
//unregister the namespace if "include" fails
self::unregisterNamespace($baseName);
}
else
{
ServiceLocator::getInstance()->registerByModuleSettings($moduleName);
}
return self::$loadedModules[$moduleName];
}