From bcdfc7d592ae98a4c3881b7d68ed5a39056d3245 Mon Sep 17 00:00:00 2001 From: asus Date: Fri, 24 Nov 2023 16:50:26 +0100 Subject: [PATCH] deleted plug folder with fabien plugin --- plug/map_prof.zip | Bin 47727 -> 0 bytes plug/map_prof/images/marker.png | Bin 13618 -> 0 bytes plug/map_prof/images/marker_cluster.png | Bin 10636 -> 0 bytes plug/map_prof/map_prof_hooks.php | 170 -------- 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 | 17 - 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 | 196 --------- plug/map_prof/srcs/map/mp_get_filters.php | 169 -------- 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 | 405 ------------------ .../srcs/publish/mp_get_coordinates.php | 78 ---- .../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 - srcs/.env | 4 +- srcs/requirements/test/.dockerignore | 0 srcs/requirements/test/Dockerfile | 47 -- srcs/requirements/test/tools/hello | Bin 142 -> 0 bytes srcs/requirements/test/tools/hello.asm | 16 - 39 files changed, 2 insertions(+), 2865 deletions(-) delete mode 100644 plug/map_prof.zip delete mode 100644 plug/map_prof/images/marker.png delete mode 100644 plug/map_prof/images/marker_cluster.png delete mode 100644 plug/map_prof/map_prof_hooks.php delete mode 100644 plug/map_prof/mp_enqueue.php delete mode 100644 plug/map_prof/scripts/mp_create_filters.js delete mode 100644 plug/map_prof/scripts/mp_create_map.js delete mode 100644 plug/map_prof/scripts/mp_create_markers.js delete mode 100644 plug/map_prof/scripts/mp_draw_clusters.js delete mode 100644 plug/map_prof/scripts/mp_errors_map.js delete mode 100644 plug/map_prof/scripts/mp_filter_events.js delete mode 100644 plug/map_prof/scripts/mp_info_window.js delete mode 100644 plug/map_prof/scripts/mp_init_map.js delete mode 100644 plug/map_prof/scripts/mp_publish_error.js delete mode 100644 plug/map_prof/settings/mp_globals.php delete mode 100644 plug/map_prof/settings/mp_optionnals.php delete mode 100644 plug/map_prof/settings/mp_required.php delete mode 100644 plug/map_prof/settings/mp_url_api.php delete mode 100644 plug/map_prof/srcs/errors/mp_address_errors.php delete mode 100644 plug/map_prof/srcs/map/mp_add_to_scripts.php delete mode 100644 plug/map_prof/srcs/map/mp_create_div.php delete mode 100644 plug/map_prof/srcs/map/mp_get_events.php delete mode 100644 plug/map_prof/srcs/map/mp_get_filters.php delete mode 100644 plug/map_prof/srcs/map/mp_get_locations.php delete mode 100644 plug/map_prof/srcs/map_posts/mp_post_events_pages.php delete mode 100644 plug/map_prof/srcs/menu/mp_menu_content.php delete mode 100644 plug/map_prof/srcs/publish/mp_get_coordinates.php delete mode 100644 plug/map_prof/srcs/publish/mp_update_publish.php delete mode 100644 plug/map_prof/styles/mp__style.css delete mode 100644 plug/map_prof/styles/mp_filters.css delete mode 100644 plug/map_prof/styles/mp_info_windows.css delete mode 100644 plug/map_prof/styles/mp_zoom.css delete mode 100644 plug/map_prof/utils/mp_console_log.php delete mode 100644 plug/map_prof/utils/mp_get_ip.php delete mode 100644 srcs/requirements/test/.dockerignore delete mode 100644 srcs/requirements/test/Dockerfile delete mode 100755 srcs/requirements/test/tools/hello delete mode 100644 srcs/requirements/test/tools/hello.asm diff --git a/plug/map_prof.zip b/plug/map_prof.zip deleted file mode 100644 index 64ebbfa506a97e3f599e6a21502dcf42d683eb39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47727 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

Dn^=;o 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 === "array") { - // mp_console_log($event->categorie); - // } - // if (str_starts_with($event->categorie, '["')) { - // mp_console_log($event->categorie); - // } - //} - - $locations = mp_sort_events($events); // mp_get_locations.php - //mp_console_log("locations: "); - //mp_console_log($locations); - - $filters = mp_get_filters($events); // mp_get_filters.php - - // if post event instead of map page, change coordinate and zoom - mp_post_event_pages_setting(); - - mp_add_to_scripts(array( - "locations" => $locations, - "filters" => $filters, - "jipf_events" => $events, - )); - - return mp_create_div($filters); -} -add_shortcode('lejourduprof_map', 'mp_ljdp_map'); - -/* - script in divi : - - -*/ - - - - - -/** - * 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 deleted file mode 100644 index 8e00caf..0000000 --- a/plug/map_prof/mp_enqueue.php +++ /dev/null @@ -1,26 +0,0 @@ - diff --git a/plug/map_prof/scripts/mp_create_filters.js b/plug/map_prof/scripts/mp_create_filters.js deleted file mode 100644 index fc7ad8e..0000000 --- a/plug/map_prof/scripts/mp_create_filters.js +++ /dev/null @@ -1,103 +0,0 @@ -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 deleted file mode 100644 index ead03cc..0000000 --- a/plug/map_prof/scripts/mp_create_map.js +++ /dev/null @@ -1,41 +0,0 @@ - -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 deleted file mode 100644 index 00838d2..0000000 --- a/plug/map_prof/scripts/mp_create_markers.js +++ /dev/null @@ -1,57 +0,0 @@ -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 deleted file mode 100644 index 8f00a8a..0000000 --- a/plug/map_prof/scripts/mp_draw_clusters.js +++ /dev/null @@ -1,58 +0,0 @@ -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 deleted file mode 100644 index 4d868a6..0000000 --- a/plug/map_prof/scripts/mp_errors_map.js +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index e2a4f22..0000000 --- a/plug/map_prof/scripts/mp_filter_events.js +++ /dev/null @@ -1,278 +0,0 @@ - -// 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 deleted file mode 100644 index bc75e5a..0000000 --- a/plug/map_prof/scripts/mp_info_window.js +++ /dev/null @@ -1,82 +0,0 @@ - -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 deleted file mode 100644 index 6eda725..0000000 --- a/plug/map_prof/scripts/mp_init_map.js +++ /dev/null @@ -1,72 +0,0 @@ - -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, -}; - -/* - * following variable are created by mp_add_to_script.php - * - let events - * - let locations = [ - * { - * coordinates: {} - * events : [{}, ...] - * }, - * ... - * ] - * - * { } - * { [ ] } - * - let 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 - */ - -function mp_init_map() { - - 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 deleted file mode 100644 index 5d1270e..0000000 --- a/plug/map_prof/scripts/mp_publish_error.js +++ /dev/null @@ -1,21 +0,0 @@ - -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 deleted file mode 100644 index d64fb4e..0000000 --- a/plug/map_prof/settings/mp_globals.php +++ /dev/null @@ -1,80 +0,0 @@ - 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 deleted file mode 100644 index 0722820..0000000 --- a/plug/map_prof/settings/mp_optionnals.php +++ /dev/null @@ -1,86 +0,0 @@ - 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 deleted file mode 100644 index 8172c61..0000000 --- a/plug/map_prof/settings/mp_required.php +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/plug/map_prof/settings/mp_url_api.php b/plug/map_prof/settings/mp_url_api.php deleted file mode 100644 index 3ae9fca..0000000 --- a/plug/map_prof/settings/mp_url_api.php +++ /dev/null @@ -1,23 +0,0 @@ - '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 deleted file mode 100644 index 93ef820..0000000 --- a/plug/map_prof/srcs/errors/mp_address_errors.php +++ /dev/null @@ -1,96 +0,0 @@ -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 deleted file mode 100644 index c8a991d..0000000 --- a/plug/map_prof/srcs/map/mp_add_to_scripts.php +++ /dev/null @@ -1,34 +0,0 @@ - $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 deleted file mode 100644 index e563f72..0000000 --- a/plug/map_prof/srcs/map/mp_create_div.php +++ /dev/null @@ -1,135 +0,0 @@ -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 deleted file mode 100644 index 508ff4b..0000000 --- a/plug/map_prof/srcs/map/mp_get_events.php +++ /dev/null @@ -1,196 +0,0 @@ - -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" => "string", - "heure_de_fin" => "string", - "categorie" => "string", - "date" => "string", - "pays" => "string", - "adresse" => "string", - "prenom" => "string", - "nom" => "string", - "location" => "object", - ); - $event = (object)[]; - foreach($fields as $field => $of_type) { - $value = get_field($field, $id); - - //$actual_type = gettype($value); - //if ($actual_type !== $of_type) { - // mp_console_log("field '" . $field . "' has a value of type '" . $actual_type . "' instead of '" . $of_type . "'"); - //} - - 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 (isset($presentiel[0])) { - 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(); - - $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; - - - - - --------------------------- - -Object { -} - - -*/ - - -?> diff --git a/plug/map_prof/srcs/map/mp_get_filters.php b/plug/map_prof/srcs/map/mp_get_filters.php deleted file mode 100644 index a2282f0..0000000 --- a/plug/map_prof/srcs/map/mp_get_filters.php +++ /dev/null @@ -1,169 +0,0 @@ -_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, &$event) { - 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)) { - //mp_console_log("pour l'article '$event->title', le champ '$key_field' est supposé être de type 'string', mais il est de type '" . gettype($value) . "'"); - //if ( ! add_post_meta( $id, 'problem', "$value", true ) ) - // update_post_meta( $id, 'problem', "" ); - 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)) { - //mp_console_log("pour l'article '$event->title', le champ '$key_field' est supposé être de type 'string', mais il est de type '" . gettype($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", - ); - //mp_console_log("event: "); - //mp_console_log($event); - - // 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, $event); - } - } - - 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; - - url : ""; - - 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 deleted file mode 100644 index 8ff65e5..0000000 --- a/plug/map_prof/srcs/map/mp_get_locations.php +++ /dev/null @@ -1,66 +0,0 @@ -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 deleted file mode 100644 index 953f36a..0000000 --- a/plug/map_prof/srcs/map_posts/mp_post_events_pages.php +++ /dev/null @@ -1,27 +0,0 @@ -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 deleted file mode 100644 index 0462bc0..0000000 --- a/plug/map_prof/srcs/menu/mp_menu_content.php +++ /dev/null @@ -1,405 +0,0 @@ - -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_bad_categories($posts_list) { - - $posts_bad_categories = []; - foreach ($posts_list as $post) { - $value = get_field("categorie", $post->ID); - if (! is_string($value)) { - array_push($posts_bad_categories, $post); - //mp_console_log("categorie:"); - //mp_console_log($value); - } - if (str_starts_with($value, '["')) { - array_push($posts_bad_categories, $post); - } - } - return $posts_bad_categories; -} - - - - -function count_publish($arr_posts) { - return($arr_posts->post_status === "publish"); -} - - - - -function mp_show_list_posts_no_address($posts) { - - $all_posts = count($posts); - $published_posts = count(array_filter($posts, "count_publish")); - - echo << -

- ATTENTION ! -

- - -

- - HTML; - echo "$all_posts"; - echo "$published_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) { - if ($post->post_status === "publish") { - echo << - HTML; - } - else { - 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_bad_categories($posts) { - - $all_posts = count($posts); - $published_posts = count(array_filter($posts, "count_publish")); - - echo << -

    - ATTENTION ! -

    - - -

    - - HTML; - echo "$all_posts"; - echo "$published_posts"; - echo ''; - if (count($posts) == 1) - echo " article à sa catégorie mal formatée :"; - else - echo " articles ont leur catégorie mal formatée :"; - echo << -

      - HTML; - foreach ($posts as $post) { - if ($post->post_status === "publish") { - echo << - HTML; - } - else { - 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 << - catégorie: - HTML; - $categorie = get_field("categorie", $post->ID); - echo ''; - var_dump($categorie); - echo ''; - echo << - - HTML; - } - echo << - - HTML; -} - - - - -function mp_show_list_posts_no_coordinates($posts) { - - $all_posts = count($posts); - $published_posts = count(array_filter($posts, "count_publish")); - - echo << -

      - INFORMATION : -

      - - -

      - - HTML; - echo "$all_posts"; - echo "$published_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) { - if ($post->post_status === "publish") { - echo << - HTML; - } - else { - 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); - - $posts_bad_categories = mp_bad_categories($posts_list); - //mp_console_log("posts_bad_categories: "); - //mp_console_log($posts_bad_categories); - - - echo << - li { - list-style-position: outside; - margin-left: 10px; - } - input.hide_not_published:checked ~ ul li:not(.jipf_post_publish) { - display: none; - } - .count_published_posts { - display: none; - } - input.hide_not_published:checked ~ p .count_all_posts { - display: none; - } - input.hide_not_published:checked ~ p .count_published_posts { - display: inline; - } - -
        -

        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_bad_categories) > 0) - mp_show_list_posts_bad_categories($posts_bad_categories); - - 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 deleted file mode 100644 index 5ba104f..0000000 --- a/plug/map_prof/srcs/publish/mp_get_coordinates.php +++ /dev/null @@ -1,78 +0,0 @@ -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: " . $geolocation); - $jsoncontent = file_get_contents($geolocation); - //mp_console_log("jsoncontent: " . $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 deleted file mode 100644 index d71e646..0000000 --- a/plug/map_prof/srcs/publish/mp_update_publish.php +++ /dev/null @@ -1,48 +0,0 @@ - -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 deleted file mode 100644 index 540ecf6..0000000 --- a/plug/map_prof/styles/mp__style.css +++ /dev/null @@ -1,22 +0,0 @@ - -@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 deleted file mode 100644 index e09b9e2..0000000 --- a/plug/map_prof/styles/mp_filters.css +++ /dev/null @@ -1,146 +0,0 @@ - -/* - * 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 deleted file mode 100644 index b31e5fe..0000000 --- a/plug/map_prof/styles/mp_info_windows.css +++ /dev/null @@ -1,187 +0,0 @@ - -/* - * 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 deleted file mode 100644 index 4b75f65..0000000 --- a/plug/map_prof/styles/mp_zoom.css +++ /dev/null @@ -1,24 +0,0 @@ - -/* - * 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 deleted file mode 100644 index a975a1a..0000000 --- a/plug/map_prof/utils/mp_console_log.php +++ /dev/null @@ -1,28 +0,0 @@ -' . $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 deleted file mode 100644 index 84acfee..0000000 --- a/plug/map_prof/utils/mp_get_ip.php +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/srcs/.env b/srcs/.env index 1906f2d..c0e1292 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_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_CERTS=/home/asususus/nextcloud_backup/backup_planethoster_server/nextclouddata/hugogogo/files/informatique/lejourduprof/srcs/requirements/nginx/conf/ssl +HOST_VOLUME_PLUGINS=/home/asususus/nextcloud_backup/backup_planethoster_server/nextclouddata/hugogogo/files/informatique/lejourduprof/srcs/plugins HOST_VOLUME_DB=/home/asususus/data/lejourduprof/db_volume HOST_VOLUME_WP=/home/asususus/data/lejourduprof/wp_volume diff --git a/srcs/requirements/test/.dockerignore b/srcs/requirements/test/.dockerignore deleted file mode 100644 index e69de29..0000000 diff --git a/srcs/requirements/test/Dockerfile b/srcs/requirements/test/Dockerfile deleted file mode 100644 index 377158b..0000000 --- a/srcs/requirements/test/Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ - -# basic test -# build with : sudo docker build --tag test . -# run with : sudo docker run test -# 'hello' in assembly found here : http://timelessname.com/elfbin/ -FROM scratch -COPY tools/hello / -CMD [ "/hello" ] - -## working -#FROM scratch -#WORKDIR / -#COPY hello / -#CMD [ "/hello" ] - -## working, when WORKDIR is absent, it's default is set to "/" -#FROM scratch -#COPY hello / -#CMD [ "/hello" ] - -## not working, when CMD execute in shell form, instead of exec form [] -#FROM scratch -#COPY hello / -#CMD /hello - -## not working, because c executable need library -#FROM scratch -#COPY hello_c / -#CMD [ "/hello_c" ] - -## not working, when executable is copied to ".", because WORKDIR value is not "." but "/" since we gave it a relativ path so it was build in top of the implicit absolut path "/" -#FROM scratch -#WORKDIR . -#COPY hello . -#CMD [ "hello" ] - -## not working, when WORKDIR is set to the present directory and executable is not copied, because the workdir is not the present directory but a directory in the file system of docker : executable need to be copied there to function -#FROM scratch -#WORKDIR /home/simplonco/Desktop/42/14_inception/inception/srcs/requirements/mariadb -#CMD [ "hello" ] - -## working, because "hello" is copied to "/" and execute from "/" -#FROM scratch -#WORKDIR . -#COPY hello / -#CMD [ "/hello" ] - diff --git a/srcs/requirements/test/tools/hello b/srcs/requirements/test/tools/hello deleted file mode 100755 index 2eeeb9d4d00cf94be2d2a62558028c8f3d74e841..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmb<-^>JflWc0{X2+uFdN#SB*U}j)sU|?uyVBs(U(hNITfW+B`*AWT~Obi+ftPCt* zd5{zXPz?w#0y06E6(lCW0G3|@WGR=ftOdHrfPkYv~a I5;)rc051O*%K!iX diff --git a/srcs/requirements/test/tools/hello.asm b/srcs/requirements/test/tools/hello.asm deleted file mode 100644 index 0cc26b9..0000000 --- a/srcs/requirements/test/tools/hello.asm +++ /dev/null @@ -1,16 +0,0 @@ - SECTION .data -msg: db "Hi World",10 -len: equ $-msg - - SECTION .text - global main -main: - mov edx,len - mov ecx,msg - mov ebx,1 - mov eax,4 - int 0x80 - mov ebx,0 - mov eax,1 - int 0x80 -