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