<?php
// on vérifie qu'un utilisateur est connecté
$user_id = $_SESSION['user']['user_id'];
if (!$user_id) {
die(json_encode(array(
'error' => "Vous avez été déconnecté, merci de relancer l'application",
)));
}
// on récupère les variables POST
$id_post = htmlspecialchars($_POST['id_post'],ENT_QUOTES)?:0; // n'a une valeur que s'il s'agit d'une édition, si pas de valeur ou valeur=0 alors c'est une création
$timestamp_livraison = htmlspecialchars($_POST['timestamp_livraison'],ENT_QUOTES);
$nom_destinataire = htmlspecialchars($_POST['nom_destinataire'],ENT_QUOTES);
$lat = htmlspecialchars($_POST['lat'],ENT_QUOTES);
$lng = htmlspecialchars($_POST['lng'],ENT_QUOTES);
$numero = htmlspecialchars($_POST['numero'],ENT_QUOTES);
$rue = htmlspecialchars($_POST['rue'],ENT_QUOTES);
$cp = htmlspecialchars($_POST['cp'],ENT_QUOTES);
$ville = htmlspecialchars($_POST['ville'],ENT_QUOTES);
$departement = htmlspecialchars($_POST['departement'],ENT_QUOTES);
$pays = htmlspecialchars($_POST['pays'],ENT_QUOTES);
$pays_code = htmlspecialchars($_POST['pays_code'],ENT_QUOTES);
// s'il s'agit d'une édition, on vérifie que l'utilisateur a bien le droit d'éditer ce post
// ici on utilise un champ ACF "utilisateur" pour vérifier qu'il correspond bien à l'ID de l'utilisateur, mais d'autres méthodes peuvent être envisagées, comme la propriété par auteur native de WP, etc
if ($id_post) {
if (get_field('utilisateur', $id_post)!=$user_id) {
die(json_encode(array(
'error' => "Vous avez n'avez pas le droit de modifier ce post",
)));
}
}
// on crée ou on édite le post CTP type "livraison" puis on en récupère l'ID (qui ne change pas dans le cas d'une édition)
$id_post = wp_insert_post(array(
'ID' => $id_post,
'post_type' => 'livraison',
'post_status' => 'publish',
'post_title' => 'Livraison '.get_field('nom', $user_id).' '.get_field('prenom', $user_id).' pour '.$nom_destinataire,
));
// on met à jours les différents ACF
update_field('utilisateur', $user_id, $id_post);
update_field('date', date('Y-m-d', $timestamp_livraison), $id_post); // un ACF type date s'enregistre sous le format 'Y-m-d', un type date et heure serait sous la forme 'Y-m-d H:i:s'
update_field('nom_destinataire', $nom_destinataire, $id_post);
update_field('adresse', array( // ACF type Google Maps, voir https://pastebin.com/hjudHjUq
'address' => $numero.' '.$rue.', '.$cp.' '.$ville.', '.$pays,
'lat' => $lat,
'lng' => $lng,
'street_number' => $numero,
'street_name' => $rue,
'post_code' => $cp,
'city' => $ville,
'state' => $departement,
'country' => $pays,
'country_short' => $pays_code,
), $id_post);
// fonction de mesure de la distance entre deux points géographiques, pas utilisée ici mais laissée en exemple car elle peut servir
function distance($lat1, $lng1, $lat2, $lng2) {
return rad2deg(acos(sin(deg2rad($lat1))*sin(deg2rad($lat2))+cos(deg2rad($lat1))*cos(deg2rad($lat2))*cos(deg2rad($lng1-$lng2))))*111189.577;
}
Comments