1
0
mirror of synced 2024-11-29 08:46:09 +03:00
bitrix-module/intaro.retailcrm/lib/repository/filerepository.php

86 lines
2.2 KiB
PHP

<?php
/**
* @category Integration
* @package Intaro\RetailCrm\Repository
* @author RetailCRM <integration@retailcrm.ru>
* @license MIT
* @link http://retailcrm.ru
* @see http://retailcrm.ru/docs
*/
namespace Intaro\RetailCrm\Repository;
use CFile;
/**
* Class FileRepository
* @package Intaro\RetailCrm\Repository
*/
class FileRepository
{
/**
* @var string
*/
private $defaultServerName;
/** @var array */
private $domainCatalogList = [];
/**
* FileRepository constructor.
* @param string $defaultServerName
*/
public function __construct(string $defaultServerName)
{
$this->defaultServerName = $defaultServerName;
$this->domainCatalogList = SiteRepository::getDomainList();
}
/**
* @param int|null $fileId
* @return string
*/
public function getImageUrl(?int $fileId, ?int $iBlockId = null): string
{
if (!$fileId) {
return '';
}
$pathImage = CFile::GetPath($fileId);
$validation = '/^(http|https):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i';
if ((bool) preg_match($validation, $pathImage) === false) {
return $this->getServerName($iBlockId) . $pathImage;
}
return $pathImage;
}
/**
* @param array $product
* @param string $pictureProp
* @return string
*/
public function getProductPicture(array $product, string $pictureProp = '', ?int $iBlockId = null): string
{
$picture = '';
$pictureId = $product['PROPERTY_' . $pictureProp . '_VALUE'] ?? null;
if (isset($product['DETAIL_PICTURE'])) {
$picture = $this->getImageUrl($product['DETAIL_PICTURE'], $iBlockId);
} elseif (isset($product['PREVIEW_PICTURE'])) {
$picture = $this->getImageUrl($product['PREVIEW_PICTURE'], $iBlockId);
} elseif ($pictureId !== null) {
$picture = $this->getImageUrl($pictureId, $iBlockId);
}
return $picture ?? '';
}
public function getServerName(?int $iBlockId): string
{
return $this->domainCatalogList[$iBlockId] ?? $this->defaultServerName;
}
}