diff --git a/README.md b/README.md index db89ffa..c124eae 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,11 @@ # MAP todo: -- redisgn + and - for zoom -> color and thickness +- gather same-places events +- add info-window +- add filter options +- deal with bad address +- redsign + and - for zoom -> color and thickness - [changed plugin directory in wp](https://wordpress.stackexchange.com/questions/120075/how-to-change-location-of-the-plugins-wordpress-themes-folder) - googlemap api key : AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE @@ -19,6 +23,7 @@ todo: - [my post on wordpress stack](https://wordpress.stackexchange.com/questions/410735/i-dont-understand-how-symlinks-in-plugin-work) - [maps api in php](http://www.learningaboutelectronics.com/Articles/Google-maps-API-JSON-PHP.php) - [google maps api url parameters](https://developers.google.com/maps/documentation/javascript/url-params) +- [google maps api references](https://developers.google.com/maps/documentation/javascript/reference) --- diff --git a/srcs/plugins/map_prof/map_prof_hooks.php b/srcs/plugins/map_prof/map_prof_hooks.php index 3ee4079..798c660 100644 --- a/srcs/plugins/map_prof/map_prof_hooks.php +++ b/srcs/plugins/map_prof/map_prof_hooks.php @@ -10,6 +10,8 @@ Author URI: + + /** * inclusions : */ @@ -23,6 +25,8 @@ require_once(dirname(__FILE__) . '/settings/mp_optionnals.php'); + + /** * global variables : */ @@ -50,6 +54,11 @@ $mp_cluster_size_factor = 2.5; if (isset($mp_settings_cluster_size_factor)) $mp_cluster_size_factor = $mp_settings_cluster_size_factor; +$mp_coordinates_default = (object)["lat" => 46.227638, "lng" => 2.213749]; // france +if (isset($mp_settings_coordinates_default)) + $mp_coordinates_default = $mp_settings_coordinates_default; + + /** @@ -65,6 +74,8 @@ add_filter('script_loader_tag', 'mp_tag_scripts', 10, 2); + + /** * when 'shortcode' found in page, enqueue scripts and styles, * run php script, and replace shortcode by return value @@ -91,14 +102,20 @@ add_shortcode('lejourduprof_map', 'mp_add_div'); + + /** * when a post is published, check its coordinates */ function post_published_coordinates($id, $post) { - $coordinates = mp_get_coordinates($id); - if ( ! add_post_meta( $id, 'coordinates', $coordinates, true ) ) { + $coordinates_valid = true; + $coordinates = mp_get_coordinates($id, $coordinates_valid); + + if ( ! add_post_meta( $id, 'coordinates', $coordinates, true ) ) update_post_meta( $id, 'coordinates', $coordinates ); - } + + if ( ! add_post_meta( $id, 'coordinates_valid', $coordinates_valid, true ) ) + update_post_meta( $id, 'coordinates_valid', $coordinates_valid ); } add_action( 'publish_post', 'post_published_coordinates', 10, 2 ); diff --git a/srcs/plugins/map_prof/mp_add_to_scripts.php b/srcs/plugins/map_prof/mp_add_to_scripts.php index 2e8e14c..0208675 100644 --- a/srcs/plugins/map_prof/mp_add_to_scripts.php +++ b/srcs/plugins/map_prof/mp_add_to_scripts.php @@ -12,20 +12,18 @@ function mp_php_to_js($php_var, $js_var_name) { function mp_add_to_scripts() { global $mp_icon_size; - global $mp_icon_url; - global $mp_icon_cluster_url; global $mp_icon_color; global $mp_cluster_size_factor; - $events_unsorted = mp_get_published_events(); -// $events = mp_sort_events($events_unsorted); - $events = $events_unsorted; + global $mp_coordinates_default; + $events = mp_get_published_events(); + $locations = mp_sort_events($events); - wp_add_inline_script('mp_init_map', mp_php_to_js($events, 'events'), 'before'); - wp_add_inline_script('mp_init_map', mp_php_to_js($mp_icon_url, 'icon_url'), 'before'); - wp_add_inline_script('mp_init_map', mp_php_to_js($mp_icon_cluster_url, 'icon_cluster_url'), 'before'); + //wp_add_inline_script('mp_init_map', mp_php_to_js($events, 'events'), 'before'); + wp_add_inline_script('mp_init_map', mp_php_to_js($locations, 'locations'), 'before'); wp_add_inline_script('mp_init_map', mp_php_to_js($mp_icon_size, 'icon_size'), 'before'); wp_add_inline_script('mp_init_map', mp_php_to_js($mp_icon_color, 'icon_color'), 'before'); wp_add_inline_script('mp_init_map', mp_php_to_js($mp_cluster_size_factor, 'cluster_size_factor'), 'before'); + wp_add_inline_script('mp_init_map', mp_php_to_js($mp_coordinates_default, 'coordinates_default'), 'before'); } ?> diff --git a/srcs/plugins/map_prof/mp_console_log.php b/srcs/plugins/map_prof/mp_console_log.php index ef67172..be85850 100644 --- a/srcs/plugins/map_prof/mp_console_log.php +++ b/srcs/plugins/map_prof/mp_console_log.php @@ -1,11 +1,8 @@ ' . $js_code . ''; - } +function mp_console_log($output) { + $js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) . ');'; + $js_code = ''; echo $js_code; } ?> diff --git a/srcs/plugins/map_prof/mp_get_coordinates.php b/srcs/plugins/map_prof/mp_get_coordinates.php index 1f68d89..4772efb 100644 --- a/srcs/plugins/map_prof/mp_get_coordinates.php +++ b/srcs/plugins/map_prof/mp_get_coordinates.php @@ -1,36 +1,52 @@ $field = $address_part; + $address_section = get_field($field, $id); + $event->$field = $address_section; + if (strlen($address_section) == 0) + $errors++; } + // check errors + if ($errors > 0) + $valid = false; + else + $valid = true; + // concat as an address $address = $event->adresse . "," . $event->ville . "," . $event->pays; // get coordinates from google maps api - $geolocation = 'https://maps.googleapis.com/maps/api/geocode/json' - . '?address=' . urlencode($address) - . '&key=' . $mp_api_key; - $jsoncontent = file_get_contents($geolocation); + if ($errors < 3) { + $geolocation = 'https://maps.googleapis.com/maps/api/geocode/json' + . '?address=' . urlencode($address) + . '&key=' . $mp_api_key; + $jsoncontent = file_get_contents($geolocation); + + // extract coordinates from json + $content = json_decode($jsoncontent); + $coordinates = $content->results[0]->geometry->location; + } + + // if null, set to default (by default, france) + if ($coordinates == null) + $coordinates = $mp_coordinates_default; - // extract coordinates from json - $content = json_decode($jsoncontent); - $coordinates = $content->results[0]->geometry->location; return $coordinates; } diff --git a/srcs/plugins/map_prof/mp_get_events.php b/srcs/plugins/map_prof/mp_get_events.php index 38dee0e..6ecf401 100644 --- a/srcs/plugins/map_prof/mp_get_events.php +++ b/srcs/plugins/map_prof/mp_get_events.php @@ -40,6 +40,11 @@ 34: "adresse_courriel" --- 35: "prenom" --- 36: "nom" + + ADDED BY THIS PLUGIN + +--- 37: "coordinates" +--- 38: "coordinates_valid" */ /* @@ -102,12 +107,14 @@ function mp_get_published_posts() { // ); // $post_list = get_posts($post_args); // foreach ($post_list as $post) { -// wp_update_post(array( -// 'ID' => $post->ID, -// //'post_status' => 'draft', -// 'post_status' => 'publish', -// )); -// } +// //if ( get_field("nom", $post->ID) == "Rakhimov") { +// wp_update_post(array( +// 'ID' => $post->ID, +// //'post_status' => 'draft', +// 'post_status' => 'publish', +// )); +// //}; +// }; $get_posts_args = array( 'numberposts' => -1, @@ -126,6 +133,8 @@ function mp_fill_fields_value($id) { * get_field is an ACF function * in "pure" worpdress use : * get_post_meta or get_post_custom_values + * - https://developer.wordpress.org/reference/functions/get_post_meta/ + * - https://developer.wordpress.org/reference/functions/get_post_custom_values/ */ // add fields @@ -140,6 +149,7 @@ function mp_fill_fields_value($id) { "prenom", "nom", "coordinates", + "coordinates_valid", ); $event = (object)[]; foreach($fields as $field) { @@ -162,14 +172,8 @@ function mp_get_published_events() { $event->id = $post->ID; $event->title = $post->post_title; $event = mp_fill_fields_value($post->ID); - // only add to array if address is complete - if ( isset($event->coordinates) ) - array_push($events, $event); - else - mp_console_log("event address incomplete:"); - mp_console_log($event); + array_push($events, $event); } - mp_console_log($events); return $events; } diff --git a/srcs/plugins/map_prof/mp_sort_events.php b/srcs/plugins/map_prof/mp_sort_events.php index e3d25fc..a3f0f07 100644 --- a/srcs/plugins/map_prof/mp_sort_events.php +++ b/srcs/plugins/map_prof/mp_sort_events.php @@ -1,12 +1,44 @@ coordinates) ) -// array_push($events, $event); -// else -// mp_console_log("event address incomplete:"); -// mp_console_log($event); -//} +function mp_coord_already_exist(&$coordinates, &$locations) { + foreach ($locations as $location) { + if ($location->coordinates->lat == $coordinates->lat) + if ($location->coordinates->lng == $coordinates->lng) + return $location; + } + return null; +} + +function mp_sort_n_insert(&$event, &$locations) { + $coordinates = $event->coordinates; + + $already_exist = mp_coord_already_exist($coordinates, $locations); + if ($already_exist) { + // add event to events[] + array_push($already_exist->events, $event); + } + else { + // create new location object + $location = (object)[]; + $location->events = []; + + // 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; +} ?> diff --git a/srcs/plugins/map_prof/scripts/mp_init_map.js b/srcs/plugins/map_prof/scripts/mp_init_map.js index 38ca0fe..eb634e7 100644 --- a/srcs/plugins/map_prof/scripts/mp_init_map.js +++ b/srcs/plugins/map_prof/scripts/mp_init_map.js @@ -2,9 +2,14 @@ function mp_init_map() { /* * following variable are created by mp_add_to_script.php - * - let events = [{}, {}...] - * - let icon_url = "" - * - let icon_cluster_url = "" + * - let locations = [ + * { + * coord: {} + * events: [{}, ...] + * }, + * ... + * ] + * - let coordinates_default = {lat: ,lng: } * - let icon_color = "" * - let icon_size = [x, y] * - let cluster_size_factor = Number @@ -15,10 +20,11 @@ function mp_init_map() { */ //print_error("error"); - console.log("hello"); + console.log("locations:"); + console.log(locations); // default map center to france - let map_center = {lat:46.227638, lng:2.213749}; + let map_center = coordinates_default; let map_options = { /* map options : https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions */ disableDefaultUI: true, @@ -33,7 +39,6 @@ function mp_init_map() { //draggable: "true", //deprecated center: map_center, } - let svg_icon = window.btoa(` @@ -44,12 +49,6 @@ function mp_init_map() { url: `data:image/svg+xml;base64,${svg_icon}`, scaledSize: new google.maps.Size(icon_size[0], icon_size[1]), }; - let label_options = { - //text: String(count), - text: "?", - //color: icon_label_color, - fontSize: "12px", - }; @@ -59,12 +58,11 @@ function mp_init_map() { let map = new google.maps.Map(document.getElementById("ljdp_map"), map_options); let markers = []; - for (ev of events) { + for (loc of locations) { marker = new google.maps.Marker({ - position: ev.coordinates, + position: loc.coordinates, map: map, icon: icon_options, - //label: label_options, }); markers.push(marker); }; diff --git a/srcs/plugins/map_prof/settings/mp_optionnals.php b/srcs/plugins/map_prof/settings/mp_optionnals.php index 2467d01..0afc511 100644 --- a/srcs/plugins/map_prof/settings/mp_optionnals.php +++ b/srcs/plugins/map_prof/settings/mp_optionnals.php @@ -29,4 +29,13 @@ //$mp_settings_cluster_size_factor = 4; +/* ************************************ + coordonnees par defaut + (pour centrer la carte globale, + et en cas de mauvaises adresses) + valeur par defaut "france" + ************************************ */ +//$mp_settings_coordinates_default = {lat:35.746512, lng:-39.462891}; // oceant atlantique nord + + ?> diff --git a/srcs/plugins/map_prof/settings/mp_required.php b/srcs/plugins/map_prof/settings/mp_required.php index 6e1ea89..5d3da2b 100644 --- a/srcs/plugins/map_prof/settings/mp_required.php +++ b/srcs/plugins/map_prof/settings/mp_required.php @@ -7,9 +7,4 @@ /* cle api de google maps */ $mp_api_key = 'AIzaSyCvdGV2ssD4ov4a9CuIlQhoJyz5gWWiSvE'; -/* nom des fichiers image situe dans le dossier "images" */ -/* pour les icones des marqueurs sur la carte */ -$mp_icon_file = 'marker.png'; -$mp_icon_cluster_file = 'marker_cluster.png'; - ?>