Exemple de plugin avec un formulaire et une requête POST

Bonjour à tous !

Nous travaillons à débloquer le développement d’un plugin que nous réalisons ici sur Error "Unable to configure link to 'Auto Send Messages'. Ensure ad-blockers are disabled and try reloading the page."

Et nous aimerions vraiment avoir un exemple fonctionnel d’un plugin qui intègre une action de type soumission de formulaire. Notre plugin a deux aspects principaux :

  • quelques éléments de configuration
  • un formulaire dans lequel un utilisateur saisirait du texte, puis cliquerait sur « soumettre » pour le traiter

Donc, si quelqu’un connaît un plugin qui possède ces deux types de fonctionnalités, nous apprécierions grandement un lien afin que nous puissions examiner son fonctionnement.

Merci !

Pouvez-vous en dire plus sur ce que vous faites ? Que modifiez-vous avec le formulaire ? Cela peut-il être un composant de thème ? Ce que vous soumettez est-il à un point de terminaison existant ou à un point de terminaison que vous ajoutez ?

Voir Discourse toolkit to render forms

Ensuite, vous pouvez obtenir GitHub - discourse/all-the-plugins et faire un grep pour « <Form » mais vous pouvez également voir Code search results · GitHub comme décrit dans Discourse toolkit to render forms - #20 by david (bien que ceux-ci soient tous dans le cœur, pas dans les plugins)

Peut-être voir discourse-data-explorer/assets/javascripts/discourse/components/param-input-form.gjs at main · discourse/discourse-data-explorer · GitHub

2 « J'aime »

FormKit est assez nouveau.

Je n’ai même pas encore mis à jour le plugin Locations pour l’utiliser.

(Mais c’est certainement la bonne chose à utiliser si l’on recommence à zéro :+1:)

1 « J'aime »

C’est tellement vrai. C’est toujours ce que je recommanderais à quelqu’un qui écrit du nouveau code.

Je l’ai utilisé pour quelque chose de nouveau sur lequel je travaille. (Et vous pouvez me voir m’en plaindre beaucoup dans le sujet qui lui est consacré !)

2 « J'aime »

@pfaffman Nous voulons créer un formulaire simple qui demande à l’utilisateur quatre choses :

  1. Expéditeur
  2. Destinataire
  3. Sujet
  4. Corps

L’utilisateur remplira ces champs, puis cliquera sur un bouton pour déclencher un point de terminaison qui enverra l’e-mail.

Plus précisément, le formulaire comprendra les quatre éléments, et une fois que le bouton « Envoyer » sera cliqué, il appellera le point de terminaison pour envoyer le message.

Je ne suis pas sûr que ce soit exactement ce que vous recherchez, mais l’objectif principal est de permettre à un utilisateur administrateur de saisir du texte (l’objet et le corps de l’e-mail) et de cliquer sur un bouton pour l’envoyer à un utilisateur dans Discourse.

À l’avenir, nous aimerions étendre cela afin que l’utilisateur puisse déclencher plusieurs messages d’un expéditeur à plusieurs destinataires. Nous voulons manipuler des paramètres tels que le nombre total de messages et le délai entre chacun, pour contrôler le nombre de messages envoyés et leur espacement.

Peut-être revenir une étape en arrière et décrire le problème réel que vous essayez de résoudre.

Voulez-vous envoyer un e-mail direct (de sorte que le message n’existera pas dans Discourse), ou voulez-vous envoyer un message privé qui parvient à l’utilisateur (ce qui dans la plupart des cas générera une notification par e-mail).

Vous voulez changer l’expéditeur du message privé ? C’est la seule chose qui semble manquer dans l’interface de message privé existante, n’est-ce pas?

1 « J'aime »

Merci pour la clarification ! Pour donner un peu plus de contexte, nous travaillons avec une grande base d’utilisateurs et souhaitons re-engager les utilisateurs qui n’ont pas interagi avec notre application depuis un certain temps. L’objectif est d’envoyer un message privé (MP) à un grand nombre d’utilisateurs d’un expéditeur spécifique, avec un contrôle sur plusieurs paramètres :

  1. Expéditeur : L’administrateur précisera directement le nom d’utilisateur de l’expéditeur dans le formulaire.
  2. Objet & Contenu : L’administrateur peut personnaliser à la fois l’objet et le corps du MP.
  3. Contrôle du volume : Nous voulons contrôler le nombre de messages envoyés simultanément pour éviter de spammer les utilisateurs.
  4. Timing : La préoccupation principale est de s’assurer que nous pouvons contrôler la rapidité d’envoi des messages afin d’éviter de surcharger notre domaine email et d’être signalés comme spam. Nous devons pouvoir espacer l’envoi en définissant des délais entre chaque message (et email correspondant) pour empêcher le déclenchement des filtres anti-spam.

L’objectif final est d’inciter les utilisateurs à ouvrir le message privé (ce qui génèrera également une notification par email) et à revenir sur notre application.

Nous disposons déjà d’un script Ruby simple qui peut accomplir cette tâche et qui fonctionne parfaitement. Actuellement, nous le lançons manuellement en accédant à la VM via SSH, ce qui est un peu lourd. Ce que nous souhaitons maintenant, c’est adapter ce script en un plugin afin qu’un administrateur puisse le déclencher facilement via l’interface utilisateur, avec la possibilité d’entrer les paramètres (expéditeur, sujet, contenu, nombre de messages, délai entre eux, etc.) directement depuis l’interface d’administration.

Nous aimerions réaliser cela via une interface de plugin qui permette à l’administrateur de saisir facilement ces paramètres, de lancer le processus et de suivre l’avancement de l’envoi des messages.

1 « J'aime »

Ça fait beaucoup de pièces.

Je ferais probablement quelque chose comme avoir les utilisateurs dans un groupe et prévoir d’envoyer à tous les utilisateurs du groupe. Lorsqu’un message est envoyé, vous définiriez une valeur dans un user_custom_field et utiliseriez un sujet existant comme le texte et l’expéditeur du message. Un job s’exécuterait périodiquement et enverrait le nombre de messages que vous souhaitez. Je mettrais le groupe et la valeur du champ personnalisé dans les paramètres.

Ensuite, vous n’auriez pas besoin d’une interface ou de créer une nouvelle route ; vous pourriez simplement utiliser les paramètres existants. Et vous pourriez voir ce qui s’est passé en utilisant l’Explorateur de données, donc vous n’auriez pas besoin de développer une interface pour cela non plus.

Mais si vous souhaitez faire des champs que les gens saisissent dans l’UX, vous devriez consulter la balise Form dont j’ai déjà parlé.

1 « J'aime »