- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/ratings.php
- Класс: CAllRatings
- Вызов: CAllRatings::Update
static function Update($ID, $arFields)
{
global $DB, $stackCacheManager;
$ID = (int)$ID;
$err_mess = (CRatings::err_mess())."
Function: Update
Line: ";
// check only general field
if(!CRatings::__CheckFields($arFields))
return false;
$arFields_u = Array(
"ACTIVE" => $arFields['ACTIVE'] === 'Y' ? 'Y' : 'N',
"NAME" => $arFields["NAME"],
"ENTITY_ID" => $arFields["ENTITY_ID"],
"CALCULATION_METHOD" => $arFields["CALCULATION_METHOD"],
"~LAST_MODIFIED" => $DB->GetNowFunction(),
);
$strUpdate = $DB->PrepareUpdate("b_rating", $arFields_u);
if(!$DB->Query("UPDATE b_rating SET ".$strUpdate." WHERE ID=".$ID, false, $err_mess.__LINE__))
return false;
if (!isset($arFields["CONFIGS"]))
{
$stackCacheManager->Clear("b_rating");
return true;
}
// queries modules and give them to inspect the field settings
foreach(GetModuleEvents("main", "OnAfterUpdateRating", true) as $arEvent)
$arFields = ExecuteModuleEventEx($arEvent, array($ID, $arFields));
CRatings::__UpdateComponents($ID, $arFields);
$arFields_u = Array(
"POSITION" => "'".($arFields['POSITION'] === 'Y' ? 'Y' : 'N')."'",
"AUTHORITY" => "'".($arFields['AUTHORITY'] === 'Y' ? 'Y' : 'N')."'",
"CONFIGS" => "'".$DB->ForSQL(serialize($arFields["CONFIGS"]))."'",
);
$DB->Update("b_rating", $arFields_u, "WHERE ID = ".$ID);
if ($arFields['AUTHORITY'] === 'Y')
CRatings::SetAuthorityRating($ID);
if ($arFields['NEW_CALC'] === 'Y')
$DB->Query("UPDATE b_rating_results SET PREVIOUS_VALUE = 0 WHERE RATING_ID=".$ID." and ENTITY_TYPE_ID='".$DB->ForSql($arFields["ENTITY_ID"])."'", false, $err_mess.__LINE__);
$strSql = "SELECT COMPLEX_NAME FROM b_rating_component WHERE RATING_ID = $ID and ACTIVE = 'N'";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
$arrRatingComponentId = array();
while($arRes = $res->Fetch())
$arrRatingComponentId[] = $arRes['COMPLEX_NAME'];
if (!empty($arrRatingComponentId))
$DB->Query("DELETE FROM b_rating_component_results WHERE RATING_ID = $ID AND COMPLEX_NAME IN ('".implode("','", $arrRatingComponentId)."')", false, $err_mess.__LINE__);
CRatings::Calculate($ID, true);
CAgent::RemoveAgent("CRatings::Calculate($ID);", "main");
$AID = CAgent::AddAgent("CRatings::Calculate($ID);", "main", "N", 3600, "", "Y", "");
$stackCacheManager->Clear("b_rating");
return true;
}