• Модуль: seo
  • Путь к файлу: ~/bitrix/modules/seo/lib/adv/yandexcampaign.php
  • Класс: BitrixSeoAdvYandexCampaignTable
  • Вызов: YandexCampaignTable::onBeforeUpdate
static function onBeforeUpdate(EntityEvent $event)
{
	$result = new EntityEventResult();

	$primary = $event->getParameter("primary");
	$data = $event->getParameter("fields");

	$currentData = static::getByPrimary($primary);
	$currentData = $currentData->fetch();

	if($currentData)
	{
		$engine = self::getEngine();

		if($currentData['ENGINE_ID'] != $engine->getId())
		{
			$result->addError(new EntityFieldError(
				static::getEntity()->getField('ENGINE_ID'),
				Loc::getMessage("SEO_CAMPAIGN_ERROR_WRONG_ENGINE")
			));
		}

		$ownerInfo = $engine->getCurrentUser();

		if($currentData['OWNER_ID'] != $ownerInfo['id'])
		{
			$result->addError(new EntityFieldError(
				static::getEntity()->getField('OWNER_ID'),
				Loc::getMessage("SEO_CAMPAIGN_ERROR_WRONG_OWNER")
			));
		}

		$data['OWNER_NAME'] = $ownerInfo['login'];
		$data['XML_ID'] = $currentData['XML_ID'];

		if(!static::$skipRemoteUpdate)
		{
			$data["SETTINGS"] = self::createParam($engine, $data, $result);
		}

		$data["NAME"] = $data['SETTINGS']['Name'];

		if(!static::$skipRemoteUpdate && $result->getType() == EntityEventResult::SUCCESS)
		{
			try
			{
				$engine->updateCampaign($data["SETTINGS"]);

				$campaignSettings = $engine->getCampaign(array($data['XML_ID']));
				$data['SETTINGS'] = $campaignSettings[0];
			}
			catch(EngineYandexDirectException $e)
			{
				$result->addError(
					new EntityFieldError(
						static::getEntity()->getField('ENGINE_ID'),
						$e->getMessage(),
						$e->getCode()
					)
				);
			}
		}

		$data['LAST_UPDATE'] = new MainTypeDateTime();
		$data['ACTIVE'] = $data['SETTINGS']['StatusArchive'] == EngineYandexDirect::BOOL_YES
			? static::INACTIVE
			: static::ACTIVE;

		$result->modifyFields($data);
	}

	return $result;
}