Доброго времени суток, Тема звучит немного страшно, поэтому поясню. Задача: Сделать так, чтобы при добавлении сообщения на форум, не создавалось новое сообщение если автором предыдущего был автор нового сообщения.[spoiler]
Решение сводится к следующему обработчику, в файле /bitrix/php_interface/init.php:
<?
AddEventHandler('forum', 'onBeforeMessageAdd', 'onBeforeMessageAddHandl');
function onBeforeMessageAddHandl($arEvent, &$arFields, &$strUploadDir)
{
global $USER, $APPLICATION;
if (!is_object($USER))
$USER = new CUser;
CModule::IncludeModule('forum');
$db_res = CForumMessage::GetList(array("POST_DATE"=>"DESC"), array("TOPIC_ID"=>$arEvent["TOPIC_ID"]));
if ($db_res && ($ar_res = $db_res->Fetch()))
{
if ($ar_res["AUTHOR_ID"] == $USER->GetID()):
$arFieldsG = array();
$arFieldsG["POST_MESSAGE"] = $ar_res["POST_MESSAGE"]."\n\n[i ]Добавлено (".ConvertTimeStamp(getmicrotime(), "FULL").")[ /i]\n\n".$arEvent["POST_MESSAGE"];
$arFieldsG["FILES"] = $arEvent["FILES"];
if (ForumAddMessage("EDIT", $ar_res["FORUM_ID"], $ar_res["TOPIC_ID"], $ar_res["ID"], $arFieldsG))
$APPLICATION->throwException(GetMessage("ADDMESS_SUCCESS_ADD"));
return false;
endif;
}
}
?>
*** Т.к. блоги не совсем правильно экранируют код (что является ошибкой), исходный код можно взять здесь.
Вкратце опишу что делает код.
$db_res = CForumMessage::GetList(array("POST_DATE"=>"DESC"), array("TOPIC_ID"=>$arEvent["TOPIC_ID"]));
if ($db_res && ($ar_res = $db_res->Fetch()))
{
if ($ar_res["AUTHOR_ID"] == $USER->GetID()):
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».