Инструменты администратора/гаечный ключ в небольших постах с действиями

Возможно ли добавить инструменты администратора к небольшим сообщениям о действиях (сообщениям вроде «закрыто/закреплено» и т. п.)? Например, возможность постоянного удаления, смены владельца и тому подобное.

Я единственный администратор на своём сайте, и хотя эти сообщения скрыты как мягкие удаления, они всё равно выглядят не очень эстетично — даже для пользователя со статусом сотрудника. Иногда я записываю что-то в мягко удалённых сообщениях, прежде чем превратить черновики в полноценные посты, поэтому становится немного трудно отличить их от небольших сообщений о действиях, когда я открываю скрытые ответы.

Также я не хочу использовать CSS в компоненте, потому что есть несколько случаев, когда мне нужно отображать небольшое сообщение о действии, например, чтобы уведомить пользователей о том, что я архивировал или закрыл конкретные темы. Мне просто не нужны потоки сообщений о закреплении/откреплении/закреплении/откреплении и т. д. — мы все это уже видели, так что, думаю, вы понимаете, о чём я.

Для контекста: я веду небольшой сайт с примерно 10 пользователями, который использую в основном как цифровую библиотеку для различных заметок и медиа (я занимаюсь продвижением мероприятий как хобби, поэтому публикация страниц очень полезна для создания постоянных ссылок на информацию).

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

Это также мой первый пост на этом сайте :hugs:. Думаю, это правильное место для такой просьбы, но извините, если нет!

3 лайка

Отличный первый пост. Очень полезно иметь конкретный контекст для подобных запросов, поэтому спасибо, что вы его указали.

Для вашего случая является ли «полное удаление» главным, чего вы сейчас не можете сделать?

Или вам нужны какие-то другие действия? (Если да, то какие именно и почему?)

2 лайка

Спасибо за ваши добрые слова, я очень ценю это!

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

Я могу удалить эти сообщения через Rails, но, конечно, это требует поиска конкретного ID сообщения и доступа к консоли, поэтому было бы гораздо удобнее сделать это через интерфейс.

Я немного знаком с созданием компонентов (пока не очень хорошо разбираюсь в дизайне плагинов, но хочу научиться в ближайшее время!). Если мне удастся реализовать это в компоненте — если это вообще возможно — я обязательно предоставлю ссылку на GitHub для сообщества!

2 лайка

Я вспомнил этот пост, опубликованный немного назад. На случай, если кому-то ещё пригодится эта информация в будущем, вот моё итоговое решение данной проблемы!


Удаление нежелательных мелких действий (small action posts)

Для этого потребуется следующий скрипт на Ruby on Rails — я назвал его smalldelete.rb и разместил в директории /var/www/discourse/script внутри контейнера.

Также необходимо пройти по всем постам и убедиться, что в каждом из тех, которые нужно удалить, в теле поста содержится слово delete. Это позволит отличить их от тех, что стоит сохранить. Вот пример того, что я имею в виду, на примере поста Auto Bump:

При необходимости вы можете изменить это ключевое слово на другое, отредактировав строку p.raw.strip.downcase == "delete".

Скрипт для smalldelete.rb


class TopicCleaner
  def self.delete_small_actions(topic_id, dry_run: false)
    topic = Topic.find_by(id: topic_id)
    unless topic
      puts "Тема #{topic_id} не найдена"
      return
    end

    posts = topic.posts.where(post_type: Post.types[:small_action])
    to_delete = posts.select { |p| p.raw.strip.downcase == "delete" }

    if to_delete.empty?
      puts "В теме #{topic_id} не найдено постов с пометкой 'delete'"
      return
    end

    puts "Найдено #{to_delete.size} подходящих постов в теме ##{topic_id}"

    to_delete.each do |post|
      if dry_run
        puts "Будет ПОЛНОСТЬЮ удалён пост ##{post.id} (создан #{post.created_at}, автор: #{post.user.username})"
      else
        post.destroy()
        puts "🗑️ Пост ##{post.id} навсегда удалён"
      end
    end

    puts dry_run ? "Тестовый запуск завершён — посты не удалены." : "Завершена окончательная очистка темы #{topic_id}"
  end
end

Скрипт находит тему по её ID, затем проверяет каждый пост в этой теме на наличие заданного ключевого слова и ничего больше. Если условие выполняется, пост помечается для удаления.


После настройки скрипта можно зайти в консоль Rails и загрузить его:

load Rails.root.join("script/smalldelete.rb")

затем, наконец, запустить:

TopicCleaner.delete_small_actions(topic_id, dry_run: false)

Флаг dry_run также предусмотрен для вывода списка того, что было бы удалено навсегда, если это необходимо.


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

Однако я лично люблю, когда всё выглядит аккуратно и опрятно, поэтому вполне могу представить ситуации, когда владельцы форумов захотят воспользоваться этим инструментом!

1 лайк