• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/message.php
  • Класс: CAllForumMessage
  • Вызов: CAllForumMessage::Delete
static function Delete($ID)
{
	global $DB, $USER_FIELD_MANAGER;
	$ID = intval($ID);
	$arMessage = array();
	if ($ID > 0)
		$arMessage = CForumMessage::GetByID($ID, array("FILTER" => "N"));
	if (empty($arMessage))
		return false;
/***************** Event onBeforeMessageAdd ************************/
	foreach (GetModuleEvents("forum", "onBeforeMessageDelete", true) as $arEvent)
	{
		if (ExecuteModuleEventEx($arEvent, array(&$ID, $arMessage)) === false)
			return false;
	}
/***************** /Event ******************************************/
	$AUTHOR_ID = intval($arMessage["AUTHOR_ID"]);
	$TOPIC_ID = intval($arMessage["TOPIC_ID"]);
	$FORUM_ID = intval($arMessage["FORUM_ID"]);

	$DB->StartTransaction();
	// delete votes
	if ($arMessage["PARAM1"] == "VT" && intval($arMessage["PARAM2"]) > 0 && IsModuleInstalled("vote")):
		CModule::IncludeModule("vote");
		CVote::Delete($arMessage["PARAM2"]);
	endif;
	// delete files
	CForumFiles::Delete(array("MESSAGE_ID" => $ID), array("DELETE_MESSAGE_FILE" => "Y"));
	// delete message
	$DB->Query("DELETE FROM b_forum_message WHERE ID=".$ID);
	// after delete
	$db_res = CForumMessage::GetList(array("ID" => "ASC"), array("TOPIC_ID" => $TOPIC_ID), false, 1);
	$res = false;
	if (!($db_res && $res = $db_res->Fetch())):
		CForumTopic::Delete($TOPIC_ID);
	else:
		// if deleted message was first
		if ($arMessage["NEW_TOPIC"] == "Y")
			$DB->Update('b_forum_message', array('NEW_TOPIC' => '"Y"'), "WHERE ID=".$res["ID"]);
		CForumTopic::SetStat($TOPIC_ID);
	endif;
	$DB->Commit();

	$USER_FIELD_MANAGER->Delete("FORUM_MESSAGE", $ID);

	if ($AUTHOR_ID > 0):
		CForumUser::SetStat($AUTHOR_ID);
	endif;
	CForumNew::SetStat($FORUM_ID);
/***************** Event onBeforeMessageAdd ************************/
	foreach (GetModuleEvents("forum", "onAfterMessageDelete", true) as $arEvent)
		ExecuteModuleEventEx($arEvent, array($ID, $arMessage));
/***************** /Event ******************************************/
	if (CModule::IncludeModule("search"))
	{
		CSearch::DeleteIndex("forum", $ID);
		if (is_array($res) && !empty($res))
			CForumMessage::Reindex($res["ID"], $res);
	}
	return true;
}