Ferramentas de administrador/chave inglesa em posts de ação pequena

Seria possível incluir ferramentas de administração nas pequenas postagens de ação (as mensagens de fechado/fixado, etc.)? Como permitir a exclusão permanente, alteração de propriedade e coisas do tipo.

Sou o único usuário administrador no meu site e, embora essas postagens fiquem escondidas como exclusões lógicas, elas ainda são um pouco feias - mesmo como usuário da equipe. Às vezes, anoto coisas em mensagens logicamente excluídas antes de transformar rascunhos em postagens adequadas, então torna-se um pouco difícil distingui-las das pequenas mensagens de ação sempre que clico para mostrar respostas ocultas.

Também não quero realmente usar CSS em um componente - porque há alguns casos em que quero que a pequena mensagem de ação seja exibida, como informar aos usuários que arquivei ou fechei tópicos específicos. Eu só não quero o fluxo de fixado/desfixado/fixado/desfixado etc. - todos nós já vimos isso antes, então acho que você entendeu o que quero dizer.

Para contexto, administro um pequeno site com cerca de 10 usuários que basicamente uso como uma biblioteca digital para várias anotações e mídias (faço promoção de eventos como hobby, então a publicação de páginas é super útil para linkagem permanente de informações).

Minha suposição é que a chave inglesa não foi implementada em pequenas postagens de ação de propósito porque a maioria dos sites prefere que a equipe possa auditar quem fez o quê em uma postagem, o que faz sentido. Mas acho que poderia ser útil em circunstâncias específicas, talvez como um plugin adicional.

É também a primeira vez que posto neste site :hugs:. Acho que este é o lugar certo para este pedido, mas peço desculpas se não for!

3 curtidas

Ótima primeira postagem. É extremamente útil ter o contexto específico por trás de solicitações como essa, então obrigado por incluí-lo.

Para o seu caso de uso, “exclusão permanente” é a principal coisa que você está procurando e que não consegue fazer atualmente?

Ou você tem necessidade de alguma das outras ações? (Se sim, quais e por quê?)

2 curtidas

Obrigado por suas palavras gentis, eu agradeço!

A exclusão permanente é definitivamente a principal. Eu pessoalmente não consigo pensar em um caso de uso específico para alterar a propriedade de uma ação pequena, ou as outras opções administrativas que geralmente estão disponíveis nas postagens.

Eu posso excluir essas mensagens através do rails, mas é claro que isso envolve encontrar o ID específico da postagem e acessar o console, então seria muito mais conveniente dentro da UI.

Eu estou um pouco familiarizado com a criação de componentes (ainda não muito familiarizado com o design de plugins, mas quero aprender em breve!). Se eu conseguir fazer isso funcionar em um componente - se é que isso é possível - então eu definitivamente fornecerei um link do GitHub para a comunidade!

2 curtidas

Lembrei-me desta publicação de um tempo atrás. Caso mais alguém possa se beneficiar disso no futuro, aqui estava minha solução para este problema no final!


Excluindo Publicações de Ação Pequena Indesejadas

O script do Rails abaixo é necessário para fazer isso - eu o nomeei como smalldelete.rb e o coloquei em /var/www/discourse/script enquanto estava dentro do contêiner.

Também precisamos verificar e garantir que cada publicação de ação pequena que queremos destruir tenha a palavra delete colocada na seção real da publicação, para diferenciá-las daquelas que talvez queiramos manter. Aqui está um exemplo do que quero dizer com uma publicação de Auto Bump (Aumento Automático):

Você pode alterar essa palavra-chave para outra coisa, se necessário, editando a linha p.raw.strip.downcase == \"delete\" para outra palavra-chave.

Script para smalldelete.rb


class TopicCleaner
  def self.delete_small_actions(topic_id, dry_run: false)
    topic = Topic.find_by(id: topic_id)
    unless topic
      puts "Tópico #{topic_id} não encontrado"
      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 "Nenhuma publicação de ação pequena com 'delete' encontrada no tópico #{topic_id}"
      return
    end

    puts "Encontradas #{to_delete.size} publicações correspondentes no tópico ##{topic_id}"

    to_delete.each do |post|
      if dry_run
        puts "Iria excluir PERMANENTEMENTE a publicação ##{post.id} (criada em #{post.created_at}, por #{post.user.username})"
      else
        post.destroy()
        puts "🗑️ Excluída permanentemente a publicação ##{post.id}"
      end
    end

    puts dry_run ? "Execução de teste concluída — nenhuma publicação excluída." : "Concluída a limpeza permanente do tópico #{topic_id}"
  end
end

O script encontra um tópico pelo ID e, em seguida, verifica cada publicação nesse tópico para ver se contém a palavra-chave definida e nada mais. Se isso for verdadeiro, ele prepara essa publicação específica para exclusão.


Assim que o script estiver configurado, podemos entrar no console do rails e carregá-lo:

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

então, finalmente, podemos executar

TopicCleaner.delete_small_actions(topic_id, dry_run: false)

O sinalizador dry_run também está incluído para listar exatamente o que seria excluído permanentemente, se desejado.


Agora, é claro, essas alterações são inteiramente estéticas e não fazem diferença em termos de conteúdo, já que as publicações excluídas logicamente não serão exibidas para não membros da equipe de qualquer maneira.

Sou um fã particular de deixar tudo bonito e organizado, então posso definitivamente ver alguns casos em que certos proprietários de fóruns podem querer fazer uso disso!

1 curtida