Comentarios sobre la nueva cola de revisión (2019)

Tienes razón. El error de clasificación en la cola de revisión ocurre porque hay elementos revisables de Akismet en la base de datos después de que se eliminó el plugin. Veo dos soluciones posibles aquí:

  1. Proporcionar una tarea de rake para eliminar estas filas de la base de datos antes de que el usuario decida eliminar el plugin permanentemente.
  2. Aplicar un ámbito predeterminado a la clase Reviewable que excluya estas filas si el plugin está deshabilitado.

¿Qué opinas?

4 Me gusta

Otra cosa más: las imágenes parecen ser invisibles en la vista previa del editor si editas un tema o publicación en cola.

2 Me gusta

¿Ocurre cuando la publicación está esperando revisión? ¿O después de rechazarla? Como mencioné antes, las subidas de publicaciones en cola rechazadas son eliminadas automáticamente por el sistema.

3 Me gusta

Sí, es cuando están esperando revisión @Roman, las imágenes no son visibles para mí en la vista previa del editor.

2 Me gusta

Creo que la desinstalación de plugins es poco común y que la cuestión del ámbito predeterminado es más propensa a introducir errores.

Creo que sería razonable si agregáramos una tarea de Rake y la incluyéramos en el README, bajo una sección de “desinstalación”, con instrucciones para ejecutarla y eliminar los registros antiguos. ¡Hagámoslo!

4 Me gusta

He intentado desactivar ‘notificar sobre publicaciones en cola después’ estableciéndolo en 0 y también en 2000000000. Aun así, sigo recibiendo muchas notificaciones frecuentes de ‘x elementos necesitan ser revisados’. :face_with_monocle:


1 me gusta

El sistema los está enviando porque hay elementos pendientes en la cola. La configuración que modificaste es para recordatorios de publicaciones en cola; establece notify_about_flags_after en 0 en su lugar.

6 Me gusta

Esta tarea ya está disponible. Puedes eliminar todos los registros relacionados con el plugin de la base de datos ejecutando:

bundle exec rake akismet_uninstall:delete_reviewables

Asegúrate de tener el plugin instalado y de haber leído la sección de desinstalación del README:

https://github.com/discourse/discourse-akismet#uninstallation

7 Me gusta

Gracias @Roman: puedo confirmar que modificar notify_about_flags_after a 0 detuvo las notificaciones :smiley:

¡Realmente agradezco que hayas añadido la tarea de rake para esto! Reinstalaré Akismet y ejecutaré la tarea de rake más tarde hoy, cuando el tráfico esté en su punto más bajo, y luego actualizaré esta publicación con los resultados.

4 Me gusta

¿Tienes alguna opinión al respecto? @Roman @eviltrout

Parece que los usuarios cuyos publicaciones van directamente a la cola de revisión pueden eludir bastantes límites de velocidad para la creación de temas y publicaciones/respuestas.

Opciones de límite de velocidad que parecen eludibles:
límite de velocidad para crear tema, límite de velocidad para que usuarios nuevos creen temas, máximo de temas por día, límite de velocidad para crear publicación, límite de velocidad para que usuarios nuevos creen publicaciones, minutos entre publicaciones únicas, máximo de respuestas consecutivas.

Así como la prevención de sobrescritura con el plugin No Bump: Discourse No Bump - #26

Opciones para enviar temas y publicaciones directamente a la cola de revisión:
‘aprobar conteo de publicaciones’ (usuarios nuevos que necesitan que sus primeros temas/publicaciones sean aprobados), así como las opciones individuales de categoría de ‘Requiere aprobación del moderador para todos los nuevos temas’ y muy probablemente (solo he probado la opción de nuevos temas) ‘Requiere aprobación del moderador para todas las nuevas respuestas’.**

1 me gusta

Sí, esto es intencional. Si tu publicación es revisada y considerada aceptable, se publicará, independientemente de los límites.

7 Me gusta

¡Ah, ya veo! Gracias por la explicación. Solo compartiré mis experiencias al respecto como referencia.

Sin que se apliquen los límites, se permite a los nuevos usuarios (con aprobación basada en la cantidad de publicaciones) inundar libremente la cola de revisión con pocos o ningún límite, mientras que las cuentas antiguas y de confianza están sujetas a límites de velocidad. Excepto cuando se habilitan las opciones de categoría para aprobar todos los temas o respuestas, en cuyo caso los usuarios antiguos y de confianza tampoco tienen límites o tienen límites mínimos.

Sería bastante trabajo, pero factible aprobar todos los nuevos temas, así como los temas/publicaciones iniciales creados por nuevos usuarios (si están sujetos a límites de velocidad), pero en mi caso es casi inviable cuando los usuarios pueden inundar la cola.

De todos modos, muchas gracias por la aclaración de que esto es así por diseño. Es muy útil. Creo que revisaré mi estrategia y desactivaré las opciones que envían temas o publicaciones directamente a la cola de revisión, reservándola principalmente para contenido marcado. Luego, simplemente moderar las envíos en vivo sujetos a límites de velocidad después de ocurridos debería funcionar bien y ser más dinámico para los usuarios también.

1 me gusta

So I went ahead and reinstalled Akismet and ran the rake task. My process was:

cd /var/discourse
./launcher enter app
bundle exec rake akismet_uninstall:delete_reviewables

I received an error unfortunately, tried running it a few times:

rake aborted!
ActiveRecord::NoDatabaseError: FATAL:  Peer authentication failed for user "discourse"
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:50:in `rescue in postgresql_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:33:in `postgresql_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_handling.rb:221:in `retrieve_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_handling.rb:189:in `connection'
/var/www/discourse/lib/site_settings/db_provider.rb:61:in `table_exists?'
/var/www/discourse/lib/site_settings/db_provider.rb:16:in `all'
/var/www/discourse/lib/site_settings/defaults_provider.rb:29:in `db_all'
/var/www/discourse/lib/site_setting_extension.rb:287:in `block in refresh!'
/var/www/discourse/lib/site_setting_extension.rb:284:in `synchronize'
/var/www/discourse/lib/site_setting_extension.rb:284:in `refresh!'
/var/www/discourse/lib/site_setting_extension.rb:505:in `block in setup_methods'
/var/www/discourse/config/initializers/004-message_bus.rb:120:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:318:in `block in load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:318:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:666:in `block in load_config_initializer'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/notifications.rb:182:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:665:in `load_config_initializer'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:624:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:624:in `block in <class:Engine>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:32:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:32:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:50:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:50:in `tsort_each_child'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:60:in `run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:363:in `initialize!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/railtie.rb:190:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/railtie.rb:190:in `method_missing'
/var/www/discourse/config/environment.rb:7:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:324:in `block in require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:324:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:339:in `require_environment!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:523:in `block in run_tasks_blocks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'

Caused by:
PG::ConnectionBad: FATAL:  Peer authentication failed for user "discourse"
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `new'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `connect'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:46:in `postgresql_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_handling.rb:221:in `retrieve_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_handling.rb:189:in `connection'
/var/www/discourse/lib/site_settings/db_provider.rb:61:in `table_exists?'
/var/www/discourse/lib/site_settings/db_provider.rb:16:in `all'
/var/www/discourse/lib/site_settings/defaults_provider.rb:29:in `db_all'
/var/www/discourse/lib/site_setting_extension.rb:287:in `block in refresh!'
/var/www/discourse/lib/site_setting_extension.rb:284:in `synchronize'
/var/www/discourse/lib/site_setting_extension.rb:284:in `refresh!'
/var/www/discourse/lib/site_setting_extension.rb:505:in `block in setup_methods'
/var/www/discourse/config/initializers/004-message_bus.rb:120:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:318:in `block in load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:318:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:666:in `block in load_config_initializer'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/notifications.rb:182:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:665:in `load_config_initializer'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:624:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:624:in `block in <class:Engine>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:32:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:32:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:50:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:50:in `tsort_each_child'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:60:in `run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:363:in `initialize!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/railtie.rb:190:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/railtie.rb:190:in `method_missing'
/var/www/discourse/config/environment.rb:7:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:324:in `block in require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:324:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:339:in `require_environment!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:523:in `block in run_tasks_blocks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => akismet_uninstall:delete_reviewables => environment
(See full trace by running task with --trace)
1 me gusta

¿Podrías intentar cambiar al usuario discourse ejecutando su discourse antes de realizar la tarea?

4 Me gusta

¡Gracias @Roman! Muy agradecido :slight_smile:

Lo intenté de nuevo usando su discourse antes de ejecutar la tarea rake y funcionó perfectamente. :tada:

El ordenamiento por ‘Fecha de creación (inverso)’ también está funcionando bien ahora.

3 Me gusta

Recientemente configuré la opción de sitio solo por invitación y ahora hay un elemento en la cola de revisión generado por el sistema para una cuenta de usuario, marcado como Requiere aprobación.

Lo extraño es que se trata de una cuenta existente (de 4 años) con múltiples publicaciones y nivel TL2, pero no ha estado activa recientemente (la última publicación fue hace 2 años). Sin embargo, ha iniciado sesión hoy, tras lo cual se generó la bandera de revisión.

Aún no he utilizado la opción Aprobar usuario y el elemento sigue en la cola de revisión, pero parece que la cuenta está habilitada y puede usar el foro (como debería).

Parece que la cola de revisión está identificando las cuentas reactivadas recientemente como nuevas y las marca para revisión cuando solo por invitación está activado.

Edición: esto también acaba de ocurrir con una cuenta muy reciente, creada solo unos días antes de habilitar esta configuración.

1 me gusta

Creo que ya he visto esto antes cuando se cambia a modo solo por invitación. En algunas situaciones, Discourse piensa que necesitas aprobar al usuario porque obtuvo acceso al sitio registrándose de forma regular. Cuando se cambia ese interruptor, su registro no tiene establecida la marca “Aprobado”.

3 Me gusta

He investigado esto más a fondo y lo único que tienen en común estas cuentas (cuatro en total) es que todas iniciaron sesión utilizando una de las rutas de inicio de sesión con correo electrónico (a través de forgot_password o directamente mediante email_login) después de que se estableció invite_only.

2 Me gusta

¿Se ha considerado añadir la opción de suspender a los temas/publicaciones en revisión marcados por Akismet? Se ha sugerido en nuestra instancia, simplemente porque usamos SSO, por lo que eliminar miembros rara vez es efectivo; el miembro puede volver a iniciar sesión en su cuenta en el proveedor principal y accederá instantáneamente a los foros para continuar. La suspensión les dificulta las cosas, ya que tendrían que crear una nueva cuenta en el proveedor con una nueva dirección de correo electrónico.

Sé que es una solicitud un poco extraña, pero una que mis moderadores preguntan con bastante frecuencia. Hoy en día, ellos van manualmente por el sistema para suspender al usuario, lo que les genera un esfuerzo adicional, pero vale la pena porque el usuario finalmente no está dispuesto a desechar otra dirección de correo electrónico.

6 Me gusta

Creo que debería ser un botón desplegable, en lugar de añadir un montón de botones adicionales.

4 Me gusta