• Модуль: 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;
}