Moderactor 1.0.0
Prenez note que ce plugin est en alpha pré-release. Vous pouvez quand même l'essayer et bidouiller sur un forum test en attendant, et bien sûr me partager vos retours.
Moderactor est un plugin pour ForumActif inspiré du travail d'Etana/Ea, permettant d'exécuter plusieurs actions de rédaction et de modération depuis un API Javascript dédiée.
Avant l'installation
Autoriser les formulaires ajax
- Il faut autoriser les formulaires non-officiels à poster sur votre forum. Pour ce faire, rien de compliqué : accédez au panneau d'administration et rendez vous dans la section
Général › Forum › Sécurité. - Assurez-vous que l'option "Interdire les formulaires non officiels à poster des messages et messages privés sur le forum" est bien réglée sur "Non" et sauvegardez vos changements.
Installer le plugin
Le plugin est compilé en un seul fichier et doit être installé en script externe. Ouvrez votre template overall_footer_end (fin du bas de page) et juste avant la fermeture de la balise </body>, insérez le code suivant :
<!-- Importation de Moderactor.js / lien temporaire -->
<script src="https://cdn.jsdelivr.net/npm/@poumon/moderactor@beta/dist/moderactor.js"></script>Enregistrez vos modifications et publiez votre template.
Principe
Moderactor est un outil donnant accès à de nombreuses actions propres à l'environnement de ForumActif. Toutes ces actions appellent la fonction principale Moderactor. Pour utiliser Moderactor, il faut appeler l'outil, sélectionner une ou des cibles, puis effectuer une action.
Toutes les actions retournent une Promise, il est donc très important de les utiliser dans une fonction asynchrone en complément avec l'opérateur await ou d'utiliser .then().
const data = {
// exemple
subject: "Titre de sujet",
message: "Contenu du nouveau sujet."
};
const newTopic = await Moderactor.forum(1).post(data);Permissions
Chaque action utilise les permissions et les droits de l'utilisateur qui les appelle. Si un simple membre ou un invité appuie sur un bouton qui devrait habituellement supprimer un sujet, l'action sera rejetée.
Sélectionner un forum
Pour sélectionner un forum, il suffit d'utiliser .forum(id).
- id |
numberounumber[]Le ou les identifiants du forum à sélectionner. Pour sélectionner plusieurs forums, il suffit d'utiliser un tableau.forum([1,2,3]).
Créer un nouveau sujet
.post(data). L'argument data est un objet contenant les clefs suivantes :
- subject |
stringLe titre du sujet. - message |
stringLe contenu du sujet. - notify |
numberUn nombre binaire entre 0 et 1. Permet de surveiller le sujet ou non. Par défaut,0pour faux.
Sélectionner un sujet
Pour sélectionner un sujet, il suffit d'utiliser .topic(id).
- id |
numberounumber[]Le ou les identifiants du sujet à sélectionner. Pour sélectionner plusieurs sujets, il suffit d'utiliser un tableau.topic([1,2,3]).
Poster une réponse sur le sujet
.post(data). L'argument data est un objet contenant les clefs suivantes :
- message |
stringLe contenu du sujet. - notify |
numberUn nombre binaire entre 0 et 1. Permet de surveiller le sujet ou non. Par défaut,0pour faux.
Verrouiller
.lock().
Déverrouiller
.unlock().
Déplacer
.move(id).
- id |
numberL'identifiant du forum de destination du déplacement.
Archiver
.trash(). Fonctionne uniquement sur une corbeille existe sur le forum.
Supprimer
.delete().
Sélectionner un post
Pour sélectionner un post, il suffit d'utiliser .post(id).
- id |
numberounumber[]Le ou les identifiants du post à sélectionner. Pour sélectionner plusieurs posts, il suffit d'utiliser un tableau.post([1,2,3]).
Modifier
.update(data). L'argument data est un objet contenant la clef suivante :
- message |
stringLe contenu de la réponse.
Supprimer
.delete().
Séparer
/**
* Sépare un ou plusieurs messages vers un nouveau sujet
* @param {string} newTitle - Le titre du nouveau sujet.
* @param {number} [newForumId] - Le forum cible où envoyer le nouveau sujet créé (sinon, forum courant).
* @param {number} [topicId] - Le topic source des posts extraits et séparés (sinon, topic déduit).
* @param {boolean} [beyond=false] - true = split beyond, false = split all
*/
.split(
newTitle,
{ newForumId = null, topicId = null, beyond = false } = {}
)/**
* Raccourci: split "au-delà" (beyond) des posts fournis.
* @param {string} newTitle - Le titre du nouveau sujet.
* @param {number} [newForumId] - Le forum cible où envoyer le nouveau sujet créé (sinon, forum courant).
* @param {number} [topicId] - Le topic source des posts extraits et séparés (sinon, topic déduit).
* @param {boolean} [beyond=true] - true = split beyond, false = split all
*/
.splitBeyond(
newTitle,
{ newForumId = null, topicId = null, beyond = true } = {}
)Sélectionner un utilisateur
Pour sélectionner un utilisateur, il suffit d'utiliser .user(id).
- id |
numberounumber[]Le ou les identifiants de ou des utilisateurs à sélectionner. Pour sélectionner plusieurs utilisateurs, il suffit d'utiliser un tableau.user([1,2,3]).
Envoyer un message privé
.pm(data). L'argument data est un objet contenant les clefs suivantes :
- subject |
stringLe titre du message privé. - message |
stringLe contenu du message privé.
Bannir
.ban()
Débannir
.unban()
Variables d'environnement
L'action globale Moderactor.env retourne une collection d'objets contenant de nombreuses informations utilitaires en fonction de la page ou de l'utilisateur connecté. Ces objets sont mis en cache à partir du moment où Moderactor.env est utilisé ou toute autre fonction de Moderactor est appelée.
Pour mettre le cache à jour et ajouter d'autres données aux variables d'environnement, il faudra appeler la fonction comme ceci : Moderactor.env(options).
Options
La fonction Moderactor.env(options) utilise les options suivantes :
- stats |
booleanPar défaut, false. Permet d'ajouter l'objet des stats décrit ci-dessous. - fetchExtra |
array[{url, callback}]Fetch une page grâce à l'url, puis retourne les données récupérées (json ou html) à la fonctioncallback(res). La fonction callback doit retourner un objet pour que les données soient ajoutées à l'objet des stats décrit ci-dessous.
Board
Objet relatif aux options globales du forum.
- tpl |
string - reputation_active |
numberUn nombre binaire entre 0 et 1 déterminant si le système de réputation est activé sur le forum. Par défaut,0pour faux.
Page
Objet relatif à la page consultée.
- anchor |
stringSelon l'ancre extraite depuis l'url de la page. - charset |
stringDevrait être "utf-8", utile pour l'encodage. - id |
numberSelon l'ID extrait depuis l'url de la page sans distinction du type de page. - number |
numberSelon la pagination extraite depuis l'url de la page. - type |
stringExtrait depuis l'url de la page. Peut être topic, "forum", "category", "profile" ou "". - url |
string
User
Objet relatif à l'utilisateur consultant la page.
- t_id |
stringID temporaire de l'utilisateur. - name |
stringPseudo complet de l'utilisateur. - id |
numberID de l'utilisateur. - is_logged |
booleanSi l'utilisateur est connecté. - is_guest |
booleanSi l'utilisateur est un invité. - is_admin |
booleanSi l'utilisateur est un administrateur. - is_mod |
booleanSi l'utilisateur est un modérateur. Sera également true si l'utilisateur est un administrateur. - lang |
stringLangue de l'utilisateur. - notifications |
numberAucune idée, encore........ à suivre. - avatar |
stringValeur HTML de l'avatar de l'utilisateur. - avatar_link |
stringAdresse URL de l'image de l'avatar de l'utilisateur. - posts |
numberNombre de messages postés par l'utilisateur. - privmsgs_count |
numberNombre de messages privés envoyés par l'utilisateur. - group_color |
stringCode hexadécimal de la couleur de groupe de l'utilisateur. - points_count |
numberNombre de points obtenu, si reputation_active est activé.
Schema
Objet formé depuis les scripts JSON-LD présents sur la page consultée.
- breadcrumbs |
object - discussion |
objectS'affiche uniquement sur un sujet.
Stats
Objet stats est plus complexe que les précédent et regroupe plusieurs autres statistiques d'un forum, parfois retrouvée selon la page consultée, parfois globales au forum.
Ce qu'il me reste à faire
- Ajouter d'autres options pour la création d'un sujet.
- Ajouter d'autres options pour la création et la modification d'un post (ex. jet de dé).
- Modifier le profil d'un utilisateur