Comment `educate_until_posts` interagit-il avec les récentes modifications de `check_education_message` ?

Suite à la discussion dans « Merci de votre contribution » : la fenêtre contextuelle dans les publications apparaît même après le dépassement de la limite ? :

J’ai une question concernant ce changement. J’ai l’impression de passer à côté de quelque chose ou de mal comprendre le fonctionnement attendu lors des tests.

Mon attente est que la bannière éducative apparaisse sur les premières publications, avec le nombre contrôlé par le paramètre du site educate_until_posts. Par défaut, cette valeur est de 2.

Pour les tests, je l’ai modifié à 5 simplement pour être plus prudent. Cependant, mon utilisateur de test n’a vu le message éducatif qu’une seule fois.

J’ai également examiné le code :

Comme je le comprends, la méthode exclut d’abord les messages privés et les utilisateurs qui ont déjà un enregistrement indiquant que le message éducatif a été affiché. Cette partie est logique pour moi.

Ensuite, elle détermine si l’utilisateur crée un sujet ou une réponse et calcule le nombre total de sujets/publications de l’utilisateur.

La partie suivante est ce qui me pose problème. Si le nombre total de publications est inférieur à la limite configurée, nous créons l’enregistrement qui empêche l’affichage à nouveau du message éducatif — puis nous affichons le message.

Qu’est-ce que je rate ici ?

Par exemple, si educate_until_posts est laissé à sa valeur par défaut de 2, je m’attendrais à ce que le message soit affiché pour les deux premières publications de l’utilisateur.

L’utilisateur commence à créer sa toute première publication. Ce n’est pas un MP, et il n’existe pas encore d’enregistrement UserHistory, donc le message est affiché — cela a du sens.

Mais pourquoi l’enregistrement UserHistory est-il créé immédiatement après ? Cela ne devrait-il pas empêcher le message d’être affiché à nouveau ?

Je m’attendrais plutôt à quelque chose comme ceci :

  count = @user.topic_count + @user.post_count


  if count >= SiteSetting.educate_until_posts
    UserHistory.create!(
      action: UserHistory.actions[:notified_about_composer_education],
      target_user_id: @user.id,
    )
  elsif count < SiteSetting.educate_until_posts
      return (

Mais si cela était réellement un problème, je suppose que les tests liés à ce paramètre auraient échoué. Depuis que la PR a été fusionnée, ils n’ont apparemment pas échoué.

Quelqu’un peut-il m’aider à comprendre ce que je néglige ici ?

5 « J'aime »

Wahou, quelle petite impasse ! Je pense que la confusion vient à juste titre du manque de mise à jour du nom du paramètre (educate_until_posts), car, à ma connaissance, dans PR#400074, il semble que l’intention soit que l’avis ne soit affiché qu’une seule fois, et plus jamais, quel que soit le nombre.

Ainsi, le paramètre ne signifie plus « afficher le message pour les N premiers messages », mais plutôt :

*« Afficher le message éducatif uniquement si le nombre de messages de l’utilisateur est déjà inférieur à ce seuil, et même dans ce cas, ne l’afficher qu’une seule fois. »

@Roman, ai-je raison de penser que nous devrions mettre à jour le libellé de ce paramètre ?

2 « J'aime »

La motivation principale de ce changement était d’empêcher le message éducatif de s’afficher encore et encore. Mais maintenant que j’ai vu ce sujet, je pense que j’ai peut-être un peu trop forcé le trait, car cela rend le paramètre quelque peu inutile si le message ne s’affiche qu’une seule fois.

Je vais y jeter un autre coup d’œil pour voir si je peux trouver un meilleur compromis. Je mettrai à jour ici dès que j’aurai trouvé une solution.

4 « J'aime »

J’ai intégré cette correction hier :

En supposant que vous soyez en dessous du seuil educate_until_posts, le message éducatif ne s’affichera qu’une seule fois au début de la saisie et ne réapparaîtra que si vous publiez un message ou actualisez la page.

2 « J'aime »