Можно ли удалить все сообщения «Automatically Bumped» за один раз?

Проверил перед публикацией:
Мне нравится функция «Автоматическое поднятие тем», чтобы темы обновлялись. Но я бы хотел, чтобы при посещении тем посетители не видели десятки сообщений «Автоматически поднято».

Есть ли способ периодически удалять их — вручную, автоматически или и тем, и другим?

Задаю этот вопрос, потому что заметил, что на моём уровне, что бы я ни пожелал, это уже в большинстве случаев предусмотрено.

Привет, @Bathinda!
Вы можете вручную нажать на значок удаления, как в любом другом посте:

Спасибо, но это непрактичный способ удаления сотен сообщений с поднятием темы на разных обсуждениях.

Я даже не могу выбрать все сообщения с поднятием темы в рамках одного обсуждения.

Встроенной функции для такого массового действия не предусмотрено.

Вы можете использовать скрипт Rails для удаления существующих сообщений об автоматическом поднятии, например:

  1. Подключитесь к серверу по SSH

  2. cd /var/discourse

  3. ./launcher enter app

  4. rails c

  5. Post.where("action_code = 'autobumped'").destroy_all

:warning: Конечно, всегда делайте резервную копию заранее, на всякий случай.

Этого достаточно.
Спасибо.

Есть ли какая-то команда, с помощью которой мы могли бы сначала вывести/просмотреть все эти сообщения, прежде чем отдавать команду ‘destroy (delete)’?

Лучший способ — сделать это через интерфейс Discourse с помощью Data Explorer:

Используйте следующий запрос:

SELECT * from posts
WHERE action_code = 'autobumped'

Ах!! Это именно тот запрос, который меня обрадует. Спасибо ещё раз.

Хотя предложенный запрос и показывает темы, содержащие сообщения с пометкой ‘auto-bumped’ во всех темах, он оказался не очень полезным.


Он просто возвращает сотни тем, в которых находятся тысячи сообщений ‘Auto-Bumped’, но не указывает, сколько таких сообщений содержится в каждой теме.

Поэтому, думаю, в конечном итоге мне всё же придётся воспользоваться «топором» в «тёмных комнатах» консоли Rails (что немного пугает).

Я немного беспокоюсь, так как это затронет тысячи тем/сообщений сразу. Если бы только существовала кнопка «выбрать все» внутри темы, которая выбирала бы все сообщения о поднятии темы, и мы могли бы удалять эти сообщения одним кликом внутри любой темы. А если кто-то захотел бы удалить все такие сообщения во всех темах всего одной командой, то для этого ему пришлось бы войти в «rails».

Я не жалуюсь. Я просто выражаю свои мысли.

Спросит ли или запросит ли что-либо 5-я строка команды Rails, о которой вы упомянули, перед удалением всех этих сообщений? Или она просто выполнит указанное действие без каких-либо предупреждений и т. д., а также без возможности восстановления?

Если возможно, можем ли мы сначала удалить «сообщения о поднятии темы» из любой темы, вместо того чтобы удалять их со всего сайта?

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

Спасибо.

Что-то вроде этого в data-explorer может помочь получить общий обзор:


SELECT p.topic_id,
       COUNT(p.id) AS count
FROM posts p
WHERE action_code = 'autobumped'
GROUP BY p.topic_id
ORDER BY count DESC

Однако я хочу предупредить: если у вас мало опыта, не стоит использовать rails console для внесения подобных изменений на рабочем сайте. Возможно, лучше сначала развернуть тестовый сайт и потренироваться. :+1:

Да, это решило проблему в той мере, в которой её задумали разработчики.

Тем не менее, я хотел бы предложить добавить команду «Администратор» — либо в настройки администратора, либо в просмотр темы — для выбора всех сообщений с пометкой «дубликат (автоматический подъём)» в любой теме или во всех темах и их последующего удаления по желанию администратора.

Может быть, вы могли бы скрыть эти сообщения с помощью CSS? К сожалению, я не думаю, что виджет post-small-action в настоящее время включает тип действия в качестве CSS-класса, поэтому вы не можете нацелиться конкретно на сообщения о поднятии темы. Возможно, компонент темы мог бы помочь?

Да, я проверил это перед тем, как предложить решение через Data Explorer.
Добавление конкретных классов к малым действиям могло бы стать хорошим предложением по #функции.

Не могли бы вы что-нибудь предложить?
Я могу просто скопировать и вставить это в компонент, но не знаю, как программировать.

Я не очень много работал с API плагинов, но заметил, что есть метод, позволяющий добавлять классы к маленьким действиям постов:

Поэтому я создал компонент темы, который включал это в секцию Head:

<script type="text/discourse-plugin" version="1.6.0">
  api.addPostSmallActionClassesCallback(post => {
    return ["small-action-" + post.actionCode]
  });
</script>

…и следующее в секцию CSS:

.small-action.small-action-autobumped {
  display: none;
}

…и сообщение об автоподнятии исчезло!

Я не проводил других тестов, поэтому не знаю, могут ли возникнуть какие-либо побочные эффекты. Возможно, классы small-action-[...] где-то в приложении вступят в конфликт, в таком случае вам следует выбрать префикс, который гарантированно будет уникальным.

Обратите внимание, что метод addPostSmallActionClassesCallback был добавлен только в прошлом месяце, поэтому вам нужна довольно свежая версия Discourse:

Спасибо.
Пожалуйста, подробнее объясните это последнее предложение: «в таком случае вы должны выбрать префикс, который гарантированно будет уникальным».

Например, вы можете использовать префикс bathinda-, который гарантированно не вступит в конфликт ни с чем в Discourse ни сейчас, ни в будущем. Это будет выглядеть примерно так:

Заголовок:

<script type="text/discourse-plugin" version="1.6.0">
  api.addPostSmallActionClassesCallback(post => {
    return ["bathinda-" + post.actionCode];
  });
</script>

CSS:

.small-action.bathinda-autobumped {
  display: none;
}

@simonk

Спасибо ещё раз. Компонент создан и успешно активирован.
Однако после скрытия сообщений «Автоматически поднят» выглядит это так:

Немного «неприятно», но лучше, чем ничего или другие решения.

Ах, я понял, это из-за сообщений с разрывом по времени, которые не скрыты. Это сложно, потому что с помощью CSS нельзя выбрать предыдущий элемент.