/** * <p>Метод подсчитывает результаты рейтинга с идентификатором <i>id</i>. Динамичный метод.</p> * * * @param int $id Идентификатор рейтинга * * @param bool $forceRecalc Принудительный пересчет. Если данный параметр установлен в * <b>true</b>, то критерии рейтинга будут пересчитаны без учета времени * следующего запуска. * * @return string * * <h4>Example</h4> * <pre> * <? * // принудительно пересчитаем все критерии рейтинга * $ID = 4; * $bforceRecalc = true; * CRatings::Calculate($ID, $bforceRecalc); * ?> * </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});"; }