'GET', 'callback' => [self::class, 'get_all_incidents'], 'permission_callback' => [self::class, 'can_view'], ], [ 'methods' => 'POST', 'callback' => [self::class, 'create_incident'], 'permission_callback' => [self::class, 'can_view'], ], ]); \register_rest_route('crvi/v1', '/incidents/(?P\\d+)', [ [ 'methods' => 'GET', 'callback' => [self::class, 'get_incident'], 'permission_callback' => [self::class, 'can_view'], ], ]); \register_rest_route('crvi/v1', '/events/(?P\\d+)/incidents', [ [ 'methods' => 'GET', 'callback' => [self::class, 'get_incidents_by_event'], 'permission_callback' => [self::class, 'can_view'], ], ]); } /** * Récupérer tous les incidents * @param \WP_REST_Request $request * @return \WP_REST_Response|\WP_Error */ public static function get_all_incidents($request) { // Récupérer les paramètres de pagination $page = $request->get_param('page') ?? 1; $per_page = $request->get_param('per_page') ?? 20; $event_id = $request->get_param('event_id') ?? null; $beneficiaire_id = $request->get_param('beneficiaire_id') ?? null; // Construire les filtres $filters = []; if ($event_id) { $filters['event_id'] = (int) $event_id; } if ($beneficiaire_id) { $filters['beneficiaire_id'] = (int) $beneficiaire_id; } // Récupérer les incidents $incidents = CRVI_Incident_Model::get_all($filters); $result = []; foreach ($incidents as $incident) { $result[] = [ 'id' => $incident->id, 'beneficiaire_id' => $incident->beneficiaire_id, 'event_id' => $incident->event_id, 'resume_incident' => $incident->resume_incident, 'commentaire_incident' => $incident->commentaire_incident, 'created_at' => $incident->created_at ?? null, ]; } return Api_Helper::json_success($result); } /** * Créer un incident * @param \WP_REST_Request $request * @return \WP_REST_Response|\WP_Error */ public static function create_incident($request) { $data = $request->get_json_params(); // Validation des données if (empty($data['event_id'])) { return Api_Helper::json_error('L\'ID de l\'événement est requis', 400); } if (empty($data['beneficiaire_id'])) { return Api_Helper::json_error('L\'ID du bénéficiaire est requis', 400); } if (empty($data['resume_incident'])) { return Api_Helper::json_error('Le résumé de l\'incident est requis', 400); } // Vérifier que l'événement existe $event = \ESI_CRVI_AGENDA\models\CRVI_Event_Model::load((int) $data['event_id']); if (!$event) { return Api_Helper::json_error('Événement introuvable', 404); } // Vérifier que le bénéficiaire existe $beneficiaire = \ESI_CRVI_AGENDA\models\CRVI_Beneficiaire_Model::load((int) $data['beneficiaire_id']); if (!$beneficiaire) { return Api_Helper::json_error('Bénéficiaire introuvable', 404); } // Créer l'incident $result = CRVI_Incident_Model::create($data); if (is_wp_error($result)) { return Api_Helper::json_error($result->get_error_message(), $result->get_error_data()['status'] ?? 500); } // Charger l'incident créé pour le retourner $incident = CRVI_Incident_Model::load($result); return Api_Helper::json_success([ 'id' => $incident->id, 'beneficiaire_id' => $incident->beneficiaire_id, 'event_id' => $incident->event_id, 'resume_incident' => $incident->resume_incident, 'commentaire_incident' => $incident->commentaire_incident, 'message' => 'Incident créé avec succès' ]); } /** * Récupérer un incident par ID * @param \WP_REST_Request $request * @return \WP_REST_Response|\WP_Error */ public static function get_incident($request) { $id = (int) $request['id']; $incident = CRVI_Incident_Model::load($id); if (!$incident) { return Api_Helper::json_error('Incident introuvable', 404); } return Api_Helper::json_success([ 'id' => $incident->id, 'beneficiaire_id' => $incident->beneficiaire_id, 'event_id' => $incident->event_id, 'resume_incident' => $incident->resume_incident, 'commentaire_incident' => $incident->commentaire_incident, ]); } /** * Récupérer tous les incidents pour un événement * @param \WP_REST_Request $request * @return \WP_REST_Response|\WP_Error */ public static function get_incidents_by_event($request) { $event_id = (int) $request['event_id']; if (!$event_id) { return Api_Helper::json_error('ID de l\'événement requis', 400); } $incidents = CRVI_Incident_Model::get_by_event($event_id); $result = []; foreach ($incidents as $incident) { $result[] = [ 'id' => $incident->id, 'beneficiaire_id' => $incident->beneficiaire_id, 'event_id' => $incident->event_id, 'resume_incident' => $incident->resume_incident, 'commentaire_incident' => $incident->commentaire_incident, ]; } return Api_Helper::json_success($result); } /** * Vérifie si l'utilisateur peut voir les incidents * @return bool */ public static function can_view() { return current_user_can('read'); } }