Объединить сообщения от 1 пользователя

Автор Idrassil, 11 июля 2013, 01:54:05

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Idrassil

Сталкивался с такой ерундой, что пользователь пишет в одной теме подряд несколько постов (вместо одного большого - 5 небольших), тем самым набивая к-тво сообщений или просто засоряя тему. Готовых модов не нашел (хз как оно на инглише называется, и есть ли вообще), решил написать самостоятельно. Выкладываю код, работает на SMF второй версии, подробно не тестил, но вроде все гуд. Код мб кривой, но я так и не осилил документацию по функциям самого SMF.

В общем, открываем файл \Sources\Subs-Post.php, ищем строку // Insert the post., и перед ней добавляем такой код.

//редактирование вместо добавление нового поста
$top_id = (int)$_GET['topic'];
$q = "SELECT `id_member_updated`,`id_last_msg` FROM `{$GLOBALS['db_prefix']}topics` WHERE `id_topic`=$top_id";
$res = mysql_fetch_array(mysql_query($q),MYSQL_NUM);
list($last_memb_id,$last_mess_id) = $res;

if ($last_memb_id == $context["user"]["id"]) //совпало, обновляем сообщение
{
$q = "SELECT MAX(`id_msg`) FROM `{$GLOBALS['db_prefix']}messages` WHERE `id_topic`=$top_id";
$check_mess_id = mysql_result(mysql_query($q),0);
//еще одна проверка, из-за премудерации
if ($check_mess_id == $last_mess_id)
{
$upd_mess = trim(strip_tags(mysql_real_escape_string($_POST['message'])));
mysql_query("UPDATE `{$GLOBALS['db_prefix']}messages` SET `body`=CONCAT_WS('<br><br>',`body`,'$upd_mess') WHERE `id_msg`='$last_mess_id'");
return true;
}
}
unset($top_id,$last_memb_id,$last_mess_id,$res,$q);


Если что по коду неясно, могу пояснить. Также хотелось бы услышать комментарии от других разработчиков по коду и идее вообще.


Idrassil

#2
Спасибо, посмотрю что там за мод.

К слову - мой код почему-то не корректно работает с премодерацией, возможны ошибки (если вдруг кто захочет использовать). Там при премодерации (если одобряется сообщение) почему-то не обновляется значение id_member_updated в таблице topics, и из-за этого все и падает. :-\

upd. вроде исправил, теперь поддерживает и премодерацию.