Доброго времени суток, Тема звучит немного страшно, поэтому поясню. Задача: Сделать так, чтобы при добавлении сообщения на форум, не создавалось новое сообщение если автором предыдущего был автор нового сообщения.[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()):
Хотел сделать так только API не позволяет изменить дату создания сообщения (время его модификации), а соответственно и что-то замерить (от, до, спустя)
Неужели стали внедрять то, что есть у всех и давно…? Хорошо, если так!!!
P.S. Да, ссылка неверно указанна, точнее с ошибкой, нужно http:// а стоит https:// В текущем варианте скачать код не получится, только после правки, но это мелочи.
Небольшое дополнение. Хорошо бы после того, как сообщение пользователем отправлено и добавлено/склеено с предыдущим его сообщением, отчищать форму ответов от введенного текста, ибо жмут по нескольку раз, не замечая, что сообщение уже склеилось, а видя лишь оставшийся текст в форме ответа.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».