Пример #1
0
 /**
  * <p>Метод подсчитывает результаты рейтинга с идентификатором <i>id</i>. Динамичный метод.</p>
  *
  *
  * @param int $id  Идентификатор рейтинга
  *
  * @param bool $forceRecalc  Принудительный пересчет. Если данный параметр установлен в
  * <b>true</b>, то критерии рейтинга будут пересчитаны без учета времени
  * следующего запуска.
  *
  * @return string 
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // принудительно пересчитаем все критерии рейтинга
  * $ID = 4;
  * $bforceRecalc = true;
  * CRatings::Calculate($ID, $bforceRecalc);
  * ?&gt;
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/main/reference/cratings/calculate.php
  * @author Bitrix
  */
 public static function Calculate($ID, $bForceRecalc = false)
 {
     global $DB;
     $ID = intval($ID);
     $err_mess = CRatings::err_mess() . "<br>Function: Calculate<br>Line: ";
     $strSql = "SELECT\n\t\t\t\tRC.*,\n\t\t\t\t" . $DB->DateToCharFunction("RC.LAST_MODIFIED") . "\tLAST_MODIFIED,\n\t\t\t\t" . $DB->DateToCharFunction("RC.LAST_CALCULATED") . " LAST_CALCULATED,\n\t\t\t\t" . $DB->DateToCharFunction("RC.NEXT_CALCULATION") . " NEXT_CALCULATION\n\t\t\tFROM\n\t\t\t\tb_rating_component RC\n\t\t\tWHERE\n\t\t\t\tRATING_ID = {$ID}\n\t\t\t\tand ACTIVE = 'Y' " . ($bForceRecalc ? '' : 'AND NEXT_CALCULATION <= ' . $DB->GetNowFunction());
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     while ($arRes = $res->Fetch()) {
         if (CModule::IncludeModule(strtolower($arRes['MODULE_ID']))) {
             $arRes['CONFIG'] = unserialize($arRes['CONFIG']);
             // If the type is automatic calculation of parameters * global vote weight
             $sRatingWeightType = COption::GetOptionString("main", "rating_weight_type", "auto");
             if ($sRatingWeightType == 'auto') {
                 $voteWeight = COption::GetOptionString("main", "rating_vote_weight", 1);
                 $arRes['CONFIG']['COEFFICIENT'] = $arRes['CONFIG']['COEFFICIENT'] * $voteWeight;
             }
             if (strlen($arRes['EXCEPTION_METHOD']) > 0) {
                 if (method_exists($arRes['CLASS'], $arRes['EXCEPTION_METHOD'])) {
                     $exceptionText = call_user_func(array($arRes['CLASS'], $arRes['EXCEPTION_METHOD']));
                     if ($exceptionText === false) {
                         if (method_exists($arRes['CLASS'], $arRes['CALC_METHOD'])) {
                             $result = call_user_func(array($arRes['CLASS'], $arRes['CALC_METHOD']), $arRes);
                         }
                     }
                 }
             } else {
                 if (method_exists($arRes['CLASS'], $arRes['CALC_METHOD'])) {
                     $result = call_user_func(array($arRes['CLASS'], $arRes['CALC_METHOD']), $arRes);
                 }
             }
         }
     }
     CRatings::BuildRating($ID);
     return "CRatings::Calculate({$ID});";
 }