Мини-чат на ajax

T-John

Пользователь
Здрасьте, вот пока тестил доп. права на группу, если точнее "unlim", и заметил вот что, пользователи могут удалять сообщения других пользователей, может кто знает и подскажет как это исправить? =)

5phdveucqfj6.png
--------------------------
Всё, разобрался, но кнопка так и осталась для удаления сообщений, при нажатии пишет что доступно только модерам, а как сделать что бы юзвери вообще не видели кнопку удаления? =)

Ещё появилась такая ошибка
Notice: Undefined index: shout_del in /var/www/****/data/www/torrentlife.org/ajax.php on line 604

Как исправить? вот 604 строчка ajax.php
$shout = $shout_row['shout_del']!=1 ? $shout_row['shout_text'] : $lang['SHOUT_CENSOR'];
 

chigolberi

Пользователь
Справа нет полосы прокрутки, ни у кого такого бага не было?

Проверял на локалке, движок чистый - r491

5baf48e8d6ec31ca6bb23c1b52dfa49b.jpg
 
S

Sarymian

Гость
T-John, видимо первоначально что-то не так с КЕШем было. Чат сильно завязан на файловом кеше (если честно не лучший вариант, я сейчас перешел на MemCache), тестирую новый, но пока не все в нем устраивает.

Чтобы не было кнопки удаления сообщения (не видна пользователям):
Удалите строку:
PHP:
$post_delete = ($shout_row['shout_user_id'] == $userdata['user_id']) ? '<img src="templates/default/images/shout/shout_delete.png" title='.$lang['DEL_MASSAGE'].' class="clickable" onclick="ajax.shout_del('.$shout_row['shout_id'].'); ajax.chat_message(2); return false;" style="float:right">&nbsp;' : '';

и строку в этом же блоке (ниже, т.к. выше есть такая же строка):
PHP:
<div style="float:right;">'.$post_delete.'</div>

Notice: Undefined index: shout_del in /var/www/****/data/www/torrentlife.org/ajax.php on line 604
Чтобы убрать эту ошибку надо правильно выполнить действия в инструкции, а именно выполнить SQL-запрос который указан. Видимо Вы выполняли SQL-запрос от других чатов в которых нет строки "shout_del", т.к. в других вариантах чата представленных на данном форуме сообщения удаляются физически из БД и на всегда, меня такой вариант не устраивал и я решил помечать сообщения на удаление.

Учитывая это, вам СКОРЕЕ всего (не могу быть уверен, пока не буду знать как выглядит у Вас таблица) надо выполнить SQL-запрос:
PHP:
ALTER TABLE `bb_shout` ADD `shout_del` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `shout_id`
 
S

Sarymian

Гость
chigolberi, на сколько мне известно ни у кого не было такого.

Чуть позже проверю у себя на чистом 491.
 

dimsat1

Пользователь
Спасиб большое, всё стало как надо:) Один маленький вопросик, удаляю допустим сообщение, сам текст сообщения удаляется и написано "Сообщение удалено"
Но сама форма остаётся
c3c075ce5133747d82491dd829fba05c.png
Как зделать, чтоб оно удалялось полностью.?? И как их вообще полностью удалить?
 
S

Sarymian

Гость
Я же писал в описании что такое удаление сделано под свои нужды. Мне надо было чтобы так "удалялось".

Если уж так надо то:
В запрос:
PHP:
                $shout_rows = DB()->fetch_rowset("SELECT s.*, u.username, u.user_level, u.user_rank, u.user_avatar, u.user_avatar_type
                                                  FROM bb_shout s, ".BB_USERS." u
                                                  WHERE s.shout_user_id=u.user_id AND u.user_id = u.user_id
                                                  ORDER BY s.shout_session_time DESC LIMIT 50");
Вставить "and s.shout_del <> 1" :
PHP:
                $shout_rows = DB()->fetch_rowset("SELECT s.*, u.username, u.user_level, u.user_rank, u.user_avatar, u.user_avatar_type
                                                  FROM bb_shout s, ".BB_USERS." u
                                                  WHERE s.shout_user_id=u.user_id AND u.user_id = u.user_id AND s.shout_del <> 1
                                                  ORDER BY s.shout_session_time DESC LIMIT 50");

В двух местах.
На самом деле это не удаляет сообщение физически (как и первоначально), но не выводит его на экран. Но тогда становится лишними несколько строк кода, но это уже выпиливать и допиливать как отдельный мод. Простите, но у меня нет времени сейчас.
 
S

Sarymian

Гость
Чтобы сообщение удалялось полностью, надо изменить функцию:
PHP:
  function shout_del()
    {
        global $bb_cache;
        $id = (int) $this->request['id'];
        DB()->query("UPDATE bb_shout SET `shout_del` = '1' WHERE shout_id =$id");
        $this->response['id'] = $id;
        CACHE('bb_cache')->rm('shout_data');
        CACHE('bb_cache')->rm('shout_data_adm');
    }

И
PHP:
DB()->query("UPDATE bb_shout SET `shout_del` = '1' WHERE shout_id =$id");
заменить на
PHP:
DB()->query("DELETE FROM bb_shout WHERE shout_id = $id");

З.Ы. опять же останется кучку лишнего кода.
 

dimsat1

Пользователь
Sarymian, благодарю:)
Код:
DB()->query("DELETE FROM bb_shout WHERE shout_id = $id");
сработало, как вроди и хотелось, спасибо вам за труды и помощь:)
 
Сверху