- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/rating_rule.php
- Класс: CRatingRule
- Вызов: CRatingRule::Update
static function Update($ID, $arFields)
{
global $DB;
$ID = intval($ID);
$err_mess = (CRatingRule::err_mess())."
Function: Update
Line: ";
// check only general field
if(!CRatingRule::__CheckFields($arFields))
return false;
if (isset($arFields["ENTITY_TYPE_ID"]) && $arFields['ENTITY_TYPE_ID'] <> '')
{
$arRatingRuleConfigs = CRatingRule::GetRatingRuleConfigs($arFields["ENTITY_TYPE_ID"]);
$bHideAction = isset($arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['HIDE_ACTION'])
&& $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['HIDE_ACTION'] == true? true: false;
$conditionModuleId = $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['MODULE'];
$arFields_u = Array(
"ACTIVE" => $arFields["ACTIVE"] == 'Y' ? 'Y' : 'N',
"NAME" => $arFields["NAME"],
"ENTITY_TYPE_ID" => $arFields["ENTITY_TYPE_ID"],
"CONDITION_NAME" => $arFields["CONDITION_NAME"],
"CONDITION_MODULE" => $conditionModuleId <> ''? $conditionModuleId: 'main',
"CONDITION_CLASS" => $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['CLASS'],
"CONDITION_METHOD" => $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['METHOD'],
"ACTION_NAME" => $bHideAction? 'empty': $arFields["ACTION_NAME"],
"ACTIVATE_CLASS" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['CLASS'],
"ACTIVATE_METHOD" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['METHOD'],
"DEACTIVATE_CLASS" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['CLASS'],
"DEACTIVATE_METHOD" => $bHideAction? 'empty': $arRatingRuleConfigs['ACTION_CONFIG'][$arFields["ACTION_NAME"]]['METHOD'],
"~LAST_MODIFIED" => $DB->GetNowFunction(),
);
}
else
{
$arFields_u = Array(
"ACTIVE" => $arFields['ACTIVE'] == 'Y' ? 'Y' : 'N',
"NAME" => $arFields["NAME"],
"~LAST_MODIFIED" => $DB->GetNowFunction(),
);
unset($arFields["CONDITION_CONFIG"]);
unset($arFields["ACTION_CONFIG"]);
}
$strUpdate = $DB->PrepareUpdate("b_rating_rule", $arFields_u);
if($strUpdate!="")
{
$strSql = "UPDATE b_rating_rule SET ".$strUpdate." WHERE ID=".$ID;
if(!$DB->Query($strSql, false, $err_mess.__LINE__))
return false;
}
if (isset($arFields["CONDITION_CONFIG"]))
{
// queries modules and give them to inspect the field settings
$db_events = GetModuleEvents("main", "OnAfterUpdateRatingRule");
while($arEvent = $db_events->Fetch())
$arFields = ExecuteModuleEventEx($arEvent, array($ID, $arFields));
$arFields_u = Array(
"CONDITION_CONFIG" => "'".$DB->ForSQL(serialize($arFields["CONDITION_CONFIG"]))."'",
"ACTION_CONFIG" => $bHideAction? "'a:0:{}'": "'".$DB->ForSQL(serialize($arFields["ACTION_CONFIG"]))."'",
);
$DB->Update("b_rating_rule", $arFields_u, "WHERE ID = ".$ID);
}
CAgent::RemoveAgent("CRatingRule::Apply($ID);", "main");
CAgent::AddAgent("CRatingRule::Apply($ID);", "main", "N", $arRatingRuleConfigs['CONDITION_CONFIG'][$arFields["CONDITION_NAME"]]['REFRESH_TIME'], "", "Y", "");
return true;
}