$value) { if (property_exists($this, $key)) { $this->$key = $value; } } } /** * Charger un incident par ID * @param int $id * @return self|null */ public static function load($id) { global $wpdb; $table_name = $wpdb->prefix . 'crvi_agenda_incident'; $incident = $wpdb->get_row($wpdb->prepare( "SELECT * FROM $table_name WHERE id = %d", $id )); if (!$incident) { return null; } return new self([ '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, ]); } /** * Créer un incident * @param array $data * @return int|WP_Error ID de l'incident créé ou erreur */ public static function create(array $data) { global $wpdb; $table_name = $wpdb->prefix . 'crvi_agenda_incident'; // Validation des champs requis if (empty($data['event_id'])) { return new \WP_Error('validation_error', 'L\'ID de l\'événement est requis', ['status' => 400]); } if (empty($data['beneficiaire_id'])) { return new \WP_Error('validation_error', 'L\'ID du bénéficiaire est requis', ['status' => 400]); } if (empty($data['resume_incident'])) { return new \WP_Error('validation_error', 'Le résumé de l\'incident est requis', ['status' => 400]); } // Préparer les données pour l'insertion $insert_data = [ 'beneficiaire_id' => (int) $data['beneficiaire_id'], 'event_id' => (int) $data['event_id'], 'resume_incident' => sanitize_text_field($data['resume_incident']), 'commentaire_incident' => isset($data['commentaire_incident']) ? sanitize_textarea_field($data['commentaire_incident']) : null, ]; // Insérer en base $result = $wpdb->insert( $table_name, $insert_data, [ '%d', // beneficiaire_id '%d', // event_id '%s', // resume_incident '%s', // commentaire_incident ] ); if ($result === false) { return new \WP_Error('database_error', 'Erreur lors de l\'insertion de l\'incident en base de données', ['status' => 500]); } return $wpdb->insert_id; } /** * Récupérer tous les incidents avec filtres optionnels * @param array $filters Filtres optionnels (event_id, beneficiaire_id) * @return array */ public static function get_all($filters = []) { global $wpdb; $table_name = $wpdb->prefix . 'crvi_agenda_incident'; $where_clauses = []; $where_values = []; // Construire les clauses WHERE selon les filtres if (!empty($filters['event_id'])) { $where_clauses[] = 'event_id = %d'; $where_values[] = (int) $filters['event_id']; } if (!empty($filters['beneficiaire_id'])) { $where_clauses[] = 'beneficiaire_id = %d'; $where_values[] = (int) $filters['beneficiaire_id']; } // Construire la requête $query = "SELECT * FROM $table_name"; if (!empty($where_clauses)) { $query .= ' WHERE ' . implode(' AND ', $where_clauses); } $query .= ' ORDER BY id DESC'; // Exécuter la requête if (!empty($where_values)) { $incidents = $wpdb->get_results($wpdb->prepare($query, $where_values)); } else { $incidents = $wpdb->get_results($query); } $result = []; foreach ($incidents as $incident) { $result[] = new self([ '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 $result; } /** * Récupérer tous les incidents pour un événement * @param int $event_id * @return array */ public static function get_by_event($event_id) { global $wpdb; $table_name = $wpdb->prefix . 'crvi_agenda_incident'; $incidents = $wpdb->get_results($wpdb->prepare( "SELECT * FROM $table_name WHERE event_id = %d ORDER BY id DESC", $event_id )); $result = []; foreach ($incidents as $incident) { $result[] = new self([ '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 $result; } /** * Récupérer tous les incidents pour un bénéficiaire * @param int $beneficiaire_id * @return array */ public static function get_by_beneficiaire($beneficiaire_id) { global $wpdb; $table_name = $wpdb->prefix . 'crvi_agenda_incident'; $incidents = $wpdb->get_results($wpdb->prepare( "SELECT * FROM $table_name WHERE beneficiaire_id = %d ORDER BY id DESC", $beneficiaire_id )); $result = []; foreach ($incidents as $incident) { $result[] = new self([ '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 $result; } }