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 |
number
ounumber[]
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 |
string
Le titre du sujet. - message |
string
Le contenu du sujet. - notify |
number
Un nombre binaire entre 0 et 1. Permet de surveiller le sujet ou non. Par défaut,0
pour faux.
Sélectionner un sujet
Pour sélectionner un sujet, il suffit d'utiliser .topic(id)
.
- id |
number
ounumber[]
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 |
string
Le contenu du sujet. - notify |
number
Un nombre binaire entre 0 et 1. Permet de surveiller le sujet ou non. Par défaut,0
pour faux.
Verrouiller
.lock()
.
Déverrouiller
.unlock()
.
Déplacer
.move(id)
.
- id |
number
L'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 |
number
ounumber[]
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 |
string
Le 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 |
number
ounumber[]
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 |
string
Le titre du message privé. - message |
string
Le 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 |
boolean
Par 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 |
number
Un nombre binaire entre 0 et 1 déterminant si le système de réputation est activé sur le forum. Par défaut,0
pour faux.
Page
Objet relatif à la page consultée.
- anchor |
string
Selon l'ancre extraite depuis l'url de la page. - charset |
string
Devrait être "utf-8", utile pour l'encodage. - id |
number
Selon l'ID extrait depuis l'url de la page sans distinction du type de page. - number |
number
Selon la pagination extraite depuis l'url de la page. - type |
string
Extrait 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 |
string
ID temporaire de l'utilisateur. - name |
string
Pseudo complet de l'utilisateur. - id |
number
ID de l'utilisateur. - is_logged |
boolean
Si l'utilisateur est connecté. - is_guest |
boolean
Si l'utilisateur est un invité. - is_admin |
boolean
Si l'utilisateur est un administrateur. - is_mod |
boolean
Si l'utilisateur est un modérateur. Sera également true si l'utilisateur est un administrateur. - lang |
string
Langue de l'utilisateur. - notifications |
number
Aucune idée, encore........ à suivre. - avatar |
string
Valeur HTML de l'avatar de l'utilisateur. - avatar_link |
string
Adresse URL de l'image de l'avatar de l'utilisateur. - posts |
number
Nombre de messages postés par l'utilisateur. - privmsgs_count |
number
Nombre de messages privés envoyés par l'utilisateur. - group_color |
string
Code hexadécimal de la couleur de groupe de l'utilisateur. - points_count |
number
Nombre 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 |
object
S'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