diff --git a/app/controllers/Beneficiaire_Controller.php b/app/controllers/Beneficiaire_Controller.php index f07ff13..f339663 100644 --- a/app/controllers/Beneficiaire_Controller.php +++ b/app/controllers/Beneficiaire_Controller.php @@ -79,6 +79,15 @@ class CRVI_Beneficiaire_Controller { ], ]); + // Endpoint pour rechercher des bénéficiaires par nom/prénom + register_rest_route('crvi/v1', '/beneficiaires/search', [ + [ + 'methods' => 'GET', + 'callback' => [self::class, 'search_beneficiaires'], + 'permission_callback' => '__return_true', + ], + ]); + register_rest_route('crvi/v1', '/beneficiaires/(?P\\d+)', [ [ 'methods' => 'GET', @@ -122,6 +131,61 @@ class CRVI_Beneficiaire_Controller { return Api_Helper::json_success($items); } + /** + * Recherche de bénéficiaires par nom ou prénom + * GET /wp-json/crvi/v1/beneficiaires/search?search=durand + */ + public static function search_beneficiaires($request) { + $search = $request->get_param('search'); + + if (empty($search) || strlen($search) < 3) { + return Api_Helper::json_success([]); + } + + // Rechercher les bénéficiaires par nom ou prénom + $args = [ + 'post_type' => 'beneficiaire', + 'posts_per_page' => 20, + 'post_status' => 'publish', + 'meta_query' => [ + 'relation' => 'OR', + [ + 'key' => 'nom', + 'value' => $search, + 'compare' => 'LIKE' + ], + [ + 'key' => 'prenom', + 'value' => $search, + 'compare' => 'LIKE' + ] + ] + ]; + + $query = new \WP_Query($args); + $results = []; + + if ($query->have_posts()) { + while ($query->have_posts()) { + $query->the_post(); + $post_id = get_the_ID(); + + $nom = get_post_meta($post_id, 'nom', true); + $prenom = get_post_meta($post_id, 'prenom', true); + + $results[] = [ + 'id' => $post_id, + 'nom' => $nom, + 'prenom' => $prenom, + 'nom_complet' => trim($prenom . ' ' . $nom) + ]; + } + wp_reset_postdata(); + } + + return Api_Helper::json_success($results); + } + public static function get_item($request) { $id = (int) $request['id']; $item = CRVI_Beneficiaire_Model::load($id); diff --git a/assets/js/modules/agenda-modal.js b/assets/js/modules/agenda-modal.js index de8551c..3b128d7 100644 --- a/assets/js/modules/agenda-modal.js +++ b/assets/js/modules/agenda-modal.js @@ -558,7 +558,7 @@ export function openCheckPresenceModal(eventData) { const row = document.createElement('tr'); row.innerHTML = ` - +