forumactif

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

  1. 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é.
  2. 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 ou number[] 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 ou number[] 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 ou number[] 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 } = {}
)

Séparer au-delà

/**
  * 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 ou number[] 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 fonction callback(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