• Модуль: seo
  • Путь к файлу: ~/bitrix/modules/seo/lib/adv/auto.php
  • Класс: BitrixSeoAdvAuto
  • Вызов: Auto::checkQuantityAgent
static function checkQuantityAgent()
{
	if(!IsModuleInstalled("catalog"))
	{
		return __CLASS__."::checkQuantityAgent();";
	}

	$dbRes = YandexBannerTable::getList(array(
		'filter' => array(
			array(
				'=AUTO_QUANTITY_ON' => YandexBannerTable::MARKED,
			),
			array(
				'=AUTO_QUANTITY_OFF' => YandexBannerTable::MARKED,
			),
			'LOGIC' => "OR"
		),
		'select' => array(
			'ID', 'XML_ID', 'CAMPAIGN_ID', 'CAMPAIGN_XML_ID' => 'CAMPAIGN.XML_ID',
			'AUTO_QUANTITY_ON', 'AUTO_QUANTITY_OFF',
		),
	));

	try
	{
		$engine = new YandexDirect();
	}
	catch (BitrixMainSystemException $e)
	{
		return __CLASS__."::checkQuantityAgent();";
	}

	$bannersListToStop = array();
	$bannersListToResume = array();
	$bannersListToUnMarkStopped = array();
	$bannersListToUnMarkResumed = array();

	$bannersLogData = array();
	while($banner = $dbRes->fetch())
	{
		if($banner["AUTO_QUANTITY_ON"] == YandexBannerTable::MARKED)
		{
			if(!isset($bannersListToResume[$banner["CAMPAIGN_XML_ID"]]))
			{
				$bannersListToResume[$banner["CAMPAIGN_XML_ID"]] = array();
			}

			$bannersListToResume[$banner["CAMPAIGN_XML_ID"]][$banner["ID"]] = $banner["XML_ID"];
			$causeCode = AutologTable::CODE_QUANTITY_ON;

			if($banner["AUTO_QUANTITY_OFF"] == YandexBannerTable::MARKED)
			{
				$bannersListToUnMarkStopped[] = $banner["ID"];
			}
		}
		else
		{
			if(!isset($bannersListToResume[$banner["CAMPAIGN_XML_ID"]]))
			{
				$bannersListToStop[$banner["CAMPAIGN_XML_ID"]] = array();
			}

			$bannersListToStop[$banner["CAMPAIGN_XML_ID"]][$banner["ID"]] = $banner["XML_ID"];
			$causeCode = AutologTable::CODE_QUANTITY_OFF;

			if($banner["AUTO_QUANTITY_ON"] == YandexBannerTable::MARKED)
			{
				$bannersListToUnMarkResumed[] = $banner["ID"];
			}
		}

		$bannersLogData[$banner["ID"]] = array(
			'CAMPAIGN_ID' => $banner['CAMPAIGN_ID'],
			'CAMPAIGN_XML_ID' => $banner['CAMPAIGN_XML_ID'],
			'BANNER_ID' => $banner['ID'],
			'BANNER_XML_ID' => $banner['XML_ID'],
			'CAUSE_CODE' => $causeCode,
		);
	}

	if(count($bannersLogData) > 0)
	{
		foreach($bannersListToResume as $campaignId => $bannersList)
		{
			if(count($bannersList) > 0)
			{
				$success = true;

				try
				{
					$engine->resumeBanners($campaignId, array_values($bannersList));
				}
				catch(YandexDirectException $e)
				{
					$success = false;
				}

				foreach($bannersList as $bannerId => $bannerXmlId)
				{
					$logEntry = $bannersLogData[$bannerId];
					$logEntry['ENGINE_ID'] = $engine->getId();
					$logEntry['SUCCESS'] = $success ? AutologTable::SUCCESS : AutologTable::FAILURE;

					AutologTable::add($logEntry);
				}

				$bannersListToUnMarkResumed = array_merge(
					$bannersListToUnMarkResumed,
					array_keys($bannersList)
				);
			}
		}

		foreach($bannersListToStop as $campaignId => $bannersList)
		{
			if(count($bannersList) > 0)
			{
				$success = true;
				try
				{
					$engine->stopBanners($campaignId, array_values($bannersList));
				}
				catch(YandexDirectException $e)
				{
					$success = false;
				}

				foreach($bannersList as $bannerId => $bannerXmlId)
				{
					$logEntry = $bannersLogData[$bannerId];
					$logEntry['ENGINE_ID'] = $engine->getId();
					$logEntry['SUCCESS'] = $success ? AutologTable::SUCCESS : AutologTable::FAILURE;

					AutologTable::add($logEntry);
				}

				$bannersListToUnMarkStopped = array_merge(
					$bannersListToUnMarkStopped,
					array_keys($bannersList)
				);
			}
		}

		if(count($bannersListToUnMarkStopped) > 0)
		{
			YandexBannerTable::unMarkStopped($bannersListToUnMarkStopped);
		}

		if(count($bannersListToUnMarkResumed) > 0)
		{
			YandexBannerTable::unMarkResumed($bannersListToUnMarkResumed);
		}
	}

	return __CLASS__."::checkQuantityAgent();";
}