Rôle : Fonctions utilitaires pour la gestion de l'authentification
Fonctions :
isUserAuthenticated()- Vérifie si l'utilisateur est connecté (vérifie les cookies)getCurrentUserId()- Récupère l'ID de l'utilisateur actuelgetCurrentUserPseudo()- Récupère le pseudo de l'utilisateur actuelrequireAuth($redirect = true)- Vérifie l'authentification et redirige vers login si nécessaire
Rôle : Connexion à la base de données MySQL
Configuration :
- Host:
localhost:3306 - Database:
notpad - User:
root - Charset:
utf8 - Retourne: Objet PDO
$con
Rôle : Authentifier un utilisateur via nom d'utilisateur et mot de passe
Méthode : POST
Paramètres (JSON) :
{
"nom": "string (pseudo utilisateur)",
"password": "string (mot de passe)"
}Réponse (JSON) :
{
"status": "success|error",
"message": "string",
"user_id": "string (si succès)",
"user_pseudo": "string (si succès)"
}Processus :
- Valide que le pseudo et le mot de passe sont fournis
- Cherche l'utilisateur dans la table
users - Vérifie le mot de passe avec
password_verify() - Crée des cookies
user_idetuser_pseudo(valides 30 jours) - Retourne les données utilisateur
Rôle : Déconnecter l'utilisateur
Processus :
- Supprime les cookies
user_idetuser_pseudo - Redirige vers
/Notepad+/login.php
Rôle : Créer une nouvelle note dans un dossier
Méthode : POST
Paramètres (JSON) :
{
"nom_note": "string (titre)",
"content_note": "string (contenu HTML Quill)",
"id_folder": "string (ID du dossier destination)"
}Réponse (JSON) :
{
"success": true|false,
"message": "string",
"id_note": "string (si succès)"
}Validations :
nom_noteetcontent_noterequisnom_notene doit pas être videid_folderdoit être spécifié
Base Données :
- Génère un ID unique :
note_+ 14 caractères hex - Insère dans table
note(id_note, nom_note, content_note, folder_note)
Rôle : Récupérer le contenu d'une note par son ID
Méthode : GET
Paramètres :
note_id(query string) - ID de la note
Réponse (JSON) :
{
"success": true|false,
"data": [{ id_note, nom_note, content_note, folder_note }]
}Limite : Retourne max 40 résultats (limit 40)
Rôle : Mettre à jour le contenu d'une note existante
Méthode : POST
Paramètres (JSON) :
{
"id_note": "string",
"content_note": "string (contenu HTML Quill)",
"content_text": "string (optionnel, texte brut)"
}Réponse (JSON) :
{
"success": true|false,
"message": "string",
"id_note": "string"
}Validations :
id_noteetcontent_noterequis- Vérifie que la note existe avant de mettre à jour
- Trim les espaces inutiles
Rôle : Créer un nouveau dossier
Méthode : POST
Paramètres (JSON) :
{
"nom_folder": "string (nom du dossier)",
"id_folder": "string (ID fourni par le frontend)"
}Réponse (JSON) :
{
"success": true|false,
"message": "string",
"id_folder": "string (si succès)"
}Validations :
nom_folderne doit pas être videid_folderdoit être fourni (ID généré au frontend)
Rôle : Récupérer toutes les notes d'un dossier
Méthode : GET
Paramètres :
folder_id(query string) - ID du dossier
Réponse (JSON) :
{
"success": true|false,
"data": [{ id_note, nom_note, content_note, folder_note }]
}Limite : Retourne max 40 notes
Rôle : Mettre à jour le nom d'un dossier
Méthode : POST
Paramètres (JSON) :
{
"nom_folder": "string (nouveau nom)",
"id_folder": "string (ID du dossier)"
}Réponse (JSON) :
{
"success": true|false,
"message": "string",
"id_folder": "string"
}Validations :
nom_folderetid_folderrequis- Les deux ne doivent pas être vides
Rôle : Créer une nouvelle roadmap avec ses nœuds et arêtes
Méthode : POST
Authentification : Requiert utilisateur connecté
Paramètres (JSON) :
{
"titre": "string (optionnel, défaut: 'Roadmap sans titre')",
"description": "string (optionnel)",
"nodes": [
{
"id": number,
"type": "pill|rect|circle|diamond|note",
"x": number,
"y": number,
"label": "string",
"description": "string",
"status": "planned|in_progress|done|blocked",
"color": "blue|teal|amber|red|green|gray",
"tags": "string",
"date": "string"
}
],
"edges": [
{
"id": number,
"from": number (nodeId),
"to": number (nodeId),
"label": "string",
"style": "solid|dashed"
}
]
}Réponse (JSON) :
{
"success": true|false,
"message": "string",
"nodesCount": number,
"edgesCount": number,
"userId": "string",
"roadmapId": number
}Processus :
- Vérifie l'authentification
- Convertit nodes et edges en JSON
- Insère dans table
roadmapavec timestamp - Retourne le nombre de nœuds/arêtes créés
Rôle : Récupérer une roadmap spécifique ou la plus récente de l'utilisateur
Méthode : GET
Authentification : Requiert utilisateur connecté
Paramètres :
id(query string, optionnel) - ID de la roadmap
Réponse (JSON) :
{
"success": true|false,
"message": "string",
"nodes": [],
"edges": [],
"count": number,
"roadmapId": number,
"titre": "string",
"description": "string",
"dateCreation": "datetime"
}Logique :
- Si
idfourni : récupère la roadmap avec cet ID - Sinon : récupère la plus récente de l'utilisateur (ORDER BY date_creation DESC LIMIT 1)
Rôle : Récupérer TOUTES les roadmaps de l'utilisateur connecté
Méthode : GET
Authentification : Requiert utilisateur connecté
Réponse (JSON) :
{
"success": true|false,
"message": "string",
"roadmaps": [
{
"id": number,
"titre": "string",
"description": "string",
"nodes": "string (JSON)",
"edges": "string (JSON)",
"date_creation": "datetime",
"date_mod": "datetime"
}
],
"count": number
}Tri : ORDER BY date_creation DESC (les plus récentes en premier)
Rôle : Mettre à jour une roadmap existante (nodes, edges, titre, description)
Méthode : POST
Authentification : Requiert utilisateur connecté + propriétaire de la roadmap
Paramètres (JSON) :
{
"id": number (ID de la roadmap),
"titre": "string (optionnel)",
"description": "string (optionnel)",
"nodes": [],
"edges": []
}Réponse (JSON) :
{
"success": true|false,
"message": "string",
"nodesCount": number,
"edgesCount": number
}Processus :
- Vérifie l'authentification
- Vérifie que l'utilisateur possède la roadmap
- Convertit nodes et edges en JSON
- Met à jour les champs fournis (dynamique)
- Met à jour
date_modau timestamp actuel
Rôle : Supprimer une roadmap après confirmation
Méthode : POST
Authentification : Requiert utilisateur connecté + propriétaire de la roadmap
Paramètres (JSON) :
{
"id": number (ID de la roadmap)
}Réponse (JSON) :
{
"success": true|false,
"message": "string",
"roadmapId": number
}Sécurité :
- Vérifie que l'utilisateur est propriétaire (id_uti)
- Retourne erreur 403 si non autorisé
Rôle : Rechercher des notes ET dossiers par mot-clé
Méthode : GET
Paramètres :
query(query string) - Terme de recherche
Réponse (JSON) :
{
"success": true|false,
"data": {
"notes": [],
"folders": []
}
}Processus :
- Cherche dans
note.nom_noteavec LIKE %query% - Cherche dans
folder.nom_folderavec LIKE %query% - Retourne max 40 résultats pour chaque type
Rôle : Copier ou déplacer (couper) des notes vers un autre dossier
Méthode : POST
Paramètres (JSON) :
{
"note_ids": ["note_id1", "note_id2"],
"target_folder_id": "string",
"is_cut": true|false
}Réponse (JSON) :
{
"success": true|false,
"message": "string",
"success_count": number,
"error_count": number
}Logique :
- Si
is_cut: true: UPDATE folder_note pour chaque note - Si
is_cut: false: INSERT nouvelle note avec ID unique copié
Rôle : Supprimer toutes les notes (probablement pour reset/nettoyage)
Rôle : Nettoie l'URL et charge la section appropriée selon l'hash
Utilisation : Appelée au chargement et lors de changements d'URL
Rôle : Affiche une page d'erreur 404 ou erreur générale
Rôle : Affiche le dashboard principal (vue d'accueil)
Rôle : Affiche la section des notes (liste des notes)
Rôle : Affiche la section "Programme"
Rôle : Affiche la section des catégories
Rôle : Affiche les paramètres de l'utilisateur
Rôle : Affiche la section des roadmaps
Rôle : Gère la mise en page responsive (mobile/desktop) et adapte l'interface
Rôle : Ouvre une note pour la lire/éditer
Paramètres :
id- ID de la note (note_XXXX)folder_Id- ID du dossier parent
Processus :
- Appelle
/api/open_note.php?note_id=id - Charge le contenu dans Quill Editor
- Affiche un preview côté droit
- Active le mode édition
Rôle : Ferme la note actuelle et retourne à la liste
Rôle : Affiche un aperçu du rendu HTML de la note dans le panneau droit
Rôle : Affiche/masque le panneau de preview côté droit
Rôle : Charge le contenu HTML d'une note dans l'éditeur Quill
Rôle : Bascule l'interface en mode édition (cache preview, active Quill)
Rôle : Met à jour les statistiques affichées en bas du preview (caractères, mots, etc.)
Rôle : Récupère le contenu HTML et texte brut de Quill pour sauvegarde en DB
Retour : { html, text }
Rôle : Sauvegarde le contenu actuel en DB
Appelle : /api/update_note.php via POST
Rôle : Actualise l'affichage de la note après une modification
Rôle : Met à jour les statistiques globales (nombre de notes, mots, caractères)
Rôle : Ouvre le modal pour créer une nouvelle note
Rôle : Ferme le modal de création de note
Rôle : Soumet la création d'une nouvelle note
Appelle : /api/create_note.php
Rôle : Ouvre un dossier et affiche ses notes
Paramètres :
folderId- ID du dossier
Appelle : /api/folder_api.php?folder_id=folderId
Rôle : Ferme un dossier (le masque dans l'arborescence)
Rôle : Génère un ID unique pour un nouveau dossier
Format : folder_ + 14 caractères hex
Rôle : Ouvre le modal pour créer un nouveau dossier
Rôle : Ferme le modal de création de dossier
Rôle : Soumet la création d'un nouveau dossier
Appelle : /api/create_folder.php
Rôle : Ouvre le modal pour renommer un dossier
Rôle : Ferme le modal de mise à jour du dossier
Rôle : Prépare les données pour la mise à jour d'un dossier
Rôle : Soumet la mise à jour du nom du dossier
Appelle : /api/update_folder.php
Rôle : Gère la sélection/déselection des dossiers
Rôle : Supprime un dossier (après confirmation)
Rôle : Gère la sélection des notes
Rôle : Désélectionne tous les dossiers sélectionnés
Rôle : Désélectionne toutes les notes sélectionnées
Rôle : Copie les notes sélectionnées dans un dossier
Stocke : { selectedNotes, isCut: false }
Rôle : Coupe les notes sélectionnées pour les déplacer
Stocke : { selectedNotes, isCut: true }
Rôle : Colle les notes copié vers le dossier actuel
Appelle : /api/paste_notes.php
Rôle : Supprime une note après confirmation
Rôle : Effectue une recherche globale dans notes et dossiers
Appelle : /api/search.php?query=param
Rôle : Affiche un modal de confirmation avant suppression
Paramètres :
type- Type d'élément ("note" ou "folder")itemName- Nom de l'élément à supprimer
Rôle : Ferme le modal de confirmation
Rôle : Confirme et exécute la suppression
Rôle : Supprime l'élément sélectionné (routing vers deleteNote ou deleteFolder)
Rôle : Charge TOUTES les roadmaps de l'utilisateur depuis la DB
Appelle : /api/get_roadmaps.php
Retour : Tableaux de roadmaps
Rôle : Affiche les roadmaps sous forme de cartes (cards) dans une grille
Affiche pour chaque : titre, description, nombre de nœuds/arêtes, date de création
Rôle : Charge une roadmap spécifique par son ID et l'initialise dans l'éditeur
Appelle : /api/get_roadmap.php?id=roadmapId
Rôle : Crée une nouvelle roadmap vierge
Processus :
- Reset nodes et edges
- Affiche l'éditeur (cache la liste)
- Demande le titre et description via modals
Rôle : Enregistre une nouvelle roadmap en DB
Appelle : /api/create_roadmap.php
Rôle : Charge une roadmap existante pour l'éditer
Processus :
- Appelle
loadRoadmapFromDB() - Affiche l'éditeur
- Initialise le canvas avec les nœuds/arêtes
Rôle : Sauvegarde les modifications d'une roadmap existante
Appelle : /api/update_roadmap.php
Rôle : Supprime une roadmap après confirmation
Appelle : /api/delete_roadmap.php
Rôle : Affiche la vue liste de toutes les roadmaps
Rôle : Affiche la vue éditeur de roadmap
Rôle : Re-render du canvas avec les nœuds et arêtes actuels
Rôle : Met à jour le panneau de propriétés du nœud sélectionné
Rôle : Génère une aperçu visuelle complète de la roadmap (pv-stage)
Crée :
- SVG pour les arêtes avec flèches
- HTML pour les nœuds (cartes) avec styling
- Dimensions adaptées au contenu
Rôle : Affiche l'aperçu
Rôle : Ferme l'aperçu
Rôle : Gère le clic sur un nœud (sélection, déplacement)
Rôle : Gère le clic sur une arête (sélection + édition)
Rôle : Démarre le drag-and-drop depuis la palette (palette → canvas)
Paramètres :
shape- Type de forme ("pill", "rect", "circle", "diamond", "note")
Rôle : Ajoute un nouveau nœud au canvas
Paramètres :
type- Type du nœudx,y- Coordonnéesextra- Propriétés optionnelles
Rôle : Change le mode du canvas ("select", "connect", "delete")
Rôle : Définit la couleur par défaut pour les nouveaux nœuds
Rôle : Set Property - Modifie une propriété du nœud sélectionné
Paramètres :
k- Clé de propriété (label, color, status, etc.)v- Nouvelles valeur
Rôle : Set Edge Property - Modifie une propriété de l'arête sélectionnée
Rôle : Supprime l'élément sélectionné (nœud ou arête)
Rôle : Construit un document SVG complet de la roadmap
Crée :
- Background blanc
- Marker de flèches SVG
- Toutes les arêtes avec connecteurs
- Tous les nœuds avec styling (couleurs, texte, badges)
- Ombres et détails visuels
Retour : { svg, W, H } - Élément SVG + dimensions
Rôle : Helper pour ajouter un élément <text> SVG avec styling
Rôle : Tronque un texte avec "…" s'il dépasse n caractères (pour SVG)
Rôle : Exporte la roadmap en fichier SVG avec styles du preview
Processus :
- Si html2canvas disponible : capture le preview + convertit en PNG embedé
- Sinon : fallback sur buildExportSVG()
- Télécharge le fichier
roadmap.svg
Rôle : Fallback SVG sans html2canvas
Utilise : buildExportSVG() directement
Rôle : Exporte la roadmap en fichier PNG avec styles du preview
Processus :
- Si html2canvas disponible : capture le preview détectement
- Sinon : fallback sur canvas drawing
- Télécharge le fichier
roadmap.png
Rôle : Fallback PNG sans html2canvas
Processus :
- Convertit SVG en image
- Dessine sur canvas (scale 2x)
- Exporte en PNG
Rôle : Helper pour dessiner directement sur un canvas 2D
Dessine :
- Toutes les arêtes (lignes)
- Toutes les cartes (rectangles + texte)
Récupère styles des éléments DOM
Rôle : Convertit un canvas en Blob PNG et déclenche le téléchargement
Rôle : Calcule la hauteur d'une carte (nœud) basée sur son contenu
Rôle : Retourne la coordonnée X du centre d'un nœud
Rôle : Retourne la coordonnée Y du centre d'un nœud
Rôle : Retourne le centre (x, y) d'un nœud : { x, y }
Rôle : Calcule les points d'entrée/sortie entre deux nœuds pour les arêtes
Rôle : Convertit les coordonnées souris en coordonnées canvas SVG
Retour : { x, y } relatives au canvas
Rôle : Tronque un texte avec "…" s'il dépasse n caractères
Rôle : Variant SVG de trunc()
Rôle : Échappe les caractères HTML spéciaux (&, <, >, ")
Rôle : Génère l'HTML d'un nœud pour l'affichage en preview
Rôle : Génère l'HTML d'une arête pour l'affichage en preview
Rôle : Aligne les éléments sélectionnés en ligne (horizontalement)
Rôle : Aligne les éléments sélectionnés en grille
Rôle : Applique les préférences d'affichage de l'utilisateur (thème, etc.)
Rôle : Récupère une préférence utilisateur stockée
Rôle : Bascule entre onglets de l'interface
Rôle : Vide complètement la roadmap (nodes=[], edges=[])
Rôle : Déconnecte l'utilisateur
Appelle : /api/logout.php
{
id: number, // ID unique
type: "pill|rect|circle|diamond|note",
x: number, // Position X
y: number, // Position Y
label: "string", // Titre/Nom
description: "string", // Description optionnelle
status: "planned|in_progress|done|blocked",
color: "blue|teal|amber|red|green|gray",
tags: "string", // Tags séparés par virgules
date: "YYYY-MM-DD" // Date optionnelle
}{
id: number,
from: number, // ID du nœud source
to: number, // ID du nœud destination
label: "string", // Label de la relation
style: "solid|dashed" // Style de la ligne
}{
id_note: "note_XXXXXXXXXXXXXXXX",
nom_note: "string",
content_note: "string (HTML Quill)",
folder_note: "folder_XXXXXXXXXXXXXXXX"
}{
id_folder: "folder_XXXXXXXXXXXXXXXX",
nom_folder: "string"
}{
id: number,
titre: "string",
description: "string",
nodes: "JSON string",
edges: "JSON string",
date_creation: "datetime",
date_mod: "datetime",
id_uti: "user_id"
}{
id_uti: "string",
pseudo: "string",
password: "string (hashed)",
email: "string"
}{
blue: { f: "#dbeafe", s: "#3b82f6", t: "#1e3a8a" },
teal: { f: "#ccfbf1", s: "#14b8a6", t: "#134e4a" },
amber: { f: "#fef3c7", s: "#f59e0b", t: "#78350f" },
red: { f: "#fee2e2", s: "#ef4444", t: "#7f1d1d" },
green: { f: "#dcfce7", s: "#22c55e", t: "#064e3b" },
gray: { f: "#f3f4f6", s: "#6b7280", t: "#1f2937" }
}f: fill (fond)s: stroke (bordure)t: text (texte)
{
planned: "Planifié",
in_progress: "En cours",
done: "Fait",
blocked: "Bloqué"
}{
pill: { w: 200, h: 48 },
rect: { w: 200, h: "dynamic" },
circle: { w: 64, h: 64 },
diamond: { w: 130, h: 130 },
note: { w: 200, h: "dynamic" }
}- Utilisateur clique "Nouvelle Roadmap"
createNewRoadmap()demande titre + description via modalcreateRoadmap()appelle/api/create_roadmap.php- Canvas s'affiche vierge
- Utilisateur ajoute nœuds via drag-drop palette
- Utilisateur crée arêtes en mode "connect"
saveRoadmapToDB()sauvegarde via/api/update_roadmap.php
- Utilisateur clique sur une roadmap dans la liste
editRoadmap(id)appelle/api/get_roadmap.php- Nœuds et arêtes sont parsés depuis JSON
- Canvas affiche la roadmap
- Modification des propriétés via panneau droit
saveRoadmapToDB()sauvegarde les changements
- Utilisateur clique "Aperçu"
openPreview()affiche le rendu complet en plein écran- Utilisateur clique "SVG" ou "PNG"
doExportSVG()oudoExportPNG()utilise html2canvas- Fichier est généré et téléchargé
Dernière mise à jour : 2026-04-01