Feedback sulla nuova Review Queue (2019)

Hai ragione. L’errore di ordinamento nella coda di revisione si verifica perché nel database sono presenti elementi da revisionare di Akismet dopo che il plugin è stato rimosso. Vedo due possibili soluzioni:

  1. Fornire un task rake per rimuovere queste righe dal database prima che l’utente decida di rimuovere definitivamente il plugin.
  2. Applicare un default scope alla classe Reviewable che escluda queste righe se il plugin è disabilitato.

Cosa ne pensi?

4 Mi Piace

Un’altra cosa: le immagini sembrano essere invisibili nell’anteprima dell’editor se modifichi un argomento/post in coda.

2 Mi Piace

Accade quando il post è in attesa di revisione? O dopo averlo respinto? Come ho detto prima, gli upload dei post in coda respinti vengono rimossi automaticamente dal sistema.

3 Mi Piace

Sì, succede quando sono in attesa di revisione @Roman, le immagini non sono visibili per me nell’anteprima dell’editor.

2 Mi Piace

Credo che la disinstallazione di plugin sia un evento raro, mentre la gestione predefinita degli ambiti è più propensa a introdurre bug.

Penso che sarebbe ragionevole aggiungere un task Rake e inserirlo nel README, in una sezione dedicata alla “disinstallazione”, con istruzioni su come eseguirlo per rimuovere i vecchi record. Facciamo così!

4 Mi Piace

Ho provato a disattivare ‘notifica sui post in coda dopo’ impostandolo a 0 e anche a 2000000000. Ricevo comunque molte frequenti notifiche del tipo ‘x elementi devono essere revisionati’. :face_with_monocle:


1 Mi Piace

Il sistema li sta inviando perché ci sono elementi in sospeso nella coda. L’impostazione che hai modificato riguarda i promemoria per i post in coda; imposta notify_about_flags_after a 0 invece.

6 Mi Piace

Questo task è ora disponibile. Puoi rimuovere tutti i record relativi al plugin dal database eseguendo:

bundle exec rake akismet_uninstall:delete_reviewables

Assicurati di avere il plugin installato e di aver letto la sezione sulla disinstallazione del README:

7 Mi Piace

Grazie @Roman - posso confermare che modificare notify_about_flags_after a 0 ha fermato le notifiche :smiley:

Apprezzo davvero l’aggiunta del rake task per questo! Reinstallerò Akismet ed eseguirò il rake task più tardi oggi, quando il traffico è al minimo, per poi aggiornare questo post con i risultati.

4 Mi Piace

Hai qualche considerazione a riguardo? @Roman @eviltrout

Sembra che gli utenti i cui post vanno direttamente nella coda di revisione possano aggirare diversi limiti di velocità per la creazione di argomenti e post/risposte.

Opzioni di limite di velocità che sembrano aggirabili:
limite di velocità creazione argomento, limite di velocità nuovo utente creazione argomento, massimo argomenti al giorno, limite di velocità creazione post, limite di velocità nuovo utente creazione post, minuti tra post unici, massimo risposte consecutive.

Nonché la prevenzione dei bump con il plugin no bump: Discourse No Bump - #26

Opzioni per inviare argomenti e post direttamente nella coda di revisione:
“approva numero di post” (nuovi utenti che devono far approvare i loro primi argomenti/post) nonché le opzioni individuali per categoria di “Richiedi l’approvazione del moderatore per tutti i nuovi argomenti” e molto probabilmente (ho testato solo l’opzione per i nuovi argomenti) “Richiedi l’approvazione del moderatore per tutte le nuove risposte”.

1 Mi Piace

Sì, è così che è stato progettato. Se il tuo post viene esaminato e ritenuto accettabile, verrà pubblicato, indipendentemente dai limiti.

7 Mi Piace

Ah, capito. Grazie per la spiegazione. Condividerò solo le mie esperienze a scopo di riferimento.

Senza l’applicazione dei limiti, viene consentito agli utenti nuovi (con approvazione basata sul numero di post) di inondare liberamente la coda di revisione con limiti nulli o minimi, mentre gli account più anziani e fidati sono soggetti ai limiti di frequenza. Tranne quando sono attivate le opzioni di categoria per l’approvazione di tutti gli argomenti o le risposte, caso in cui anche gli utenti fidati più anziani non hanno limiti o ne hanno di minimi.

Sarebbe un lavoro considerevole, ma abbastanza fattibile approvare tutti i nuovi argomenti, nonché gli argomenti/post iniziali creati dagli utenti nuovi (se soggetti a limiti di frequenza), ma nel mio caso è quasi impraticabile quando gli utenti possono inondare la coda.

Comunque, grazie mille per la chiarificazione che questo è previsto dal design. È molto utile. Penso che rivedrò la mia strategia e disattiverò le opzioni che inviano argomenti o post direttamente alla coda di revisione, riservandola principalmente ai contenuti segnalati. Moderare successivamente i contributi in tempo reale soggetti a limiti di frequenza dovrebbe funzionare bene ed essere anche più dinamico per gli utenti.

1 Mi Piace

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 Mi Piace

Potresti provare a passare all’utente discourse eseguendo su discourse prima di eseguire l’attività?

4 Mi Piace

Grazie @Roman! Molto apprezzato :slight_smile:

Ho riprovato usando su discourse prima di eseguire il task rake e ha funzionato perfettamente. :tada:

Anche l’ordinamento per ‘Creato il (decrescente)’ ora funziona bene.

3 Mi Piace

Ho recentemente impostato la configurazione del sito su “solo su invito” e ora c’è un elemento nella coda di revisione generato dal sistema per un account utente, contrassegnato come “Necessita approvazione”.

La cosa strana è che si tratta di un account esistente (di 4 anni) con diversi post e livello TL2, ma che non era attivo da tempo (l’ultimo post risale a 2 anni fa); tuttavia, ha effettuato l’accesso oggi, dopo di che è stato sollevato il flag di revisione.

Non ho ancora utilizzato la funzione “Approva utente” e l’elemento è ancora nella coda di revisione, ma sembra che l’account sia abilitato e in grado di utilizzare il forum (come dovrebbe).

Sembra che la coda di revisione stia identificando gli account riattivati di recente come nuovi account e li stia contrassegnando per la revisione quando è impostato “solo su invito”?

Modifica: questo è successo anche ora per un account molto recente, creato solo pochi giorni prima dell’attivazione di questa impostazione.

1 Mi Piace

Credo di aver già visto questo prima, quando si passa alla modalità solo su invito. In alcune situazioni, Discourse pensa che sia necessario approvare l’utente perché ha ottenuto l’accesso al sito registrandosi normalmente. Quando si modifica quell’interruttore, il suo record non ha l’indicatore “Approvato” impostato.

3 Mi Piace

Ho indagato ulteriormente e l’unica cosa che questi account (in totale quattro) hanno in comune è che tutti hanno effettuato l’accesso utilizzando uno dei percorsi di accesso tramite email (tramite forgot_password o direttamente tramite email_login) dopo che è stata impostata la modalità invite_only.

2 Mi Piace

È stato mai preso in considerazione l’aggiunta dell’opzione Sospendi ai topic/post in revisione segnalati da Akismet? È stato suggerito sulla nostra istanza, semplicemente perché usiamo l’SSO, quindi eliminare gli utenti raramente serve a qualcosa: l’utente può semplicemente riaccedere al proprio account sul provider principale e verrà immediatamente connesso ai forum per continuare la sua navigazione. Sospendere l’account rende le cose più difficili, poiché dovranno creare un nuovo account sul provider con un nuovo indirizzo email.

So che è una richiesta un po’ strana, ma è qualcosa che i miei moderatori chiedono abbastanza frequentemente. Oggi devono manualmente aggirare il sistema per sospendere l’utente, il che crea un lavoro extra per loro, ma ne vale la pena perché l’utente, alla fine, non è disposto a scartare un altro indirizzo email.

6 Mi Piace

Credo che sarebbe necessario un pulsante a discesa, piuttosto che aggiungere un sacco di pulsanti aggiuntivi.

4 Mi Piace