498 lines
21 KiB
PHP
498 lines
21 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Cartographie Leaflet
|
|
*
|
|
* @package Cartographie
|
|
* @author Digitanie
|
|
* @copyright 2024 Digitanie
|
|
* @license GPL-2.0-or-later
|
|
*
|
|
* @wordpress-plugin
|
|
* Plugin Name: Cartographie
|
|
* Plugin URI: https://digitanie.org
|
|
* Description: Plugin pour la cartographie.
|
|
* Version: 1.0.0
|
|
* Author: Digitanie
|
|
* Author URI: https://digitanie.org
|
|
* Text Domain: cartographie
|
|
* License: GPL v2 or later
|
|
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
|
*/
|
|
|
|
add_shortcode('cartographie', 'cartographie');
|
|
|
|
function cartographie() {
|
|
ob_start();
|
|
?>
|
|
<div id="container-filter">
|
|
<div id="container-filter-avancement">
|
|
<div class="container-title-filter">
|
|
<h5 id="avancement-button">Status</h5>
|
|
</div>
|
|
<div id="container-filter-avancement-1">
|
|
<div id="projets-finis" class="box-filter wait-button">
|
|
<p>Terminé</p>
|
|
</div>
|
|
<div id="en-cours" class="box-filter wait-button">
|
|
<p>En cours</p>
|
|
</div>
|
|
<div id="prevu" class="box-filter wait-button">
|
|
<p>Prévu</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<hr class="separator">
|
|
<div id="container-filter-associe">
|
|
<div class="container-title-filter">
|
|
<h5 id="associe-button">Associé-e BBE</h5>
|
|
</div>
|
|
<div class="container-toggle" id="toggle-associe" value="all">
|
|
<div></div>
|
|
</div>
|
|
</div>
|
|
<div id="container-filter-label">
|
|
<div class="container-title-filter">
|
|
<h5 id="title-label">Label</h5>
|
|
</div>
|
|
<div id="container-filter-label-1">
|
|
<div id="label-haie" class="box-filter wait-button">
|
|
<p>Label haie</p>
|
|
</div>
|
|
<div id="label-vegetal" class="box-filter wait-button">
|
|
<p>Label végétal local</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="container-filter-domaine">
|
|
<h5 id="domaine-button">Type de projet</h5>
|
|
<div id="lieux-de-plantation">
|
|
<img src="/wp-content/plugins/cartographie/media/lieux_de_plantation.svg">
|
|
<p>Lieux de plantation</p>
|
|
</div>
|
|
<div id="exploitations-productrices-de-bois-pour-BBE">
|
|
<img src="/wp-content/plugins/cartographie/media/producteur_de_bois.svg">
|
|
<p>Producteur de bois</p>
|
|
</div>
|
|
<div id="chaufferies-bois-clients">
|
|
<img src="/wp-content/plugins/cartographie/media/chaufferie_bois_clients.svg">
|
|
<p>Acheteur de bois</p>
|
|
</div>
|
|
<div id="chaufferies-vente-de-chaleur">
|
|
<img src="/wp-content/plugins/cartographie/media/chaufferie_vente_chaleur.svg">
|
|
<p>Acheteur de chaleur</p>
|
|
</div>
|
|
<div id="plateformes-logistiques">
|
|
<img src="/wp-content/plugins/cartographie/media/plateformes_logistiques.svg">
|
|
<p>Plateforme logistique</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id='map' class='map-container'>
|
|
<div id="full-screen">
|
|
<img src="/wp-content/plugins/cartographie/media/full-screen.png">
|
|
</div>
|
|
<?php
|
|
return ob_get_clean();
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'preload');
|
|
|
|
function preload() {
|
|
if (has_shortcode(get_post()->post_content, 'cartographie')) {
|
|
wp_enqueue_style(
|
|
'leaflet-css',
|
|
plugin_dir_url(__FILE__) . 'css/leaflet.css',
|
|
array(),
|
|
'1.9.3'
|
|
);
|
|
|
|
wp_enqueue_script(
|
|
'leaflet-js',
|
|
plugin_dir_url(__FILE__) . 'js/leaflet.js',
|
|
array(),
|
|
'1.9.3',
|
|
true
|
|
);
|
|
|
|
wp_enqueue_style(
|
|
'leaflet-markercluster-css',
|
|
plugin_dir_url(__FILE__) . 'css/MarkerCluster.Default.css',
|
|
array(),
|
|
'1.5.3'
|
|
);
|
|
|
|
wp_enqueue_script(
|
|
'leaflet-markercluster-js',
|
|
plugin_dir_url(__FILE__) . 'js/leaflet.markercluster.js',
|
|
array('leaflet-js', 'jquery'),
|
|
'1.5.3',
|
|
true
|
|
);
|
|
|
|
wp_enqueue_script(
|
|
'cartographie-script',
|
|
plugin_dir_url(__FILE__) . 'js/main.js',
|
|
array('leaflet-js', 'leaflet-markercluster-js'),
|
|
'1.0',
|
|
true
|
|
);
|
|
|
|
wp_localize_script( 'cartographie-script', 'wpApiSettings', array(
|
|
'root' => esc_url_raw( rest_url() ),
|
|
'nonce' => wp_create_nonce( 'wp_rest' )
|
|
) );
|
|
|
|
wp_enqueue_style(
|
|
'cartographie-style',
|
|
plugin_dir_url(__FILE__) . 'css/cartographie.css',
|
|
array(),
|
|
'1.0'
|
|
);
|
|
}
|
|
}
|
|
|
|
add_action('rest_api_init', function() {
|
|
|
|
register_rest_route('custom/v1', '/markers', array(
|
|
'methods' => "GET",
|
|
'permission_callback' => '__return_true',
|
|
'callback' => 'get_cartographie_markers'
|
|
));
|
|
});
|
|
|
|
function get_cartographie_markers() {
|
|
global $wpdb;
|
|
$table_name = $wpdb->prefix . 'posts';
|
|
$results = $wpdb->get_results("
|
|
SELECT wp_posts.ID, wp_posts.post_title, wp_term_taxonomy.taxonomy,
|
|
GROUP_CONCAT(wp_terms.term_id ORDER BY wp_terms.term_id) AS term_ids,
|
|
GROUP_CONCAT(wp_terms.name ORDER BY wp_terms.term_id) AS term_names
|
|
FROM wp_posts
|
|
INNER JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id
|
|
INNER JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
|
|
INNER JOIN wp_terms ON wp_term_taxonomy.term_id = wp_terms.term_id
|
|
WHERE wp_posts.post_status = 'publish'
|
|
AND wp_posts.post_type = 'markercartographie'
|
|
GROUP BY wp_posts.ID, wp_term_taxonomy.taxonomy;
|
|
");
|
|
|
|
$structured_data = [];
|
|
|
|
$image_results = $wpdb->get_results("
|
|
SELECT wp_posts.ID, wp_postmeta.meta_value AS image_id, image_posts.guid AS image_url
|
|
FROM wp_posts
|
|
LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = '_thumbnail_id'
|
|
LEFT JOIN wp_posts AS image_posts ON wp_postmeta.meta_value = image_posts.ID
|
|
WHERE wp_posts.post_status = 'publish'
|
|
AND wp_posts.post_type = 'markercartographie';
|
|
");
|
|
|
|
$image_data = [];
|
|
|
|
foreach ($image_results as $image_row) {
|
|
$image_data[$image_row->ID] = [
|
|
'image_id' => $image_row->image_id,
|
|
'image_url' => $image_row->image_url,
|
|
];
|
|
}
|
|
|
|
foreach ($results as $row) {
|
|
if (!isset($structured_data[$row->ID])) {
|
|
$structured_data[$row->ID] = [
|
|
'name' => $row->post_title,
|
|
];
|
|
}
|
|
|
|
if ($row->taxonomy == "categorielabel") {
|
|
$structured_data[$row->ID][$row->taxonomy] = explode(",", $row->term_names);
|
|
} else {
|
|
$structured_data[$row->ID][$row->taxonomy] = $row->term_names;
|
|
}
|
|
|
|
if (isset($image_data[$row->ID])) {
|
|
$structured_data[$row->ID]['image'] = $image_data[$row->ID];
|
|
}
|
|
}
|
|
|
|
return $structured_data;
|
|
|
|
}
|
|
|
|
function wpm_custom_post_type() {
|
|
|
|
$labels = array(
|
|
'name' => _x( 'Cartographie', 'Post Type General Name'),
|
|
'singular_name' => _x( 'Cartographie', 'Post Type Singular Name'),
|
|
'menu_name' => __( 'Cartographie'),
|
|
'all_items' => __( 'Tous les marqueurs'),
|
|
'view_item' => __( 'Voir les marqueurs'),
|
|
'add_new_item' => __( 'Ajouter un nouveau marqueur'),
|
|
'add_new' => __( 'Ajouter'),
|
|
'edit_item' => __( 'Editer le marqueur'),
|
|
'update_item' => __( 'Modifier le marqueur'),
|
|
'search_items' => __( 'Rechercher un marqueur'),
|
|
'not_found' => __( 'Non trouvée'),
|
|
'not_found_in_trash' => __( 'Non trouvée dans la corbeille'),
|
|
);
|
|
|
|
$args = array(
|
|
'label' => __( 'Cartographie'),
|
|
'description' => __( 'Tous sur les markers de la cartographie'),
|
|
'labels' => $labels,
|
|
'menu_icon' => 'dashicons-video-alt2',
|
|
'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ),
|
|
'show_in_rest' => true,
|
|
'rest_base' => 'markers',
|
|
'rest_controller_class' => 'WP_REST_Posts_Controller',
|
|
'hierarchical' => false,
|
|
'public' => true,
|
|
'has_archive' => true,
|
|
'rewrite' => array( 'slug' => 'cartographie'),
|
|
);
|
|
register_post_type( 'markercartographie', $args );
|
|
|
|
}
|
|
|
|
add_action( 'init', 'wpm_custom_post_type', 0 );
|
|
add_action( 'init', 'wpm_add_taxonomies', 0 );
|
|
|
|
function wpm_add_taxonomies() {
|
|
|
|
$labels_annee = array(
|
|
'name' => _x( 'Année', 'taxonomy general name'),
|
|
'singular_name' => _x( 'Année', 'taxonomy singular name'),
|
|
'search_items' => __( 'Chercher une année'),
|
|
'all_items' => __( 'Toutes les années'),
|
|
'edit_item' => __( "Editer l'année"),
|
|
'update_item' => __( "Mettre à jour l'année"),
|
|
'add_new_item' => __( 'Ajouter une nouvelle année'),
|
|
'new_item_name' => __( 'Valeur de la nouvelle année'),
|
|
'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'),
|
|
'menu_name' => __( 'Année'),
|
|
);
|
|
|
|
$labels_latitude = array(
|
|
'name' => _x( 'Latitude', 'taxonomy general name'),
|
|
'singular_name' => _x( 'Latitude', 'taxonomy singular name'),
|
|
'search_items' => __( 'Chercher une latitude'),
|
|
'all_items' => __( 'Toutes les latitudes'),
|
|
'edit_item' => __( 'Editer la latitude'),
|
|
'update_item' => __( 'Mettre à jour la latitude'),
|
|
'add_new_item' => __( 'Ajouter une nouvelle latitude'),
|
|
'new_item_name' => __( 'Valeur de la nouvelle latitude'),
|
|
'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'),
|
|
'menu_name' => __( 'Latitude'),
|
|
);
|
|
|
|
$labels_longitude = array(
|
|
'name' => _x( 'Longitude', 'taxonomy general name'),
|
|
'singular_name' => _x( 'Longitude', 'taxonomy singular name'),
|
|
'search_items' => __( 'Chercher une longitude'),
|
|
'all_items' => __( 'Toutes les longitude'),
|
|
'edit_item' => __( 'Editer la longitude'),
|
|
'update_item' => __( 'Mettre à jour la longitude'),
|
|
'add_new_item' => __( 'Ajouter une nouvelle longitude'),
|
|
'new_item_name' => __( 'Valeur de la nouvelle longitude'),
|
|
'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'),
|
|
'menu_name' => __( 'Longitude'),
|
|
);
|
|
|
|
$labels_codepstl = array(
|
|
'name' => _x( 'Code postal', 'taxonomy general name'),
|
|
'singular_name' => _x( 'Code postal', 'taxonomy singular name'),
|
|
'search_items' => __( 'Chercher une longitude'),
|
|
'all_items' => __( 'Tous les codes postaux'),
|
|
'edit_item' => __( 'Editer le code postal'),
|
|
'update_item' => __( 'Mettre à jour le code postal'),
|
|
'add_new_item' => __( 'Ajouter un nouveau code postal'),
|
|
'new_item_name' => __( 'Valeur du nouveau code postal'),
|
|
'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'),
|
|
'menu_name' => __( 'Code postal'),
|
|
);
|
|
|
|
$labels_ville = array(
|
|
'name' => _x( 'Ville', 'taxonomy general name'),
|
|
'singular_name' => _x( 'Ville', 'taxonomy singular name'),
|
|
'search_items' => __( 'Chercher une ville'),
|
|
'all_items' => __( 'Toutes les villes'),
|
|
'edit_item' => __( 'Editer la ville'),
|
|
'update_item' => __( 'Mettre à jour la ville'),
|
|
'add_new_item' => __( 'Ajouter une nouvelle ville'),
|
|
'new_item_name' => __( 'Valeur de la nouvelle ville'),
|
|
'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'),
|
|
'menu_name' => __( 'Ville'),
|
|
);
|
|
|
|
$labels_cat_serie = array(
|
|
'name' => _x( "Domaine d'activité", 'taxonomy general name'),
|
|
'singular_name' => _x( "Domaine d'activité", 'taxonomy singular name'),
|
|
'search_items' => __( "Rechercher un domaine d'activité"),
|
|
'all_items' => __( "Tous les domaines d'activités"),
|
|
'edit_item' => __( "Editer un domaine d'activité"),
|
|
'update_item' => __( "Mettre à jour un domaine d'activité"),
|
|
'add_new_item' => __( "Ajouter un nouveau domaine d'activité"),
|
|
'new_item_name' => __( "Nom du nouveau domaine d'activité"),
|
|
'add_or_remove_items' => __( "Ajouter ou supprimer un domaine d'activité"),
|
|
'choose_from_most_used' => __( "Choisir parmi les domaines d'activité les plus utilisées"),
|
|
'not_found' => __( "Pas de domaine d'activité trouvées"),
|
|
'menu_name' => __( "Domaine d'activité"),
|
|
);
|
|
|
|
$labels_label_serie = array(
|
|
'name' => _x( 'Label', 'taxonomy general name'),
|
|
'singular_name' => _x( 'Label', 'taxonomy singular name'),
|
|
'search_items' => __( 'Rechercher un label'),
|
|
'popular_items' => __( 'Labels populaires'),
|
|
'all_items' => __( 'Tous les labels'),
|
|
'edit_item' => __( 'Editer un label'),
|
|
'update_item' => __( 'Mettre à jour un label'),
|
|
'add_new_item' => __( 'Ajouter un nouveau label'),
|
|
'new_item_name' => __( 'Nom du nouveau label'),
|
|
'add_or_remove_items' => __( 'Ajouter ou supprimer un label'),
|
|
'choose_from_most_used' => __( 'Choisir parmi les labels les plus utilisées'),
|
|
'not_found' => __( 'Pas de label trouvées'),
|
|
'menu_name' => __( 'Label'),
|
|
);
|
|
|
|
$labels_avancement_serie = array(
|
|
'name' => _x( 'Avancement du projet', 'taxonomy general name'),
|
|
'singular_name' => _x( 'Avancement du projet', 'taxonomy singular name'),
|
|
'search_items' => __( 'Rechercher un avancement de projet'),
|
|
'popular_items' => __( 'Avancement de projet populaires'),
|
|
'all_items' => __( 'Tous les avancement de projet'),
|
|
'edit_item' => __( 'Editer un avancement de projet'),
|
|
'update_item' => __( 'Mettre à jour un avancement de projet'),
|
|
'add_new_item' => __( 'Ajouter un nouvel avancement de projet'),
|
|
'new_item_name' => __( 'Nom du nouveau avancement de projet'),
|
|
'add_or_remove_items' => __( 'Ajouter ou supprimer un avancement de projet'),
|
|
'choose_from_most_used' => __( 'Choisir parmi les avancement de projet les plus utilisées'),
|
|
'not_found' => __( "Pas d'avancemenet de projet trouvées"),
|
|
'menu_name' => __( 'Avancement du projet'),
|
|
);
|
|
|
|
$labels_associe = array(
|
|
'name' => _x( 'Associé BBE', 'taxonomy general name'),
|
|
'singular_name' => _x( 'Associé BBE', 'taxonomy singular name'),
|
|
'search_items' => __( 'Chercher une association'),
|
|
'all_items' => __( 'Toutes les associations'),
|
|
'edit_item' => __( "Editer l'association"),
|
|
'update_item' => __( 'Mettre à jour l année'),
|
|
'add_new_item' => __( 'Ajouter une nouvelle association'),
|
|
'new_item_name' => __( 'Valeur de la nouvelle association'),
|
|
'separate_items_with_commas' => __( 'Séparer les réalisateurs avec une virgule'),
|
|
'menu_name' => __( 'Associé-e BBE'),
|
|
);
|
|
|
|
$args_cat_serie = array(
|
|
'hierarchical' => true,
|
|
'labels' => $labels_cat_serie,
|
|
'show_ui' => true,
|
|
'show_in_rest' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'public' => true,
|
|
'rewrite' => array( 'slug' => 'categories-series' ),
|
|
);
|
|
|
|
$args_label_serie = array(
|
|
'hierarchical' => true,
|
|
'labels' => $labels_label_serie,
|
|
'show_ui' => true,
|
|
'show_in_rest' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'public' => true,
|
|
'rewrite' => array( 'slug' => 'categories-label' ),
|
|
);
|
|
|
|
$args_avancement_serie = array(
|
|
'hierarchical' => true,
|
|
'labels' => $labels_avancement_serie,
|
|
'show_ui' => true,
|
|
'show_in_rest' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'public' => true,
|
|
'rewrite' => array( 'slug' => 'categories-avancement' ),
|
|
);
|
|
|
|
$args_associe = array(
|
|
'hierarchical' => false,
|
|
'labels' => $labels_associe,
|
|
'show_ui' => true,
|
|
'show_in_rest' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'public' => true,
|
|
'rewrite' => array( 'slug' => 'associe' ),
|
|
);
|
|
|
|
$args_ville = array(
|
|
'hierarchical' => false,
|
|
'labels' => $labels_ville,
|
|
'show_ui' => true,
|
|
'show_in_rest' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'public' => true,
|
|
'rewrite' => array( 'slug' => 'ville' ),
|
|
);
|
|
|
|
$args_codepstl = array(
|
|
'hierarchical' => false,
|
|
'labels' => $labels_codepstl,
|
|
'show_ui' => true,
|
|
'show_in_rest' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'public' => true,
|
|
'rewrite' => array( 'slug' => 'codepstl' ),
|
|
);
|
|
|
|
$args_latitude = array(
|
|
'hierarchical' => false,
|
|
'labels' => $labels_latitude,
|
|
'show_ui' => true,
|
|
'show_in_rest' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'public' => true,
|
|
'rewrite' => array( 'slug' => 'latitude' ),
|
|
);
|
|
|
|
$args_annee = array(
|
|
'hierarchical' => false,
|
|
'labels' => $labels_annee,
|
|
'show_ui' => true,
|
|
'show_in_rest' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'public' => true,
|
|
'rewrite' => array( 'slug' => 'annees' ),
|
|
);
|
|
|
|
$args_longitude = array(
|
|
'hierarchical' => false,
|
|
'labels' => $labels_longitude,
|
|
'show_ui' => true,
|
|
'show_in_rest' => true,
|
|
'show_admin_column' => true,
|
|
'query_var' => true,
|
|
'public' => true,
|
|
'rewrite' => array( 'slug' => 'longitude' ),
|
|
);
|
|
|
|
register_taxonomy( 'associe', 'markercartographie', $args_associe );
|
|
register_taxonomy( 'categoriesseries', 'markercartographie', $args_cat_serie );
|
|
register_taxonomy( 'avancementduprojet', 'markercartographie', $args_avancement_serie );
|
|
register_taxonomy( 'categoriesseries', 'markercartographie', $args_cat_serie );
|
|
register_taxonomy( 'categorielabel', 'markercartographie', $args_label_serie );
|
|
register_taxonomy( 'categorielabel', 'markercartographie', $args_label_serie );
|
|
register_taxonomy( 'ville', 'markercartographie', $args_ville );
|
|
register_taxonomy( 'annees', 'markercartographie', $args_annee );
|
|
register_taxonomy( 'codepstl', 'markercartographie', $args_codepstl );
|
|
register_taxonomy( 'longitude', 'markercartographie', $args_longitude );
|
|
register_taxonomy( 'latitude', 'markercartographie', $args_latitude );
|
|
|
|
}
|