- Модуль: seo
- Путь к файлу: ~/bitrix/modules/seo/lib/adv/yandexbanner.php
- Класс: BitrixSeoAdvYandexBannerTable
- Вызов: YandexBannerTable::createParam
static function createParam(EngineYandexDirect $engine, array $data, EntityEventResult $result)
{
$bannerParam = array();
$newBanner = true;
if(!empty($data["XML_ID"]))
{
$newBanner = false;
$bannerParam["BannerID"] = $data["XML_ID"];
}
if(!empty($data["CAMPAIGN_ID"]))
{
$dbRes = YandexCampaignTable::getByPrimary($data["CAMPAIGN_ID"]);
$campaign = $dbRes->fetch();
if($campaign)
{
$data['SETTINGS']['CampaignID'] = $campaign['XML_ID'];
}
else
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('CAMPAIGN_ID'),
Loc::getMessage('SEO_BANNER_ERROR_CAMPAIGN_NOT_FOUND')
));
}
}
if($newBanner || isset($data['SETTINGS']['CampaignID']))
{
$bannerParam['CampaignID'] = $data['SETTINGS']['CampaignID'];
}
if($newBanner || isset($data['SETTINGS']["Title"]))
{
$bannerParam["Title"] = trim($data['SETTINGS']["Title"]);
if($bannerParam["Title"] == '')
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('NAME'),
Loc::getMessage('SEO_BANNER_ERROR_NO_NAME')
));
}
elseif(mb_strlen($bannerParam["Title"]) > static::MAX_TITLE_LENGTH)
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('NAME'),
Loc::getMessage('SEO_BANNER_ERROR_LONG_NAME', array(
"#MAX#" => static::MAX_TITLE_LENGTH,
))
));
}
}
if($newBanner || isset($data['SETTINGS']["Text"]))
{
$bannerParam["Text"] = trim($data['SETTINGS']["Text"]);
if($bannerParam["Text"] == '')
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage('SEO_BANNER_ERROR_NO_TEXT')
));
}
elseif(mb_strlen($bannerParam["Text"]) > static::MAX_TEXT_LENGTH)
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage('SEO_BANNER_ERROR_LONG_TEXT', array(
"#MAX#" => static::MAX_TEXT_LENGTH,
))
));
}
}
if($newBanner || isset($data['SETTINGS']["Href"]))
{
$bannerParam["Href"] = trim($data['SETTINGS']["Href"]);
if($bannerParam["Href"] == '')
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage('SEO_BANNER_ERROR_NO_HREF')
));
}
}
// format Geolocation seletc to string
if($newBanner || isset($data["SETTINGS"]["Geo"]))
{
if(is_array($data["SETTINGS"]["Geo"]))
{
$data["SETTINGS"]["Geo"] = implode(",", $data["SETTINGS"]["Geo"]);
}
$bannerParam["Geo"] = $data["SETTINGS"]["Geo"];
}
if($newBanner || isset($data["SETTINGS"]["Phrases"]))
{
if($data["SETTINGS"]["Geo"] == '')
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage('SEO_BANNER_ERROR_NO_GEO')
));
}
elseif(!is_array($data["SETTINGS"]["Phrases"]) || count($data["SETTINGS"]["Phrases"]) <= 0)
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage('SEO_BANNER_ERROR_NO_PHRASES')
));
}
else
{
$bannerParam["Phrases"] = $data["SETTINGS"]["Phrases"];
foreach($bannerParam["Phrases"] as $key => $phraseInfo)
{
if(is_numeric($phraseInfo['AutoBudgetPriority']))
$phraseInfo['AutoBudgetPriority'] = static::$priorityList[intval($phraseInfo['AutoBudgetPriority'])];
$bannerParam["Phrases"][$key] = $phraseInfo;
}
}
}
if($newBanner || isset($data["SETTINGS"]["MinusKeywords"]))
{
if(!is_array($data["SETTINGS"]["MinusKeywords"]))
{
if($data["SETTINGS"]["MinusKeywords"] <> '')
{
$data["SETTINGS"]["MinusKeywords"] = array();
}
else
{
$data["SETTINGS"]["MinusKeywords"] = array($data["SETTINGS"]["MinusKeywords"]);
}
}
$bannerParam["MinusKeywords"] = $data["SETTINGS"]["MinusKeywords"];
}
if(!$newBanner && $result->getType() == EntityEventResult::SUCCESS)
{
try
{
$yandexBannerParam = $engine->getBanners(array($data["XML_ID"]));
if(!is_array($yandexBannerParam) || count($yandexBannerParam) <= 0)
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('XML_ID'),
Loc::getMessage(
'SEO_CAMPAIGN_ERROR_BANNER_NOT_FOUND',
array('#ID#' => $data["XML_ID"])
)
));
}
else
{
$bannerParam = array_replace_recursive($yandexBannerParam[0], $bannerParam);
}
}
catch(EngineYandexDirectException $e)
{
$result->addError(
new EntityFieldError(
static::getEntity()->getField('ENGINE_ID'),
$e->getMessage(),
$e->getCode()
)
);
}
}
return $bannerParam;
}