/** * <p>Метод изменяет параметры рейтинга с идентификатором <i>id</i>. Динамичный метод.</p> * * * @param int $id Идентификатор рейтинга. * * @param array $fields Массив значений параметров. В качестве ключей данного массива * допустимо использовать: <ul> <li> <b>NAME</b> – название рейтинга</li> <li> * <b>ACTIVE</b> – активность рейтинга (Y|N)</li> <li> <b>ENTITY_ID</b> – оцениваемый * объект (например: USER, BLOG, и т.д.)</li> <li> <b>CALCULATION_METHOD</b> – тип подсчета * рейтинга (SUM-суммирование критериев, AVG – средние значение * критериев)</li> <li> <b>CONFIGS</b> – массив, описывающий критерии * рейтингования</li> <li> <b>NEW_CALC</b> – обнуляет предыдущее значение * рейтинга</li> </ul> * * @return bool * * <h4>Example</h4> * <pre> * <? * // изменим название рейтинга и сделаем его не активным * $arUpdateRating = array( * 'ACTIVE' => 'N', * 'NAME' => 'Рейтинг, измененный через API', * ); * $result = CRatings::Update(1, $arUpdateRating); * if ($result) * echo "Рейтинг успешно обновлен."; * ?> * </pre> * * * <h4>See Also</h4> * <ul> <li><a href="http://dev.1c-bitrix.ru/api_help/main/reference/cratings/add.php">CRating::Add</a></li> </ul><a * name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/main/reference/cratings/update.php * @author Bitrix */ public static function Update($ID, $arFields) { global $DB, $stackCacheManager; $ID = intval($ID); $err_mess = CRatings::err_mess() . "<br>Function: Update<br>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; }