• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/loader.php
  • Класс: BitrixMainLoader
  • Вызов: Loader::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];
}