- Модуль: 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;
}