Saen
(Saen Kazak)
1
是否可以在小型操作帖子(例如 closed/pinned 等消息)中包含管理员工具?例如允许永久删除、更改所有权等。
我是我网站上唯一的管理员用户,虽然这些帖子被隐藏为软删除,但它们仍然有点难看——即使作为员工用户也是如此。有时我会在软删除的消息中记下一些东西,然后再将草稿变成正式帖子,因此当我点击显示隐藏回复时,很难将它们与小型操作消息区分开来。
我也不想在组件中使用 CSS——因为在某些情况下我想显示小型操作消息,例如让用户知道我已存档或关闭了特定主题。我只是不希望出现固定/取消固定/固定/取消固定等等的连续消息——我们都见过这种情况,所以我想你明白我的意思。
作为背景,我经营着一个大约有 10 个用户的小型网站,我主要将其用作各种笔记和媒体的数字图书馆(我以推广活动为爱好,因此页面发布对于永久链接信息非常有用)。
我猜想扳手不是故意在小型操作帖子中实现的,因为大多数网站宁愿让员工能够审计谁对帖子做了什么,这是有道理的。但我确实认为它在特定情况下可能有用,也许可以作为一个额外的插件。
这也是我第一次在这个网站发帖🤗。我认为这里是提交此请求的正确地方,但如果不是,请道歉!
3 个赞
mcwumbly
(Dave McClure)
2
很棒的第一个帖子。拥有此类请求的具体背景信息非常有帮助,因此感谢您包含这些信息。
对于您的用例,“永久删除”是您目前无法做到的主要事情吗?
或者您是否需要其他任何操作?(如果是,是哪些操作以及为什么?)
2 个赞
Saen
(Saen Kazak)
3
感谢您的好意,我很感激!
永久删除绝对是主要的。我个人想不出更改小型操作的所有权或通常在帖子中可用的其他管理员选项的具体用例。
我可以通过 Rails 删除这些消息,但当然这涉及到查找特定的帖子 ID 和访问控制台,因此在 UI 中会方便得多。
我有点熟悉组件创建(对插件设计还不太熟悉,但我确实想尽快学习!)。如果我能让这个组件正常工作——如果可能的话——那么我一定会为社区提供一个 GitHub 链接!
2 个赞
Saen
(Saen Kazak)
4
我记起了之前的一篇帖子。以防将来其他人也能从中受益,这是我最终解决此问题的方案!
删除不需要的“小动作”帖子
需要下面的 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 "在主题 ##{topic_id} 中找到 #{to_delete.size} 个匹配的帖子"
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 个赞