From 6c22bdaba3d44f0609077f48e7847056588854d8 Mon Sep 17 00:00:00 2001 From: "florian.llimos" Date: Fri, 8 Nov 2024 16:10:08 +0100 Subject: [PATCH] :feat: sends data --- hello-world/css/style.css | 451 ++++++++++++++++++ hello-world/hello-world.php | 191 ++++++++ hello-world/js/main.js | 202 ++++++++ hello-world/media/baseline-dark.svg | 51 ++ hello-world/media/chaufferie_bois_clients.svg | 19 + .../media/chaufferie_vente_chaleur.svg | 19 + hello-world/media/lieux_de_plantation.svg | 19 + hello-world/media/logo.png | Bin 0 -> 23912 bytes hello-world/media/plateformes_logistiques.svg | 23 + hello-world/media/producteur_de_bois.svg | 19 + 10 files changed, 994 insertions(+) create mode 100644 hello-world/css/style.css create mode 100644 hello-world/hello-world.php create mode 100644 hello-world/js/main.js create mode 100644 hello-world/media/baseline-dark.svg create mode 100644 hello-world/media/chaufferie_bois_clients.svg create mode 100644 hello-world/media/chaufferie_vente_chaleur.svg create mode 100644 hello-world/media/lieux_de_plantation.svg create mode 100644 hello-world/media/logo.png create mode 100644 hello-world/media/plateformes_logistiques.svg create mode 100644 hello-world/media/producteur_de_bois.svg diff --git a/hello-world/css/style.css b/hello-world/css/style.css new file mode 100644 index 0000000..ef6b3e2 --- /dev/null +++ b/hello-world/css/style.css @@ -0,0 +1,451 @@ +/* ALL */ +/* ALL */ +/* ALL */ + +@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Kanit:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); + +* { + margin: 0; + padding: 0; +} + +.bold { + font-family: Inter; + font-size: 14px; + font-weight: 500; + line-height: 24px; + color: #000000; +} + +.none { + display: none; +} + +.filter-active { + background-color: #e3e3e3; + border-radius: 10px; +} + +/* #reset-button::before { + content: ""; + position: absolute; + width: 20px; + height: 20px; + margin-left: -25px; + background-image: url("https://cdn-icons-png.flaticon.com/128/9497/9497023.png"); + background-size: cover; +} + #reset-button { + grid-row: b / c; + grid-column: d / e; + border-radius: 15px; + width: 220px; + padding-right: 0px; + margin-top: 10px; +} + +#reset-button:hover { + cursor: pointer; +} */ + +.button-active { + background-color: #95C11F !important; + border : 2px solid #95C11F !important; + color: white !important; + border-left: 2px solid #779a19 !important; + border-top: 2px solid #779a19 !important; +} + +.color-white { + color: white; +} + +/* EOF ALL */ +/* EOF ALL */ +/* EOF ALL */ + +/* MAP & ZOOM */ +/* MAP & ZOOM */ +/* MAP & ZOOM */ + +#map { + width: 100%; + height: 60vh; + margin-top: 0; + box-shadow: 1px 1px 27px -5px rgba(0,0,0,0.75); + -webkit-box-shadow: 1px 1px 27px -5px rgba(0,0,0,0.75); + -moz-box-shadow: 1px 1px 27px -5px rgba(0,0,0,0.75); +} + +.leaflet-verticalcenter.leaflet-left { + position: absolute; + left: 10px; + top: 50%; + transform: translateY(-50%); + z-index: 111111111111; +} + +.leaflet-control-scale { + display: none; +} + +/* EOF MAP & ZOOM */ +/* EOF MAP & ZOOM */ +/* EOF MAP & ZOOM */ + +/* MODAL & CONTENT */ +/* MODAL & CONTENT */ +/* MODAL & CONTENT */ + +.leaflet-popup-content { + margin: 0; + padding: 0; + padding-bottom: 10px; + width: 250px !important; +} + +.leaflet-popup-close-button > span:nth-child(1) { + width: 25px; + height: 25px; + background-color: rgb(0, 0, 0); + color: white; + border-radius: 50px; + display: block; + margin-left: -260px; + margin-top: 10px; + font-size: 20px; +} +.leaflet-popup-content > p { + padding-left: 15px; +} + +.leaflet-popup-content-wrapper { + background-color: lightgray; + transition: 500ms; + overflow: hidden; + width: 250px !important; + padding: 0; +} + +.leaflet-popup { + position: fixed; +} + +.modal-adress { + font-family: Inter !important; + font-size: 14px !important; + font-weight: 400 !important; + line-height: 18px !important; + text-align: left !important; + color : white !important; + margin-bottom: 0 !important; + padding-left: 14px !important; +} + +.leaflet-popup-content-wrapper { + border-radius: 25px; + background: #ffffff; +} + +.modal-green { + border: 3px solid #95c11f !important; +} + +.modal-yellow { + border: 3px solid #ffc800 !important; +} + +.modal-blue { + border: 3px solid #91a2ff !important; +} + +.modal-red { + border: 3px solid #ff792d !important; +} + +.modal-black { + border: 3px solid #634e42 !important; +} + +.modal-domaine { + text-align: center !important; + margin-top: 0 !important; + text-align: center !important; + border-radius: 0 0 20px 20px !important; + width: 196px; + height: 28px; + padding: 5px 15px 5px 15px !important; + font-weight: 600 !important; + line-height: 18px !important; + font-size: 14px !important; + margin-left: auto !important; + margin-right: auto !important; +} + +.modal-domaine-green, .modal-container-green { + background-color: #95C11F !important; +} + +.modal-domaine-yellow, .modal-container-yellow { + background-color: #ffc800 !important; +} + +.modal-domaine-blue, .modal-container-blue { + background-color: #91a2ff !important; +} + +.modal-domaine-red, .modal-container-red { + background-color: #ff792d !important; +} + +.modal-domaine-black, .modal-container-black { + background-color: #634e42 !important; +} + + + +.modal-associe, .modal-annee, .modal-etat { + padding: 0 !important; + margin: 0 !important; + padding-top: 8px !important; + padding-left: 14px !important; + font-family: Inter; + font-size: 14px; + font-weight: 400; + line-height: 18px; +} + + +.modal-container { + padding-top: 10px; + padding-bottom: 10px; +} + +.modal-name { + font-size: 20px !important; + font-weight: 600 !important; + line-height: 18px !important; + text-align: left !important; + color : white !important; + margin-bottom: 0 !important; + padding-bottom: 10px !important; + padding-left: 14px !important; +} + +.modal-container-header { + display: grid; + grid-template-columns: [a] 1fr [b] 1fr [c]; + grid-template-rows: [a] 1fr [b] 1fr [c]; +} + +.modal-container-header > img { + grid-row: a / c; + grid-column: a / c; + justify-self: center; + align-self: center; +} + +.modal-domaine { + grid-row: a / b; + grid-column: a / c; + justify-self: center; + align-self: flex-start; +} + +.wait-button:hover { + cursor: pointer; +} + +/* EOF MODAL & CONTENT */ +/* EOF MODAL & CONTENT */ +/* EOF MODAL & CONTENT */ + +/* FILTER */ +/* FILTER */ +/* FILTER */ + +#container-filter { + display: grid; + grid-template-columns: [a] 1fr [b] 1fr [c] 1fr [d]; + grid-template-rows: [a] 200px [b] 100px [c]; + background-color: white; + height: fit-content; + box-shadow: 1px 1px 27px -5px rgba(0,0,0,0.75); + -webkit-box-shadow: 1px 1px 27px -5px rgba(0,0,0,0.75); + -moz-box-shadow: 1px 1px 27px -5px rgba(0,0,0,0.75); + padding: 30px; + border-radius: 15px 15px 0 0; +} + +/* TOGGLE */ +/* TOGGLE */ + +.container-toggle { + width: 80px; + border: 2px solid #634E42; + border-radius: 50px; + height: 38px; + display: grid; + grid-row: b / c; + grid-column: a / b; +} + +.container-toggle > div { + width: 30px; + height: 30px; + background-color: #634E42; + border-radius: 50px; + align-self: center; + justify-self: start; + margin-left: 4px !important; + margin-top: 0 !important; +} + +.toggle-to-anim-enfant { + animation-name: toActifEnfant; + animation-duration: 2000ms; +} + +.toggle-to-anim-parent { + animation-name: toActifParent; + animation-duration: 2000ms; +} + +@keyframes toActifEnfant { + 0% { + background-color: #634E42; + } + + 100% { + background-color: #95C11F; + margin-left: 40px !important; + } +} + +@keyframes toActifParent { + 0% { + background-color: #634E42; + } + + 100% { + background-color: #95C11F; + } +} + +/* EOF TOGGLE */ +/* EOF TOGGLE */ + +#container-filter-label-1 { + grid-row: b / c; + grid-column: b / c; + display: grid; + grid-template-columns: repeat(2, auto); + width: fit-content; + grid-gap: 8px; +} + +#container-filter-label-1 > div { + justify-self: start; + align-self: center; + border-radius: 50px; + color: #634E42; + padding: 5px 15px 5px 15px; + border: 2px solid #634E42; +} + +#container-filter-label-1 > div > p { + margin-bottom: 0 !important; + padding-bottom: 0 !important; + font-size: 14px !important; + line-height: 24px !important; +} + +.separator { + grid-row: a / c; + grid-column: a / d; + justify-self: center; + align-self: center; + width: 100%; + margin-top: 50px; +} + +h5 { + font-weight : 700 !important; + font-size : 20px !important; + line-height : 26px !important; + color: #000000 !important; + font-family: Inter !important; +} + +#container-filter-domaine { + grid-row: a / b; + grid-column: a / d; + display: grid; + grid-template-columns: repeat(6, 1fr); + grid-gap: 10px; + height: fit-content; +} + +#container-filter-domaine > div > img { + width: 60%; + margin-left: 20%; +} + +#container-filter-domaine > div:hover { + cursor: pointer; +} + +#container-filter-domaine p { + text-align: center; + font-family: Inter; + font-weight : 500; + font-size : 14px; + line-height : 18px; + color: #000000; +} + +#domaine-button { + align-self: center; +} + +#container-filter-associe { + grid-row: b / c; + grid-column: a / b; +} + +#container-filter-label { + grid-row: b / c; + grid-column: b / c; +} + +#container-filter-avancement { + grid-row: b / c; + grid-column: c / d; +} + +#container-filter-avancement-1 { + display: grid; + grid-template-columns: repeat(3, auto); + width: fit-content; + grid-gap: 8px; +} + +#container-filter-avancement-1 > div { + justify-self: start; + align-self: center; + border-radius: 50px; + color: #634E42; + padding: 5px 15px 5px 15px; + border: 2px solid #634E42; +} + +#container-filter-avancement-1 > div > p { + margin-bottom: 0 !important; + padding-bottom: 0 !important; + font-size: 14px !important; + line-height: 24px !important; +} + +/* EOF FILTER */ +/* EOF FILTER */ +/* EOF FILTER */ \ No newline at end of file diff --git a/hello-world/hello-world.php b/hello-world/hello-world.php new file mode 100644 index 0000000..55dfdb7 --- /dev/null +++ b/hello-world/hello-world.php @@ -0,0 +1,191 @@ + +
+ +
+
+
Status
+
+
+
+

Terminé

+
+
+

En cours

+
+
+

Prévu

+
+
+
+
+
+
+
Associé-e BBE
+
+
+
+
+
+
+
+
Label
+
+
+
+

Label haie

+
+
+

Label végétal local

+
+
+
+
+
Type de projet
+
+ +

Lieux de plantation

+
+
+ +

Producteur de bois

+
+
+ +

Acheteur de bois

+
+
+ +

Acheteur de chaleur

+
+
+ +

Plateforme logistique

+
+
+
+
+ post_content, 'hello_world_map')) { + wp_enqueue_style( + 'leaflet-css', + 'https://unpkg.com/leaflet@1.9.3/dist/leaflet.css', + array(), + '1.9.3' + ); + + wp_enqueue_script( + 'leaflet-js', + 'https://unpkg.com/leaflet@1.9.3/dist/leaflet.js', + array(), + '1.9.3', + true + ); + + wp_enqueue_style( + 'leaflet-markercluster-css', + 'https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css' + ); + + wp_enqueue_script( + 'leaflet-markercluster-js', + 'https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js', + array('leaflet-js', 'jquery'), + null, + true + ); + + wp_enqueue_script( + 'hello-world-script', + plugin_dir_url(__FILE__) . 'js/main.js', + array('leaflet-js', 'leaflet-markercluster-js'), + '1.0', + true + ); + + wp_enqueue_style( + 'hello-world-style', + plugin_dir_url(__FILE__) . 'css/style.css', + array(), + '1.0' + ); + } +} + +add_action('rest_api_init', function() { + register_rest_route('custom/v1', '/markers', array( + 'methods' => 'GET', + 'callback' => 'get_cartographie_markers', + )); +}); + +function get_cartographie_markers() { + global $wpdb; + $table_name = $wpdb->prefix . 'posts'; + + // Effectuer la requête pour obtenir les résultats + $results = $wpdb->get_results(" + SELECT u3yd_posts.ID, u3yd_posts.post_name, u3yd_term_taxonomy.taxonomy, + GROUP_CONCAT(u3yd_terms.term_id ORDER BY u3yd_terms.term_id) AS term_ids, + GROUP_CONCAT(u3yd_terms.name ORDER BY u3yd_terms.term_id) AS term_names + FROM u3yd_posts + INNER JOIN u3yd_term_relationships ON u3yd_posts.ID = u3yd_term_relationships.object_id + INNER JOIN u3yd_term_taxonomy ON u3yd_term_relationships.term_taxonomy_id = u3yd_term_taxonomy.term_taxonomy_id + INNER JOIN u3yd_terms ON u3yd_term_taxonomy.term_id = u3yd_terms.term_id + WHERE u3yd_posts.post_status = 'publish' + AND u3yd_posts.post_type = 'seriestv' + GROUP BY u3yd_posts.ID, u3yd_term_taxonomy.taxonomy; +"); + +// Structurer les données en regroupant les taxonomies par ID +$structured_data = []; + +foreach ($results as $row) { + // Si le post n'existe pas encore dans le tableau, l'ajouter avec les données de base + if(!isset($structured_data[$row->ID])){ + $structured_data[$row->ID] = [ + 'name' => $row->post_name, + ]; + } + if ($row->taxonomy == "categorielabel") { + $structured_data[$row->ID][$row->taxonomy] = explode(",", $row->term_names); + } else { + $structured_data[$row->ID][$row->taxonomy] = $row->term_names; + } + +} + + +// Envoyer le JSON avec les en-têtes appropriés +return $structured_data; + +} \ No newline at end of file diff --git a/hello-world/js/main.js b/hello-world/js/main.js new file mode 100644 index 0000000..582638c --- /dev/null +++ b/hello-world/js/main.js @@ -0,0 +1,202 @@ +jQuery(document).ready(function($) { + var map = L.map('map').setView([48.9000, 0.1000], 9); + L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', { + attribution: 'ArcGIS' + }).addTo(map); + + let markersCluster = L.markerClusterGroup(); + let allMarkers = []; + let initialMarkerData = []; + function addMarkers(data) { + markersCluster.clearLayers(); + allMarkers = []; + const values = Object.values(data); + for (const item of values) { + console.log(item); + let itemNom = item.name; + let itemDomaine = item.categoriesseries ?? null; + let itemCodePostal = item.codepstl ?? null; + let itemAvancement = item.avancementduprojet ?? null; + let itemAnnee = item.annees ?? null; + let itemLongitude = item.longitude ?? null; + let itemVille = item.ville ?? null; + let itemLatitude = item.latitude ?? null; + let itemAssocie = item.associe ?? null; + let itemLabel = item.categorielabel; + console.log(itemLatitude + " " + itemLongitude); + console.log(itemLabel); + if (itemLongitude === null || itemLatitude === null) { + continue; + } + var markerIcon; + const iconBaseUrl = 'https://sbw1.dgtn.dev/wp-content/uploads/2024/11/'; + const iconSize = [40, 40]; + const iconAnchor = [16, 32]; + const popupAnchor = [0, -32]; + const domaineIcons = { + "Lieux de plantation": "lieux_de_plantation.svg", + "Producteur de bois": "producteur_de_bois.svg", + "Acheteur de bois": "chaufferie_bois_clients.svg", + "Acheteur de chaleur": "chaufferie_vente_chaleur.svg", + "Plateformes logistiques": "plateformes_logistiques.svg" + }; + const iconUrl = domaineIcons[itemDomaine] ? `${iconBaseUrl}${domaineIcons[itemDomaine]}` : null; + markerIcon = iconUrl + ? new L.Icon({ + iconUrl, + iconSize, + iconAnchor, + popupAnchor + }) + : new L.Icon.Default(); + var popupContent = ` + ${item.photo ? `${itemNom}` : ''} + + + + + +

${itemLabel}

+ + + `; + var marker = L.marker([itemLatitude, itemLongitude], { icon: markerIcon }) + .bindPopup(popupContent); + allMarkers.push(marker); + } + + function addControlPlaceholders(map) { + var corners = map._controlCorners, + l = 'leaflet-', + container = map._controlContainer; + + function createCorner(vSide, hSide) { + var className = l + vSide + ' ' + l + hSide; + corners[vSide + hSide] = L.DomUtil.create('div', className, container); + } + createCorner('verticalcenter', 'left'); + } + addControlPlaceholders(map); + map.zoomControl.setPosition('verticalcenterleft'); + L.control.scale({position: 'verticalcenterleft'}).addTo(map); + markersCluster.addLayers(allMarkers); + map.addLayer(markersCluster); + } + + $.ajax({ + url: '/wp-json/custom/v1/markers', + method: 'GET', + dataType: 'json', + success: function(data) { + initialMarkerData = data; + addMarkers(data); + }, + error: function(xhr, status, error) { + console.error('Erreur lors de la récupération des données :', error); + } + }); + + function filterMarkers() { + var statusFilters = { + 'En cours': $('#en-cours').hasClass('filter-active'), + 'Terminé': $('#projets-finis').hasClass('filter-active'), + 'Prévu': $('#prevu').hasClass('filter-active'), + }; + + var associeFilters = { + 'Oui': $('#associe-oui').hasClass('filter-active'), + 'Non': $('#associe-non').hasClass('filter-active'), + }; + + var labelFilters = { + 'aucun': $('#label-aucun').hasClass('filter-active'), + 'haie': $('#label-haie').hasClass('filter-active'), + 'vegetal': $('#label-vegetal').hasClass('filter-active'), + }; + + var domaineFilters = { + 'Lieux de plantation': $('#lieux-de-plantation').hasClass('filter-active'), + 'Acheteur de bois': $('#chaufferies-bois-clients').hasClass('filter-active'), + 'Producteur de bois': $('#exploitations-productrices-de-bois-pour-BBE').hasClass('filter-active'), + 'Acheteur de chaleur': $('#chaufferies-vente-de-chaleur').hasClass('filter-active'), + 'Plateformes logistiques': $('#plateformes-logistiques').hasClass('filter-active'), + }; + + var filteredMarkers = allMarkers.filter(function(marker) { + let popupContent = marker.getPopup().getContent(); + + let matchesStatusFilter = Object.keys(statusFilters).some(function(key) { + return statusFilters[key] ? popupContent.includes(key) : false; + }) || !Object.values(statusFilters).includes(true); + + let matchesAssocieFilter = Object.keys(associeFilters).some(function(key) { + return associeFilters[key] ? popupContent.includes(` ${key}`) : false; + }) || !Object.values(associeFilters).includes(true); + + let matchesLabelFilter = labelFilters['haie'] && labelFilters['vegetal'] + ? (popupContent.includes('Label haie') || popupContent.includes('végétal local')) + : (labelFilters['haie'] ? popupContent.includes('Label haie') + : (labelFilters['vegetal'] ? popupContent.includes('végétal local') + : labelFilters['aucun'] ? popupContent.includes('Aucun') : true)); + + let matchesDomaineFilter = Object.keys(domaineFilters).some(function(key) { + return domaineFilters[key] ? popupContent.includes(key) : false; + }) || !Object.values(domaineFilters).includes(true); + + return matchesStatusFilter && matchesAssocieFilter && matchesLabelFilter && matchesDomaineFilter; + }); + + markersCluster.clearLayers(); + markersCluster.addLayers(filteredMarkers); + } + + function handleFilterClick(filterId, otherFilterIds) { + $(filterId).on('click', function() { + $(this).toggleClass('filter-active'); + + // Ajouter ou retirer button-active seulement si l'élément a la classe wait-button + if ($(this).hasClass('wait-button')) { + $(this).toggleClass('button-active'); + } + + if ($(this).hasClass('filter-active')) { + if (otherFilterIds && Array.isArray(otherFilterIds)) { + otherFilterIds.forEach(function(otherFilterId) { + $(otherFilterId).removeClass('filter-active').removeClass('button-active'); // Retire button-active des autres filtres + }); + } + } + + filterMarkers(); // Met à jour les marqueurs après le changement de filtre + }); + } + + handleFilterClick('#en-cours', ['#prevu', '#projets-finis']); + handleFilterClick('#prevu', ['#en-cours', '#projets-finis']); + handleFilterClick('#projets-finis', ['#en-cours', '#prevu']); + handleFilterClick('#associe-oui', ['#associe-non']); + handleFilterClick('#associe-non', ['#associe-oui']); + handleFilterClick('#label-haie', ['#label-aucun']); + handleFilterClick('#label-vegetal', ['#label-aucun']); + + handleFilterClick('#lieux-de-plantation', false); + handleFilterClick('#chaufferies-bois-clients', false); + handleFilterClick('#exploitations-productrices-de-bois-pour-BBE', false); + handleFilterClick('#chaufferies-vente-de-chaleur', false); + handleFilterClick('#plateformes-logistiques', false); + + // $('#reset-button').on('click', function() { + // let allHtmlElement = document.querySelectorAll("*"); + // allHtmlElement.forEach(htmlElement => { + // htmlElement.classList.remove("filter-active"); + // }); + // map.setView([48.9000, 0.1000], 9); + // addMarkers(initialMarkerData); + // }); +}); \ No newline at end of file diff --git a/hello-world/media/baseline-dark.svg b/hello-world/media/baseline-dark.svg new file mode 100644 index 0000000..c75359d --- /dev/null +++ b/hello-world/media/baseline-dark.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hello-world/media/chaufferie_bois_clients.svg b/hello-world/media/chaufferie_bois_clients.svg new file mode 100644 index 0000000..043221b --- /dev/null +++ b/hello-world/media/chaufferie_bois_clients.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/hello-world/media/chaufferie_vente_chaleur.svg b/hello-world/media/chaufferie_vente_chaleur.svg new file mode 100644 index 0000000..8ca4f47 --- /dev/null +++ b/hello-world/media/chaufferie_vente_chaleur.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/hello-world/media/lieux_de_plantation.svg b/hello-world/media/lieux_de_plantation.svg new file mode 100644 index 0000000..80ccb44 --- /dev/null +++ b/hello-world/media/lieux_de_plantation.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/hello-world/media/logo.png b/hello-world/media/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c34734c4eb38466af40f615aa18ffbb651b146f6 GIT binary patch literal 23912 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 Hu0mjfU!(>_ literal 0 HcmV?d00001 diff --git a/hello-world/media/plateformes_logistiques.svg b/hello-world/media/plateformes_logistiques.svg new file mode 100644 index 0000000..c87b9cf --- /dev/null +++ b/hello-world/media/plateformes_logistiques.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hello-world/media/producteur_de_bois.svg b/hello-world/media/producteur_de_bois.svg new file mode 100644 index 0000000..9303efd --- /dev/null +++ b/hello-world/media/producteur_de_bois.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + +