25 $this->buildTransformationList();
30 return self::PULL_TAG . $fileId;
33 private function buildTransformationList()
35 if (!empty(static::$transformationList))
45 $event =
new Event(
'main',
'onTransformationBuildList');
51 if (
$result->getType() != EventResult::SUCCESS)
63 if (!is_string($class) || !class_exists($class))
68 if (!is_subclass_of($class, Transformation::class,
true))
70 throw new SystemException(
"Wrong event result. {$class} is not a subclass of " . Transformation::class);
73 $additionalList[] = $class;
77 static::$transformationList = array_merge($default, $additionalList);
90 $result->addError(
new Error(
'Could not include module transformer'));
95 $fileData = \CFile::getByID($fileId)->fetch();
104 if (!$transformation)
106 $result->addError(
new Error(
'There is no transformation for file'));
112 $transformation->getInputMaxSize() > 0 &&
113 $fileData[
'FILE_SIZE'] > $transformation->getInputMaxSize()
116 $result->addError(
new Error(
'Too big file for transformation'));
121 $transformer = $transformation->buildTransformer();
124 $result->addError(
new Error(
'Could not build transformer'));
134 $result = $transformer->transform(
136 [$transformation->getOutputExtension()],
138 CallbackHandler::class,
139 [
'id' => (
int)$fileId,
'fileId' => (
int)$fileId,
'queue' => self::QUEUE_NAME]
146 'pullTag' => $pullTag,
155 $id = (int)($fileData[
'ID'] ?? 0);
161 return !CallbackHandler::existSavedFile($id);
172 \CPullWatch::add(CurrentUser::get()->getId(), $pullTag);
185 if (empty($fileData[
'CONTENT_TYPE']))
190 $transformation = $this->buildTransformationByContentType($fileData[
'CONTENT_TYPE']);
193 return $transformation;
196 if (empty($fileData[
'ORIGINAL_NAME']))
203 return $this->buildTransformationByContentType($mimeType);
212 private function buildTransformationByContentType(
$contentType)
214 foreach (static::$transformationList as $transformationClass)
217 if (in_array(
$contentType, $transformationClass::getInputContentTypes(),
true))
219 $reflectionClass = new \ReflectionClass($transformationClass);
221 return $reflectionClass->newInstance();
static includeModule($moduleName)
static isModuleInstalled($moduleName)
static getByFilename($filename)