小規模アクション投稿での管理者ツール/レンチ

アクション投稿(閉鎖/固定などのメッセージ)に管理ツールを含めることは可能でしょうか?たとえば、永久削除や所有権の変更などが可能です。

私のサイトでは私が唯一の管理者ユーザーです。これらの投稿はソフト削除として非表示になっていますが、スタッフユーザーであっても、やはり少し見栄えが悪いです。下書きを通常の投稿にする前にソフト削除されたメッセージに何かを書き留めることもあるため、隠された返信を表示するためにクリックしたときに、これらを小さなアクションメッセージと区別するのが少し難しくなります。

また、コンポーネントでCSSを使用するつもりはありません。なぜなら、ユーザーに特定のトピックをアーカイブまたは閉鎖したことを知らせるために、小さなアクションメッセージを表示したい場合がいくつかあるからです。ピン留め/ピン留め解除/ピン留め/ピン留め解除などのストリームは避けたいです。私たちは皆これを見たことがあるので、私の言いたいことは理解できると思います。

参考までに、私は約10人のユーザーがいる小さなサイトを運営しており、主にさまざまなメモやメディアのデジタルライブラリとして使用しています(趣味でイベントプロモーションを行っているため、ページ公開は情報の永続的なリンクに非常に役立ちます)。

おそらく、ほとんどのサイトではスタッフが誰が投稿に対して何をしたかを監査できるようにしたいと考えているため、レンチは意図的に小さなアクション投稿に実装されなかったのだと思います。しかし、特定の状況では役立つ可能性があります。おそらく追加のプラグインとしてです。

このサイトに投稿するのは初めてです🤗。このリクエストはここに投稿するのが適切だと思いますが、もしそうでなければ申し訳ありません!

「いいね!」 3

素晴らしい最初の投稿です。このようなリクエストの具体的な背景を共有していただき、大変参考になります。ありがとうございます。

あなたのユースケースでは、「完全削除」が現在できない主なことでしょうか?

それとも、他のアクションの必要性もありますか?(もしあれば、どれで、なぜですか?)

「いいね!」 2

親切な言葉をありがとう、感謝します!

恒久的な削除が間違いなくメインです。小さなアクションの所有権を変更したり、通常は投稿で利用可能な他の管理オプションを変更したりする具体的なユースケースを個人的に思いつくことはできません。

Rails経由でこれらのメッセージを削除できますが、もちろん特定の投稿IDを見つけてコンソールにアクセスする必要があります。そのため、UI内の方がはるかに便利になります。

コンポーネントの作成にはある程度慣れています(まだプラグインデザインにはあまり慣れていませんが、すぐに学びたいと思っています!)。もしこれがコンポーネントで機能すれば、それが可能であれば、コミュニティのためにGitHubリンクを提供します!

「いいね!」 2

少し前の投稿を思い出しました。もし将来誰かの役に立つかもしれないので、これが最終的に私がこの問題に対して見つけた解決策です!


不要な小さなアクション投稿を削除する

これを実行するには、以下の 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 #{topic_id} not found"
      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 "No small action posts with 'delete' found in topic #{topic_id}"
      return
    end

    puts "Found #{to_delete.size} matching posts in topic ##{topic_id}"

    to_delete.each do |post|
      if dry_run
        puts "Would PERMANENTLY delete post ##{post.id} (created #{post.created_at}, by #{post.user.username})"
      else
        post.destroy()
        puts "🗑️ Permanently deleted post ##{post.id}"
      end
    end

    puts dry_run ? "Dry run complete — no posts deleted." : "Finished permanent cleanup of topic #{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