Badge Discourse-Math

Quelqu’un peut-il imaginer un moyen d’accorder automatiquement un badge personnalisé pour un post qui affiche une équation grâce au plugin discourse-math ?

Je ne sais pas par où commencer.

5 « J'aime »

Bonjour @agf1997,

Je suis d’accord : le plugin mathématique de Discourse est bien conçu et constitue un excellent ajout pour un site.

Une approche consisterait à payer un développeur de plugins Discourse pour modifier le plugin mathématique afin qu’il mette à jour un champ personnalisé dans la base de données lorsqu’un membre du forum l’utilise.

Ensuite, vous pourrez créer une requête de base de données simple (dans la zone d’administration des badges) pour attribuer des badges.

J’espère que cela vous aidera.

3 « J'aime »

Ce n’est certainement pas une fonctionnalité critique. Je cherchais simplement un moyen simple de mettre en avant les personnes utilisant la fonction de composition mathématique afin d’encourager les autres à l’utiliser également.

1 « J'aime »

Bonjour @agf1997

Comme je l’ai mentionné, vous aurez besoin d’un code de plugin pour cela.

Cela indique que vous avez deux choix :

  1. Modifier ou étendre le plugin mathématique vous-même
  2. Engager quelqu’un pour modifier ou étendre le plugin mathématique pour vous

Quelle que soit la direction que vous déciderez de prendre, vous devez modifier ou étendre le plugin mathématique pour mettre à jour un champ personnalisé dans la base de données lorsqu’un membre du forum utilise le plugin.

J’espère que cela vous aidera.

2 « J'aime »

Oui, vous pouvez attribuer des badges pour les messages Math réussis sans avoir à modifier le plugin.

Tout d’abord, vous devrez activer Badge SQL ne peut plus être modifié par défaut sur votre site.

Ensuite, créez un nouveau badge qui se déclenche avec la requête suivante :

SELECT user_id, MIN(id) AS post_id, current_timestamp AS granted_at 
FROM badge_posts
WHERE cooked LIKE '%<span class="math">%' AND (:backfill OR id IN (:post_ids) )
GROUP BY user_id
7 « J'aime »

Salut @Falco,

C’est une requête de badge vraiment sympa.

Question :

Aurais-tu une liste de tous les :symboles Discourse qui peuvent être utilisés dans une requête de badge pour aider à déclencher ?

La raison de ma question est que j’ai vu que tu as utilisé :backfill et :post_id, et quand je consulte ce lien, je vois d’autres symboles Ruby utilisés :

Existe-t-il une référence concise des symboles Ruby Discourse utilisables dans une requête de badge ?

J’ai trouvé ceci, lié aux déclencheurs de badge (après ton message ci-dessus), qui était très utile :

Dans cet article Discourse, les helpers de déclenchement suivants sont mentionnés :

  • :user_ids
  • :post_ids
  • :backfill

Ces trois-là sont-ils « tous ceux qu’il y a » ?

Merci beaucoup pour ton aide !

3 « J'aime »

@Falco Super ! Une petite question .. cela devrait-il fonctionner pour les publications précédentes ? Lorsque je clique sur “Aperçu des badges attribués”, j’obtiens “Aucun badge à attribuer.”

Cliquez sur “Aperçu avec le plan de requête” me donne

GroupAggregate  (coût=2021,68..2021,70 lignes=1 largeur=16)
  Clé de regroupement : p.user_id
  ->  Tri  (coût=2021,68..2021,68 lignes=1 largeur=8)
        Clé de tri : p.user_id
        ->  Boucle imbriquée  (coût=0,28..2021,67 lignes=1 largeur=8)
              Filtre de jointure : (t.category_id = c.id)
              ->  Boucle imbriquée  (coût=0,28..2017,97 lignes=1 largeur=12)
                    ->  Balayage séquentiel sur posts p  (coût=0,00..2009,66 lignes=1 largeur=12)
                          Filtre : ((deleted_at IS NULL) AND (cooked ~~ '%<span class="math">%'::text) AND (post_type = ANY ('{1,2,3}'::integer[])))
                    ->  Balayage d'index utilisant topics_pkey sur topics t  (coût=0,28..8,30 lignes=1 largeur=8)
                          Condition d'index : (id = p.topic_id)
                          Filtre : ((deleted_at IS NULL) AND visible)
              ->  Balayage séquentiel sur categories c  (coût=0,00..3,35 lignes=28 largeur=4)
                    Filtre : (allow_badges AND (NOT read_restricted))