Admin-Werkzeuge/Schraubenschlüssel für kleine Aktionsbeiträge

Wäre es möglich, Admin-Tools in die kleinen Aktionsbeiträge (die geschlossen/angeheftet usw. Nachrichten) aufzunehmen? Zum Beispiel die Möglichkeit zur dauerhaften Löschung, Änderung des Besitzers und dergleichen.

Ich bin der einzige Admin-Benutzer auf meiner Website, und obwohl diese Beiträge als weiche Löschungen versteckt sind, sind sie immer noch etwas unschön – selbst als Staff-Benutzer. Manchmal notiere ich Dinge in weich gelöschten Nachrichten, bevor ich grobe Entwürfe in richtige Beiträge umwandle, sodass es etwas schwierig wird, diese von den kleinen Aktionsnachrichten zu unterscheiden, wenn ich auf “versteckte Antworten anzeigen” klicke.

Außerdem möchte ich kein CSS in einer Komponente verwenden – denn es gibt einige Fälle, in denen ich die kleine Aktionsnachricht anzeigen lassen möchte, z. B. um Benutzer darüber zu informieren, dass ich bestimmte Themen archiviert oder geschlossen habe. Ich möchte nur nicht die Ströme von angeheftet/unangeheftet/angeheftet/unangeheftet usw. – das haben wir alle schon gesehen, daher denke ich, Sie verstehen, was ich meine.

Als Kontext: Ich betreibe eine kleine Website mit etwa 10 Benutzern, die ich im Grunde als digitale Bibliothek für verschiedene Notizen und Medien nutze (ich mache Event-Promotion als Hobby, daher ist die Seitenveröffentlichung sehr nützlich für die dauerhafte Verlinkung von Informationen).

Ich vermute, dass der Schraubenschlüssel absichtlich nicht für kleine Aktionsbeiträge implementiert wurde, weil die meisten Websites es vorziehen würden, dass das Personal eine Prüfspur darüber führen kann, wer was mit einem Beitrag gemacht hat, was sinnvoll ist. Aber ich denke, es könnte in bestimmten Umständen nützlich sein, vielleicht als zusätzliches Plugin.

Es ist auch mein erstes Mal, dass ich auf dieser Website poste :hugs:. Ich denke, dies ist der richtige Ort für diese Anfrage, aber Entschuldigung, falls nicht!

3 „Gefällt mir“

Großartiger erster Beitrag. Es ist äußerst hilfreich, den spezifischen Kontext hinter solchen Anfragen zu haben, daher vielen Dank, dass Sie diesen angegeben haben.

Ist „dauerhaft löschen“ für Ihren Anwendungsfall die wichtigste Funktion, die Sie derzeit nicht ausführen können?

Oder benötigen Sie eine der anderen Aktionen? (Wenn ja, welche und warum?)

2 „Gefällt mir“

Vielen Dank für Ihre freundlichen Worte, ich weiß das zu schätzen!

Die dauerhafte Löschung ist definitiv die wichtigste. Ich kann mir persönlich keinen spezifischen Anwendungsfall für die Änderung des Besitzers einer kleinen Aktion oder der anderen Admin-Optionen vorstellen, die normalerweise für Beiträge verfügbar sind.

Ich kann diese Nachrichten über Rails löschen, aber das beinhaltet natürlich das Auffinden der spezifischen Beitrags-ID und den Zugriff auf die Konsole, sodass es innerhalb der Benutzeroberfläche viel bequemer wäre.

Ich bin mit der Erstellung von Komponenten einigermaßen vertraut (mit dem Plugin-Design noch nicht allzu sehr, aber ich möchte es bald lernen!). Wenn ich dies in einer Komponente zum Laufen bringen kann – wenn das überhaupt möglich ist –, werde ich auf jeden Fall einen GitHub-Link für die Community bereitstellen!

2 „Gefällt mir“

Ich habe diesen Beitrag von vor einer Weile wiedergefunden. Falls jemand anderes in Zukunft davon profitieren kann, hier war meine Lösung für dieses Problem!


Unerwünschte „Small Action“-Beiträge löschen

Das unten stehende Rails-Skript wird benötigt, um dies zu tun – ich habe es smalldelete.rb genannt und es im Container unter /var/www/discourse/script abgelegt.

Wir müssen auch jeden „Small Action“-Beitrag, den wir löschen möchten, überprüfen und sicherstellen, dass das Wort delete in den eigentlichen Beitragsbereich eingefügt wird, um ihn von dem zu unterscheiden, was wir behalten möchten. Hier ist ein Beispiel dafür, was ich mit einem Auto Bump-Beitrag meine:

Sie können dieses Schlüsselwort bei Bedarf ändern, indem Sie die Zeile p.raw.strip.downcase == \"delete\" in ein anderes Schlüsselwort ändern.

Skript für 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

Das Skript findet ein Thema anhand seiner ID und überprüft dann jeden Beitrag in diesem Thema, um festzustellen, ob er das definierte Schlüsselwort und nichts anderes enthält. Wenn dies zutrifft, wird dieser spezifische Beitrag zum Löschen vorgemerkt.


Sobald das Skript eingerichtet ist, können wir in die Rails-Konsole gehen und es laden:

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

dann können wir schließlich ausführen

TopicCleaner.delete_small_actions(topic_id, dry_run: false)

Das Flag dry_run ist ebenfalls enthalten, um genau aufzulisten, was bei Bedarf dauerhaft gelöscht würde.


Nun sind diese Änderungen natürlich rein ästhetischer Natur und machen keinen Unterschied in Bezug auf den Inhalt, da weich gelöschte Beiträge für Nicht-Mitarbeiter ohnehin nicht angezeigt werden.

Ich bin jedoch ein besonderer Fan davon, alles schön und ordentlich aussehen zu lassen, daher kann ich mir durchaus einige Fälle vorstellen, in denen bestimmte Forenbesitzer dies nutzen möchten!

1 „Gefällt mir“