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