diff --git a/app/controllers/Plugin.php b/app/controllers/Plugin.php index c8d836e..124c0a7 100644 --- a/app/controllers/Plugin.php +++ b/app/controllers/Plugin.php @@ -173,6 +173,8 @@ class CRVI_Plugin { add_action('admin_notices', [self::class, 'display_intervenant_conflicts_notice']); // Hook pour vider le cache via paramètre URL add_action('admin_init', [self::class, 'handle_clear_cache_request']); + // Redirection des utilisateurs non connectés depuis les pages intervenant + add_action('template_redirect', [self::class, 'redirect_non_logged_from_intervenant_pages']); } /** @@ -282,6 +284,85 @@ class CRVI_Plugin { public static function load_filters() { /* add_filter('rest_endpoints', [self::class, 'register_routes']); */ add_filter('wp_script_attributes', [self::class, 'custom_script_tag'], 10, 2); + // Redirection des intervenants après connexion vers leur espace + add_filter('login_redirect', [self::class, 'redirect_intervenant_after_login'], 10, 3); + } + + /** + * Redirige les intervenants vers leur espace après connexion + * + * @param string $redirect_to URL de redirection par défaut + * @param string $requested_redirect_to URL de redirection demandée + * @param WP_User|WP_Error $user Utilisateur connecté ou erreur + * @return string URL de redirection + */ + public static function redirect_intervenant_after_login($redirect_to, $requested_redirect_to, $user) { + // Vérifier si l'utilisateur est valide et n'est pas une erreur + if (is_wp_error($user) || !is_a($user, 'WP_User')) { + return $redirect_to; + } + + // Si une redirection spécifique a été demandée, la respecter + if (!empty($requested_redirect_to)) { + return $requested_redirect_to; + } + + // Vérifier si l'utilisateur a le rôle 'intervenant' + if (in_array('intervenant', $user->roles, true)) { + // Rediriger vers l'espace intervenant + return home_url('/espace-intervenant'); + } + + // Pour les autres utilisateurs, utiliser la redirection par défaut + return $redirect_to; + } + + /** + * Redirige les utilisateurs non connectés depuis les pages intervenant vers la home + * Vérifie la page 'espace-intervenant' (ID 3307) et ses pages enfants + */ + public static function redirect_non_logged_from_intervenant_pages() { + // Vérifier si l'utilisateur est connecté + if (is_user_logged_in()) { + return; + } + + global $post; + + // ID de la page espace-intervenant + $intervenant_page_id = 3307; + + // Vérifier si on est sur la page espace-intervenant ou une de ses pages enfants + $is_intervenant_page = false; + + if ($post && $post->post_type === 'page') { + // Vérifier si c'est la page espace-intervenant elle-même + if ($post->ID == $intervenant_page_id) { + $is_intervenant_page = true; + } + + // Vérifier si c'est une page enfant de espace-intervenant + if (!$is_intervenant_page && $post->post_parent) { + $current_post = $post; + // Remonter la hiérarchie pour vérifier si un parent est la page 3307 + while ($current_post->post_parent) { + $current_post = get_post($current_post->post_parent); + if (!$current_post) { + break; + } + if ($current_post->ID == $intervenant_page_id) { + $is_intervenant_page = true; + break; + } + } + } + } + + // Si on est sur une page intervenant et que l'utilisateur n'est pas connecté, rediriger vers la home + if ($is_intervenant_page) { + wp_redirect(home_url('/')); + exit; + } } public function load_shortcodes() { diff --git a/assets/js/modules/agenda-visual-filters.js b/assets/js/modules/agenda-visual-filters.js index e64c615..caca96c 100644 --- a/assets/js/modules/agenda-visual-filters.js +++ b/assets/js/modules/agenda-visual-filters.js @@ -269,11 +269,29 @@ class AgendaVisualFilters { // Fallback : utiliser le slug si l'ID n'est pas disponible langueSelect.value = filters.traduction; } + + // Déclencher l'événement change pour que le système de filtrage existant prenne le relais + // Support pour Select2 si présent + if (window.jQuery && jQuery(langueSelect).hasClass('select2-hidden-accessible')) { + jQuery(langueSelect).trigger('change'); + } else { + // Déclencher l'événement change natif + langueSelect.dispatchEvent(new Event('change', { bubbles: true })); + } } } else { const langueSelect = document.getElementById('langue_filtre'); if (langueSelect) { langueSelect.value = ''; + + // Déclencher l'événement change pour que le système de filtrage existant prenne le relais + // Support pour Select2 si présent + if (window.jQuery && jQuery(langueSelect).hasClass('select2-hidden-accessible')) { + jQuery(langueSelect).trigger('change'); + } else { + // Déclencher l'événement change natif + langueSelect.dispatchEvent(new Event('change', { bubbles: true })); + } } } diff --git a/templates/front/intervenant-agenda.php b/templates/front/intervenant-agenda.php index bdfae2e..757d7b7 100644 --- a/templates/front/intervenant-agenda.php +++ b/templates/front/intervenant-agenda.php @@ -18,7 +18,7 @@ $user = wp_get_current_user();