- Модуль: seo
- Путь к файлу: ~/bitrix/modules/seo/lib/engine/yandexdirect.php
- Класс: BitrixSeoEngineYandexDirect
- Вызов: YandexDirect::updateBannersManual
public function updateBannersManual($campaignId, $bannerId = NULL)
{
$res = array(
'added' => 0,
'updated' => 0,
'error' => 0,
);
if (!is_array($bannerId) && $bannerId > 0)
{
$bannerId = array($bannerId);
}
$bannerList = array();
if (is_array($bannerId) && count($bannerId) > 0)
{
// get banners by ID
$dbRes = YandexBannerTable::getList(array(
'filter' => array(
'=ID' => $bannerId,
'=ENGINE_ID' => $this->getId(),
),
'select' => array('XML_ID'),
));
while ($banner = $dbRes->fetch())
{
$keys[] = $banner['XML_ID'];
}
if(count($keys) > 0)
$bannerList = $this->getBanners($keys);
}
else
{
$dbCampaigns = YandexCampaignTable::getList(array(
'filter' => array(
'=ID' => $campaignId,
'=ENGINE_ID' => $this->getId(),
),
'select' => array('ID', 'XML_ID'),
));
while ($campaign = $dbCampaigns->fetch())
{
$campaignIndex[$campaign['XML_ID']] = $campaign['ID'];
}
// get ALL banners for current campaign
if (count($campaignIndex) > 0)
$bannerList = $this->getCampaignBanners(array_keys($campaignIndex));
}
$bannerListSorted = array();
$bannerListToDelete = array();
foreach ($bannerList as $bannerInfo)
{
$bannerListSorted[$bannerInfo['BannerID']] = $bannerInfo;
}
$filter = array('=ENGINE_ID' => $this->getId());
// get filtered items only if we update only selected banners. Else - get ALL from table
if(is_array($bannerId) && count($bannerId) > 0 && count($bannerListSorted) > 0)
$filter['=XML_ID'] = array_keys($bannerListSorted);
if($campaignId)
$filter['=CAMPAIGN_ID'] = $campaignId;
$dbBanners = YandexBannerTable::getList(array('filter' => $filter));
YandexBannerTable::setSkipRemoteUpdate(true);
// UPDATE existing in table banners
while ($banner = $dbBanners->fetch())
{
if (isset($bannerListSorted[$banner['XML_ID']]))
{
$result = YandexBannerTable::update(
$banner['ID'], array(
"SETTINGS" => $bannerListSorted[$banner['XML_ID']],
)
);
unset($bannerListSorted[$banner['XML_ID']]);
if ($result->isSuccess())
{
$res['updated']++;
}
else
{
$res['error']++;
}
}
// collect banners, then not exist in YD, but exist in table
else
{
$bannerListToDelete[$banner['ID']] = $banner['ID'];
}
}
// REMOVE from table deleted banners
if (count($bannerListToDelete) > 0)
{
foreach ($bannerListToDelete as $bannerId)
{
$resultDelete = YandexBannerTable::delete($bannerId);
YandexBannerTable::setSkipRemoteUpdate(true);
}
}
// ADD in table new campaignt from YD
foreach ($bannerListSorted as $bannerId => $bannerInfo)
{
$result = YandexBannerTable::add(array(
"CAMPAIGN_ID" => $campaignIndex[$bannerInfo['CampaignID']],
"SETTINGS" => $bannerInfo,
));
if ($result->isSuccess())
{
$res['added']++;
}
else
{
$res['error']++;
}
}
YandexBannerTable::setSkipRemoteUpdate(false);
return $res;
}