Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

[IPB 3.1.4] Исправляем баг при переходе на конкретный пост в режиме модератора

(0 отзывов)

В режиме модератора в топиках отображаются скрытые посты, количество которых в топике может быть огромно. Так вот в этом случае, при скрытии нового поста система перекинет модератора на 1 или несколько страниц назад. И модератору снова нужно будет искать то место в топике, с которым он работал.

 

Вот наглядный пример:

sh_0011.png

Тестовая тема имеет 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).

0 комментариев

Рекомендованные комментарии

Нет комментариев для отображения

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.