Test API Users
Test de l'API : ../api/users.php
Envoi de la requête...
URL: ../api/users.php
Data: action=get_all
✅ Réponse reçue :
<?php
/**
* API pour la gestion des utilisateurs
* La Revenue Factory
*/
// Nettoyer le buffer de sortie et supprimer les erreurs
ob_clean();
error_reporting(0);
ini_set('display_errors', 0);
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
// Inclure les dépendances
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../classes/User.php';
// Fonction pour envoyer une réponse JSON
function sendResponse($success, $message, $data = null) {
// Nettoyer complètement le buffer de sortie
while (ob_get_level()) {
ob_end_clean();
}
// Démarrer un nouveau buffer propre
ob_start();
// Générer le JSON
$response = [
'success' => $success,
'message' => $message,
'data' => $data,
'timestamp' => date('Y-m-d H:i:s')
];
echo json_encode($response, JSON_UNESCAPED_UNICODE);
// Envoyer et terminer
ob_end_flush();
exit;
}
// Fonction pour valider et nettoyer les données
function sanitizeInput($data) {
return htmlspecialchars(strip_tags(trim($data)));
}
try {
// Connexion à la base de données
$pdo = new PDO(
"mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4",
DB_USER,
DB_PASS,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]
);
$userManager = new User($pdo);
// Vérifier la méthode HTTP
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
sendResponse(false, 'Méthode non autorisée');
}
// Récupérer l'action
$action = $_POST['action'] ?? '';
switch ($action) {
case 'create':
// Créer un nouvel utilisateur
$userData = [
'name' => sanitizeInput($_POST['user_name'] ?? ''),
'firstname' => sanitizeInput($_POST['user_firstname'] ?? ''),
'email' => sanitizeInput($_POST['user_mail'] ?? ''),
'profil' => sanitizeInput($_POST['user_profil'] ?? ''),
'niveau' => sanitizeInput($_POST['user_niveau'] ?? ''),
'actif' => (int)($_POST['user_actif'] ?? 1)
];
// Validation des données
$errors = $userManager->validateUserData($userData);
if (!empty($errors)) {
sendResponse(false, 'Données invalides: ' . implode(', ', $errors));
}
// Vérifier si l'email existe déjà
if ($userManager->emailExists($userData['email'])) {
sendResponse(false, 'Cet email est déjà utilisé par un autre utilisateur');
}
// Créer l'utilisateur
if ($userManager->createUser($userData)) {
sendResponse(true, 'Utilisateur créé avec succès', $userData);
} else {
sendResponse(false, 'Erreur lors de la création de l\'utilisateur');
}
break;
case 'update':
// Modifier un utilisateur existant
$userId = (int)($_POST['user_id'] ?? 0);
if (!$userId) {
sendResponse(false, 'ID utilisateur manquant');
}
// Vérifier que l'utilisateur existe
$existingUser = $userManager->getUserById($userId);
if (!$existingUser) {
sendResponse(false, 'Utilisateur introuvable');
}
$userData = [
'name' => sanitizeInput($_POST['user_name'] ?? ''),
'firstname' => sanitizeInput($_POST['user_firstname'] ?? ''),
'email' => sanitizeInput($_POST['user_mail'] ?? ''),
'profil' => sanitizeInput($_POST['user_profil'] ?? ''),
'niveau' => sanitizeInput($_POST['user_niveau'] ?? ''),
'actif' => (int)($_POST['user_actif'] ?? 1)
];
// Validation des données
$errors = $userManager->validateUserData($userData);
if (!empty($errors)) {
sendResponse(false, 'Données invalides: ' . implode(', ', $errors));
}
// Vérifier si l'email existe déjà (en excluant l'utilisateur actuel)
if ($userManager->emailExists($userData['email'], $userId)) {
sendResponse(false, 'Cet email est déjà utilisé par un autre utilisateur');
}
// Mettre à jour l'utilisateur
if ($userManager->updateUser($userId, $userData)) {
sendResponse(true, 'Utilisateur modifié avec succès', $userData);
} else {
sendResponse(false, 'Erreur lors de la modification de l\'utilisateur');
}
break;
case 'delete':
// Supprimer un utilisateur
$userId = (int)($_POST['user_id'] ?? 0);
if (!$userId) {
sendResponse(false, 'ID utilisateur manquant');
}
// Vérifier que l'utilisateur existe
$existingUser = $userManager->getUserById($userId);
if (!$existingUser) {
sendResponse(false, 'Utilisateur introuvable');
}
// Supprimer l'utilisateur
if ($userManager->deleteUser($userId)) {
sendResponse(true, 'Utilisateur supprimé avec succès');
} else {
sendResponse(false, 'Erreur lors de la suppression de l\'utilisateur');
}
break;
case 'toggle_status':
// Changer le statut actif/inactif
$userId = (int)($_POST['user_id'] ?? 0);
$currentStatus = (int)($_POST['current_status'] ?? 0);
if (!$userId) {
sendResponse(false, 'ID utilisateur manquant');
}
// Vérifier que l'utilisateur existe
$existingUser = $userManager->getUserById($userId);
if (!$existingUser) {
sendResponse(false, 'Utilisateur introuvable');
}
// Changer le statut
$newStatus = $currentStatus ? 0 : 1;
$success = $newStatus ? $userManager->activateUser($userId) : $userManager->deactivateUser($userId);
if ($success) {
$statusText = $newStatus ? 'activé' : 'désactivé';
sendResponse(true, "Utilisateur $statusText avec succès");
} else {
sendResponse(false, 'Erreur lors du changement de statut');
}
break;
case 'get':
// Récupérer un utilisateur par ID
$userId = (int)($_POST['user_id'] ?? 0);
if (!$userId) {
sendResponse(false, 'ID utilisateur manquant');
}
$user = $userManager->getUserById($userId);
if ($user) {
sendResponse(true, 'Utilisateur trouvé', $user);
} else {
sendResponse(false, 'Utilisateur introuvable');
}
break;
case 'search':
// Rechercher des utilisateurs
$searchTerm = sanitizeInput($_POST['search_term'] ?? '');
if (empty($searchTerm)) {
sendResponse(false, 'Terme de recherche manquant');
}
$results = $userManager->searchUsers($searchTerm);
sendResponse(true, count($results) . ' utilisateur(s) trouvé(s)', $results);
break;
case 'get_by_profil':
// Récupérer les utilisateurs par profil
$profil = sanitizeInput($_POST['profil'] ?? '');
if (empty($profil)) {
sendResponse(false, 'Profil manquant');
}
$users = $userManager->getUsersByProfil($profil);
sendResponse(true, count($users) . ' utilisateur(s) trouvé(s)', $users);
break;
case 'get_by_niveau':
// Récupérer les utilisateurs par niveau
$niveau = sanitizeInput($_POST['niveau'] ?? '');
if (empty($niveau)) {
sendResponse(false, 'Niveau manquant');
}
$users = $userManager->getUsersByNiveau($niveau);
sendResponse(true, count($users) . ' utilisateur(s) trouvé(s)', $users);
break;
case 'get_stats':
// Récupérer les statistiques
$stats = $userManager->getStats();
sendResponse(true, 'Statistiques récupérées', $stats);
break;
case 'get_all':
// Récupérer tous les utilisateurs
$activeOnly = isset($_POST['active_only']) && $_POST['active_only'] === '1';
$users = $userManager->getAllUsers($activeOnly);
sendResponse(true, count($users) . ' utilisateur(s) trouvé(s)', $users);
break;
case 'validate_email':
// Valider si un email est disponible
$email = sanitizeInput($_POST['email'] ?? '');
$excludeId = (int)($_POST['exclude_id'] ?? 0);
if (empty($email)) {
sendResponse(false, 'Email manquant');
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
sendResponse(false, 'Format d\'email invalide');
}
$exists = $userManager->emailExists($email, $excludeId ?: null);
if ($exists) {
sendResponse(false, 'Cet email est déjà utilisé');
} else {
sendResponse(true, 'Email disponible');
}
break;
default:
sendResponse(false, 'Action non reconnue: ' . $action);
}
} catch (PDOException $e) {
// Erreur de base de données
$errorMessage = (defined('APP_ENV') && APP_ENV === 'dev') ? $e->getMessage() : 'Erreur de base de données';
sendResponse(false, $errorMessage);
} catch (Exception $e) {
// Autres erreurs
$errorMessage = (defined('APP_ENV') && APP_ENV === 'dev') ? $e->getMessage() : 'Erreur serveur';
sendResponse(false, $errorMessage);
}
?>
❌ Erreur JSON : Syntax error
Informations de débogage
Répertoire actuel : /home/reallej/lrf/classes
Fichier API existe : OUI
Chemin absolu API : /home/reallej/lrf/api/users.php