• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/forum_new.php
  • Класс: CAllForumNew
  • Вызов: CAllForumNew::Update
static function Update($ID, $arFields, $bReindex = true)
{
	global $DB;
	$ID = intval($ID);
	$arForum_prev = array();
	$arProcAuth = array();

	if ($ID <= 0 || !CForumNew::CheckFields("UPDATE", $arFields))
		return false;

	if ($arFields["ACTIVE"] == "N")
		$arForum_prev = CForumNew::GetByID($ID);
/***************** Event onBeforeForumUpdate ***********************/
	foreach (GetModuleEvents("forum", "onBeforeForumUpdate", true) as $arEvent)
	{
		if (ExecuteModuleEventEx($arEvent, array(&$ID, &$arFields)) === false)
			return false;
	}
/***************** /Event ******************************************/
	if (empty($arFields))
		return false;
/***************** Cleaning cache **********************************/
	unset($GLOBALS["FORUM_CACHE"]["FORUM"][$ID]);
	if(CACHED_b_forum !== false)
		$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum");
	if(CACHED_b_forum2site !== false && is_array($arFields["SITES"]) && count($arFields["SITES"]) > 0)
		$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum2site");
/***************** Cleaning cache/**********************************/
	$strUpdate = $DB->PrepareUpdate("b_forum", $arFields);
	if (!empty($strUpdate))
	{
		$strSql = "UPDATE b_forum SET ".$strUpdate." WHERE ID=".$ID;
		$DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } if (is_array($arFields["SITES"]) && count($arFields["SITES"]) > 0) { $DB->Query("DELETE FROM b_forum2site WHERE FORUM_ID = ".$ID); foreach ($arFields["SITES"] as $key => $value) { $value = $DB->ForSql($value, 250); $strSql = "INSERT INTO b_forum2site (FORUM_ID, SITE_ID, PATH2FORUM_MESSAGE) VALUES(".$ID.", '".$DB->ForSql($key, 2)."', '".$value."') "; if ($DB->type == "MYSQL") $strSql .= "ON DUPLICATE KEY UPDATE PATH2FORUM_MESSAGE='".$value."'"; $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } } if (is_set($arFields, "GROUP_ID") && is_array($arFields["GROUP_ID"])) CForumNew::SetAccessPermissions($ID, $arFields["GROUP_ID"]); /***************** Event onAfterForumUpdate ************************/ foreach (GetModuleEvents("forum", "onAfterForumUpdate", true) as $arEvent) ExecuteModuleEventEx($arEvent, array($ID, $arFields)); /***************** /Event ******************************************/ /***************** Update statistic ********************************/ /* If forum became inactive than all statistics for users of this forum will be recalculated.*/ if ($arFields["ACTIVE"] == "N" && $arForum_prev["ACTIVE"] == "Y") { $db_res = CForumMessage::GetList(array(), array("FORUM_ID"=>$ID, "!AUTHOR_ID"=>0)); while ($res = $db_res->Fetch()) { $res["AUTHOR_ID"] = intval($res["AUTHOR_ID"]); if (!in_array($res["AUTHOR_ID"], $arProcAuth)) { CForumUser::SetStat($res["AUTHOR_ID"]); $arProcAuth[] = $res["AUTHOR_ID"]; } } unset($arProcAuth); } /***************** Update search module ****************************/ if (CModule::IncludeModule("search") && $bReindex == true) { if ($arFields["ACTIVE"] == "N" && $arForum_prev["ACTIVE"] == "Y" || $arFields["INDEXATION"] == "N" && $arForum_prev["INDEXATION"] == "Y") { CSearch::DeleteIndex("forum", false, $ID); } elseif (is_set($arFields, "GROUP_ID") && is_array($arFields["GROUP_ID"])) { $arGroups = CForumNew::GetAccessPermissions($ID); $arGPerm = Array(); foreach ($arGroups as $i => $group) { if ($group[1] >= "E") { $arGPerm[] = $group[0]; if ($group[0] == 2) break; } } CSearch::ChangePermission("forum", $arGPerm, false, $ID); } } return $ID; }