16 if (!is_string($className))
28 $controllerClass = new \ReflectionClass($className);
29 if ($controllerClass->isAbstract())
34 if (!$controllerClass->isSubclassOf(UploaderController::class))
40 $controller = $controllerClass->newInstance(
$options);
51 if (!$controller->isAvailable())
58 catch (\ReflectionException $exception)
62 $exceptionHandler->writeToLog($exception);
70 $controllerName = trim($controllerName);
71 if (mb_strlen($controllerName) < 1)
76 [$vendor, $controllerName] = self::resolveVendor($controllerName);
77 [
$moduleId, $className] = self::resolveModuleAndClass($controllerName);
80 $className = self::buildClassName($vendor,
$moduleId, $className);
87 $parts = explode(
'\\', get_class($controller));
88 $vendor = mb_strtolower(array_shift($parts));
89 $moduleId = mb_strtolower(array_shift($parts));
93 return lcfirst($part);
98 if ($vendor === self::DEFAULT_VENDOR)
100 return $moduleId .
'.' . implode(
'.', $parts);
104 return $vendor .
':' .
$moduleId .
'.' . implode(
'.', $parts);
108 private static function buildClassName(
string $vendor,
string $moduleId,
string $className): string
110 if ($vendor === self::DEFAULT_VENDOR)
113 $namespace =
"\\Bitrix\\{$moduleId}";
118 $moduleParts = array_map(
120 return ucfirst(trim(trim($part),
'\\'));
125 $namespace =
"\\" . join(
'\\', $moduleParts);
128 $classNameParts = explode(
'.', $className);
129 $classNameParts = array_map(
131 return ucfirst(trim(trim($part),
'\\'));
136 if (!$classNameParts)
141 return "{$namespace}\\" . join(
'\\', $classNameParts);
144 private static function resolveModuleAndClass(
string $controllerName):
array
146 $parts = explode(
'.', $controllerName);
148 $className = implode(
'.', $parts);
153 private static function resolveVendor(
string $controllerName):
array
155 [$vendor, $controllerName] = explode(
':', $controllerName) + [
null,
null];
157 if (!$controllerName)
159 $controllerName = $vendor;
160 $vendor = self::DEFAULT_VENDOR;
163 return [$vendor, $controllerName];
166 private static function refineModuleName($vendor,
$moduleId): string
168 if ($vendor === self::DEFAULT_VENDOR)
173 return mb_strtolower($vendor .
'.' .
$moduleId);
176 private static function canIncludeModule(
string $moduleId): bool
178 $settings = \Bitrix\Main\Config\Configuration::getInstance(
$moduleId)->get(
'ui.uploader');
184 return isset(
$settings[
'allowUseControllers']) &&
$settings[
'allowUseControllers'] ===
true;