%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/advertising.banner/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/advertising.banner/class.php |
<?php
use Bitrix\Main;
use Bitrix\Main\Localization\Loc;
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
if (!\Bitrix\Main\Loader::includeModule('advertising'))
return;
Loc::loadMessages(__FILE__);
class AdvertisingBanner extends \CBitrixComponent
{
/** @var CPHPCache $obCache */
protected $obCache;
protected $cache_id;
protected $cache_path;
protected $templateCachedData;
protected $arBanners;
protected $arVars;
protected $templateProps;
protected $templateFiles;
protected $bannerIndex = 0;
public function onPrepareComponentParams($params)
{
$params['TYPE'] = (isset($params['TYPE']) ? trim($params['TYPE']) : '');
if($params['NOINDEX'] <> 'Y')
{
$params['NOINDEX'] = 'N';
}
if ($params['CACHE_TYPE'] == 'Y' || ($params['CACHE_TYPE'] == 'A' && Bitrix\Main\Config\Option::get('main', 'component_cache_on', 'Y') == 'Y'))
{
$params['CACHE_TIME'] = intval($params['CACHE_TIME']);
}
else
{
$params['CACHE_TIME'] = 0;
}
if (isset($params['QUANTITY']) && intval($params['QUANTITY']) > 0)
{
$params['QUANTITY'] = intval($params['QUANTITY']);
}
else
{
$params['QUANTITY'] = 1;
}
$params['BANNER_ID'] = intval($params['BANNER_ID']);
return $params;
}
protected function loadBanners()
{
global $APPLICATION;
$this->arBanners = CAdvBanner::GetRandomArray($this->arParams['TYPE'], $this->arParams['QUANTITY']);
$this->arResult['BANNERS'] = array();
if (!empty($this->arBanners) && is_array($this->arBanners))
{
foreach ($this->arBanners as $key => $banner)
{
if ($banner['AD_TYPE'] === 'template')
{
$templateProps = unserialize($banner['TEMPLATE']);
$templateFiles = unserialize($banner['TEMPLATE_FILES']);
if (empty($this->arResult['SIZE']))
{
$this->templateFiles = $templateFiles;
$this->arResult['SIZE'] = $this->getBannerSize();
}
if (count($templateProps['PROPS']) > 1)
{
if (count($this->arResult['BANNERS']) == 0)
{
foreach ($templateProps['PROPS'] as $k => $v)
{
ob_start();
$APPLICATION->IncludeComponent(
'bitrix:advertising.banner.view',
$templateProps['NAME'],
array(
'PROPS' => $v,
'FILES' => $templateFiles[$k],
'EXT_MODE' => $templateProps['MODE'],
'INDEX' => $this->bannerIndex,
'HEIGHT' => $this->arParams['HEIGHT'],
'CASUAL_PROPERTIES' => array(
'TYPE' => $banner['AD_TYPE']
)
),
$this,
array('HIDE_ICONS' => 'Y')
);
$strReturn = CAdvBanner::PrepareHTML(ob_get_contents(), $banner);
$strReturn = CAdvBanner::ReplaceURL($strReturn, $banner);
ob_end_clean();
$this->arResult['BANNERS'][] = $strReturn;
$this->bannerIndex++;
}
$this->arResult['BANNERS_PROPERTIES'][$key] = $banner;
break;
}
else
{
continue;
}
}
else
{
ob_start();
$APPLICATION->IncludeComponent(
'bitrix:advertising.banner.view',
$templateProps['NAME'],
array(
'PROPS' => $templateProps['PROPS'][0],
'FILES' => $templateFiles[0],
'EXT_MODE' => $templateProps['MODE'],
'INDEX' => $this->bannerIndex,
'HEIGHT' => $this->arParams['HEIGHT'],
'CASUAL_PROPERTIES' => array(
'TYPE' => $banner['AD_TYPE']
)
),
$this,
array('HIDE_ICONS' => 'Y')
);
$strReturn = CAdvBanner::PrepareHTML(ob_get_contents(), $banner);
$strReturn = CAdvBanner::ReplaceURL($strReturn, $banner);
ob_end_clean();
$this->arResult['BANNERS'][$key] = $strReturn;
$this->arResult['BANNERS_PROPERTIES'][$key] = $banner;
$this->bannerIndex++;
}
}
else
{
$templateExists = false;
if (strlen($this->arParams['DEFAULT_TEMPLATE']) > 0)
{
$arTemplates = CComponentUtil::GetTemplatesList('bitrix:advertising.banner.view');
if (is_array($arTemplates) && !empty($arTemplates))
{
foreach ($arTemplates as $template)
{
if ($this->arParams['DEFAULT_TEMPLATE'] == $template['NAME'])
{
$templateExists = true;
break;
}
}
}
}
if ($banner['AD_TYPE'] === 'image' && $templateExists)
{
ob_start();
$APPLICATION->IncludeComponent(
'bitrix:advertising.banner.view',
$this->arParams['DEFAULT_TEMPLATE'],
array(
'PROPS' => array(),
'FILES' => array(),
'EXT_MODE' => 'N',
'HEIGHT' => $this->arParams['HEIGHT'],
'CASUAL_PROPERTIES' => array(
'TYPE' => $banner['AD_TYPE'],
'IMG' => $banner['IMAGE_ID'],
'ALT' => $banner['IMAGE_ALT'],
'URL' => $banner['URL'],
'URL_TARGET' => $banner['URL_TARGET']
)
),
$this,
array('HIDE_ICONS' => 'Y')
);
$strReturn = ob_get_contents();
ob_end_clean();
}
else
{
$strReturn = CAdvBanner::GetHTML($banner, ($this->arParams['NOINDEX'] == 'Y'));
}
$this->arResult['BANNERS'][$key] = $strReturn;
$this->arResult['BANNERS_PROPERTIES'][$key] = $banner;
$this->bannerIndex++;
}
}
}
}
protected function registerBannerTags()
{
if (defined('BX_COMP_MANAGED_CACHE'))
{
$taggedCache = Main\Application::getInstance()->getTaggedCache();
$taggedCache->registerTag('advertising_banner_type_'.$this->arParams['TYPE']);
}
}
protected function loadPreview()
{
global $APPLICATION;
if ($banner = CAdvBanner::GetByID($this->arParams['BANNER_ID'])->Fetch())
{
if ($banner['AD_TYPE'] === 'template')
{
$this->templateProps = unserialize($banner['TEMPLATE']);
$this->templateFiles = unserialize($banner['TEMPLATE_FILES']);
foreach ($this->templateProps['PROPS'] as $k => $v)
{
ob_start();
$APPLICATION->IncludeComponent(
'bitrix:advertising.banner.view',
$this->templateProps['NAME'],
array(
'PROPS' => $v,
'FILES' => $this->templateFiles[$k],
'EXT_MODE' => $this->templateProps['MODE'],
'INDEX' => $this->bannerIndex,
'PREVIEW' => $this->arParams['PREVIEW'],
'CASUAL_PROPERTIES' => array(
'TYPE' => $banner['AD_TYPE']
)
),
$this,
array('HIDE_ICONS' => 'Y')
);
$strReturn = CAdvBanner::PrepareHTML(ob_get_contents(), $banner);
ob_end_clean();
$this->arResult['BANNERS'][] = $strReturn;
$this->bannerIndex++;
}
$this->arResult['BANNERS_PROPERTIES'][] = $banner;
}
$this->arResult['SIZE'] = $this->getBannerSize();
}
else
{
$this->arResult = array();
}
}
protected function getBannerSize()
{
if (is_array($this->templateFiles))
{
foreach ($this->templateFiles as $tfk => $tfv)
{
foreach ($tfv as $name => $id)
{
if ($id !== 'null')
{
$file = CFile::GetFileArray($id);
return array(
'WIDTH' => $file['WIDTH'],
'HEIGHT' => $file['HEIGHT']
);
}
}
}
}
return array();
}
protected function setCache()
{
global $USER;
return $this->startResultCache(false, $USER->GetGroups());
}
public function executeComponent()
{
$this->arResult = array(
'ID' => $this->randString(5),
'BANNER' => '',
'BANNER_PROPERTIES' => array(),
);
if ($this->setCache())
{
if ($this->arParams['PREVIEW'] === 'Y')
{
$this->loadPreview();
}
else
{
$this->loadBanners();
$this->registerBannerTags();
}
if (!empty($this->arResult['BANNERS']) && is_array($this->arResult['BANNERS']))
{
$this->arResult['BANNER'] = implode('<br />', $this->arResult['BANNERS']);
}
if (!empty($this->arResult['BANNERS_PROPERTIES']) && is_array($this->arResult['BANNERS_PROPERTIES']))
{
$this->arResult['BANNER_PROPERTIES'] = reset($this->arResult['BANNERS_PROPERTIES']);
}
$this->includeComponentTemplate();
}
if ($this->arParams['PREVIEW'] != 'Y')
{
$this->doFinalActions();
}
}
public function doFinalActions()
{
global $USER, $APPLICATION;
if (!empty($this->arResult['BANNERS_PROPERTIES']) && is_array($this->arResult['BANNERS_PROPERTIES']))
{
foreach ($this->arResult['BANNERS_PROPERTIES'] as $banner)
{
CAdvBanner::FixShow($banner);
if ($USER->IsAuthorized() && $APPLICATION->GetShowIncludeAreas())
{
if (($arIcons = CAdvBanner::GetEditIcons($banner, $this->arParams['TYPE'], $this->getIncludeAreaIcons())) !== false)
{
$this->addIncludeAreaIcons($arIcons);
}
}
}
}
}
}