• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/forum_new.php
  • Класс: CAllForumNew
  • Вызов: CAllForumNew::Delete
static function Delete($ID)
{
	global $DB;
	$ID = intval($ID);
	$bCanDelete = true;
/***************** Event OnBeforeForumDelete ***********************/
	foreach (GetModuleEvents("forum", "OnBeforeForumDelete", true) as $arEvent)
	{
		if (ExecuteModuleEventEx($arEvent, array(&$ID)) === false)
		{
			$bCanDelete = false;
			break;
		}
	}
/***************** /Event ******************************************/
	if (!$bCanDelete)
		return false;
/***************** Event OnForumDelete *****************************/
	foreach (GetModuleEvents("forum", "OnForumDelete", true) as $arEvent)
		ExecuteModuleEventEx($arEvent, array(&$ID));
/***************** /Event ******************************************/
/***************** Cleaning cache **********************************/
	unset($GLOBALS["FORUM_CACHE"]["FORUM"][$ID]);
	if(CACHED_b_forum !== false)
		$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum");
	if(CACHED_b_forum_perms !== false)
		$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum_perms");
	if(CACHED_b_forum2site !== false)
		$GLOBALS["CACHE_MANAGER"]->CleanDir("b_forum2site");
/***************** Cleaning cache/**********************************/
/***************** Search module ***********************************/
	set_time_limit(0);
	if (CModule::IncludeModule("search"))
	{
		CSearch::DeleteIndex("forum", false, $ID);
	}
	CForumFiles::Delete(array("FORUM_ID" => $ID), array("DELETE_FORUM_FILE" => "Y"));
	$DB->StartTransaction();
	// Update USER statistic
	$arProcAuth = array();
	$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))
		{
			$arProcAuth[] = intval($res["AUTHOR_ID"]);
		}
	}
	if (IsModuleInstalled("vote"))
	{
		$db_res = CForumMessage::GetList(array(), array("FORUM_ID"=>$ID, "PARAM1" => "VT", "!PARAM2" => 0));
		if ($db_res && $res = $db_res->Fetch()):
			CModule::IncludeModule("vote");
			do {
				CVote::Delete($res["PARAM2"]);
			} while ($res = $db_res->Fetch());
		endif;
	}
	if (!$DB->Query("DELETE FROM b_forum_subscribe WHERE FORUM_ID=".$ID, true))
	{
		$DB->Rollback();
		return false;
	}
	if (!$DB->Query("DELETE FROM b_forum_message WHERE FORUM_ID=".$ID, true))
	{
		$DB->Rollback();
		return false;
	}
	if (!$DB->Query("DELETE FROM b_forum_topic WHERE FORUM_ID=".$ID, true))
	{
		$DB->Rollback();
		return false;
	}
	if (!$DB->Query("DELETE FROM b_forum_perms WHERE FORUM_ID=".$ID, true))
	{
		$DB->Rollback();
		return false;
	}
	if (!$DB->Query("DELETE FROM b_forum2site WHERE FORUM_ID=".$ID, true))
	{
		$DB->Rollback();
		return false;
	}
	if (!$DB->Query("DELETE FROM b_forum WHERE ID=".$ID, true))
	{
		$DB->Rollback();
		return false;
	}

	// Update USER statistic
	foreach($arProcAuth as $i => $procAuth)
		CForumUser::SetStat($procAuth);

	$DB->Commit();
/***************** Event OnAfterForumDelete ************************/
	foreach (GetModuleEvents("forum", "OnAfterForumDelete", true) as $arEvent)
		ExecuteModuleEventEx($arEvent, array($ID));
/***************** /Event ******************************************/
	return true;
}