From 3429d5dda34748214d3c9ac141af40f08b734ee7 Mon Sep 17 00:00:00 2001 From: asus Date: Wed, 8 Nov 2023 16:13:25 +0100 Subject: [PATCH] resolve some errors in php logic, like strlen with str containing space that is interpreted as array instead of string --- plug/map_prof.zip | Bin 0 -> 59569 bytes plug/map_prof/images/marker.png | Bin 0 -> 13618 bytes plug/map_prof/images/marker_cluster.png | Bin 0 -> 10636 bytes plug/map_prof/map_prof_hooks.php | 147 +++++++++ plug/map_prof/mp_enqueue.php | 26 ++ plug/map_prof/scripts/mp_create_filters.js | 103 +++++++ plug/map_prof/scripts/mp_create_map.js | 41 +++ plug/map_prof/scripts/mp_create_markers.js | 57 ++++ plug/map_prof/scripts/mp_draw_clusters.js | 58 ++++ plug/map_prof/scripts/mp_errors_map.js | 7 + plug/map_prof/scripts/mp_filter_events.js | 278 ++++++++++++++++++ plug/map_prof/scripts/mp_info_window.js | 82 ++++++ plug/map_prof/scripts/mp_init_map.js | 72 +++++ plug/map_prof/scripts/mp_publish_error.js | 21 ++ plug/map_prof/settings/mp_globals.php | 80 +++++ plug/map_prof/settings/mp_optionnals.php | 86 ++++++ plug/map_prof/settings/mp_required.php | 13 + plug/map_prof/settings/mp_url_api.php | 23 ++ .../srcs/errors/mp_address_errors.php | 96 ++++++ plug/map_prof/srcs/map/mp_add_to_scripts.php | 34 +++ plug/map_prof/srcs/map/mp_create_div.php | 135 +++++++++ plug/map_prof/srcs/map/mp_get_events.php | 212 +++++++++++++ plug/map_prof/srcs/map/mp_get_filters.php | 160 ++++++++++ plug/map_prof/srcs/map/mp_get_locations.php | 66 +++++ .../srcs/map_posts/mp_post_events_pages.php | 27 ++ plug/map_prof/srcs/menu/mp_menu_content.php | 258 ++++++++++++++++ .../srcs/publish/mp_get_coordinates.php | 80 +++++ .../srcs/publish/mp_update_publish.php | 48 +++ plug/map_prof/styles/mp__style.css | 22 ++ plug/map_prof/styles/mp_filters.css | 146 +++++++++ plug/map_prof/styles/mp_info_windows.css | 187 ++++++++++++ plug/map_prof/styles/mp_zoom.css | 24 ++ plug/map_prof/utils/mp_console_log.php | 28 ++ plug/map_prof/utils/mp_get_ip.php | 18 ++ plug/map_prof_2.zip | Bin 0 -> 46914 bytes plug/map_prof_3.zip | Bin 0 -> 46911 bytes srcs/.env | 4 +- srcs/plugins/map_prof/map_prof_hooks.php | 4 +- .../map_prof/srcs/map/mp_get_filters.php | 4 + .../map_prof/srcs/menu/mp_menu_content.php | 11 +- .../srcs/publish/mp_get_coordinates.php | 3 + 41 files changed, 2653 insertions(+), 8 deletions(-) create mode 100644 plug/map_prof.zip create mode 100644 plug/map_prof/images/marker.png create mode 100644 plug/map_prof/images/marker_cluster.png create mode 100644 plug/map_prof/map_prof_hooks.php create mode 100644 plug/map_prof/mp_enqueue.php create mode 100644 plug/map_prof/scripts/mp_create_filters.js create mode 100644 plug/map_prof/scripts/mp_create_map.js create mode 100644 plug/map_prof/scripts/mp_create_markers.js create mode 100644 plug/map_prof/scripts/mp_draw_clusters.js create mode 100644 plug/map_prof/scripts/mp_errors_map.js create mode 100644 plug/map_prof/scripts/mp_filter_events.js create mode 100644 plug/map_prof/scripts/mp_info_window.js create mode 100644 plug/map_prof/scripts/mp_init_map.js create mode 100644 plug/map_prof/scripts/mp_publish_error.js create mode 100644 plug/map_prof/settings/mp_globals.php create mode 100644 plug/map_prof/settings/mp_optionnals.php create mode 100644 plug/map_prof/settings/mp_required.php create mode 100644 plug/map_prof/settings/mp_url_api.php create mode 100644 plug/map_prof/srcs/errors/mp_address_errors.php create mode 100644 plug/map_prof/srcs/map/mp_add_to_scripts.php create mode 100644 plug/map_prof/srcs/map/mp_create_div.php create mode 100644 plug/map_prof/srcs/map/mp_get_events.php create mode 100644 plug/map_prof/srcs/map/mp_get_filters.php create mode 100644 plug/map_prof/srcs/map/mp_get_locations.php create mode 100644 plug/map_prof/srcs/map_posts/mp_post_events_pages.php create mode 100644 plug/map_prof/srcs/menu/mp_menu_content.php create mode 100644 plug/map_prof/srcs/publish/mp_get_coordinates.php create mode 100644 plug/map_prof/srcs/publish/mp_update_publish.php create mode 100644 plug/map_prof/styles/mp__style.css create mode 100644 plug/map_prof/styles/mp_filters.css create mode 100644 plug/map_prof/styles/mp_info_windows.css create mode 100644 plug/map_prof/styles/mp_zoom.css create mode 100644 plug/map_prof/utils/mp_console_log.php create mode 100644 plug/map_prof/utils/mp_get_ip.php create mode 100644 plug/map_prof_2.zip create mode 100644 plug/map_prof_3.zip diff --git a/plug/map_prof.zip b/plug/map_prof.zip new file mode 100644 index 0000000000000000000000000000000000000000..81ae44cc08f5637d192237e6e862fcc8ec4c85c9 GIT binary patch literal 59569 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 literal 0 HcmV?d00001 diff --git a/plug/map_prof/images/marker.png b/plug/map_prof/images/marker.png new file mode 100644 index 0000000000000000000000000000000000000000..bb6d6c921822c7759943790a3edc4ff8e0302a98 GIT binary patch literal 13618 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 $locations, + "filters" => $filters, + )); + + return mp_create_div($filters); +} +add_shortcode('lejourduprof_map', 'mp_ljdp_map'); + + + + + +/** + * re-publish posts + */ + +// function mp_add_update_button() { +// return mp_create_republish_button(); +// } +// add_shortcode('ljdp_update_publish', 'mp_add_update_button'); + + + + + +/** + * errors map + */ + +function mp_errors_map() { + return mp_find_address_errors(); +} +add_shortcode('ljdp_errors_map', 'mp_errors_map'); + + + + + +/** + * when a post is saved or published or updated, + * find its coordinates + */ + +function post_published_coordinates($id, $post) { + + $location = mp_get_coordinates($id); + //mp_console_log("location: "); + //mp_console_log($location); + + if ( ! add_post_meta( $id, 'location', $location, true ) ) + update_post_meta( $id, 'location', $location ); + +} +add_action( 'publish_post', 'post_published_coordinates', 10, 2 ); + + + + + +/** + * menu plugin + */ + +function ljdp_map_menu() { + add_menu_page( + 'JIPF map', // page_title + 'JIPF map', // menu_title + 'manage_options', // capability + 'ljdp-map-plugin', // menu_slug + 'ljdp_map_plugin_content' // callback function to display page content + ); +} +add_action('admin_menu', 'ljdp_map_menu'); + +?> diff --git a/plug/map_prof/mp_enqueue.php b/plug/map_prof/mp_enqueue.php new file mode 100644 index 0000000..8e00caf --- /dev/null +++ b/plug/map_prof/mp_enqueue.php @@ -0,0 +1,26 @@ + diff --git a/plug/map_prof/scripts/mp_create_filters.js b/plug/map_prof/scripts/mp_create_filters.js new file mode 100644 index 0000000..fc7ad8e --- /dev/null +++ b/plug/map_prof/scripts/mp_create_filters.js @@ -0,0 +1,103 @@ +function fill_filters(filters_div) { + + /* + * following variable are created by mp_add_to_script.php + * + * { } + * { [ ] } + * - filters: { - pays : [ { - _name : "" } ] } + * { [ { - villes : [] } ] } + * { [ { - categories: [] } ] } + * { [ { - mode : [] }, ...] } + * { [ ] } + * { } + * { [ ] } + * { - villes : [ { - _name : "" } ] } + * { [ { - pays : [] } ] } + * { [ { - categories: [] } ] } + * { [ { - mode : [] }, ...] } + * { [ ] } + * { } + * { [ ] } + * { - categories: [ { - _name : "" } ] } + * { [ { - pays : [] } ] } + * { [ { - villes : [] } ] } + * { [ { - mode : [] }, ...] } + * { [ ] } + * { } + * { } + * { [ ] } + * { - mode : [ { - _name : "" } ] } + * { [ { - pays : [] } ] } + * { [ { - villes : [] } ] } + * { [ { - categories: [] }, ...] } + * { [ ] } + * { } + * + */ + + let content = ""; + // use Object.keys to obtain an array of object keys + let keys = Object.keys(filters); + keys.forEach((key) => { + + // // version input checkbox + // + // content += ` + //
+ // + // + //
+ // `; + // for (value of filters[key]) { + // content += ` + //

${value._name}

+ // `; + // } + // content += ` + //
+ //
+ // `; + + // // version select + // + // content += ` + //
+ // + //
+ // `; + + // // version div + // + content += ` +
+
+

${key}

+
+
+

PAS DE FILTRE

+ `; + for (value of filters[key]) { + content += ` +

${value._name}

+ `; + } + content += ` +
+
+ `; + + }); + + filters_div.innerHTML = content; +} diff --git a/plug/map_prof/scripts/mp_create_map.js b/plug/map_prof/scripts/mp_create_map.js new file mode 100644 index 0000000..ead03cc --- /dev/null +++ b/plug/map_prof/scripts/mp_create_map.js @@ -0,0 +1,41 @@ + +function restrict_map(restrict) { + let map_restriction = { + latLngBounds: g_world_bound, + strictBounds: true, + }; + if (restrict) + g_map.setOptions({restriction: map_restriction,}); + else + g_map.setOptions({restriction: null,}); +}; + +function create_map(map_div) { + // default map center to france + let map_center = coordinates_default; + // map_center = {lat:-2.515748362923059, lng:32.93366215464864}; + let map_restriction = { + latLngBounds: g_world_bound, + strictBounds: true, + }; + let map_options = { + /* map options : https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions */ + disableDefaultUI: true, + zoomControl: true, + scaleControl: true, + zoom: map_zoom, + + //gestureHandling: "cooperative", + gestureHandling: "greedy", + //gestureHandling: "none", + //gestureHandling: "auto", + + //disableDoubleClickZoom: "false", // deprecated + //draggable: "true", // deprecated + + center: map_center, + restriction: map_restriction, + } + + return new google.maps.Map(map_div, map_options); +} diff --git a/plug/map_prof/scripts/mp_create_markers.js b/plug/map_prof/scripts/mp_create_markers.js new file mode 100644 index 0000000..00838d2 --- /dev/null +++ b/plug/map_prof/scripts/mp_create_markers.js @@ -0,0 +1,57 @@ +function create_markers(map, locations, infowindow) { + + /* + * following variable are created by mp_add_to_script.php + * - let icon_color = "" + * - let icon_color_back = "" + * - let icon_size = [x, y] + * - let cluster_size_factor = Number + * - let icon_stroke_width = Number + */ + + let icon_circle_radius = 40 - icon_stroke_width / 2; + + let markers = []; + for (loc of locations) { + + if (loc.coordinates == null) + continue; + + let count = loc.events.length; + + let marker_icon_size = [ + icon_size[0] + ( icon_size_factor * (count - 2) ), + icon_size[1] + ( icon_size_factor * (count - 2) ) + ]; + let svg_icon = window.btoa(` + + + + `); + let icon_options = { + url: `data:image/svg+xml;base64,${svg_icon}`, + scaledSize: new google.maps.Size(marker_icon_size[0], marker_icon_size[1]), + }; + let marker_label = { + text: String(count), + color: icon_color, + fontSize: "12px", + fontWeight: "bold", + }; + let marker_title = `address of ${count} events`; + + let marker = new google.maps.Marker({ + position: loc.coordinates, + map: map, + icon: icon_options, + title: marker_title, + label: marker_label, + }); + + attach_info_window(map, marker, loc.events, infowindow); + + markers.push(marker); + }; + + return markers; +} diff --git a/plug/map_prof/scripts/mp_draw_clusters.js b/plug/map_prof/scripts/mp_draw_clusters.js new file mode 100644 index 0000000..8f00a8a --- /dev/null +++ b/plug/map_prof/scripts/mp_draw_clusters.js @@ -0,0 +1,58 @@ +function draw_clusters(map, markers) { + + /* + * following variable are created by mp_add_to_script.php + * - let icon_color = "" + * - let icon_color_back = "" + * - let icon_size = [x, y] + * - let icon_size_factor = Number + * - let icon_stroke_width = Number + */ + + let icon_circle_radius = 40 - icon_stroke_width / 2; + + let renderer = { + render({ count, position }, stats) { + + /* CLUSTERS SETTINGS */ + + let marker_icon_size = [ + icon_size[0] + ( icon_size_factor * (count - 2) ), + icon_size[1] + ( icon_size_factor * (count - 2) ) + ]; + let cluster_svg = window.btoa(` + + + + `); + let cluster_icon = { + url: `data:image/svg+xml;base64,${cluster_svg}`, + scaledSize: new google.maps.Size(marker_icon_size[0], marker_icon_size[1]), + }; + let cluster_label = { + text: String(count), + color: icon_color, + fontSize: "12px", + fontWeight: "bold", + }; + let cluster_title = `Cluster of ${count} markers`; + let cluster_zIndex = Number(google.maps.Marker.MAX_ZINDEX) + count; + + return new google.maps.Marker({ + position, + icon: cluster_icon, + label: cluster_label, + title: cluster_title, + zIndex: cluster_zIndex, + }); + } + } + + let onClusterClick = (_, cluster, map) => { + restrict_map(false); + map.fitBounds(cluster.bounds); + restrict_map(true); + }; + + return new markerClusterer.MarkerClusterer({ map, markers, renderer, onClusterClick }); +} diff --git a/plug/map_prof/scripts/mp_errors_map.js b/plug/map_prof/scripts/mp_errors_map.js new file mode 100644 index 0000000..4d868a6 --- /dev/null +++ b/plug/map_prof/scripts/mp_errors_map.js @@ -0,0 +1,7 @@ +function print_error(error) { + let div_map = document.getElementById("ljdp_map"); + let p_err = document.createElement('p'); + + p_err.textContent = error; + div_map.after(p_err); +} diff --git a/plug/map_prof/scripts/mp_filter_events.js b/plug/map_prof/scripts/mp_filter_events.js new file mode 100644 index 0000000..e2a4f22 --- /dev/null +++ b/plug/map_prof/scripts/mp_filter_events.js @@ -0,0 +1,278 @@ + +// https://googlemaps.github.io/js-markerclusterer/classes/MarkerClusterer.html +// add true for noDraw +// bounds : https://stackoverflow.com/questions/19304574/center-set-zoom-of-map-to-cover-all-visible-markers/19304625#19304625 + + + +function array_first_not_in_second(first, second) { + let temp_array = []; + for (let index of first) { + if (second.indexOf(index) == -1) { + temp_array.push(index); + } + } + return temp_array; +} + +function filter_selection_indexes(menu, indexes, reverse, add) { + + if (indexes.length === 0) { + // if array of index is empty, delete menu + delete g_indexes[menu]; + } + else if (reverse) { + // if reverse is true, delete all indexes in g_indexes.menu + // https://stackoverflow.com/questions/5113374/javascript-check-if-variable-exists-is-defined-initialized + if ( typeof(g_indexes[menu]) !== "undefined" && g_indexes[menu] !== null ) { + // creates an array with all values of g_indexes[menu] minus indexes + let temp_array = array_first_not_in_second(g_indexes[menu], indexes); + if (temp_array.length === 0) + delete g_indexes[menu]; + else + g_indexes[menu] = [].concat(temp_array); + } + } + else { + if (add && typeof(g_indexes[menu]) !== "undefined") { + // add array of menus to g_indexes{} + // creates an array with all values of indexes that are not in g_indexes[menu] already + let temp_array = array_first_not_in_second(indexes, g_indexes[menu]); + g_indexes[menu] = g_indexes[menu].concat(temp_array); + } + else { + // replace or create array of menu in g_indexes{} + g_indexes[menu] = [].concat(indexes); + } + } + + // loop through all arrays of g_indexes to find intersection + // take first one as comparison + let keys = Object.keys(g_indexes); + let intersection = []; + let compare = []; + keys.forEach((key, i) => { + if (i == 0) { + intersection = g_indexes[key]; + } + else { + let temp = []; + compare = g_indexes[key]; + for (let index of intersection) { + if (compare.indexOf(index) != -1) + temp.push(index); + } + intersection = [].concat(temp); + } + }); + return intersection; +} + +function redraw_clusters(indexes) { + + let indexes_count = indexes.length; + + if (indexes_count !== 0) { + // if index array, hide all other markers, and if zoomin, zoom to new markers + g_marker_cluster.clearMarkers(true); + + let marker = g_markers[0]; + let current_bounds = g_map.getBounds(); + let bounds = new google.maps.LatLngBounds(); + + let outside_bounds = false; + for (let index of indexes) { + marker = g_markers[index]; + position = marker.getPosition(); + if (! current_bounds.contains(position)) + outside_bounds = true; + bounds.extend(position); + + g_marker_cluster.addMarker(marker, true); + } + if (outside_bounds) { + if (indexes_count === 1) { + g_map.setCenter(position); + g_map.setZoom(max_zoom); + } + else if (indexes_count > 1) { + g_map.fitBounds(bounds); + } + } + + } + else if ( Object.keys(g_indexes).length === 0 ) { + // object is empty, there are no filters + g_map.setCenter(coordinates_default); + g_map.setZoom(2); + g_marker_cluster.addMarkers(g_markers, true); + } + else { + // filters intersection lets no markers on the map + g_marker_cluster.clearMarkers(true); + } + + g_marker_cluster.render(); +} + +function html_item(menu_name, menu_item) { + let item = menu_item.replace(/ /g, "_"); + let html_id = `filter_${menu_name}_${item}`; + return document.getElementById(html_id); +} + +function toggle_menu_items(menu_name, x_abled) { + + let name = menu_name.replace(/ /g, "_"); + let class_name = `filter_menu_${name}`; + let items = document.getElementsByClassName(class_name); + + if (x_abled === "disable") { + for (let item of items) { + // if item is a menu title (like 'categorie' or 'pays') + // don't remove 'enable', instead add it, because it's not in the list of 'to_enable' + if (item.selected) { + item.classList.add('enable'); + } + else { + item.classList.remove('enable'); + } + if (item.classList.contains('to_enable')) { + item.classList.replace('to_enable', 'enable'); + item.removeAttribute('disabled'); + } + else if (! item.selected) + item.setAttribute('disabled', ''); + } + } + else { + for (let item of items) { + item.classList.remove('enable'); + item.removeAttribute('disabled'); + } + } +} + +function disable_menus(menu_name_ori, menu_item_ori, reverse, menu_index) { + + let menu_item_name = ""; + if (menu_item_ori == null) // it's a menu name + menu_item_name = menu_name_ori; + else + menu_item_name = menu_item_ori._name; + let item_ori_html = html_item(menu_name_ori, menu_item_name); + let is_enabled = item_ori_html.classList.contains('enable'); + + // in case it's a menu title, like "Pays" or "Categories", + // and it does'nt contains 'enable' + // just act like Reset button + // it's too bad it will also go through this menu items even though it's unnecessary + if (menu_index == 'menu_name') { // it's a menu name + if (! is_enabled) { + // "item" as a menu name will select all items in all menus + toggle_menu_items("item", "enable"); + } + return; + } + + // if it's Mode menu, + // and it was the first selection, meaning it does'nt contains 'enable' + // and both (irl and online) are abled or disabled, + // just act like Reset button + // it's too bas it will also go through this menu items even though it's unnecessary + if (menu_name_ori === "mode") { + let mode_menus = document.getElementsByClassName("filter_menu_mode"); + let state = 0; + for (let mode_menu of mode_menus) { + if (mode_menu.checked) + state++; + else + state--; + } + if (state != 0) { // state equal 0 if both have a different state, because (0 + 1 - 1 = 0) and (0 - 1 + 1 = 0) + if (! is_enabled) { + // "item" as a menu name will select all items in all menus + toggle_menu_items("item", "enable"); + return; + } + } + else if (reverse) { // menu is "mode" and only one item is selected and the action was to deselect one, so the action has trigered one item but really we want to see the options of the other item, so let's switch them + if (menu_index == 0) + menu_index++; + else + menu_index--; + menu_item_ori = filters[menu_name_ori][menu_index]; + } + } + + let keys = Object.keys(menu_item_ori); + // loop through list of other menu_items available for this menu_item + // loop though menu names (pays, categories, mode) + for (let menu_name of keys) { + if (menu_name === "_name") + continue; + if (menu_name === "indexes") + continue; + else if (! is_enabled) { + + // // it's too bad it will disable all and then enable certains, it would be better to check each time + // toggle_menu_items(menu_name, "disable"); + // // loop through items in menu names (ex. for "pays" : france, chili, cuba) + // for (let item of menu_item_ori[menu_name]) { + // let item_html = html_item(menu_name, item); + // item_html.classList.add('enable'); + // item_html.removeAttribute('disabled'); + // } + + for (let item of menu_item_ori[menu_name]) { + let item_html = html_item(menu_name, item); + item_html.classList.add('to_enable'); + } + toggle_menu_items(menu_name, "disable"); + } + } +} + +function filter_show_only(element, menu_name) { + + g_infowindow.close(); + + let menu_index = element.getAttribute("data-menu_index"); + let menu_item = null; + let indexes = []; + if (menu_index != "menu_name") { + menu_item = filters[menu_name][menu_index]; + indexes = menu_item.indexes; + } + + add = false; + reverse = false; + if (element.type === "checkbox") { + reverse = ! element.checked; + add = true; + } + + disable_menus(menu_name, menu_item, reverse, menu_index); + + let index_array = filter_selection_indexes(menu_name, indexes, reverse, add); + + redraw_clusters(index_array); +} + +function filter_show_all() { + + g_infowindow.close(); + + // "item" as a menu name will select all items in all menus + toggle_menu_items("item", "enable"); + + g_indexes = {}; + g_marker_cluster.clearMarkers(true); + g_marker_cluster.addMarkers(g_markers); + /* dont use fitBounds because it's not well centered */ + /* instead use setCenter and setZoom */ + //g_map.fitBounds(g__init_bounds); + g_map.setCenter(coordinates_default); + g_map.setZoom(2); +} + diff --git a/plug/map_prof/scripts/mp_info_window.js b/plug/map_prof/scripts/mp_info_window.js new file mode 100644 index 0000000..bc75e5a --- /dev/null +++ b/plug/map_prof/scripts/mp_info_window.js @@ -0,0 +1,82 @@ + +function attach_info_window(map, marker, events, infowindow) { + + /* + * https://developers.google.com/maps/documentation/javascript/infowindows + * https://stackoverflow.com/questions/11106671/google-maps-api-multiple-markers-with-infowindows + */ + + let window_content = ` +
+
+
+

${events[0].location.address}

+
+
+ `; + for (key in events) { + window_content += ` + +

${events[key].title}

+
+ `; + }; + window_content += ` +
+
+ `; + + marker.addListener('click', () => { + + let view_center = map.getCenter(); + // height must be half css value (mp_info_windows.css -> '--size: XXXpx;') + let window_offset = { width: 0, height: 275 }; + + infowindow.setOptions({ + //disableAutoPan: true, + disableAutoPan: false, + content: window_content, + + /* dimensions */ + //maxWidth: 400, + //minWidth: 400, + + /* center window */ + position: view_center, + pixelOffset: window_offset, + + //shouldFocus: false, + }); + + infowindow.open(map); + }); + +} + +/* + event : {} + - heure_de_debut : ""; + - heure_de_fin : ""; + - categorie : ""; + - date : ""; + - pays : ""; + - ville : ""; + - adresse : ""; + - prenom : ""; + - nom : ""; + - irl : bool; + - id : x; + - index : x (default null); + - title : ""; + - url : ""; + - location : {} + - street : ""; + - city : ""; + - country : ""; + - address : ""; + - approximate : bool; + - coordinates : {} + - lat : x; + - lng : x; +*/ + diff --git a/plug/map_prof/scripts/mp_init_map.js b/plug/map_prof/scripts/mp_init_map.js new file mode 100644 index 0000000..1e652ab --- /dev/null +++ b/plug/map_prof/scripts/mp_init_map.js @@ -0,0 +1,72 @@ + +let g_map = {}; +let g_markers = []; +let g_marker_cluster = {}; +let g_indexes = {}; +let g_infowindow = {}; +const g_world_bound = { + north: 80, + south: -80, + west: -180, + east: 180, +}; + +function mp_init_map() { + + /* + * following variable are created by mp_add_to_script.php + * - let locations = [ + * { + * coordinates: {} + * events : [{}, ...] + * }, + * ... + * ] + * + * { } + * { [ ] } + * - filters: { - pays : [ { - _name : "" } ] } + * { [ { - villes : [] } ] } + * { [ { - categories: [] } ] } + * { [ { - indexes : [] } ] } + * { [ { - mode : [] }, ...] } + * { [ ] } + * { } + * { - villes : ... } + * { - categories: ... } + * { - mode : ... } + * { } + * + * - let coordinates_default = {lat: ,lng: } + * - let icon_color = "" + * - let icon_color_back = "" + * - let icon_size = [x, y] + * - let cluster_size_factor = Number + * - let map_zoom = x + * - let max_zoom = x + */ + + + let map_div = document.getElementById("ljdp_map"); + //let filters_div = document.getElementById("ljdp_map_filters"); + g_infowindow = new google.maps.InfoWindow(); + + g_map = create_map(map_div); + g_markers = create_markers(g_map, locations, g_infowindow); + g_marker_cluster = draw_clusters(g_map, g_markers); + + // add listener to close infowindow + // https://developers.google.com/maps/documentation/javascript/events + g_map.addListener('click', function() { + g_infowindow.close(); + }); + g_map.addListener('drag', function() { + g_infowindow.close(); + }); + g_map.addListener('zoom_changed', function() { + g_infowindow.close(); + }); + + //g_map.addListener('clusteringbegin', restrict_map(false)); + +} diff --git a/plug/map_prof/scripts/mp_publish_error.js b/plug/map_prof/scripts/mp_publish_error.js new file mode 100644 index 0000000..5d1270e --- /dev/null +++ b/plug/map_prof/scripts/mp_publish_error.js @@ -0,0 +1,21 @@ + +console.log("publish error"); + +wp.data.dispatch( 'core/notices' ).createNotice( + 'error', // Can be one of: success, info, warning, error. + 'impossible de publier : le pays est invalide', // Text string to display. + { + isDismissible: true, // Whether the user can dismiss the notice. + } +); + +//( function ( wp ) { +// console.log("publish error"); +// wp.data.dispatch( 'core/notices' ).createNotice( +// 'error', // Can be one of: success, info, warning, error. +// 'impossible de publie : le pays est invalide', // Text string to display. +// { +// isDismissible: true, // Whether the user can dismiss the notice. +// } +// ); +//} )( window.wp ); diff --git a/plug/map_prof/settings/mp_globals.php b/plug/map_prof/settings/mp_globals.php new file mode 100644 index 0000000..d64fb4e --- /dev/null +++ b/plug/map_prof/settings/mp_globals.php @@ -0,0 +1,80 @@ + 46.227638, "lng" => 2.213749]; // france +if (isset($mp_settings_coordinates_default)) + $mp_coordinates_default = $mp_settings_coordinates_default; + + +/* ICON COLOR +*/ +$mp_icon_color = "#ba197a"; +$mp_icon_color_back = "#ffffff99"; +if (isset($mp_settings_icon_color)) + $mp_icon_color = $mp_settings_icon_color; +if (isset($mp_settings_icon_color_back)) + $mp_icon_color_back = $mp_settings_icon_color_back; + + +/* ICON STROKE WIDTH +*/ +$mp_icon_stroke_width = 6; +if (isset($mp_settings_icon_stroke_width)) + $mp_icon_stroke_width = $mp_settings_icon_stroke_width; + + +/* MAX ZOOM +*/ +$mp_max_zoom = 5; +if (isset($mp_settings_max_zoom)) + $mp_max_zoom = $mp_settings_max_zoom; + + +?> diff --git a/plug/map_prof/settings/mp_optionnals.php b/plug/map_prof/settings/mp_optionnals.php new file mode 100644 index 0000000..0722820 --- /dev/null +++ b/plug/map_prof/settings/mp_optionnals.php @@ -0,0 +1,86 @@ + 30.0, "lng" => -1.0]; // carte mieux centree + + + +/* ************************************ + couleurs d'icones + - couleur de contour + - couleur de remplissage + _ + valeurs par defaut "#ba197a" + "#ffffff99" + ************************************ */ +//$mp_settings_icon_color = "#d168a8"; +//$mp_settings_icon_color_back = "#ffffff80"; // transparency : + // 0.0 : 00 + // 0.1 : 1a + // 0.2 : 33 + // 0.3 : 4d + // 0.4 : 66 + // 0.5 : 80 + // 0.6 : 99 + // 0.7 : b3 + // 0.8 : cc + // 0.9 : e6 + + + +/* ************************************ + epaisseur de trait des icones + _ + valeurs par defaut "6" + ************************************ */ +$mp_settings_icon_stroke_width = 8; + + + + +/* ************************************ + zoom automatique maximum sur les + marqueurs + _ + valeurs par defaut "5" + ************************************ */ +$mp_settings_max_zoom = 4; + + + +?> diff --git a/plug/map_prof/settings/mp_required.php b/plug/map_prof/settings/mp_required.php new file mode 100644 index 0000000..ff39475 --- /dev/null +++ b/plug/map_prof/settings/mp_required.php @@ -0,0 +1,13 @@ + diff --git a/plug/map_prof/settings/mp_url_api.php b/plug/map_prof/settings/mp_url_api.php new file mode 100644 index 0000000..3ae9fca --- /dev/null +++ b/plug/map_prof/settings/mp_url_api.php @@ -0,0 +1,23 @@ + 'https://maps.googleapis.com/maps/api/js', + 'key' => $mp_api_key, + 'callback' => 'mp_init_map', + ); + $mp_src = ""; + foreach ($mp_url as $url_key => $url_value) { + if ($url_key === 'src') { + $mp_src .= $url_value; + if (count($mp_url) > 1) + $mp_src .= "?"; + } + else + $mp_src .= "&" . $url_key . "=" . $url_value; + }; + + return $mp_src; +} +?> diff --git a/plug/map_prof/srcs/errors/mp_address_errors.php b/plug/map_prof/srcs/errors/mp_address_errors.php new file mode 100644 index 0000000..93ef820 --- /dev/null +++ b/plug/map_prof/srcs/errors/mp_address_errors.php @@ -0,0 +1,96 @@ +approximate) { + return false; + } + } + + return true; +} + +function mp_is_address_complete($post, $id, $location) { + + // is presentiel but not complete address ? + $presentiel = get_field("mode", $id); + if ($presentiel[0] === "En présentiel") { + if (strlen($location->street) == 0) { + return false; + } + if (strlen($location->city) == 0) { + return false; + } + } + + return true; +} + +function mp_is_valid_address($post, $id, $location) { + + // is coordinates ? + if ($location->coordinates == null) + return false; + + return true; +} + +function mp_fill_address_message($post, $id, $location) { + + $message = '

article : "' + . $post->post_title . '"

- adresse fournie : "' + . get_field('adresse', $id) . ', ' + . get_field('ville', $id) . ', ' + . get_field('pays', $id) + . '"

- adresse trouvée : "' + . $location->address + . '"

'; + + return $message; +} + +function mp_find_address_errors() { + + $errors = ""; + $incompletes = ""; + $approximates = ""; + $count_errors = 0; + $count_incompletes = 0; + $count_approximates = 0; + + $get_posts_args = array( + 'numberposts' => -1, + 'post_status' => 'publish', + 'post_type' => 'post', + ); + $posts = get_posts($get_posts_args); + foreach ($posts as $post) { + $id = $post->ID; + $location = get_field('location', $id); + if (! mp_is_valid_address($post, $id, $location)) { + $count_errors++; + $errors .= mp_fill_address_message($post, $id, $location); + } + // else if (! mp_is_address_complete($post, $id, $location)) { + // $count_incompletes++; + // $incompletes .= mp_fill_address_message($post, $id, $location); + // } + else if (! mp_is_precise($post, $id, $location)) { + $count_approximates++; + $approximates .= mp_fill_address_message($post, $id, $location); + } + } + $message = "

nombre d'erreurs : " . $count_errors . "

"; +// $message .= "

nombre d'adresses incompletes pour des evenements en presentiels : " . $count_incompletes . "

"; + $message .= "

nombre d'adresses approximatives pour des evenements en presentiels : " . $count_approximates . "

"; + $message .= "

erreurs :

" . $errors; +// $message .= "

adresses incompletes:

" . $incompletes; + $message .= "

approximatives :

" . $approximates; + + return $message; +} + +?> diff --git a/plug/map_prof/srcs/map/mp_add_to_scripts.php b/plug/map_prof/srcs/map/mp_add_to_scripts.php new file mode 100644 index 0000000..c8a991d --- /dev/null +++ b/plug/map_prof/srcs/map/mp_add_to_scripts.php @@ -0,0 +1,34 @@ + $var) { + wp_add_inline_script('mp_init_map', mp_php_to_js($var, $key), 'before'); + } +} + +?> diff --git a/plug/map_prof/srcs/map/mp_create_div.php b/plug/map_prof/srcs/map/mp_create_div.php new file mode 100644 index 0000000..e563f72 --- /dev/null +++ b/plug/map_prof/srcs/map/mp_create_div.php @@ -0,0 +1,135 @@ +indexes).', '."'".$key."'".')" + onclick="filter_show_only_selection(this, '.json_encode($value->indexes).', '."'".$key."'".')" + onfocus="filter_show_only_selection(this, '.json_encode($value->indexes).', '."'".$key."'".')" + onclick="filter_show_only_selection(this, '.json_encode(array()).', '."'".$key."'".')" + onchange="filter_show_only_selection(this, '.json_encode($value->indexes).', '."'".$key."'".')" + + onchange="filter_show_only_selection(this, '.json_encode(array()).', '."'".$key."'".')" + onchange="filter_event(this, this.options[this.selectedIndex], \''.$key.'\')" + */ + $menu_name_class = 'filter_menu_'.str_replace(" ", "_", $key).''; + $id = "filter_" + . $key + . "_" + . $key + ; + $content = ' + + '; + + return $content; +}; + +function mp_filter_buttons($key, &$filter) { + +/* + onclick="filter_show_only_selection(this, '.json_encode($value->indexes).', '."'".$key."'".', true)" +*/ + $menu_name_class = 'filter_menu_'.str_replace(" ", "_", $key).''; + $content = ''; + foreach ($filter as $key_filter => $value) { + $id = "filter_" + . $key + . "_" + . str_replace( " ", "_", $value->_name) + ; + $content .= ' + + + '; + } + + return $content; +}; + +function mp_create_div(&$filters) { + $mp_map_div = ' +
+ +
+ '; + + foreach ($filters as $key => $filter) { + + if ($key == "mode") + $mp_map_div .= mp_filter_buttons($key, $filter); + else + $mp_map_div .= mp_filter_drop_down($key, $filter); + }; + + $mp_map_div .= ' + + + '; + + $mp_map_div .= ' +
+
+
+ '; + + return $mp_map_div; +}; + + +?> diff --git a/plug/map_prof/srcs/map/mp_get_events.php b/plug/map_prof/srcs/map/mp_get_events.php new file mode 100644 index 0000000..dad16c4 --- /dev/null +++ b/plug/map_prof/srcs/map/mp_get_events.php @@ -0,0 +1,212 @@ + -1, + 'post_status' => 'publish', + 'post_type' => 'post', + ); + $posts_published = get_posts($get_posts_args); + + return $posts_published; +} + +function mp_fill_fields_value($id) { + + /* + * get_field is an ACF function + * in "pure" worpdress use : + * get_post_meta or get_post_custom + * - https://developer.wordpress.org/reference/functions/get_post_meta/ + * - https://developer.wordpress.org/reference/functions/get_post_custom/ + * if you try to use `get_fields(id)` to retrieve all the acf7 custom fields, + * sometimes it fails eventhough you can get a specific value with `get_field(value, id)`, + * it's because acf7 didn´t insert the field itself and so some hidden data is not there : + * - https://coreysalzano.com/wordpress/acf-get_fields-not-working-but-get_field-does/ + */ + + // add fields + $fields = array( + "heure_de_debut", + "heure_de_fin", + "categorie", + "date", + "pays", + "ville", + "adresse", + "prenom", + "nom", + "location", + ); + $event = (object)[]; + foreach($fields as $field) { + $value = get_field($field, $id); + if ($value === "↓") + $value = "Autre"; + if (gettype($value) === "string") + $value = trim($value, " "); + $event->$field = $value; + } + + // add mode irl or online (irl: true | false) + $presentiel = get_field("mode", $id); + $event->irl = false; + if ($presentiel[0] === "En présentiel") + $event->irl = true; + + // add post url + $event->url = get_post_permalink($id); + + return $event; +} + +function mp_get_published_events() { + $posts_list = mp_get_published_posts(); + +// mp_console_log("posts :"); +// mp_console_log($posts_list); +// foreach ($posts_list as $post) { +// mp_console_log("--------------- post :"); +// $id = $post->ID; +// mp_console_log("id: " . $id); +// mp_console_log("adresse: " . $event->adresse); +// mp_console_log("pays: " . $event->pays); +// mp_console_log("ville: " . $event->ville); +// mp_console_log("irl: " . $event->irl); +// mp_console_log($event); +// +// $fields = get_fields($id); +// mp_console_log("fields:"); +// mp_console_log($fields); +// $field_heure = get_field("heure_de_debut", $id); +// mp_console_log("field_heure: " . $field_heure); +// $post_metas = get_post_meta($id); +// mp_console_log("post_metas:"); +// mp_console_log($post_metas); +// $post_custom = get_post_custom($id); +// mp_console_log("post_custom:"); +// mp_console_log($post_custom); +// foreach( $fields as $name => $value ) +// mp_console_log($name . " : " . $value); +// } + + $events = []; + foreach ($posts_list as $post) { + $event = mp_fill_fields_value($post->ID); + $event->id = $post->ID; + $event->title = trim($post->post_title, " "); + $event->index = null; + array_push($events, $event); + } + return $events; +} + +/* + event : {} + - heure_de_debut : ""; + - heure_de_fin : ""; + - categorie : ""; + - date : ""; + - pays : ""; + - ville : ""; + - adresse : ""; + - prenom : ""; + - nom : ""; + - irl : bool; + - id : x; + - index : x (default null); + - title : ""; + - url : ""; + - location : {} + - street : ""; + - city : ""; + - country : ""; + - address : ""; + - approximate : bool; + - coordinates : {} + - lat : x; + - lng : x; +*/ + + +?> diff --git a/plug/map_prof/srcs/map/mp_get_filters.php b/plug/map_prof/srcs/map/mp_get_filters.php new file mode 100644 index 0000000..94a5993 --- /dev/null +++ b/plug/map_prof/srcs/map/mp_get_filters.php @@ -0,0 +1,160 @@ +_name, $b->_name); + + if ($a->_name === "Autre") { + if ($compare !== 0) + return 1; + } + if ($b->_name === "Autre") { + if ($compare !== 0) + return -1; + } + + return $compare; +} + +function mp_already_in_menu(&$menu, $name) { + foreach ($menu as $field) { + if ($field->_name == $name) + return $field; + } + return null; +} + + +/** + * creates the menus + * from the events fields + * and add the index of the event as it is in location (events when they are sorted) + * + * fields: [ countries:"", cities:"", categories:"", ... ] + * name : field's values -> countries, cities, categories, ... + * menu : [ { _name:"", field_1:[], field_2:[] }, ... ] + * index : index of this event in locations[] array + */ +function mp_fill_name($fields, $name, &$menu, $index) { + if ($fields[$name] == null) + return; + if (gettype($fields[$name]) != 'string') + return; + if (strlen($fields[$name]) == 0) + return; + // menu_item, ex: for menu "countries" -> france + $menu_item = mp_already_in_menu($menu, $fields[$name]); + if ($menu_item != null) { + // add to this menu item, eg "Austria", the infos of this + // event, like "city" or "category", if not there already + foreach ($fields as $key_field => $value) { + // no need to add name if already exist + if ($key_field == $name) + continue; + if (! isset($menu_item->$key_field) ) + $menu_item->$key_field = []; + if (!is_string($value)) + continue; + if (strlen($value) != 0) { + if (! in_array($value, $menu_item->$key_field) ) + array_push($menu_item->$key_field, $value); + } + } + // add location index, if not there already + if (! in_array($index, $menu_item->indexes) ) { + array_push($menu_item->indexes, $index); + } + } + else { + $menu_item = (object)[]; + $menu_item->_name = $fields[$name]; + // add lists of event info (cities, countries, ...) + foreach ($fields as $key_field => $value) { + if ($key_field == $name) + continue; + $menu_item->$key_field = []; + if (!is_string($value)) + continue; + if (strlen($value) != 0) + array_push($menu_item->$key_field, $value); + } + // add list of location index + $menu_item->indexes = [$index]; + + // and add this item to list of menu + array_push($menu, $menu_item); + } +} + +function mp_get_filters(&$events) { + $filters = (object)[]; + + foreach ($events as $event) { + + // no index means no coordinates + $index = $event->index; + if ($index === null) + continue; + + // create array of menus + $fields = array( + "Pays" => $event->location->country, + "Catégories" => $event->categorie, + "mode" => ($event->irl)? "En présentiel" : "En ligne", + ); + + // fill all menu with other menus without doubles + foreach ($fields as $name => $value) { + if (! isset($filters->$name)) + $filters->$name = []; + mp_fill_name($fields, $name, $filters->$name, $index); + } + } + + foreach ($filters as $key => $value) { + usort($filters->$key, 'mp_filter_compare'); + } + + return $filters; +} + +/* + { } + { [ ] } +filters: { - countries : [ { - _name : "" } ] } + { [ { - categories: [] } ] } + { [ { - indexes : [] }, ... ] } + { [ ] } + { } + { - categories: } + { - modes : } + { } +*/ + +/* + event : {} + - heure_de_debut : ""; + - heure_de_fin : ""; + - categorie : ""; + - date : ""; + - pays : ""; + - ville : ""; + - adresse : ""; + - prenom : ""; + - nom : ""; + - irl : bool; + - id : x; + - index : x; + - title : ""; + - location : {} + - street : ""; + - city : ""; + - country : ""; + - address : ""; + - approximate : bool; + - coordinates : {} + - lat : x; + - lng : x; +*/ + +?> diff --git a/plug/map_prof/srcs/map/mp_get_locations.php b/plug/map_prof/srcs/map/mp_get_locations.php new file mode 100644 index 0000000..8ff65e5 --- /dev/null +++ b/plug/map_prof/srcs/map/mp_get_locations.php @@ -0,0 +1,66 @@ +coordinates->lat == $coordinates->lat) + if ($location->coordinates->lng == $coordinates->lng) + return $location; + } + return null; +} + +function mp_sort_n_insert(&$event, &$locations) { + $coordinates = $event->location->coordinates; + if ($coordinates == null) + return; + + $already_exist = mp_coord_already_exist($coordinates, $locations); + if ($already_exist) { + // add index to the event + $index = $already_exist->index; + $event->index = $index; + // add event to events[] + array_push($already_exist->events, $event); + } + else { + // create new location object + $location = (object)[]; + $location->events = []; + + // add index to the location and event + $index = count($locations); + $location->index = $index; + $event->index = $index; + // add coordinates to the location + $location->coordinates = $coordinates; + // add first event to events[] + array_push($location->events, $event); + // add this location to locations[] + array_push($locations, $location); + } +} + +function mp_sort_events(&$events) { + $locations = []; + + foreach ($events as $event) { + mp_sort_n_insert($event, $locations); + }; + + return $locations; +} + +/* + + locations = [ + { + index : x + coordinates: {} + events : [{}, ...] + }, + ... + ] + +*/ + +?> diff --git a/plug/map_prof/srcs/map_posts/mp_post_events_pages.php b/plug/map_prof/srcs/map_posts/mp_post_events_pages.php new file mode 100644 index 0000000..953f36a --- /dev/null +++ b/plug/map_prof/srcs/map_posts/mp_post_events_pages.php @@ -0,0 +1,27 @@ +coordinates; + + $mp_coordinates_default = $coordinates; + } +} + +?> diff --git a/plug/map_prof/srcs/menu/mp_menu_content.php b/plug/map_prof/srcs/menu/mp_menu_content.php new file mode 100644 index 0000000..5bb8c81 --- /dev/null +++ b/plug/map_prof/srcs/menu/mp_menu_content.php @@ -0,0 +1,258 @@ + -1, + 'post_status' => 'any', + 'post_type' => 'post', + ); + $posts_list = get_posts($get_posts_args); + + return $posts_list; +} + + + +function mp_posts_published($posts_list) { + + $posts_published = []; + foreach ($posts_list as $post) { + $status = $post->post_status; + if ($status == "publish") + array_push($posts_published, $post); + } + return $posts_published; +} + + + +function mp_have_no_address($posts_list) { + + $posts_no_address = []; + foreach ($posts_list as $post) { + $address = mp_get_address($post->ID); + if (empty($address)) + array_push($posts_no_address, $post); + } + return $posts_no_address; +} + + + +function mp_have_no_coordinates($posts_list) { + + $posts_no_coordinates = []; + foreach ($posts_list as $post) { + $location = get_field("location", $post->ID); + if (empty($location)) + array_push($posts_no_coordinates, $post); + else if (empty($location->coordinates)) + array_push($posts_no_coordinates, $post); + } + return $posts_no_coordinates; +} + + + +function mp_show_list_posts_no_address($posts) { + + echo << +

+ ATTENTION ! +

+

+ + HTML; + echo count($posts); + echo ''; + if (count($posts) == 1) + echo " article n'a pas d'adresse :"; + else + echo " articles n'ont pas d'adresses :"; + echo << +

    + HTML; + foreach ($posts as $post) { + echo << + HTML; + echo 'id: '; + echo $post->ID; + echo ' (status: '; + echo $post->post_status; + echo ') - '; + if (!empty($post->mode)) + echo $post->mode[0]; + echo ' : '; + echo $post->post_title; + echo << + HTML; + } + echo << + + HTML; +} + + + +function mp_show_list_posts_no_coordinates($posts) { + + echo << +

    + INFORMATION : +

    +

    + + HTML; + echo count($posts); + echo ''; + if (count($posts) == 1) + echo " article n'a pas de coordonnees :"; + else + echo " articles n'ont pas de coordonnees :"; + echo << +

      + HTML; + foreach ($posts as $post) { + echo << + HTML; + echo 'id: '; + echo $post->ID; + echo ' (status: '; + echo $post->post_status; + echo ') - '; + if (!empty($post->mode)) + echo $post->mode[0]; + echo ' : '; + echo $post->post_title; + echo << + HTML; + } + echo << +

      + pour actualiser les coordonnees d'un article, il suffit de le remettre en "brouillon" puis de le publier a nouveau +

      + + HTML; +} + + + +function mp_show_post_number($posts_list, $posts_published) { + + echo <<nombre d'articles au total : + HTML; + echo count($posts_list); + echo " (dont "; + echo count($posts_published) . ""; + if (count($posts_published) == 1) + echo " publié)

      "; + else + echo " publiés)

      "; +} + + + +function mp_show_api_key_n_ip() { + global $mp_api_key; + global $mp_api_key_geo; + + echo <<l'adresse ip du serveur est : + HTML; + $external_ip = mp_get_ip(); + echo $external_ip; + echo <<

      + HTML; + + echo <<les cles api de google maps utilisees sont :

      +
        +
      • pour la carte : + HTML; + echo $mp_api_key; + echo <<
      • +
      • pour les coordonnees : + HTML; + echo $mp_api_key_geo; + echo <<
      +

      (elles sont inscrites dans ./settings/mp_required.php)

      + HTML; + + // need to use an api key with special restrictions : + // https://stackoverflow.com/questions/42167695/api-key-browser-api-keys-cannot-have-referer-restrictions-when-used-with-this-ap + echo << + → pour la carte : + cette cle api peut etre restreinte par url, et par api avec l'api "Maps Javascript API" +

      +

      + → pour les coordonnees : + cette cle api ne doit pas etre restreinte par url, elle peut etre restreinte par adresse ip du serveur, et par api avec l'api "Geocoding API" +

      +

      + → pour utiliser une seule cle api : + cette cle api ne doit pas etre restreinte ni par url ni par adresse ip, elle peut etre restreinte par api avec les deux apis "Maps Javascript API" et "Geocoding API" +

      + HTML; +} + + + +function ljdp_map_plugin_content() { + + $posts_list = mp_get_all_posts(); + //mp_console_log("posts_list: "); + //mp_console_log($posts_list); + + $posts_published = mp_posts_published($posts_list); + + $posts_no_address = mp_have_no_address($posts_list); + //mp_console_log("posts_no_address: "); + //mp_console_log($posts_no_address); + + $posts_no_coordinates = mp_have_no_coordinates($posts_list); + //mp_console_log("posts_no_coordinates: "); + //mp_console_log($posts_no_coordinates); + + echo << +

      JIPF map plugin

      + HTML; + + mp_show_post_number($posts_list, $posts_published); + + mp_show_api_key_n_ip(); + + if (count($posts_no_address) > 0) + mp_show_list_posts_no_address($posts_no_address); + + if (count($posts_no_coordinates) > 0){ + mp_show_list_posts_no_coordinates($posts_no_coordinates); + } + else { + echo <<✔ tous les articles ont des coordonnees correctes :)

      + HTML; + } + + echo << + HTML; +} + +?> diff --git a/plug/map_prof/srcs/publish/mp_get_coordinates.php b/plug/map_prof/srcs/publish/mp_get_coordinates.php new file mode 100644 index 0000000..4bc1564 --- /dev/null +++ b/plug/map_prof/srcs/publish/mp_get_coordinates.php @@ -0,0 +1,80 @@ +coordinates = null; + $location->street = ""; + $location->city = ""; + $location->country = ""; + $location->address = ""; + $location->approximate = false; + + $address = mp_get_address($id); + //mp_console_log("adresse: " . $address); + + // get coordinates from google maps api + $geolocation = 'https://maps.googleapis.com/maps/api/geocode/json' + . '?language=fr' + . '&address=' . urlencode($address) + . '&key=' . $mp_api_key_geo; + //mp_console_log("geolocation:"); + //mp_console_log($geolocation); + $jsoncontent = file_get_contents($geolocation); + mp_console_log("jsoncontent:"); + mp_console_log($jsoncontent); + + // extract coordinates from json + // https://developers.google.com/maps/documentation/geocoding/requests-geocoding#Types + $content = json_decode($jsoncontent); + $location->coordinates = $content->results[0]->geometry->location; + $location->address = $content->results[0]->formatted_address; + foreach ($content->results[0]->address_components as $component) { + if (in_array("street_number", $component->types)) + $location->street = $component->long_name; + else if (in_array("route", $component->types)) { + if (strlen($location->street) != 0) + $location->street .= " "; + $location->street .= $component->long_name; + } + else if (in_array("locality", $component->types)) + $location->city = $component->long_name; + else if (in_array("postal_town", $component->types)) { + if (strlen($location->city) != 0) + $location->city .= "/"; + $location->city .= $component->long_name; + } + else if (in_array("country", $component->types)) + $location->country = $component->long_name; + } + if ($content->results[0]->geometry->location_type == "APPROXIMATE") + $location->approximate = true; + + // clean strings + foreach ($location as $value) { + if (gettype($value) != "string") + continue; + $value = trim($value, " "); + } + + return $location; +} + + +?> diff --git a/plug/map_prof/srcs/publish/mp_update_publish.php b/plug/map_prof/srcs/publish/mp_update_publish.php new file mode 100644 index 0000000..d71e646 --- /dev/null +++ b/plug/map_prof/srcs/publish/mp_update_publish.php @@ -0,0 +1,48 @@ + -1, + //'post_status' => 'draft', + 'post_status' => 'publish', + 'post_type' => 'post', + ); + $post_list = get_posts($post_args); + foreach ($post_list as $post) { + wp_update_post(array( + 'ID' => $post->ID, + //'post_status' => 'draft', + 'post_status' => 'publish', + )); + }; +} +add_action( 'admin_post_update_publish', 'mp_update_publish' ); +add_action( 'admin_post_nopriv_update_publish', 'mp_update_publish' ); + +// https://developer.wordpress.org/reference/hooks/admin_post_action/ +// https://wordpress.stackexchange.com/questions/309440/wordpress-plugin-how-to-run-function-when-button-is-clicked +function mp_create_republish_button() { + $content = ' +
      +
      +

      mettre a jour les publications

      +

      + cliquez sur ce bouton pour mettre a jour toutes les publications +
      + une nouvelle page vide va s\'ouvrir dans un nouvel onglet, vous pouvez la fermer +

      +
      + + +
      +
      +
      + '; + return $content; +} + +*/ + +?> diff --git a/plug/map_prof/styles/mp__style.css b/plug/map_prof/styles/mp__style.css new file mode 100644 index 0000000..540ecf6 --- /dev/null +++ b/plug/map_prof/styles/mp__style.css @@ -0,0 +1,22 @@ + +@import "mp_info_windows.css"; +@import "mp_zoom.css"; +@import "mp_filters.css"; + +#ljdp_map_wrapper { + position: relative; +} + +#ljdp_map { + height: 600px; + width: 100%; +} + + +@media only screen and (max-width: 700px) { + #ljdp_map { + height: 400px; + } +} + + diff --git a/plug/map_prof/styles/mp_filters.css b/plug/map_prof/styles/mp_filters.css new file mode 100644 index 0000000..e09b9e2 --- /dev/null +++ b/plug/map_prof/styles/mp_filters.css @@ -0,0 +1,146 @@ + +/* + * FILTERS + */ + +/* + #ba197a; +*/ + +/* ************************************** + GENERAL SETTINGS +*/ + +/* +*/ +#ljdp_map_filters, +#ljdp_map_filters * { + display: flex; + flex-direction: row; + position: relative; + margin: auto; +} + +#ljdp_map_filters { + display: flex !important; + position: relative; + width: 100%; + z-index: 1; + gap: 10px; + margin-bottom: 10px; +} +#ljdp_map_filters .filter_menu { + display: flex !important; + width: auto; + cursor: pointer; + border-radius: 3px; + white-space: nowrap; +} + + + + +/* ************************************** + DROP DOWN MENU +*/ + +/* +*/ +#ljdp_map_filters .filter_menu_drop { + width: 100%; + height: auto; + margin: 0px; + padding: 5px; + font-size: 100%; + font-weight: 500; + color: #666; + border: 1px solid #ba197a; +} +#ljdp_map_filters .filter_menu_drop option { + font-size: 100%; + font-weight: 500; + color: #666; +} + + + + + +/* ************************************** + MENU CHECKBOX +*/ + +#ljdp_map_filters .filter_menu_checkbox p { + --size: 16px; + --left-offset: calc( var(--size) + 5px ); + margin-left: var(--left-offset); +} + +#ljdp_map_filters .filter_menu_checkbox p::before { + content: ""; + position: absolute; + top: calc( 50% - var(--size) / 2 - 1px ); + left: calc( var(--left-offset) * -1 ); + border: 1px solid #ba197a; + border-radius: 3px; + box-sizing: border-box; + width: var(--size); + height: var(--size); +} + +#ljdp_map_filters input.filter_menu_checkbox:checked ++ label.filter_menu_checkbox p::before { + background-color: #ccc; +} + +#ljdp_map_filters input.filter_menu_checkbox:disabled ++ label.filter_menu_checkbox { + cursor: default; +} +#ljdp_map_filters input.filter_menu_checkbox:disabled ++ label.filter_menu_checkbox p::before { + border-color: #ccc; + background-color: #ccc; +} +#ljdp_map_filters input.filter_menu_checkbox:disabled ++ label.filter_menu_checkbox p { + color: #ccc; +} + + + + +/* ************************************** + MENU RESET +*/ + +#ljdp_map_filters .filter_menu_reset { +/* + flex-shrink: 2; + white-space: nowrap; +*/ + border: 1px solid #ba197a; + background-color: #ba197a; + color: #fff; + padding: 5px 10px; +} + + + + + + + +/* ************************************** + RESONSIVE DESIGN +*/ + + +@media only screen and (max-width: 700px) { + #ljdp_map_filters { + flex-wrap: wrap; + margin: 10px; + width: auto; + } +} + diff --git a/plug/map_prof/styles/mp_info_windows.css b/plug/map_prof/styles/mp_info_windows.css new file mode 100644 index 0000000..b31e5fe --- /dev/null +++ b/plug/map_prof/styles/mp_info_windows.css @@ -0,0 +1,187 @@ + +/* + * INFO WINDOW + */ + + + + +/* ************************************** + GOOGLE WINDOW +*/ + +div.gm-style-iw.gm-style-iw-c { + padding: 0px !important; + background-color: transparent; + pointer-events: none; + box-shadow: 0 2px 7px 1px rgba(0,0,0,.3); + box-shadow: none; + border-radius: 0 !important; + max-width: 75vw !important; +} + + + + +/* ************************************** + GOOGLE TRIANGLE +*/ + +.gm-style-iw-tc { + display: none !important; +} + + + + +/* ************************************** + GOOGLE CROICE +*/ + +button.gm-ui-hover-effect { + display: none !important; +} + + + + +/* ************************************** + CONTENT +*/ + +#infowindow_limits, +#infowindow_limits * { + display: flex; + flex-direction: row; + position: relative; + margin: auto; + width: 100%; +} + +#infowindow_limits { + /* height must be twice js 'height' value (mp_info_windows.js -> '{ ... height: XXX }' */ + height: 550px; + max-width: 380px; + flex-direction: column; + pointer-events: none; + background-color: transparent; +} + +#infowindow_limits .infowindow { + pointer-events: auto; + height: auto; + max-height: 400px; + padding: 0px; + overflow: scroll; + flex-direction: column; + border-radius: 3px; + background-color: #fff; + border: 1px solid #ccc; +} + +#infowindow_limits #infowindow_close { + position: absolute; + top: 0px; + right: 0px; + width: 30px; + height: 30px; + cursor: pointer; +} + +#infowindow_limits #infowindow_close::before { + content: ""; + position: absolute; + top: calc(50% - 0.8px); + left: 25%; + width: 50%; + height: 1.6px; + background-color: #fff; + transform: rotate(-45deg); +} + +#infowindow_limits #infowindow_close::after { + content: ""; + position: absolute; + top: calc(50% - 0.8px); + left: 25%; + width: 50%; + height: 1.6px; + background-color: #fff; + transform: rotate(45deg); +} + +#infowindow_limits .infowindow_head { + padding: 5px 10px; + margin: 0px; + background-color: #ab197a; +} + +#infowindow_limits .infowindow_head p { + font-size: 115%; + font-weight: 500; + line-height: 1.7em; + color: #fff; + margin-right: 30px; +} + +#infowindow_limits .infowindow_body { + padding: 10px 10px 10px 10px; + margin: 0px; +} + +#infowindow_limits .infowindow_body::after { + content: ""; + position: absolute; + bottom: 0px; + left: 0px; + margin: 0px; + width: 100%; + height: 1px; + background-color: #ccc; +} + +#infowindow_limits .infowindow_body p { + font-size: 115%; + font-weight: 500; + line-height: 1.7em; + color: #666; +} + + + + +/* ************************************** + HIDE SCROLL BARS +*/ +/* chrome safari opera */ +.gm-style-iw-d::-webkit-scrollbar, +#infowindow_limits::-webkit-scrollbar, +#infowindow_limits .infowindow::-webkit-scrollbar { + display: none; +} + +.gm-style-iw-d, +#infowindow_limits, +#infowindow_limits .infowindow { + -ms-overflow-style: none; /* Ie edge */ + scrollbar-width: none; /* firefox */ +} + + + + + +/* ************************************** + MOBILE RESPONSIVE +*/ + +@media only screen and (max-width: 400px) { + #infowindow_limits .infowindow_body p, + #infowindow_limits .infowindow_head p { + font-size: 100%; + } +} + + + + diff --git a/plug/map_prof/styles/mp_zoom.css b/plug/map_prof/styles/mp_zoom.css new file mode 100644 index 0000000..4b75f65 --- /dev/null +++ b/plug/map_prof/styles/mp_zoom.css @@ -0,0 +1,24 @@ + +/* + * ZOOM BUTTONS + */ + + +/* hide the rectangular box container +div.gmnoprint div { + visibility: hidden; +} +*/ +/* shape buttons in circles +button.gm-control-active { + visibility: visible; + border-radius: 50% !important; + background-color: rgb(255, 255, 255) !important; +} +*/ +/* gap between the buttons +button.gm-control-active ~ div { + height: 10px !important; +} +*/ + diff --git a/plug/map_prof/utils/mp_console_log.php b/plug/map_prof/utils/mp_console_log.php new file mode 100644 index 0000000..a975a1a --- /dev/null +++ b/plug/map_prof/utils/mp_console_log.php @@ -0,0 +1,28 @@ +' . $js_code . ''; + echo $js_code; +} + +// function mp_console_log($output, $with_script_tags = true) { +// $js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) . +// ');'; +// if ($with_script_tags) { +// $js_code = ''; +// } +// echo $js_code; +// } + +?> diff --git a/plug/map_prof/utils/mp_get_ip.php b/plug/map_prof/utils/mp_get_ip.php new file mode 100644 index 0000000..84acfee --- /dev/null +++ b/plug/map_prof/utils/mp_get_ip.php @@ -0,0 +1,18 @@ + diff --git a/plug/map_prof_2.zip b/plug/map_prof_2.zip new file mode 100644 index 0000000000000000000000000000000000000000..b09da0163bf19a6496f917b2cc340f1632b21fc8 GIT binary patch literal 46914 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 Ix8foG2L&W=82|tP literal 0 HcmV?d00001 diff --git a/plug/map_prof_3.zip b/plug/map_prof_3.zip new file mode 100644 index 0000000000000000000000000000000000000000..6dff963e5feb7ae4efa4981167481081306be758 GIT binary patch literal 46911 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 GQ2zr+>s{Ia literal 0 HcmV?d00001 diff --git a/srcs/.env b/srcs/.env index 4c2a553..1906f2d 100644 --- a/srcs/.env +++ b/srcs/.env @@ -42,8 +42,8 @@ EXECUTION_TIME=300 #EXPEND_HOST_VOLUME_PLUGINS=$PWD_PATH/srcs/plugins #EXPEND_HOST_VOLUME_CERTS=$PWD_PATH/srcs/requirements/nginx/conf/ssl # EXPENDED LINES : -HOST_VOLUME_CERTS=/home/asususus/Nextcloud/informatique/lejourduprof/srcs/requirements/nginx/conf/ssl -HOST_VOLUME_PLUGINS=/home/asususus/Nextcloud/informatique/lejourduprof/srcs/plugins +HOST_VOLUME_CERTS=/home/asususus/nextcloud_backup/backup_planethoster_server/nextclouddata/hugogogo/files/informatique/ljdp/srcs/requirements/nginx/conf/ssl +HOST_VOLUME_PLUGINS=/home/asususus/nextcloud_backup/backup_planethoster_server/nextclouddata/hugogogo/files/informatique/ljdp/srcs/plugins HOST_VOLUME_DB=/home/asususus/data/lejourduprof/db_volume HOST_VOLUME_WP=/home/asususus/data/lejourduprof/wp_volume diff --git a/srcs/plugins/map_prof/map_prof_hooks.php b/srcs/plugins/map_prof/map_prof_hooks.php index 6392238..ae71118 100644 --- a/srcs/plugins/map_prof/map_prof_hooks.php +++ b/srcs/plugins/map_prof/map_prof_hooks.php @@ -135,8 +135,8 @@ add_action( 'publish_post', 'post_published_coordinates', 10, 2 ); function ljdp_map_menu() { add_menu_page( - 'ljdp map', // page_title - 'ljdp map', // menu_title + 'JIPF map', // page_title + 'JIPF map', // menu_title 'manage_options', // capability 'ljdp-map-plugin', // menu_slug 'ljdp_map_plugin_content' // callback function to display page content diff --git a/srcs/plugins/map_prof/srcs/map/mp_get_filters.php b/srcs/plugins/map_prof/srcs/map/mp_get_filters.php index 141587c..94a5993 100644 --- a/srcs/plugins/map_prof/srcs/map/mp_get_filters.php +++ b/srcs/plugins/map_prof/srcs/map/mp_get_filters.php @@ -53,6 +53,8 @@ function mp_fill_name($fields, $name, &$menu, $index) { continue; if (! isset($menu_item->$key_field) ) $menu_item->$key_field = []; + if (!is_string($value)) + continue; if (strlen($value) != 0) { if (! in_array($value, $menu_item->$key_field) ) array_push($menu_item->$key_field, $value); @@ -71,6 +73,8 @@ function mp_fill_name($fields, $name, &$menu, $index) { if ($key_field == $name) continue; $menu_item->$key_field = []; + if (!is_string($value)) + continue; if (strlen($value) != 0) array_push($menu_item->$key_field, $value); } diff --git a/srcs/plugins/map_prof/srcs/menu/mp_menu_content.php b/srcs/plugins/map_prof/srcs/menu/mp_menu_content.php index 1a4865e..5bb8c81 100644 --- a/srcs/plugins/map_prof/srcs/menu/mp_menu_content.php +++ b/srcs/plugins/map_prof/srcs/menu/mp_menu_content.php @@ -84,7 +84,8 @@ function mp_show_list_posts_no_address($posts) { echo ' (status: '; echo $post->post_status; echo ') - '; - echo $post->mode[0]; + if (!empty($post->mode)) + echo $post->mode[0]; echo ' :
      '; echo $post->post_title; echo <<post_status; echo ') - '; - echo $post->mode[0]; + if (!empty($post->mode)) + echo $post->mode[0]; echo ' :
      '; echo $post->post_title; echo << -

      ljdp map plugin

      +

      JIPF map plugin

      HTML; mp_show_post_number($posts_list, $posts_published); @@ -239,8 +241,9 @@ function ljdp_map_plugin_content() { if (count($posts_no_address) > 0) mp_show_list_posts_no_address($posts_no_address); - if (count($posts_no_coordinates) > 0) + if (count($posts_no_coordinates) > 0){ mp_show_list_posts_no_coordinates($posts_no_coordinates); + } else { echo <<✔ tous les articles ont des coordonnees correctes :)

      diff --git a/srcs/plugins/map_prof/srcs/publish/mp_get_coordinates.php b/srcs/plugins/map_prof/srcs/publish/mp_get_coordinates.php index 023e346..4bc1564 100644 --- a/srcs/plugins/map_prof/srcs/publish/mp_get_coordinates.php +++ b/srcs/plugins/map_prof/srcs/publish/mp_get_coordinates.php @@ -2,6 +2,9 @@ function mp_get_address($id) { $presentiel = get_field("mode", $id); + + if (empty($presentiel)) + return null; // irl or online if ($presentiel[0] === "En présentiel")