Comment créer un filtre de sujet basé sur le groupe d'utilisateurs actuel et l'emplacement du sujet

Bonjour,

Je travaille sur un plugin qui filtre tous les sujets en fonction de l’endroit où le sujet a été publié et du groupe auquel appartient l’utilisateur qui consulte le sujet. Le cas d’usage ici est d’avoir une équipe de support dans différents pays qui gère les questions provenant de leurs propres régions.

Je suis un nouveau créateur de plugins Discourse et j’apprends encore comment faire cela. La localisation des sujets sera gérée par le plugin Locations ici : Locations Plugin 🌍

Je vais ajouter les utilisateurs qui doivent bénéficier de cette vue filtrée à un groupe nommé quelque chose comme NA_queue ou EU_queue.

Le plugin vérifiera si l’utilisateur est connecté et si un groupe principal est défini. Si c’est le cas, il filtrera tous les sujets pour qu’ils correspondent à la file d’attente à laquelle l’utilisateur actuel appartient.

Je pense que cela pourrait être réalisé avec quelque chose de similaire au code suivant :
after_initialize do
require_dependency ‘topic_query’

  # Si connecté et avec un groupe principal défini

  # Nécessite d'obtenir le groupe principal de l'utilisateur
  # Nécessite d'obtenir la localisation du sujet

  TopicQuery.add_custom_filter(:location) do |results, topic_query|
    filter = "REQUÊTE SQL ICI"
    results = results.joins("{filter}")

    results
  end

Est-ce une bonne approche pour résoudre mon problème ?
Aussi, quelqu’un a-t-il des suggestions sur ce que serait la requête SQL ou sur la manière d’obtenir ces deux informations commentées ?

Je n’ai pas les autorisations pour mettre à jour ma question, alors je vais simplement poster ceci ici. Mise à jour :

Je me perds dans la manière de transmettre l’utilisateur actuel depuis le JavaScript côté navigateur vers mon code s’exécutant côté serveur. Il existe probablement un guide qui explique cela, mais je ne l’ai pas encore trouvé :frowning:

Le code suivant fonctionne très bien comme filtre sur la localisation des publications :

after_initialize do

  # Obtient l'utilisateur actuel transmis d'une manière ou d'une autre depuis le côté client
  def self.filter_on_user

    require_dependency 'topic_query'

    # Si l'utilisateur actuel possède un groupe principal, définir le code pays
    # Pour l'instant, supposons que le code pays soit US pour les États-Unis
    countrycode = "us" 

    # Filtre sur ce code pays pour toutes les requêtes de sujets sur le site pour cet utilisateur.
    TopicQuery.add_custom_filter(:location) do |results, topic_query|

      results = results.joins("JOIN topic_custom_fields tc ON
                               topics.id = tc.topic_id AND
                               tc.name = 'location' AND
                               tc.value LIKE '%countrycode\":\"#{countrycode}%'")
      results
    end
  end

  filter_on_user

end