Exemple #1
0
 /**
  * <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>
  * &lt;?
  * // изменим название рейтинга и сделаем его не активным
  * $arUpdateRating = array(
  * 	'ACTIVE' =&gt; 'N',
  * 	'NAME' =&gt; 'Рейтинг, измененный через API',
  * );
  * $result = CRatings::Update(1, $arUpdateRating);
  * if ($result)
  *     echo "Рейтинг успешно обновлен.";
  * ?&gt;
  * </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;
 }