[IPB 3.1.4] Исправляем баг при переходе на конкретный пост в режиме модератора
В режиме модератора в топиках отображаются скрытые посты, количество которых в топике может быть огромно. Так вот в этом случае, при скрытии нового поста система перекинет модератора на 1 или несколько страниц назад. И модератору снова нужно будет искать то место в топике, с которым он работал.
Вот наглядный пример:
Тестовая тема имеет 4 странцы в режиме модератора. В данной теме имеется 8 скрытых сообщений. При скрытии поста модератора перекинет на 1 страницу назад.
Баг этот происходит из-за некоррктной обработки параметра findpost в режиме модератора. Смело предполагаем, что разработчики снова забыли учесть количество скрытых постов в топике. Но, забегая вперёд, это не совсем так: они учитывают это количество, просто напросто допустили ошибку в определении самого модератора за штурвалом браузера.
Баг имеет место и при восстановлении скрытых постов.
Исправляем этот баг.
Открываем файлик /admin/applications/forums/modules_public/forums/findpost.php на редактирование и ищем в нём такой кодес:
'select' => 't.title_seo',
и заменяем его на такой:
'select' => 't.*',
Чуть ниже находим такой кодес:
$query = ' AND ' . $this->registry->class_forums->fetchPostHiddenQuery('visible'); /* Can we deal with hidden posts? */ if ( $this->registry->class_forums->canQueuePosts( $this->topic['forum_id'] ) ) { if ( $this->permissions['softDeleteSee'] ) { /* See queued and soft deleted */ $query = ''; } else
и заменяем его на такой:
$sort_field = ($this->settings['post_order_column'] == 'pid') ? 'pid' : 'post_date'; $sort_value = $sort_field == 'pid' ? $pid : $post['post_date']; $query = ''; /* Can we deal with hidden posts? */ if ( $this->registry->class_forums->canQueuePosts( $post['forum_id'] ) ) { $softDeleteSee = $this->registry->getClass('class_forums')->canSeeSoftDeletedPosts( $post['forum_id'] ); if ($softDeleteSee) { /* See queued and soft deleted */ $query = ' AND ' . $this->registry->class_forums->fetchPostHiddenQuery( array( 'approved', 'sdeleted', 'hidden' ) ); } else
Из данного кодеса видно, что массив $this->permissions по неизвестной причине не иниализирован. В причинах можете сами разобраться, но мне проще вставить сюда чтение одного элемента этого массива.
Так же ниже ищем кодес:
$cposts = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as posts', 'from' => 'posts', 'where' => "topic_id={$post['topic_id']} AND pid <= {$pid}{$query}" ) );
и заменяем его на такой:
if (strlen($query) < 2) $query = ' AND ' . $this->registry->class_forums->fetchPostHiddenQuery('visible'); $cposts = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as posts', 'from' => 'posts', 'where' => "topic_id={$post['topic_id']} AND {$sort_field} <=" . intval( $sort_value ) . $query ) );
Заливаем файлик findpost.php на WEB-сервер и проверяем.
После данного фикса параметр findpost в режиме модератора будет корректно обрабатываться. И поэтому двигло форума не будет более перекидывать модератора фиг знает куда.
PS. Исправление частично взято из IPB 3.3.4 (касательно переменной $sort_value).
- 1
0 комментариев
Рекомендованные комментарии
Нет комментариев для отображения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас