| Current Path : /home/happyrenas/myreco.online/administration/gestion/ |
Linux webd005.cluster105.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 |
| Current File : /home/happyrenas/myreco.online/administration/gestion/etablissement_ajout.php |
<?
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/../');
include("../../configuration.php");
include("../../includes/fonctions.php");
setlocale(LC_TIME, 'fr_FR.UTF-8');
///////////////////////
//PARAMETRES DE LA PAGE
///////////////////////
$totem = "etablissement_ajout";
$page = "etablissement_ajout";
$ariane = "etablissement_ajout";
$ariane1 = "etablissement_ajout";
$titre = "etablissement_ajout";
///////////////////////
//RECUPERATION ET TRAITEMENT
///////////////////////
$action = $db->escape($_REQUEST['action']);
$miseajour = $db->escape($_REQUEST['miseajour']);
$delete_id = $db->escape($_REQUEST['delete_id']);
$place_id = $db->escape($_REQUEST['place_id']);
$confirmation = $db->escape($_REQUEST['confirmation']);
$thematique_id = $db->escape($_REQUEST['thematique_id']);
$token = $db->escape($_REQUEST['token']);
$hebergement_id = $db->escape($_REQUEST['hebergement_id']);
$date_creation = date("Y-m-d");
$date_heure_creation = date("Y-m-d H:i");
if ($delete_id) {
$fiche = $db->get_row("SELECT * FROM heb WHERE token = '" . $token . "'");
$requete = "DELETE FROM vis_proprio where hebergement_id= ".$hebergement_id." AND id =".$delete_id;
$db->query($requete);
header("Refresh:0; url=etablissement_ajout.php?token=".$token."&miseajour=1");exit;
exit;
}
if ($action == 1 && $place_id) {
$fiche = $db->get_row("SELECT * FROM heb WHERE token = '" . $token . "'");
// Vérifier si le lieu existe déjà pour cet hébergement
$requete="SELECT COUNT(id) FROM vis_proprio WHERE hebergement_id = ".$hebergement_id." AND place_id = '" . $db->escape($place_id) . "'";
//echo $requete;exit;
$num = $db->get_var($requete);
if ($num) {
header("Location: etablissement_ajout.php?token=$token&miseajour=2");
exit;
}
$placeId = urlencode($_POST['place_id']);
$urlMap = "https://www.google.com/maps/place/?q=place_id:{$placeId}";
$urlDetails = "https://maps.googleapis.com/maps/api/place/details/json?place_id={$placeId}&key={$GOOGLE_SERVER_KEY}&language=fr";
// Historisation appel API
$db->query("UPDATE api_historique SET api_appels = api_appels + 1");
$response = file_get_contents($urlDetails);
if ($response === false) {
$erreur = "1";
echo "Probleme API";
exit;
}
$details = json_decode($response, true);
if ($details['status'] !== 'OK') {
$erreur = "2";
exit;
}
// Récupération des données
$placeDetails = $details['result'];
$nomEtablissement = $db->escape($placeDetails['name'] ?? '');
$fullAddress = $db->escape($placeDetails['formatted_address'] ?? '');
$latitude = $placeDetails['geometry']['location']['lat'] ?? null;
$longitude = $placeDetails['geometry']['location']['lng'] ?? null;
$ville = $codePostal = '';
foreach ($placeDetails['address_components'] as $component) {
if (in_array('locality', $component['types'])) {
$ville = $db->escape($component['long_name']);
}
if (in_array('postal_code', $component['types'])) {
$codePostal = $component['long_name'];
}
}
// Calcul de distance
$distance = 0;
if ($latitude && $longitude) {
$latitude = str_replace(",", ".", $latitude);
$longitude = str_replace(",", ".", $longitude);
$latRef = str_replace(",", ".", $fiche->latitude);
$lngRef = str_replace(",", ".", $fiche->longitude);
$distance = round(calculerDistance($latRef, $lngRef, $latitude, $longitude));
if ($distance > 100) {
header("Location: etablissement_ajout.php?token=$token&miseajour=3");
}
}
// Données des avis
$nombreAvis = $placeDetails['user_ratings_total'] ?? 0;
$noteMoyenne = $placeDetails['rating'] ?? 0;
$dernierCommentaire = $placeDetails['reviews'][0]['text'] ?? '';
// Traitement de la photo
$photoUrl = '';
$chemin_relatif = '';
if (!empty($placeDetails['photos'][0]['photo_reference'])) {
$photoReference = $placeDetails['photos'][0]['photo_reference'];
$photoUrl = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=800&photoreference={$photoReference}&key={$GOOGLE_SERVER_KEY}";
// Historisation appel API
$db->query("UPDATE api_historique SET api_appels = api_appels + 1");
$token_nouveau = md5(mt_rand());
$first_letter = strtoupper(substr($token_nouveau, 0, 2));
$destination_dir = DOSSIER_RACINE."/upload/visite/{$first_letter}/";
if (!file_exists($destination_dir)) {
mkdir($destination_dir, 0755, true);
}
$cheminImage = $destination_dir . $token_nouveau . ".jpg";
$chemin_relatif = "/upload/visite/{$first_letter}/{$token_nouveau}.jpg";
$curl = curl_init($photoUrl);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$responsePhoto = curl_exec($curl);
curl_close($curl);
if ($responsePhoto !== false) {
file_put_contents($cheminImage, $responsePhoto);
}
}
// Insertion en base
$requete_insertion = "
INSERT INTO vis_proprio (
token, rating, reviews, place_id, name, photo, cp, ville, thematique_id,latitude,longitude,
full_address, hebergement_id, photo_locale, statut, distance
) VALUES (
'$token_nouveau',
'$noteMoyenne',
'$nombreAvis',
'" . $db->escape($place_id) . "',
'$nomEtablissement',
'$photoUrl',
'$codePostal',
'$ville',
'$thematique_id',
'$latitude',
'$longitude',
'$fullAddress',
'$fiche->id',
'$chemin_relatif',
'1',
'$distance'
)";
$db->query($requete_insertion);
header("Location: etablissement_ajout.php?token=$token&miseajour=1");
exit;
}
?>
<!DOCTYPE html>
<html lang="fr">
<?include("includes/head.php");?>
<body id="kt_body" class="page-loading-enabled page-loading header-fixed header-mobile-fixed subheader-enabled subheader-fixed aside-enabled aside-fixed page-loading" style="background-color:#ECE8E4!important;">
<div id="halt_loader_overlay"></div><div id="halt_loader" class=""><i class="fa fa-spinner fa-spin"></i> <?echo $trad['Chargement des informations, merci de patienter'] ?? '⚠️';?></div>
<div class="d-flex flex-column flex-root">
<!--begin::Page-->
<div class="d-flex flex-row flex-column-fluid page">
<?include("includes/header_left.php");?>
<!--begin::Wrapper-->
<div class="d-flex flex-column flex-row-fluid wrapper" id="kt_wrapper">
<?include("includes/header_top.php");?>
<!--begin::Content-->
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
<!--begin::Subheader-->
<div class="subheader py-2 py-4 subheader-solid" id="kt_subheader">
<div class="container-fluid d-flex align-items-center justify-content-between flex-wrap flex-sm-nowrap">
<div class="d-flex align-items-center">
<div class="btn-group ml-2">
<a class="btn btn-secondary btn-sm" href="index.php?token=<?echo $token;?>"><?echo $trad['Mon compte'] ?? '⚠️';?></a>
</div>
<div class="btn-group ml-2">
<a class="btn btn-primary btn-sm" href="#"><?echo $trad['Ajouter un lieu'] ?? '⚠️';?></a>
</div>
<div class="btn-group ml-2">
<a class="btn btn-secondary btn-sm" href="lieux_visite.php?token=<?echo $token;?>"><?echo $trad['Supprimer un lieu'] ?? '⚠️';?></a>
</div>
<div class="btn-group ml-2">
<a class="btn btn-secondary btn-sm" href="mon_qrcode.php?token=<?echo $token;?>"><?echo $trad['Mon QR code'] ?? '⚠️';?></a>
</div>
<div class="btn-group ml-2">
<a class="btn btn-secondary btn-sm" href="ma_carte.php?token=<?echo $token;?>"><?echo $trad['Ma carte'] ?? '⚠️';?></a>
</div>
<div class="btn-group ml-2">
<a class="btn btn-secondary btn-sm" href="find.php?token=<?echo $token;?>"><?echo $trad['find'] ?? '⚠️';?></a>
</div>
</div>
</div>
</div>
<!--end::Subheader-->
<?
$myquery = "select * from heb where token = '$token'";
$fiche = $db->get_row($myquery);
?>
<div class="d-flex flex-column-fluid">
<div class="container-fluid">
<form id="formulaire" action="etablissement_ajout.php" method="post" >
<input type="hidden" name="hebergement_id" value="<?echo $fiche->id;?>">
<input type="hidden" name="action" value="1">
<input type="hidden" name="token" value="<?echo $fiche->token;?>">
<input type="hidden" id="place_id" name="place_id">
<?//echo $requete_insertion;?>
<div class="row">
<div class="col-xl-12" >
<div class="card card-custom" style="border: 1px solid <?echo $couleur_bordure;?>;">
<div class="card-header card-header-tabs-line">
<h3 class="card-title "><?echo $trad['Ajouter un lieu'] ?? '⚠️';?></h3>
<div class="card-toolbar">
<button type="submit" form="formulaire" id="form_bouton" class="form_bouton btn btn-sm btn-primary " onclick="showLoader();"><?echo $trad['Ajouter un lieu'] ?? '⚠️';?></button>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-xl-6" >
<div class="form-group">
<label><?echo $trad['Ajouter un lieu'] ?? '⚠️';?> <span class="text-danger">*</span></label>
<div class="input-group">
<input required type="text" class="form-control" id="etablissement" placeholder="<?echo $trad['Saisir le nom du lieu ou son adresse exacte'] ?? '⚠️';?>">
</div>
</div>
<div class="form-group">
<label><?echo $trad['Catégorie'] ?? '⚠️';?> <span class="text-danger">*</span></label>
<div class="input-group">
<select class="form-control" name="thematique_id" id="thematique_id">
<?php foreach ($categories_proprio as $key => $label): ?>
<option value="<?= $key ?>" >
<?echo $trad[$key] ?? '⚠️';?>
</option>
<?php endforeach; ?>
</select>
</div>
</div>
</div>
</div>
<?if ($erreur) {?>
<div class="alert alert-custom alert-notice alert-light-primary fade show" role="alert">
<div class="alert-icon"><i class="flaticon-warning"></i></div>
<div class="alert-text">
<?echo $trad['Une erreur a eu lieu, merci de renouveler la demande'] ?? '⚠️';?>
</div>
</div>
<?}?>
</div>
<div class="card-footer text-right ">
</div>
</div>
</div>
</div>
</form>
<?
$myquery = "SELECT * from vis_proprio where 1 and hebergement_id=".$fiche->id ." order by distance + 0";
$myquery_calls = $db->get_results($myquery);
?>
<div class="row">
<?
if (!empty($myquery_calls))
{
?>
<?php foreach ($myquery_calls as $liste):
$photo_token = $liste->token; // ou token généré pour chaque lieu
$photo_id = $liste->id; // identifiant unique pour distinguer les composants
$prefix = substr($photo_token, 0, 2);
$prefix=strtoupper($prefix);
$photo_url = "/upload/visite/$prefix/$photo_token.jpg";
$photo_full_path = DOSSIER_RACINE."/$photo_url";
?>
<div class="col-xl-3 mt-4">
<div class="card" style="border: 1px solid <?= $couleur_bordure; ?>;">
<div class="card-header h-100">
<h3 class="card-title"><?= $liste->name; ?></h3>
<div class="card-toolbar">
<a href="etablissement_ajout.php?token=<?= $token; ?>&hebergement_id=<?= $fiche->id; ?>&delete_id=<?= $liste->id; ?>"
class="form_bouton btn btn-danger"><?= $trad['Supprimer'] ?? '⚠️'; ?></a>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-xl-12">
<h3 class="card-title"><?= $liste->cp; ?> <?= $liste->ville; ?></h3>
<h4 class="card-title"><?= $label_a; ?> <?= $liste->distance; ?> km.</h4>
<?php if (file_exists($photo_full_path)): ?>
<img id="photoActuelle_<?= $photo_id ?>" class="img-fluid" style="max-height: 300px;"
src="../../../<?= $photo_url ?>?v=<?= uniqid() ?>">
<?php else: ?>
<p id="photoActuelleMessage_<?= $photo_id ?>">Aucune photo</p>
<?php endif; ?>
<div class="custom-file mt-2">
<input type="file" class="custom-file-input" id="photoInput_<?= $photo_id ?>">
<label class="custom-file-label" for="photoInput_<?= $photo_id ?>">Choisir une photo...</label>
</div>
<input type="hidden" id="token_<?= $photo_id ?>" value="<?= $photo_token ?>">
<button type="button" class="btn btn-sm btn-primary mt-2 uploadPhotoBtn" data-id="<?= $photo_id ?>">
<i class="fa fa-upload"></i> Uploader
</button>
<div id="uploadResult_<?= $photo_id ?>" class="text-success small mt-1"></div>
</div>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
<?}?>
</div>
</div>
</div>
<!--end::Content-->
</div>
<!--begin::Footer-->
<?include("includes/footer.php");?>
<!--end::Footer-->
</div>
<!--end::Wrapper-->
</div>
<!--end::Page-->
</div>
<!--end::Main-->
<?include("includes/extrav2.php");?>
<!-- Charge l'API correctement -->
<script
src="https://maps.googleapis.com/maps/api/js?key=<?= htmlspecialchars($GOOGLE_FRONT_KEY) ?>&libraries=places&v=weekly&loading=async&callback=initMap"
async defer></script>
<script>
// appelée par le callback=initMap une fois l'API prête
function initMap() {
const input = document.getElementById('etablissement');
if (!input) {
console.error("#etablissement introuvable");
return;
}
const options = {
types: ['establishment'],
componentRestrictions: { country: '<?= htmlspecialchars(strtolower($fiche->country_code ?? "fr")) ?>' } // ex: 'fr'
};
const autocomplete = new google.maps.places.Autocomplete(input, options);
autocomplete.addListener('place_changed', () => {
const place = autocomplete.getPlace();
if (!place || !place.place_id) {
console.warn("Aucun place_id retourné.", place);
return;
}
console.log("Place ID sélectionné :", place.place_id);
// renseigne un input hidden #place_id si présent
const placeIdField = document.getElementById('place_id');
if (placeIdField) {
placeIdField.value = place.place_id;
}
});
}
</script>
<script type="text/javascript" class="init">
$(document).ready(function() {
$('.uploadPhotoBtn').on('click', function () {
const id = $(this).data('id');
const fileInput = $('#photoInput_' + id)[0];
const token = $('#token_' + id).val();
if (!fileInput.files.length) {
alert('Veuillez sélectionner une photo.');
return;
}
const formData = new FormData();
formData.append('photo', fileInput.files[0]);
formData.append('token', token);
formData.append('table', 'vis_proprio');
showLoader();
$.ajax({
url: '../upload_photo_visite.php',
type: 'POST',
data: formData,
processData: false,
contentType: false,
dataType: 'json',
success: function (response) {
$('#uploadResult_' + id).html(response.message);
const imageUrl = response.photo_url + '?v=' + Math.random();
if ($('#photoActuelle_' + id).length) {
$('#photoActuelle_' + id).attr('src', imageUrl);
} else {
$('#photoActuelleMessage_' + id).remove();
$('#photoInput_' + id).closest('.card-body').prepend('<img id="photoActuelle_' + id + '" class="img-fluid" style="max-height: 300px;" src="' + imageUrl + '">');
}
},
error: function () {
$('#uploadResult_' + id).html('Erreur AJAX.');
},
complete: function () {
hideLoader();
}
});
});
// mise à jour dynamique du label
$('.custom-file-input').on('change', function () {
const fileName = $(this).val().split('\\').pop();
$(this).next('.custom-file-label').html(fileName);
});
////////////////////////////
//MISE A JOUR NOTIFICATION//
////////////////////////////
<?if ($miseajour==1) {$title="Mise à jour demandée";$message="La mise à jour a été effectuée avec succès";$type="success";}?>
<?if ($miseajour==2) {$title="Mise à jour demandée";$message="Doublon detecté";$type="info";}?>
<?if ($miseajour==3) {$title="Mise à jour demandée";$message="Distance supérieure à 100 km";$type="danger";}?>
<?if ($miseajour) {?>
$.notify({title: '<?echo $title;?>',message: '<?echo $message;?>',},{element: 'body',position: null,type: "<?echo $type;?>",allow_dismiss: true,newest_on_top: true,spacing: 10,delay : 1000,placement: {from: "top",align: "center"},offset: {x: 30,y: 30},z_index: 10000,animate: {enter: 'animate__animated animate__bounce',exit: 'animate__animated animate__bounce'}});
<?}?>
});
</script>
<?include("includes/end.php");?>
</body>
</html>