init_d : ["ar","bo","br","cg","cl","co","do","ec","es","gt","hn","ht","it","mg","ni","pa","pe","py","sv","td","uy","ve"],
    init_e : ["ar","bo","co","sv","gt","ni","uy","ve"],
    init_f : ["ar","bo","br","cg","cl","co","do","ec","es","gt","hn","ht","ni","pa","pe","py","sv","uy","ve"],
    init_g : ["ar","co","sv","es","gt","hn","it","ni","py","do","ve"],
    init_h : ["ar","br","td","cl","co","cg","ec","sv","it","ni","py","pe","uy","ve"],
    init_i : ["bo","cl","co","cg","ec","gt","ht","it","ni","pe","uy","ve"],
    init_j: ["bo","td","sv","gt","ht","hn","ni","pa","do","uy","ve"],
    init_k: ["ar","bo","es","ht","ni","pe","do"],
    init_l: ["ar","bo","br","cg","cl","co","do","ec","es","gt","hn","ht","it","mg","ni","pa","pe","py","sv","td","uy","ve","us"],
    init_m : ["ar","gt","do"],
    init_n: ["ar","bo","br","cg","cl","co","do","ec","es","gt","hn","ht","it","mg","ni","pa","pe","py","sv","td","uy","ve","us"],
    init_o: [],
    init_p: ["ar","bo","br","cg","do","ec","gt","ht","it","ni","pa","pe","sv","td","uy","ve","us"],
    init_q: ["br","co","sv","pe","ve"]
    }
    jQuery(".select-map .call-to").click(function(){
        var datamenu = jQuery(this).attr("data-menu");
        jQuery(".select-map ul").hide();
        jQuery("#"+datamenu).css("display","block");
    });
    jQuery("#mapsvg-menu-regions li, #mapsvg-menu-initiative li").click(function(){
        jQuery("#mapsvg path").css("fill","rgb(178,178,178)");
        jQuery(this).parent("ul").css("display","none");
        var idiniti = jQuery(this).attr("data-item");
        if(idiniti){
            jQuery.each(initiatives["init_"+idiniti], function(index,item){
                jQuery("path#"+item).css("fill","rgb(237, 181, 6)");
            });
        }else{
            jQuery.each(initiatives["init"], function(index,item){
                jQuery("path#"+item).css("fill", "rgb(210, 10, 17)");
            });
        }
    });
    jQuery("#mapsvg-menu-regions, #mapsvg-menu-initiative").on("mouseleave",function() {
        jQuery(this).css("display","none");
    });
    // 🔒 SEGURIDAD: reemplazado $() por jQuery() — WordPress usa modo no-conflict
    jQuery("body").on("touchstart", function(e){
        jQuery("#mapsvg-menu-regions, #mapsvg-menu-initiative").css("display","none");
    });
</script>';

    return $html;
}

// =============================================
// Geolocalización por CloudFront
// 🔒 SEGURIDAD: función reescrita con validación estricta del header y lista blanca
// La acción permanece comentada hasta que se reactive intencionalmente
// =============================================

function geolocation() {

    if ( is_main_site() ) {

        // 🔒 SEGURIDAD: validar que el header existe antes de usarlo
        if ( ! isset( $_SERVER['HTTP_CLOUDFRONT_VIEWER_COUNTRY'] ) ) {
            return;
        }

        // 🔒 SEGURIDAD: sanitizar — solo letras mayúsculas, máximo 2 caracteres
        $country_code = strtoupper( preg_replace( '/[^A-Za-z]/', '', $_SERVER['HTTP_CLOUDFRONT_VIEWER_COUNTRY'] ) );
        $country_code = substr( $country_code, 0, 2 );

        // 🔒 SEGURIDAD: lista blanca de códigos de país válidos
        $valid_codes = array( 'AR','BO','BR','CL','CO','DO','EC','ES','GT','HN','HT','IT','MG','NI','PA','PE','PY','SV','TD','UY','VE' );

        if ( ! in_array( $country_code, $valid_codes, true ) ) {
            return; // País no mapeado, no redirigir
        }

        $country_map = array(
            // Descomenta los países que quieras activar:
            // 'CL' => 'chile',
            // 'EC' => 'ecuador',
            // 'GT' => 'guatemala',
            // 'HN' => 'honduras',
            // 'IT' => 'italia',
            // 'PA' => 'panama',
            // 'PY' => 'paraguay',
            // 'PE' => 'peru',
            // 'TD' => 'chad',
            // 'UY' => 'uruguay',
            // 'VE' => 'venezuela',
        );

        if ( isset( $country_map[ $country_code ] ) && is_front_page() ) {
            $name = $country_map[ $country_code ];
            // 🔒 SEGURIDAD: la URL de destino se construye solo desde el mapa controlado, nunca desde el input
            wp_redirect( 'https://www.feyalegria.org/' . $name, 301 );
            exit;
        }
    }
}

// add_action( 'wp', 'geolocation' ); // Descomenta para activar la geolocalización

// =============================================
// Shortcode: banderas Polylang
// 🔒 SEGURIDAD: eliminado segundo return con variable $names indefinida
// =============================================

function polylang_flags_shortcode() {
    ob_start();
    pll_the_languages( array( 'show_flags' => 1, 'show_names' => 1 ) );
    $flags = ob_get_clean();
    return '<ul class="polylang-flags">' . $flags . '</ul>';
}
add_shortcode( 'POLYLANG', 'polylang_flags_shortcode' );

// =============================================
// Editor enriquecido
// 🔒 SEGURIDAD: restringido solo a usuarios logueados con rich_editing activo.
// Se eliminó la excepción para usuarios no logueados (!is_user_logged_in())
// que podía habilitar el editor en contextos públicos.
// =============================================

function user_can_richedit_custom() {
    global $wp_rich_edit;
    if ( is_user_logged_in() && get_user_option( 'rich_editing' ) === 'true' ) {
        $wp_rich_edit = true;
        return true;
    }
    $wp_rich_edit = false;
    return false;
}
add_filter( 'user_can_richedit', 'user_can_richedit_custom' );

// =============================================
// 🔒 SEGURIDAD ADICIONAL: Ocultar versión de WordPress y plugins
// =============================================

// Eliminar meta generator de WordPress del <head>
remove_action( 'wp_head', 'wp_generator' );

// Eliminar parámetro ?ver= de scripts y estilos (oculta versiones de plugins/tema)
function fya_remove_version_from_assets( $src ) {
    if ( strpos( $src, '?ver=' ) !== false ) {
        $src = remove_query_arg( 'ver', $src );
    }
    return $src;
}
add_filter( 'style_loader_src',  'fya_remove_version_from_assets', 9999 );
add_filter( 'script_loader_src', 'fya_remove_version_from_assets', 9999 );

// Deshabilitar xmlrpc.php
add_filter( 'xmlrpc_enabled', '__return_false' );

// Restringir la API REST a usuarios autenticados
add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
        return $result;
    }
    if ( ! is_user_logged_in() ) {
        return new WP_Error(
            'rest_not_logged_in',
            __( 'Solo usuarios autenticados pueden acceder a la API REST.', 'charityfoundation' ),
            array( 'status' => 401 )
        );
    }
    return $result;
} );<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="//www.feyalegria.org/rdcongo/wp-content/plugins/wordpress-seo/css/main-sitemap.xsl"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<sitemap>
		<loc>https://www.feyalegria.org/rdcongo/post-sitemap.xml</loc>
		<lastmod>2021-12-03T04:13:06+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://www.feyalegria.org/rdcongo/page-sitemap.xml</loc>
		<lastmod>2021-12-03T14:35:38+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://www.feyalegria.org/rdcongo/category-sitemap.xml</loc>
		<lastmod>2021-12-03T04:13:06+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://www.feyalegria.org/rdcongo/author-sitemap.xml</loc>
		<lastmod>2023-08-09T21:16:59+00:00</lastmod>
	</sitemap>
</sitemapindex>
<!-- XML Sitemap generated by Yoast SEO -->