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