change architecture of files
+ hide filter before css is loaded + fusion categories 'autre' and arrow + put categorie 'autre' at bottom of list
This commit is contained in:
96
srcs/plugins/map_prof/srcs/errors/mp_address_errors.php
Normal file
96
srcs/plugins/map_prof/srcs/errors/mp_address_errors.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
function mp_is_precise($post, $id, $location) {
|
||||
|
||||
// is presentiel but not complete address ?
|
||||
$presentiel = get_field("mode", $id);
|
||||
if ($presentiel[0] === "En présentiel") {
|
||||
if ($location->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 = '<br /><p>article : "'
|
||||
. $post->post_title . '"</p><p>- adresse fournie : "'
|
||||
. get_field('adresse', $id) . ', '
|
||||
. get_field('ville', $id) . ', '
|
||||
. get_field('pays', $id)
|
||||
. '"</p><p>- adresse trouvée : "'
|
||||
. $location->address
|
||||
. '"</p>';
|
||||
|
||||
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 = "<h2>nombre d'erreurs : " . $count_errors . "</h2>";
|
||||
// $message .= "<h2>nombre d'adresses incompletes pour des evenements en presentiels : " . $count_incompletes . "</h2>";
|
||||
$message .= "<h2>nombre d'adresses approximatives pour des evenements en presentiels : " . $count_approximates . "</h2>";
|
||||
$message .= "<br /><h2>erreurs :</h2>" . $errors;
|
||||
// $message .= "<br /><h2>adresses incompletes:</h2>" . $incompletes;
|
||||
$message .= "<br /><h2>approximatives :</h2>" . $approximates;
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
?>
|
||||
34
srcs/plugins/map_prof/srcs/map/mp_add_to_scripts.php
Normal file
34
srcs/plugins/map_prof/srcs/map/mp_add_to_scripts.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
function mp_php_to_js($php_var, $js_var_name) {
|
||||
$js_var = 'let ' . $js_var_name . ' = ';
|
||||
$js_var .= json_encode($php_var);
|
||||
$js_var .= ';';
|
||||
return $js_var;
|
||||
}
|
||||
|
||||
function mp_add_to_scripts($to_add) {
|
||||
global $mp_icon_size;
|
||||
global $mp_icon_color;
|
||||
global $mp_icon_color_back;
|
||||
global $mp_icon_size_factor;
|
||||
global $mp_zoom;
|
||||
global $mp_coordinates_default;
|
||||
global $mp_icon_stroke_width;
|
||||
global $mp_max_zoom;
|
||||
|
||||
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_icon_color_back, 'icon_color_back'), 'before');
|
||||
wp_add_inline_script('mp_init_map', mp_php_to_js($mp_icon_size_factor, 'icon_size_factor'), 'before');
|
||||
wp_add_inline_script('mp_init_map', mp_php_to_js($mp_zoom, 'map_zoom'), 'before');
|
||||
wp_add_inline_script('mp_init_map', mp_php_to_js($mp_coordinates_default, 'coordinates_default'), 'before');
|
||||
wp_add_inline_script('mp_init_map', mp_php_to_js($mp_icon_stroke_width, 'icon_stroke_width'), 'before');
|
||||
wp_add_inline_script('mp_init_map', mp_php_to_js($mp_max_zoom, 'max_zoom'), 'before');
|
||||
|
||||
foreach ($to_add as $key => $var) {
|
||||
wp_add_inline_script('mp_init_map', mp_php_to_js($var, $key), 'before');
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
155
srcs/plugins/map_prof/srcs/map/mp_create_div.php
Normal file
155
srcs/plugins/map_prof/srcs/map/mp_create_div.php
Normal file
@@ -0,0 +1,155 @@
|
||||
<?php
|
||||
|
||||
function mp_filter_drop_down($key, &$filter) {
|
||||
|
||||
/*
|
||||
onfocusin="filter_show_only_selection(this, '.json_encode($value->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."'".')"
|
||||
*/
|
||||
$content = '
|
||||
<select
|
||||
form="ljdp_form"
|
||||
class="filter_menu filter_menu_drop"
|
||||
onchange="filter_show_only_selection(this, '.json_encode(array()).', '."'".$key."'".')"
|
||||
>
|
||||
<option selected>'.$key.'</option>
|
||||
';
|
||||
foreach ($filter as $value) {
|
||||
$content .= '
|
||||
<option title="'.json_encode($value->indexes).'">'.$value->_name.'</option>
|
||||
';
|
||||
}
|
||||
$content .= '
|
||||
</select>
|
||||
';
|
||||
|
||||
return $content;
|
||||
};
|
||||
|
||||
function mp_filter_buttons($key, &$filter) {
|
||||
|
||||
$content = '';
|
||||
foreach ($filter as $value) {
|
||||
$content .= '
|
||||
<input
|
||||
type="checkbox"
|
||||
form="ljdp_form"
|
||||
id="checkbox_'.$value->_name.'"
|
||||
class="filter_menu_checkbox"
|
||||
onclick="filter_show_only_selection(this, '.json_encode($value->indexes).', '."'".$key."'".', true)"
|
||||
style="display:none;"
|
||||
>
|
||||
<label
|
||||
for="checkbox_'.$value->_name.'"
|
||||
class="filter_menu filter_menu_checkbox"
|
||||
>
|
||||
<p>'.$value->_name.'</p>
|
||||
</label>
|
||||
';
|
||||
}
|
||||
|
||||
return $content;
|
||||
};
|
||||
|
||||
function mp_create_div(&$filters) {
|
||||
$mp_map_div = '
|
||||
<div id="ljdp_map_wrapper">
|
||||
<form id="ljdp_form" style="display:none;"></form>
|
||||
<div id="ljdp_map_filters" style="display:none;">
|
||||
';
|
||||
|
||||
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 .= '
|
||||
<input
|
||||
type="reset"
|
||||
form="ljdp_form"
|
||||
id="filter_menu_reset"
|
||||
class="filter_menu_button"
|
||||
onclick="filter_show_all()"
|
||||
style="display:none;"
|
||||
>
|
||||
<label
|
||||
for="filter_menu_reset"
|
||||
class="filter_menu filter_menu_reset"
|
||||
>
|
||||
<p>Effacer</p>
|
||||
</label>
|
||||
';
|
||||
|
||||
$mp_map_div .= '
|
||||
</div>
|
||||
<div id="ljdp_map"></div>
|
||||
</div>
|
||||
';
|
||||
|
||||
return $mp_map_div;
|
||||
};
|
||||
|
||||
|
||||
// // version div title
|
||||
//
|
||||
// $content .= '
|
||||
// <div class="filter_menu" style="display:none;">
|
||||
// <div class="filter_menu_drop">
|
||||
// <p class="filter_menu_drop_title" tabindex=0>'.$key.'</p>
|
||||
// <p onclick="filter_show_all()">TOUT DESELECTIONNER</p>
|
||||
// ';
|
||||
// foreach ($filter as $value) {
|
||||
// $content .= '
|
||||
// <p onclick="filter_show_only_selection('.json_encode($value->indexes).', false)">'.$value->_name.'</p>
|
||||
// ';
|
||||
// }
|
||||
// $content .= '
|
||||
// </div>
|
||||
// </div>
|
||||
// ';
|
||||
|
||||
|
||||
// // version input checkbox
|
||||
//
|
||||
// $content .= '
|
||||
// <div class="filter_menu">
|
||||
// <input id="filter_menu_title_${key}" class="filter_menu_title" type="checkbox" />
|
||||
// <label for="filter_menu_title_${key}" class="filter_menu_title">
|
||||
// <p>'.$key.'</p>
|
||||
// </label>
|
||||
// <div class="filter_menu_drop">
|
||||
// ';
|
||||
// foreach ($filter as $value) {
|
||||
// $content .= '
|
||||
// <p>'.$value._name.'</p>
|
||||
// ';
|
||||
// }
|
||||
// $content .= '
|
||||
// </div>
|
||||
// </div>
|
||||
// ';
|
||||
|
||||
|
||||
// // version select
|
||||
//
|
||||
// $content .= '
|
||||
// <div class="filter_menu">
|
||||
// <select id="filter_menu_drop_'.$key.'" class="filter_menu_drop" name="'.$key.'">
|
||||
// ';
|
||||
// foreach ($filter as $value) {
|
||||
// $content .= '
|
||||
// <option value="'.$value._name.'"><p>'.$value._name.'</p></option>
|
||||
// ';
|
||||
// }
|
||||
// $content .= '
|
||||
// </select>
|
||||
// </div>
|
||||
// ';
|
||||
|
||||
?>
|
||||
178
srcs/plugins/map_prof/srcs/map/mp_get_events.php
Normal file
178
srcs/plugins/map_prof/srcs/map/mp_get_events.php
Normal file
@@ -0,0 +1,178 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
FORMS FIELDS
|
||||
|
||||
0: "engagement"
|
||||
1: "fichier"
|
||||
2: "liste_des_depenses"
|
||||
3: "montant_demande"
|
||||
4: "recettes_prevues"
|
||||
5: "depenses_prevues"
|
||||
6: "participation"
|
||||
7: "plan_de_communication"
|
||||
8: "composition_autres"
|
||||
9: "composition_4"
|
||||
10: "composition_3"
|
||||
11: "composition_2"
|
||||
12: "composition_1"
|
||||
13: "composition"
|
||||
14: "resultats_attendus"
|
||||
15: "public_vise"
|
||||
16: "activite_concerne"
|
||||
17: "description_longue"
|
||||
18: "description_courte"
|
||||
--- 19: "categorie"
|
||||
20: "se_connecter"
|
||||
21: "lien_internet"
|
||||
22: "adresse_courriel_de_contact"
|
||||
--- 23: "heure_de_fin"
|
||||
--- 24: "heure_de_debut"
|
||||
--- 25: "date"
|
||||
26: "map"
|
||||
--- 27: "pays"
|
||||
--- 28: "ville"
|
||||
--- 29: "adresse"
|
||||
30: "mode"
|
||||
31: "fonction"
|
||||
32: "institution"
|
||||
33: "telephone"
|
||||
34: "adresse_courriel"
|
||||
--- 35: "prenom"
|
||||
--- 36: "nom"
|
||||
|
||||
ADDED BY THIS PLUGIN
|
||||
|
||||
--- 37: "coordinates"
|
||||
--- 38: "coordinates_valid"
|
||||
*/
|
||||
|
||||
/*
|
||||
GET POST EXEMPLE :
|
||||
|
||||
ID: 29693
|
||||
comment_count: "0"
|
||||
comment_status: "closed"
|
||||
filter: "raw"
|
||||
guid: "https://local_lejourduprof.com/?p=29693"
|
||||
menu_order: 0
|
||||
ping_status: "closed"
|
||||
pinged: ""
|
||||
post_author: "1"
|
||||
post_content: ""
|
||||
post_content_filtered: ""
|
||||
post_date: "2022-11-04 18:05:49"
|
||||
post_date_gmt: "2022-11-04 17:05:49"
|
||||
post_excerpt: "Les enseignants vont présenter les projets développés dans leurs classes et partager leurs pratiques et expériences."
|
||||
post_mime_type: ""
|
||||
post_modified: "2022-11-05 09:39:46"
|
||||
post_modified_gmt: "2022-11-05 08:39:46"
|
||||
post_name: "construisons-ensemble-lavenir"
|
||||
post_parent: 0
|
||||
post_password: ""
|
||||
post_status: "draft"
|
||||
post_title: "Construisons ensemble l'avenir"
|
||||
post_type: "post"
|
||||
to_ping: ""
|
||||
*/
|
||||
|
||||
function mp_get_published_posts() {
|
||||
|
||||
$get_posts_args = array(
|
||||
'numberposts' => -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_values
|
||||
* - https://developer.wordpress.org/reference/functions/get_post_meta/
|
||||
* - https://developer.wordpress.org/reference/functions/get_post_custom_values/
|
||||
*/
|
||||
|
||||
// add fields
|
||||
$fields = array(
|
||||
"heure_de_debut",
|
||||
"heure_de_fin",
|
||||
"categorie",
|
||||
"date",
|
||||
"pays",
|
||||
"ville",
|
||||
"adresse",
|
||||
"prenom",
|
||||
"nom",
|
||||
"test",
|
||||
"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();
|
||||
$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;
|
||||
*/
|
||||
|
||||
|
||||
?>
|
||||
156
srcs/plugins/map_prof/srcs/map/mp_get_filters.php
Normal file
156
srcs/plugins/map_prof/srcs/map/mp_get_filters.php
Normal file
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
function mp_filter_compare($a, $b) {
|
||||
|
||||
$compare = strcmp($a->_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 (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 (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;
|
||||
*/
|
||||
|
||||
?>
|
||||
66
srcs/plugins/map_prof/srcs/map/mp_get_locations.php
Normal file
66
srcs/plugins/map_prof/srcs/map/mp_get_locations.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
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->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 : [{}, ...]
|
||||
},
|
||||
...
|
||||
]
|
||||
|
||||
*/
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
function is_event_post() {
|
||||
if ( is_admin() )
|
||||
return false;
|
||||
if ( get_post_type() != "post" )
|
||||
return 0;
|
||||
if ( get_post_status() != "publish" )
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
function mp_post_event_pages_setting() {
|
||||
global $mp_zoom;
|
||||
global $mp_zoom_set;
|
||||
global $mp_coordinates_default;
|
||||
if (is_event_post()) {
|
||||
$mp_zoom = $mp_zoom_set[1];
|
||||
|
||||
$location = get_field("location");
|
||||
$coordinates = $location->coordinates;
|
||||
|
||||
$mp_coordinates_default = $coordinates;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
69
srcs/plugins/map_prof/srcs/publish/mp_get_coordinates.php
Normal file
69
srcs/plugins/map_prof/srcs/publish/mp_get_coordinates.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
function mp_get_coordinates($id) {
|
||||
global $mp_api_key;
|
||||
$event = (object)[];
|
||||
$location = (object)[];
|
||||
$location->coordinates = null;
|
||||
$location->street = "";
|
||||
$location->city = "";
|
||||
$location->country = "";
|
||||
$location->address = "";
|
||||
$location->approximate = false;
|
||||
|
||||
// get address
|
||||
$address = "";
|
||||
$fields = array(
|
||||
"adresse",
|
||||
"ville",
|
||||
"pays",
|
||||
);
|
||||
foreach($fields as $field) {
|
||||
$address_section = get_field($field, $id);
|
||||
$address .= $address_section . ",";
|
||||
}
|
||||
|
||||
// get coordinates from google maps api
|
||||
$geolocation = 'https://maps.googleapis.com/maps/api/geocode/json'
|
||||
. '?language=fr'
|
||||
. '&address=' . urlencode($address)
|
||||
. '&key=' . $mp_api_key;
|
||||
$jsoncontent = file_get_contents($geolocation);
|
||||
|
||||
// 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;
|
||||
|
||||
foreach ($location as $value) {
|
||||
if (gettype($value) != "string")
|
||||
continue;
|
||||
$value = trim($value, " ");
|
||||
}
|
||||
|
||||
return $location;
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
44
srcs/plugins/map_prof/srcs/publish/mp_update_publish.php
Normal file
44
srcs/plugins/map_prof/srcs/publish/mp_update_publish.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
function mp_update_publish() {
|
||||
$post_args = array(
|
||||
'numberposts' => -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 = '
|
||||
<br />
|
||||
<div style="border:1px solid black;padding:20px;">
|
||||
<h2>mettre a jour les publications</h2>
|
||||
<p>
|
||||
cliquez sur ce bouton pour mettre a jour toutes les publications
|
||||
<br />
|
||||
une nouvelle page vide va s\'ouvrir dans un nouvel onglet, vous pouvez la fermer
|
||||
</p>
|
||||
<form action="'.admin_url('admin-post.php').'" method="post" target="_blank">
|
||||
<input type="hidden" name="action" value="update_publish">
|
||||
<input type="submit" value="mettre a jour">
|
||||
</form>
|
||||
</div>
|
||||
<br />
|
||||
';
|
||||
return $content;
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user