if ($arRes['ACTIVE'] == 'N') { CRatings::Delete($arRes['ID']); } else { $authorityId = $arRes['ID']; } } if ($authorityId == false) { $arConfig = array(); $arConfig['MAIN'] = array('VOTE' => array('USER' => array('ACTIVE' => 'Y', 'COEFFICIENT' => '1', 'LIMIT' => '30')), 'RATING' => array('BONUS' => array('ACTIVE' => 'Y', 'COEFFICIENT' => '1'))); $arAddRating = array('ACTIVE' => 'Y', 'NAME' => GetMessage('MAIN_RATING_AUTHORITY'), 'ENTITY_ID' => 'USER', 'CALCULATION_METHOD' => 'SUM', 'POSITION' => 'Y', 'AUTHORITY' => 'Y', 'CONFIGS' => $arConfig); $authorityId = CRatings::Add($arAddRating); } $strSql = "\n\t\t\tINSERT INTO b_rating_user (ENTITY_ID, RATING_ID)\n\t\t\tSELECT \n\t\t\t\tu.ID, '{$authorityId}'\n\t\t\tFROM \n\t\t\t\tb_user u \n\t\t\t\tLEFT JOIN b_rating_user ru ON ru.RATING_ID = {$authorityId} AND ru.ENTITY_ID = u.ID \n\t\t\tWHERE \n\t\t\t\tru.ENTITY_ID IS NULL"; $DB->Query($strSql, false, $err_mess . __LINE__); $arParams = array(); $arParams['DEFAULT_CONFIG_NEW_USER'] = '******'; CRatings::SetAuthorityDefaultValue($arParams); CRatings::Calculate($authorityId, true); CRatings::Calculate($ratingId, true); $ratingArray = 'array(1 => "' . $ratingId . '", 2 => "' . $authorityId . '")'; CWizardUtil::ReplaceMacros(WIZARD_SITE_PATH . "/forum/index.php", array("SHOW_RATING" => 'Y')); CWizardUtil::ReplaceMacros(WIZARD_SITE_PATH . "/forum/index.php", array("RATING_ID" => $ratingArray)); CWizardUtil::ReplaceMacros(WIZARD_SITE_PATH . "/people/index.php", array("RATING_ID" => $ratingId)); CWizardUtil::ReplaceMacros(WIZARD_SITE_PATH . "/people/user.php", array("RATING_ID" => $ratingArray)); CWizardUtil::ReplaceMacros(WIZARD_SITE_PATH . "/groups/group.php", array("RATING_ID" => $ratingId)); COption::SetOptionString("socialnetwork", "tooltip_rating_id", serialize(array($ratingId, $authorityId)), "", WIZARD_SITE_ID); COption::SetOptionString("socialnetwork", "tooltip_show_rating", "Y", "", WIZARD_SITE_ID); COption::SetOptionString("main", "rating_normalization", 10); COption::SetOptionString("forum", "SHOW_VOTES", "N"); COption::SetOptionString("main", "rating_vote_type", 'like'); }
$bCreateRule = true; $rsData = $DB->Query("SELECT ID, ACTIVE FROM b_rating_rule WHERE CONDITION_MODULE = 'intranet'"); while ($arRule = $rsData->Fetch()) { if ($arRule["ACTIVE"] == "N") { $DB->Query("DELETE FROM b_rating_rule WHERE ID = " . $arRule["ID"], true); } else { COption::SetOptionString("intranet", "ratingSubordinateId", $arRule['ID']); CRatingRule::Apply($arRule['ID']); $bCreateRule = false; } } // после авторитета if ($bCreateRule) { $dbRes = CLanguage::GetList($by = 'sort', $order = 'asc'); while ($arRes = $dbRes->Fetch()) { if (file_exists(dirname(__FILE__) . '/' . $arRes['LID'] . '/rating.php')) { require dirname(__FILE__) . '/' . $arRes['LID'] . '/rating.php'; } } $arFields = array("ACTIVE" => "Y", "NAME" => $MESS['INTR_INSTALL_RATING_RULE'], "ENTITY_TYPE_ID" => "USER", "CONDITION_NAME" => "SUBORDINATE", "CONDITION_MODULE" => "intranet", "CONDITION_CLASS" => "CRatingRulesIntranet", "CONDITION_METHOD" => "subordinateCheck", "CONDITION_CONFIG" => array("SUBORDINATE" => array()), "ACTION_NAME" => "empty", "ACTION_CONFIG" => array(), "ACTIVATE" => "N", "ACTIVATE_CLASS" => "empty", "ACTIVATE_METHOD" => "empty", "DEACTIVATE" => "N", "DEACTIVATE_CLASS" => "empty ", "DEACTIVATE_METHOD" => "empty", "~CREATED" => $DB->GetNowFunction(), "~LAST_MODIFIED" => $DB->GetNowFunction()); $arFields["CONDITION_CONFIG"] = serialize($arFields["CONDITION_CONFIG"]); $arFields["ACTION_CONFIG"] = serialize($arFields["ACTION_CONFIG"]); $ID = $DB->Add("b_rating_rule", $arFields, array("ACTION_CONFIG", "CONDITION_CONFIG")); COption::SetOptionString("intranet", "ratingSubordinateId", $ID); CRatingRule::Apply($ID); } // recount ratings $rsData = CRatings::GetList(array('ID' => 'ASC'), array()); while ($arRes = $rsData->Fetch()) { CRatings::Calculate($arRes['ID'], true); }
/** * <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; }
if($_REQUEST['action_target']=='selected') { $rsData = CRatings::GetList(array($by=>$order), $arFilter); while($arRes = $rsData->Fetch()) $arID[] = $arRes['ID']; } foreach($arID as $ID) { $ID = IntVal($ID); if($ID <= 0) continue; switch($_REQUEST['action']) { case "recalculate": if(!CRatings::Calculate($ID, true)) $lAdmin->AddGroupError(GetMessage("RATING_LIST_ERR_CAL"), $ID); break; case "delete": if(!CRatings::Delete($ID)) $lAdmin->AddGroupError(GetMessage("RATING_LIST_ERR_DEL"), $ID); break; } } } $rsData = CRatings::GetList(array($by=>$order), $arFilter); $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); $lAdmin->NavText($rsData->GetNavPrint(GetMessage("RATING_LIST_NAV")));