En vous promenant sur Beamreactor, nous stockons votre IP 48h pour des raisons de sécurité.

Lecteur Markdown

features Documentation › FEATURES_DOCUMENTATION

FEATURES_DOCUMENTATION

BeamReactor — Module `features` (Todo List) #

Version : 3.5.4

Auteur : Treveur Bretaudière

Depuis : 2002

Dernière mise à jour : 2025-12-25

---

Présentation #

Le module `features` est le système de gestion des demandes de fonctionnalités et de rapports de bugs de BeamReactor. Il fonctionne comme une todo list interne avec suivi de priorité, modération, historique, et export.

Il repose sur trois fichiers :

| Fichier | Rôle |

|---|---|

| `features.php` | Logique principale : CRUD, affichage, recherche, export |

| `features_conf_inc.php` | Configuration du module (affichage, niveau d'accès, couleurs) |

| `features_moderation.json` | Déclaration pour le système de modération BeamReactor |

---

Prérequis #

  • Accès utilisateur de niveau `FEATURES_LEVEL_HIGHUSER` minimum.
  • Le module utilise les classes `Beamreactor\Database\SQL` et `Beamreactor\Sanitizer\Parser`.
  • Le fichier de locale correspondant doit être chargé via `getlocale('features')`.
  • Le système de templating BeamReactor (`frameheader` / `framefooter`) doit être actif.

---

Table de données #

Table : `feature_list`

| Champ | Description |

|---|---|

| `id` | Identifiant unique (auto-increment) |

| `nick` | Auteur de la demande |

| `feature` | Texte descriptif de la demande / du bug |

| `tstamp` | Date de création |

| `state` | État (index numérique mappé via `$dialstatelist`) |

| `type` | Type (index numérique mappé via `$dialtypelist`) |

| `severity` | Sévérité / priorité (0–9, utilisé pour la barre visuelle) |

| `mod_nick` | Modérateur ayant modifié l'entrée (`---` si aucun) |

| `mod_tstamp` | Date de la dernière modération |

---

Actions disponibles #

Le routage des actions se fait via un `match` sur le paramètre `feature` (POST ou GET).

| Action | Méthode | Niveau requis | Description |

|---|---|---|---|

| (défaut) | GET | `HIGHUSER` | Affiche la liste paginée |

| `add` / locale | POST | `HIGHUSER` | Affiche le formulaire d'ajout |

| `added` | POST | `HIGHUSER` | Traite l'ajout d'une entrée |

| `detail` | GET | `HIGHUSER` | Affiche le détail d'une entrée |

| `edit` | POST | Niveau > 1 | Affiche le formulaire d'édition |

| `edited` | POST | Niveau > 1 | Traite la modification |

| `done` | POST | `HIGHUSER` | Marque comme fait, archive dans `hist.txt`, supprime l'entrée |

| `remove` | POST | Niveau > 2 | Supprime définitivement une entrée |

| `search` / locale | POST | `HIGHUSER` | Recherche dans les entrées |

| `export` | GET | `HIGHUSER` | Exporte toutes les entrées en fichier texte brut |

| `stats` | — | — | Non implémenté (`die("Not ready yet")`) |

---

Pagination #

  • Items par page : 20 (fixe)
  • Paramètres GET : `page`, `sorting`, `tot`
  • Le total peut être passé via `$_REQUEST['tot']` ou est recalculé via `COUNT(*)`.

Tri #

| Valeur `sorting` | Ordre |

|---|---|

| `0`, `2` | Date décroissante |

| `-2` | Date croissante |

| `1` | Auteur A→Z |

| `-1` | Auteur Z→A |

| `4` | Sévérité décroissante |

| `-4` | Sévérité croissante |

---

Système de priorité visuelle #

Les entrées affichent une barre de progression colorée (vert → orange → rouge) représentant la sévérité.

En liste : la sévérité est mappée sur 5 niveaux (`$sev * 22.22%`), avec un décalage de +1 sur la valeur brute.

En détail : la sévérité est mappée sur 9 niveaux (`$sev * 11.11%`), sans décalage.

La barre utilise un dégradé CSS linéaire (`#22c55e` → `#f97316` → `#ef4444`) dans un conteneur arrondi avec ombre interne.

---

Export #

L'action `export` génère un fichier texte brut téléchargeable contenant toutes les entrées, formatées ainsi :

[2025-12-25 14:30] nick | état | type | !!!  | mod: mod_nick (date)
     → description (retour à la ligne à 100 caractères)

Le fichier est nommé `beamreactor-features-YYYY-MM-DD.txt`.

---

Archivage (Done) #

Quand une entrée est marquée comme terminée (`done`), le système :

1. Lit le texte de la demande depuis la base.

2. Ajoute une ligne horodatée dans `/var/hist.txt` (si le fichier existe).

3. Supprime l'entrée de la base.

---

Modération #

Le fichier `features_moderation.json` déclare le module auprès du système de modération centralisé de BeamReactor :

{
  "enabled": true,
  "table": "feature_list",
  "user_fields": ["nick", "mod_nick"],
  "content_fields": ["feature"],
  "date_field": "tstamp",
  "moddate_field": "mod_tstamp"
}

Cela permet au moteur de modération d'inspecter et d'agir sur les contenus de ce module de manière unifiée.

---

Configuration (`features_conf_inc.php`) #

| Variable | Valeur | Rôle |

|---|---|---|

| `$basedatadisplay` | `'yes'` | Active l'affichage des données de base |

| `$basedisplevel` | `BASE_LEVEL_HIGHUSER` | Niveau d'accès pour l'affichage |

| `$ftype` | `9` | Identifiant de type de module dans BeamReactor |

| `$barcolor` | Tableau de 6 couleurs hex | Palette de couleurs de sévérité (legacy, non utilisée dans le code actuel) |

---

Sécurité #

  • L'accès au module est protégé par `secure(FEATURES_LEVEL_HIGHUSER)`.
  • Les actions d'édition nécessitent `$_SESSION['user_level'] > 1`.
  • La suppression nécessite `$_SESSION['user_level'] > 2`.
  • Les entrées texte sont sanitisées via `Parser::sanitize()` avec une longueur maximale de 500 caractères et un minimum de 6 caractères.
  • Les requêtes SQL utilisent des requêtes préparées via `SQL::query()` et `SQL::queryFirst()`.
  • Le nom d'utilisateur est résolu côté serveur via `$_SESSION['last_name']`, pas via un input client.

---

Internationalisation #

Le module charge ses chaînes de traduction via `getlocale('features')`. Les variables globales suivantes sont utilisées :

  • `$dialfeatures` — Labels de l'interface (boutons, titres, messages)
  • `$dialstatelist` — Libellés des états
  • `$dialtypelist` — Libellés des types
  • `$dialseveritylist` — Libellés des niveaux de sévérité
  • `$dial` — Labels de pagination (précédent/suivant)

Les clés d'action (`addfeat`, `search`) sont localisées, ce qui permet au routage de fonctionner quelle que soit la langue active.

de en fr