static function createParam(EngineYandexDirect $engine, array $data, EntityEventResult $result)
{
$settings = $engine->getSettings();
$campaignParam = array(
"Login" => $settings["AUTH_USER"]["login"],
);
$newCampaign = true;
if(!empty($data["XML_ID"]))
{
$newCampaign = false;
$campaignParam["CampaignID"] = $data["XML_ID"];
}
if($newCampaign || isset($data['SETTINGS']["Name"]))
{
$campaignParam["Name"] = trim($data['SETTINGS']["Name"]);
if($campaignParam["Name"] == '')
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('NAME'),
Loc::getMessage('SEO_CAMPAIGN_ERROR_NO_NAME')
));
}
}
if($newCampaign || isset($data["SETTINGS"]["FIO"]))
{
$campaignParam["FIO"] = trim($data["SETTINGS"]["FIO"]);
if($campaignParam["FIO"] == '')
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage('SEO_CAMPAIGN_ERROR_NO_FIO')
));
}
}
if(is_array($data["SETTINGS"]) && array_key_exists("StartDate", $data["SETTINGS"]))
{
if(is_a($data["SETTINGS"]["StartDate"], "Bitrix\Main\Type\Date"))
{
$campaignParam["StartDate"] = $data["SETTINGS"]["StartDate"]->convertFormatToPhp("Y-m-d");
}
elseif(is_string($data["SETTINGS"]["StartDate"]))
{
if(preg_match("/^\d{4}-\d{2}-\d{2}$/", $data["SETTINGS"]["StartDate"]))
{
$campaignParam["StartDate"] = $data["SETTINGS"]["StartDate"];
}
else
{
$ts = MakeTimeStamp($data["SETTINGS"]["StartDate"], FORMAT_DATE);
if($ts > 0)
{
$campaignParam["StartDate"] = date('Y-m-d', $ts);
}
}
}
if(!$campaignParam["StartDate"])
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage('SEO_CAMPAIGN_ERROR_NO_START_DATE')
));
}
}
if($newCampaign || isset($data["SETTINGS"]["Strategy"]))
{
if(
empty($data["SETTINGS"]["Strategy"])
|| !is_array($data["SETTINGS"]["Strategy"])
|| empty($data["SETTINGS"]["Strategy"]["StrategyName"])
)
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage('SEO_CAMPAIGN_ERROR_NO_STRATEGY')
));
}
if(array_key_exists($data["SETTINGS"]["Strategy"]["StrategyName"], self::$strategyConfig))
{
$strategy = $data["SETTINGS"]["Strategy"]["StrategyName"];
$config = self::$strategyConfig[$strategy];
$campaignParam["Strategy"] = array(
"StrategyName" => $strategy,
);
foreach($data["SETTINGS"]["Strategy"] as $param => $value)
{
if($param !== "StrategyName")
{
if(array_key_exists($param, $config))
{
$campaignParam["Strategy"][$param] = $value;
}
else
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage(
'SEO_CAMPAIGN_ERROR_STRATEGY_PARAM_NOT_SUPPORTED',
array(
'#PARAM#' => $param,
'#STRATEGY#' => $strategy,
)
)
));
}
}
}
foreach($config as $key => $def)
{
if($def['mandatory'] || isset($campaignParam["Strategy"][$key]))
{
switch($def['type'])
{
case 'int':
$campaignParam["Strategy"][$key] = intval($campaignParam["Strategy"][$key]);
break;
case 'float':
$campaignParam["Strategy"][$key] = doubleval($campaignParam["Strategy"][$key]);
break;
}
if(!$def['mandatory'] && empty($campaignParam["Strategy"][$key]))
{
unset($campaignParam["Strategy"][$key]);
}
}
if($def['mandatory'] && empty($campaignParam["Strategy"][$key]))
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage(
'SEO_CAMPAIGN_ERROR_STRATEGY_PARAM_MANDATORY',
array(
'#PARAM#' => Loc::getMessage('SEO_CAMPAIGN_STRATEGY_PARAM_'.ToUpper($key)),
'#STRATEGY#' => Loc::getMessage('SEO_CAMPAIGN_STRATEGY_'.$strategy),
)
)
));
}
}
}
else
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage(
'SEO_CAMPAIGN_ERROR_STRATEGY_NOT_SUPPORTED',
array(
'#STRATEGY#' => $data["SETTINGS"]["Strategy"]["StrategyName"],
)
)
));
}
}
if($newCampaign || !empty($data["SETTINGS"]["EmailNotification"]))
{
if(
empty($data["SETTINGS"]["EmailNotification"])
|| !is_array($data["SETTINGS"]["EmailNotification"])
|| !check_email($data["SETTINGS"]["EmailNotification"]['Email'])
)
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage('SEO_CAMPAIGN_ERROR_WRONG_EMAIL')
));
}
$campaignParam["EmailNotification"] = array(
"Email" => trim($data["SETTINGS"]["EmailNotification"]['Email']),
"WarnPlaceInterval" => intval($data["SETTINGS"]["EmailNotification"]['WarnPlaceInterval']),
"MoneyWarningValue" => intval($data["SETTINGS"]["EmailNotification"]['MoneyWarningValue']),
"SendWarn" => intval($data["SETTINGS"]["EmailNotification"]['SendWarn']),
);
if($campaignParam["EmailNotification"]['SendWarn'] === true
|| $campaignParam["EmailNotification"]['SendWarn'] === 1
|| $campaignParam["EmailNotification"]['SendWarn'] === 'Y'
)
{
$campaignParam["EmailNotification"]['SendWarn'] = EngineYandexDirect::BOOL_YES;
}
if(
$campaignParam["EmailNotification"]['SendWarn'] === false
|| $campaignParam["EmailNotification"]['SendWarn'] === 0
|| $campaignParam["EmailNotification"]['SendWarn'] === 'N'
)
{
$campaignParam["EmailNotification"]['SendWarn'] = EngineYandexDirect::BOOL_NO;
}
if(!in_array($campaignParam["EmailNotification"]["WarnPlaceInterval"], self::$allowedWarnPlaceIntervalValues))
{
if($campaignParam["EmailNotification"]['SendWarn'] == EngineYandexDirect::BOOL_YES)
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage(
'SEO_CAMPAIGN_ERROR_WRONG_INTERVAL',
array('#VALUES#' => implode(
',', self::$allowedWarnPlaceIntervalValues
))
)
));
}
else
{
$campaignParam["EmailNotification"]["WarnPlaceInterval"] = self::MONEY_WARN_PLACE_INTERVAL_DEFAULT;
}
}
if(
$campaignParam["EmailNotification"]["MoneyWarningValue"] < self::$allowedMoneyWarningInterval[0]
|| $campaignParam["EmailNotification"]["MoneyWarningValue"] > self::$allowedMoneyWarningInterval[1]
)
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('SETTINGS'),
Loc::getMessage(
'SEO_CAMPAIGN_ERROR_WRONG_WARNING',
array(
'#MIN#' => self::$allowedMoneyWarningInterval[0],
'#MAX#' => self::$allowedMoneyWarningInterval[1],
)
)
));
}
}
if($newCampaign || 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"]);
}
}
$campaignParam["MinusKeywords"] = $data["SETTINGS"]["MinusKeywords"];
}
if(!$newCampaign && $result->getType() == EntityEventResult::SUCCESS)
{
try
{
$yandexCampaignParam = $engine->getCampaign($data["XML_ID"]);
if(!is_array($yandexCampaignParam) || count($yandexCampaignParam) <= 0)
{
$result->addError(new EntityFieldError(
static::getEntity()->getField('XML_ID'),
Loc::getMessage(
'SEO_CAMPAIGN_ERROR_CAMPAIGN_NOT_FOUND',
array('#ID#' => $data["XML_ID"])
)
));
}
else
{
$campaignParam = array_replace_recursive($yandexCampaignParam[0], $campaignParam);
}
}
catch(EngineYandexDirectException $e)
{
$result->addError(
new EntityFieldError(
static::getEntity()->getField('ENGINE_ID'),
$e->getMessage(),
$e->getCode()
)
);
}
}
return $campaignParam;
}