Модерация - кто поставил бан?

Автор Ulibka, 28 октября 2020, 10:53:28

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

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

Ulibka

SMF 2.17
Есть задачи:
1. Посмотреть кто из модераторов выставил бан или предупреждение пользователю и за что

Т.е. нужно найти пользователя, посмотреть кто поставил бан, причина бана.
Аналогично по предупреждению

Может быть есть какой то мод?


Ulibka

Спасибо!
Да - по предупреждениям действительно нашел - в профиле пользователя видно от кого и за что

А вот по банам в стандартном интерфейсе я так и нашел модератора, который дал бан.


Ulibka

В логе модерации очень много записей и найти пользуясь стандартным интерфейсом что то нереально.
Например есть сообщения - Заблокирована тема и тд

Когда было надо я запросом по базе искал.
Может быть есть какой то мод, позволяющий искать в логе?

digger®

Цитата: Ulibka от 28 октября 2020, 13:40:12В логе модерации очень много записей и найти пользуясь стандартным интерфейсом что то нереально.
Например есть сообщения - Заблокирована тема и тд

Когда было надо я запросом по базе искал.
Может быть есть какой то мод, позволяющий искать в логе?
Я тоже в базе ищу, если нужно. Модов не видел таких.

Ulibka

Подскажите пожалуйста - удалось ли Вам получить результат в одном запросе?
Сейчас я делаю так:
1. Нахожу пользователя Дональд, определяю id:

select itm.id_ban,
       itm.id_ban_group,
       itm.id_member,
#        sbg.ban_time,
       from_unixtime( sbg.ban_time) as 'Дата бана',
       sbg.expire_time,
       sbg.reason,
       sbg.notes,
       sm.member_name,
       sm.real_name
from smf_ban_items itm
         inner join smf_ban_groups sbg on itm.id_ban_group = sbg.id_ban_group
         left join smf_members sm on itm.id_member = sm.id_member
# where itm.id_member = 132406;
where sm.member_name = 'Дональд';

Результат запроса:

12942,5028,132406,2020-10-25 10:34:15,0,"Курилку могут открыть в любой момент, а я могу пропустить это радостное событие, поскольку могу быть не у ПК. Будем считать, что открытие состоялось.",Тестовый бан. Снят в преддверии открытия Курилки.,Дональд,Дональд

Далее определяю кто ему выставил бан:
SELECT lm.id_action,
       lm.id_log,
       mem.real_name,
       mg.group_name,
       lm.log_time,
       FROM_UNIXTIME(lm.log_time) 'время лога',
       lm.action,
       lm.extra,
       SUBSTRING_INDEX(SUBSTRING_INDEX(lm.extra, ';', 1), ':', -1) AS fieldname1,
       SUBSTRING_INDEX(SUBSTRING_INDEX(lm.extra, ';', 2), ':', -1) AS id_member_banned
#        sm.real_name,
#        sm.member_name

FROM smf_log_actions AS lm
         LEFT JOIN smf_members AS mem ON (mem.id_member = lm.id_member)
         LEFT JOIN smf_membergroups AS mg
                   ON (mg.id_group = CASE WHEN mem.id_group = 0 THEN mem.id_post_group ELSE mem.id_group END)
#         left join smf_members sm on sm.id_member= convert(SUBSTRING_INDEX(SUBSTRING_INDEX(lm.extra, ';', 2), ':', -1) ,unsigned )

WHERE action = 'ban'
  and lm.extra like '%member%'
  and lm.extra like '%132406%'

ORDER BY lm.log_time DESC
limit 200;

Результат:
24755,1,Klausss,Модератор раздела,1603611255,2020-10-25 10:34:15,ban,"a:2:{s:6:""member"";s:6:""132406"";s:3:""new"";i:1;}","""member""","""132406"""

Как видно сложность объединения в один запрос заключается в том, что во втором запросе id пользователя лежи внутри строки и join у меня отказался работать:
  left join smf_members sm on sm.id_member= convert(SUBSTRING_INDEX(SUBSTRING_INDEX(lm.extra, ';', 2), ':', -1) ,unsigned )

Ulibka

Не рассмотрел - что id выдавалось в кавычках - вот работающий запрос:

SELECT lm.id_action,
       lm.id_log,
       mem.real_name,
       mg.group_name,
       lm.log_time,
       FROM_UNIXTIME(lm.log_time) 'время лога',
       lm.action,
       lm.extra,
       SUBSTRING_INDEX(SUBSTRING_INDEX(lm.extra, ';', 1), ':', -1) AS fieldname1,
       trim(both '"' from SUBSTRING_INDEX(SUBSTRING_INDEX(lm.extra, ';', 2), ':', -1)) AS id_member_banned
       ,sm.real_name,
       sm.member_name

FROM smf_log_actions AS lm
         LEFT JOIN smf_members AS mem ON (mem.id_member = lm.id_member)
         LEFT JOIN smf_membergroups AS mg
                   ON (mg.id_group = CASE WHEN mem.id_group = 0 THEN mem.id_post_group ELSE mem.id_group END)
        left join smf_members sm on sm.id_member=
                                    trim(both '"' from SUBSTRING_INDEX(SUBSTRING_INDEX(lm.extra, ';', 2), ':', -1))

WHERE action = 'ban'
  and lm.extra like '%member%'
#   and lm.extra like '%132406%'
    and sm.member_name='Дональд'

ORDER BY lm.log_time DESC
limit 200;

digger®

Я делаю так

# Список банов пользователя
SELECT m.real_name, FROM_UNIXTIME(b.log_time) as log_time FROM smf_log_actions b
LEFT JOIN smf_members m ON m.id_member=b.id_member
WHERE b.action = 'ban' AND b.extra LIKE '%"ид_забаненного"%'