Herramientas de administrador/llave inglesa en publicaciones de acciones pequeñas

¿Sería posible incluir herramientas de administración en las publicaciones de acciones pequeñas (los mensajes de cerrado/fijado, etc.)? Como permitir la eliminación permanente, el cambio de propiedad y cosas similares.

Soy el único usuario administrador en mi sitio y, aunque estas publicaciones están ocultas como eliminaciones suaves, siguen siendo un poco feas, incluso como usuario del personal. A veces, anoto cosas en mensajes de eliminación suave antes de convertir borradores en publicaciones adecuadas, por lo que se vuelve un poco difícil distinguirlos de los mensajes de acciones pequeñas cuando hago clic para mostrar las respuestas ocultas.

Tampoco quiero usar CSS en un componente, porque hay algunas instancias en las que quiero que se muestre el mensaje de acción pequeña, como informar a los usuarios que he archivado o cerrado temas específicos. Simplemente no quiero flujos de fijado/desfijado/fijado/desfijado, etc., todos hemos visto esto antes, así que creo que entiendes de lo que quiero decir.

Como contexto, administro un sitio pequeño con aproximadamente 10 usuarios que básicamente uso como una biblioteca digital para varias notas y medios (promociono eventos como pasatiempo, por lo que la publicación de páginas es muy útil para enlazar permanentemente la información).

Supongo que la llave inglesa no se implementó en las publicaciones de acciones pequeñas a propósito porque la mayoría de los sitios preferirían que el personal pudiera rastrear quién ha hecho qué a una publicación, lo cual tiene sentido. Pero creo que podría ser útil en circunstancias específicas, tal vez como un complemento adicional.

Es también mi primera vez publicando en este sitio :hugs:. Creo que este es el lugar correcto para esta solicitud, ¡pero disculpas si no lo es!

3 Me gusta

Gran primera publicación. Es extremadamente útil tener el contexto específico detrás de solicitudes como esta, así que gracias por incluirlo.

Para tu caso de uso, ¿es la “eliminación permanente” lo principal que buscas y que no puedes hacer actualmente?

¿O tienes alguna necesidad de alguna de las otras acciones? (Si es así, ¿cuáles y por qué?)

2 Me gusta

¡Gracias por tus amables palabras, lo aprecio!

La eliminación permanente es definitivamente la principal. Personalmente, no se me ocurre un caso de uso específico para cambiar la propiedad de una acción pequeña, ni las otras opciones de administración que suelen estar disponibles en las publicaciones.

Puedo eliminar estos mensajes a través de Rails, pero por supuesto, eso implica encontrar el ID de publicación específico y acceder a la consola, por lo que sería mucho más conveniente dentro de la interfaz de usuario.

Estoy algo familiarizado con la creación de componentes (todavía no muy familiarizado con el diseño de complementos, ¡pero quiero aprender pronto!). Si puedo hacer que esto funcione en un componente, si es que es posible, ¡definitivamente proporcionaré un enlace de GitHub para la comunidad!

2 Me gusta

Recordé esta publicación de hace un tiempo. En caso de que a alguien más le sea útil en el futuro, ¡esta fue mi solución a este problema al final!


Eliminando Publicaciones de Acción Pequeña No Deseadas

El script de Rails a continuación es necesario para hacer esto; lo he llamado smalldelete.rb y lo he colocado en /var/www/discourse/script mientras estoy dentro del contenedor.

También debemos revisar y asegurarnos de que cada publicación de acción pequeña que queremos destruir tenga la palabra delete colocada en la sección real de la publicación, para diferenciarlas de las que podríamos querer conservar. Aquí hay un ejemplo de lo que quiero decir con una publicación de Auto Bump (Reactivación Automática):

Puedes cambiar esa palabra clave por otra si es necesario editando la línea p.raw.strip.downcase == \"delete\" por otra palabra clave.

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} no 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 "No se encontraron publicaciones de acción pequeña con 'delete' en el tópico #{topic_id}"
      return
    end

    puts "Se encontraron #{to_delete.size} publicaciones coincidentes en el tópico ##{topic_id}"

    to_delete.each do |post|
      if dry_run
        puts "Se eliminaría PERMANENTEMENTE la publicación ##{post.id} (creada #{post.created_at}, por #{post.user.username})"
      else
        post.destroy()
        puts "🗑️ Publicación eliminada permanentemente ##{post.id}"
      end
    end

    puts dry_run ? "Ejecución de prueba completa — no se eliminaron publicaciones." : "Finalizada la limpieza permanente del tópico #{topic_id}"
  end
end

El script encuentra un tópico por ID y luego verifica cada publicación en ese tópico para ver si contiene la palabra clave definida, y nada más. Si esto es cierto, entonces preparará esa publicación específica para su eliminación.


Una vez que el script esté configurado, podemos ir a la consola de rails y cargarlo:

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

luego, finalmente, podemos ejecutar

TopicCleaner.delete_small_actions(topic_id, dry_run: false)

La bandera dry_run también se incluye para listar exactamente lo que se eliminaría permanentemente, si se desea.


Ahora, por supuesto, estos cambios son completamente estéticos y no marcan ninguna diferencia en términos de contenido, ya que las publicaciones eliminadas provisionalmente no se mostrarán a los no miembros del personal de todos modos.

Sin embargo, soy un fanático particular de hacer que todo se vea agradable y ordenado, ¡así que definitivamente puedo ver algunos casos en los que ciertos propietarios de foros querrán hacer uso de esto!

1 me gusta