Lorsqu’une option utilisateur par défaut est définie de false à true, elle ne se comporte pas comme elle le devrait.
Elle ne demande pas si le paramètre doit être appliqué aux utilisateurs existants et même si c’était le cas, cela ne fonctionnerait pas.
Repro :
- Avoir un paramètre comme, par exemple, « ouvrir les liens externes dans un nouvel onglet » activé
- Définir admin - paramètres - préférences utilisateur -
ouvrir par défaut les autres liens externes dans un nouvel ongletsur activé - Définir admin - paramètres - préférences utilisateur -
ouvrir par défaut les autres liens externes dans un nouvel ongletsur désactivé - Obtenir une popup « Souhaitez-vous appliquer ce changement historiquement ? Cela modifiera les préférences de X utilisateurs existants. » et choisir Oui
- Pour tous les utilisateurs, « ouvrir les liens externes dans un nouvel onglet » est maintenant désactivé
Jusqu’ici tout va bien, mais :
- Définir admin - paramètres - préférences utilisateur -
ouvrir par défaut les autres liens externes dans un nouvel ongletsur activé - Obtenir aucune popup et il est toujours désactivé pour tout le monde.
Dernière étape attendue :
- Obtenir une popup « Souhaitez-vous appliquer ce changement historiquement ? Cela modifiera les préférences de X utilisateurs existants. » où choisir Oui l’activerait pour tout le monde
Cela s’applique à toutes les préférences utilisateur default_.
previous_value = SiteSetting.public_send(id) || "" if update_existing_users
qui définit previous_value à "" si le paramètre est false, et ensuite
UserOption.where(user_option => previous_value).update_all(attrs)
et
json[:user_count] = UserOption.where(user_option => previous_value).
ne fait rien.