3namespace Bitrix\Main\UI\Viewer;
5use Bitrix\Main\ArgumentException;
6use Bitrix\Main\File\Image\Rectangle;
7use Bitrix\Main\UI\Viewer\Transformation\Transformation;
8use Bitrix\Main\UI\Viewer\Transformation\TransformerManager;
9use Bitrix\Main\Web\Json;
10use Bitrix\Main\Web\Uri;
14 private const FAKE_FILEDATA = [
16 'CONTENT_TYPE' =>
'application/octet-stream',
64 ->setAttribute(
'data-viewer')
65 ->setViewerType(static::getViewerTypeByFile($this->fileData))
66 ->setAttribute(
'data-src', $this->sourceUri)
71 $sourceImageWidth = $this->fileData[
'WIDTH'] ?? 0;
72 $sourceImageHeight = $this->fileData[
'HEIGHT'] ?? 0;
73 if ($sourceImageWidth > 0 && $sourceImageHeight > 0)
75 $sourceUri = $this->sourceUri instanceof
Uri ? $this->sourceUri :
new Uri((
string)$this->sourceUri);
77 $sourceRectangle =
new Rectangle($sourceImageWidth, $sourceImageHeight);
78 $destinationRectangle =
new Rectangle($imageRenderer->getWidth(), $imageRenderer->getHeight());
79 $needResize = $sourceRectangle->resize($destinationRectangle, $imageRenderer->getResizeType());
97 $fileData = \CFile::getByID($fileId)->fetch();
133 return static::buildAsUnknownType(
$sourceUri);
147 return new static(self::FAKE_FILEDATA,
$sourceUri);
153 (
$fileData[
'ID'] === self::FAKE_FILEDATA[
'ID'])
154 && (
$fileData[
'CONTENT_TYPE'] === self::FAKE_FILEDATA[
'CONTENT_TYPE'])
162 return static::buildByFileId($fileId,
$sourceUri);
168 return static::buildAsUnknownType(
$sourceUri);
259 return $this->
setAttribute(
'data-viewer-extension', $extension);
277 $this->
setViewerType(static::getViewerTypeByFile($this->fileData));
291 $this->attributes[
$name] = $value;
303 unset($this->attributes[
$name]);
315 return isset($this->attributes[
$name]);
325 if (isset($this->attributes[
$name]))
327 return $this->attributes[
$name];
347 protected static function getViewerTypeByFile(
array $fileArray)
350 $originalName = $fileArray[
'ORIGINAL_NAME'] ??
null;
352 if (isset(static::$renderClassByContentType[
$contentType]))
354 $renderClass = static::$renderClassByContentType[
$contentType];
355 if ($renderClass::getSizeRestriction() ===
null)
357 return $renderClass::getJsType();
361 $previewManager =
new PreviewManager();
362 $renderClass = $previewManager->getRenderClassByFile([
364 'originalName' => $originalName,
365 'size' => $fileArray[
'FILE_SIZE'] ??
null,
368 if ($renderClass === Renderer\Stub::class)
370 $transformerManager =
new TransformerManager();
371 if ($transformerManager->isAvailable())
374 $transformation = $transformerManager->buildTransformationByFile($fileArray);
378 $renderClass = $previewManager->getRenderClassByFile([
380 'originalName' => $originalName,
386 if ($renderClass !== Renderer\RestrictedBySize::class)
388 static::$renderClassByContentType[$fileArray[
'CONTENT_TYPE']] = $renderClass;
391 return $renderClass::getJsType();
399 return (
string)$this;
408 foreach ($this->attributes as
$key => $value)
412 $string .=
"{$value} ";
417 $string .=
"{$key}=\"{$value}\" ";
436 foreach ($this->attributes as
$key => $value)
464 foreach ($this->attributes as
$key => $value)
478 $result[
'data-actions'] = Json::encode($this->actions);
486 $key = str_replace(
'data-',
'',
$key);
487 $key = str_replace(
'-',
' ', mb_strtolower(
$key));
489 return lcfirst(str_replace(
' ',
'', ucwords(
$key)));
static tryBuildByFileId($fileId, $sourceUri)
setViewerType(string $type)
static buildByFileId($fileId, $sourceUri)
static buildAsUnknownType($sourceUri)
static buildByFileData(array $fileData, $sourceUri)
setTypeClass(string $class)
setAttribute($name, $value=null)
static isFakeFileData(array $fileData)
static tryBuildByFileData(array $fileData, $sourceUri)
convertKeyToDataSet($key)
static $renderClassByContentType
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
if(empty($signedUserToken)) $key