Moderator Needed

Поддержка старых модов или модов, созданных авторами не из нашего сообщества, а также любые вопросы, связанные с модами для phpBB 3.0.x, кроме относящихся к форуму Для авторов (phpBB 3.0.x).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
John Smith
phpBB 1.4.2
Сообщения: 62
Стаж: 18 лет 5 месяцев
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Moderator Needed

Сообщение John Smith »

Modification name: Moderator Needed
Author: RMcGirr83
Modification description: Displays the number of reported posts combined with posts that need approval next to the Moderator Control Panel link on the index page of the forum
Modification version: 1.0.2.a
Download: moderator_needed.zip

Отображает количество обжалованных сообщений, а также сообщений и тем, требующих одобрения. Показывает справа от ссылки [Модераторский раздел]. Показывает, соответственно, только тем, кто имеет право это видеть.
Скрины:
Изображение
Изображение

Поставил себе, все работает. Но вот вчера включил DEBUG_EXTRA, посмотрел Explain. Что-то мне не очень нравятся его запросы:

Код: Выделить всё

SELECT topic_first_post_id
FROM phpbb_topics
WHERE forum_id IN ('7', '9', '3', '4', '5', '6', '1', '2', '16', '10', '11', '14', '15', '12', '13') AND topic_approved = 0

Код: Выделить всё

SELECT post_reported, post_approved
FROM phpbb_posts WHERE (forum_id IN ('7', '9', '3', '4', '5', '6', '1', '2', '16', '10', '11', '14', '15', '12', '13') or forum_id IN ('7', '9', '3', '4', '5', '6', '1', '2', '16', '10', '11', '14', '15', '12', '13')) AND (post_reported = 1 or post_approved = 0)
Что конкретно не нравится:
  1. Время выполнения этих запросов частенько доходит до десятых долей секунды - для сравнения, остальные запросы выше единиц тысячных долей секунды не поднимаются.
  2. Мне кажется ээээ... не совсем технически грамотным решением каждый раз перелопачивать всю таблицу постов ради двух циферек. Это по второму запросу - explain показывает "ROWS 17733". Ладно, у меня сейчас 17к постов, а у кого 100к.
Теоретически вижу такие пути оптимизации:
  1. Кэширование.
  2. Хранить цифирьки в БД, либо в отдельно таблице, либо в той-же phpbb_config. Цифирьки обновлять при:
    • жалобе;
    • создании нового сообщения;
    • создании новой темы.
Ожидаю помощи гуру, т.к. сам с этим не справлюсь. :roll:
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Moderator Needed

Сообщение nissin »

3. Создать индексы для topic_approved в phpbb_topics и post_reported/post_approved в phpbb_posts.

Upd:
для topic_approved и post_approved оказывается уже есть.
попробовать создать ещё для post_reported и посмотреть результаты explain.
John Smith
phpBB 1.4.2
Сообщения: 62
Стаж: 18 лет 5 месяцев
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Moderator Needed

Сообщение John Smith »

Экспериментировал на локалхосте - на нем эффект более ярко выражен.
Время по explain практически не изменилось, в пределах погрешности.
До создания индексов, по первому запросу Elapsed: 0.03223s, по второму Elapsed: 0.10141s.
После создания индексов, по первому запросу Elapsed: 0.02360s, по второму Elapsed: 0.09538s.

Только что обратил внимание:
По первому запросу:
Possible Keys: forum_id,forum_id_type,topic_approved,forum_appr_last,fid_time_moved
Key: topic_approved
По второму запросу:
Possible Keys: forum_id,post_approved,post_reported
Key: "пусто"
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Moderator Needed

Сообщение nissin »

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

Код: Выделить всё

SELECT post_reported
FROM phpbb_posts WHERE forum_id IN ('7', '9', '3', '4', '5', '6', '1', '2', '16', '10', '11', '14', '15', '12', '13') AND post_reported = 1

Код: Выделить всё

SELECT post_approved
FROM phpbb_posts WHERE forum_id IN ('7', '9', '3', '4', '5', '6', '1', '2', '16', '10', '11', '14', '15', '12', '13') AND post_approved = 0
John Smith
phpBB 1.4.2
Сообщения: 62
Стаж: 18 лет 5 месяцев
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Moderator Needed

Сообщение John Smith »

Пытаюсь разобраться, но не все могу понять.
В файле includes\moderator_needed.php запрос формируется таким кодом:

Код: Выделить всё

$sql = 'SELECT post_reported, post_approved
            FROM ' . POSTS_TABLE .
        $sql_where;
$result = $db->sql_query($sql); 
$sql_where выше определена как:

Код: Выделить всё

if ($auth->acl_getf_global('m_approve') && $auth->acl_getf_global('m_report'))
{
    // we wants it all and we wants it now..if we're authed
    $sql_where = ' WHERE (' . $db->sql_in_set('forum_id', get_forum_list('m_approve')) . ' or ' . $db->sql_in_set('forum_id', get_forum_list('m_report')) . ') AND (post_reported = 1 or post_approved = 0)';
    $allow = true;
}
// user with auth approve
elseif ($auth->acl_getf_global('m_approve'))
{
    // just posts waiting for approval please
    $sql_where = ' WHERE ' . $db->sql_in_set('forum_id', get_forum_list('m_approve')) . ' AND post_approved = 0';
    $allow = true;
}
// user with auth report
elseif ($auth->acl_getf_global('m_report'))
{
    // just posts that have been reported thanks
    $sql_where = ' WHERE ' . $db->sql_in_set('forum_id', get_forum_list('m_report')) . ' AND post_reported = 1';
    $allow = true;
} 
И потом еще корректируется:

Код: Выделить всё

if(sizeof($unapproved_topics_array))
{
    $sql_where .= ' AND ' . $db->sql_in_set('post_id', $unapproved_topics_array, true);
} 
Т.е. это что получается. Условие выборки формируется на основании прав на форуме, и если юзер имеет все права, то происходит выборка обжалованных и требующих разрешения сообщений по всем форумам, где он может одобрять или рассматривать жалобы. При этом, если есть неутвержденные топики, то запрос еще и дополняется условием, по которому посты, начинающие новый топик, требующий одобрения, не учитываются.

Из всего этого следует, что для того, чтоб разделить запрос на 2, следует как-то пересмотреть определение $sql_where. Я вот думаю, может попробовать выкинуть вообще определение $sql_where в зависимости от прав на форуме. И ниже в выборках прописать вместо переменной сами запросы. Ну, построить конструкцию типа:

Код: Выделить всё

if ($auth->acl_getf_global('m_approve') && $auth->acl_getf_global('m_report'))
{
    $sql = 'SELECT post_reported
                FROM ' . POSTS_TABLE .
            ' WHERE (' . $db->sql_in_set('forum_id', get_forum_list('m_report')) . ') AND post_reported = 1';
    $result = $db->sql_query($sql);

    $sql = 'SELECT post_approved
                FROM ' . POSTS_TABLE .
            ' WHERE (' . $db->sql_in_set('forum_id', get_forum_list('m_approve')) . ') AND post_approved = 0';
    $result = $result + $db->sql_query($sql);
} 
Ну и аналогично остальные запросы. Или это не совсем соответствует идеологии?

P.S. Еще я не понял, почему вместо конструкции if(sizeof($unapproved_topics_array)) не использована if(array_count_values($unapproved_topics_array)), или вообще if($unapproved_topics_array). Поправьте, если ошибаюсь, но во всех трех случаях, условие сработает при непустом массиве.
Аватара пользователя
Izya
Former team member
Сообщения: 408
Стаж: 18 лет
Откуда: Абакан, Сибирь
Благодарил (а): 1 раз
Поблагодарили: 28 раз

Re: Moderator Needed

Сообщение Izya »

John Smith
array_count_values() - заметно более медленная функция по сравнению с sizeof(). Sizeof() просто считает количество элементов в массиве, а array_count_values() считает количество вхождений каждого уникального значения элементов массива. Кроме того, array_count_values() возвращает массив, а преобразование массива в булево значение, хоть и четко описано в текущей версии php, вызывает меньше доверия, чем преобразование целого числа в булев (и, наверное, по этой же причине не используется форма if($unapproved_topics_array)).
Аватара пользователя
Nibiru
phpBB 1.4.4
Сообщения: 118
Стаж: 18 лет 2 месяца
Откуда: Russia & Slovensko
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: Moderator Needed

Сообщение Nibiru »

Установил 1.0.3a версию и ничего не добавилось, в чём у меня может быть ошибка?
Аватара пользователя
maratgab
phpBB 1.0.0
Сообщения: 2
Стаж: 17 лет 4 месяца

Re: Moderator Needed

Сообщение maratgab »

аналогично. установил версию 1.0.3а, залил языковые файлы как в en так и в ru, установил все по инструкции, хеш почистил, но ничего так и не отобразилось. Прошу помощи уважаемых гуру.
p/s/ а так мод очень удобный должен быть:) ненадо постоянныо в раздел модератора лезть и смотреть есть ли какие жалобы\ожидающие подтверждения сообщения. Спасибо автору мода и поста.

Вопрос снят. Решение: данные надписи появляются когда у вас требуется подтверждение можератора. Если тем и сообщений ожидающих подтверждения нет-то будет просто надпись центр модератора.
Аватара пользователя
Nibiru
phpBB 1.4.4
Сообщения: 118
Стаж: 18 лет 2 месяца
Откуда: Russia & Slovensko
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Re: Moderator Needed

Сообщение Nibiru »

если так, то хорошо
romeo_piter
phpBB 2.0.22
Сообщения: 1375
Стаж: 17 лет 5 месяцев
Благодарил (а): 260 раз
Поблагодарили: 32 раза

Re: Moderator Needed

Сообщение romeo_piter »

У кого-нить есть 1.0.3 версия? А то на phpbb.com 1.0.4, а она только для 6ки :(
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 9 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Moderator Needed

Сообщение Alecto »

1.04 отлично стал на форум 3.08

Проверил всевозможные варианты отображения от одобрения 1/несколько сообщений/тем до жалоб на сообщения и ЛС.
Пока все отлично работает, никаких нареканий нет.

Единственное, что не совсем понял - ссылки справа от ПАНЕЛЬ МОДЕРАТОРА на жалобы на сообщения, напоминания о темах/сообщения на одобрении появляются мгновенно после их поступления на рассмотрение.
Ссылки на жалобы на ЛС появляются с некоторой задержкой в несколько минут. Если зайти в соответствующий модераторский подраздел - жалоба есть, но ее напоминания вверху появляется через некоторое время.

И еще один вопрос, на phpBB.ком приводятся скрины для этого мода в администраторском разделе, но что-то в исходнике с первой страницы темы файлов для админки никаких не видел, да и в базу ничего не прописывается. Может я чего не так понял или проглядел???


Подытожу: отличный мод для модераторов, теперь не надо постоянно проверять модераторский раздел. Надеюсь в процессе использования никакие баги не всплывут.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 9 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Moderator Needed

Сообщение Alecto »

Вопрос, можно ли доработать уведомления этого мода (справа от надписи ПАНЕЛЬ МОДЕРАТОРА), чтобы они так же мигали как и уведомления о новых личных сообщениях?
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 9 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Moderator Needed

Сообщение Alecto »

сегодня заметил баг (после обновления до 3.0.9 ???)

если на модерацию поступают сообщения от пользователей из группы Новые пользователи, их сообщения в очереди на модерацию не подсчитываются.

заметил, когда на одобрении зависли два поста, при этом уведомление молчало.

попробовал создать пост в модерируемом разделе от обычного пользователя - появилось уведомление об 1 посте в очереди сообщений на одобрение.

пробовал от нового пользователя создавать жалобы, посты, темы.

жалобы и темы подсчитывается верно (насколько было возможно понять из моих тестов).

сообщения на модерации подсчитывается некорректно:
Изображение
Изображение

установку мода проверил - обновление ее не задело, да и ошибиться там негде, но всеравно всё перепроверил несколько раз.

уважаемые гуру, помогите пожалуйста, уж очень полезный мод и привыкнуть к нему успел... а тут такое :(
нет достоверных уведомлений - опять лазай ф5-ать панель модератора, а тогда и смысл в моде накорню отпадает.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 9 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Moderator Needed

Сообщение Alecto »

удалось воспроизвести условия возникновения проблемы:

если пост размещается новым пользователем в важном объявлении - уведомлений для модератора нет.
во всех остальных случаях мод работает. новые пользователи размещают сообщения после одобрения модераторами.

проблема обсуждается с автором мода на сайте phpBB.ком, но пока безуспешно.
автор только разводит руками и не может воспроизвести проблему.

может быть уважаемые гуру помогут? куда смотреть? что делать?

Добавлено спустя 56 минут 53 секунды:
похоже проблема в том, что запрос ищет сообщения, нуждающиеся в проверке по всем форумам.
но, важные объявления вне (?) форумов, соответственно они не обнаруживаются.

мод разрабатывался для 3.06, а группа НОВЫЕ ПОЛЬЗОВАТЕЛИ всплыла по-моему с 3.07
Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 11361
Стаж: 16 лет 8 месяцев
Благодарил (а): 1832 раза
Поблагодарили: 1358 раз

Re: Moderator Needed

Сообщение Пчелкин »

FomenkoAndrey писал(а): новым пользователем в важном объявлении
Это что ж за разрешение такое? Важные темы - это типа обьяв ..в них вроде как никто писать не должен, кроме админов..а то что это за важные - тем мало что-ли?...имхо.
NIKON-D90, AF-S 18-105, AF-S 14-24, AF-S 24-70

Вернуться в «Поддержка модов для phpBB 3.0.x»