File "test_send_modal_03.php"
Full Path: /home/analogde/www/Administratif/FTP/Monsta-FTP-master/test_send_modal_03.php
File size: 12.14 KB
MIME-type: text/x-php
Charset: utf-8
<?php
//$page_reference = isset($_GET['source']) ? htmlspecialchars($_GET['source']) : '';
//$fichier = isset($_GET['fichier']) ? htmlspecialchars($_GET['fichier']) : '';
//$chemin = isset($_GET['path']) ? htmlspecialchars($_GET['path']) : '';
// Détecter si un fichier doit être téléchargé
if (isset($_GET['download']))
{
$fileId = intval($_GET['download']);
//echo " >>>>>> " . $fileId ."<br>";
//echo $_GET['param1'] ." " .$_GET['param2'] ." " .$_GET['param3'] ."<br>";
$page_reference = $_GET['param1'];
$fichier = $_GET['param2'];
$chemin = $_GET['param3'];
if( $fileId == 0)
{
$fichier_telechargement = $chemin ."/" .$fichier;
}
else
{
// Récupérer les informations du fichier
$fileInfo = pathinfo($fichier);
// Obtenir la partie avant l'extension
$nom_fichier = $fileInfo['filename'];
// Obtenir l'extension
$extension = $fileInfo['extension'];
$version = "_v0" .$fileId;
$fichier_telechargement = $chemin ."/" .$nom_fichier .$version ."." .$extension;
}
//echo " ++++++ " .$fichier_telechargement ."<br>";
if ( file_exists( $fichier_telechargement ))
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($fichier_telechargement) . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($fichier_telechargement));
ob_clean();
flush();
readfile($fichier_telechargement);
exit();
}
}
$page_reference = isset($_GET['source']) ? htmlspecialchars($_GET['source']) : '';
$fichier = isset($_GET['fichier']) ? htmlspecialchars($_GET['fichier']) : '';
$chemin = isset($_GET['path']) ? htmlspecialchars($_GET['path']) : '';
//echo " --->>> " .$page_reference ."<br>";
//echo " --->>> " .$fichier ."<br>";
//echo " --->>> " .$chemin ."<br>";
// mise en forme d'une partie du chemin
$chemin_format = str_replace("~", "/home/analogde", $chemin);
// creation du chemin complet avec le nom du fichier
$recherche = $chemin_format ."/" .$fichier;
//echo " Recherche " . $recherche ."<br>";
$liste_fichiers = [];
$liste_fichiers_version = [];
$liste_fichiers_donnees = [];
$toto = [];
if (file_exists($recherche))
{
$liste_fichiers = scan_repertoire($chemin_format);
//echo "<pre>";
//print_r($liste_fichiers);
//echo "</pre>";
$liste_fichiers_version = detection_fichier_version($fichier, $liste_fichiers);
//echo "<pre>";
//print_r($liste_fichiers_version);
//echo "</pre>";
$liste_fichiers_donnees = info_data_fichiers($chemin_format, $liste_fichiers_version);
// non utiliser
//$transfert = info_data_fichiers($chemin_format, $liste_fichiers_version);
//$liste_fichiers_donnees = $transfert[1];
//echo "<pre>";
//print_r( $liste_fichiers_donnees);
//echo "</pre>";
}
function scan_repertoire($chemin)
{
// Lire le contenu du répertoire
$scan_tous_fichier = scandir($chemin);
$liste_fichiers = [];
foreach ($scan_tous_fichier as $fichier)
{
// Ignorer les entrées spéciales "." et ".."
if ($fichier !== "." && $fichier !== "..")
{
$liste_fichiers[] = $fichier;
}
}
return($liste_fichiers);
}
function detection_fichier_version($fichier, $liste_fichiers)
{
// Extraire la partie du nom sans extension
$baseName = pathinfo($fichier, PATHINFO_FILENAME);
// Tableau pour stocker les fichiers correspondants
$matchingFiles = [];
// on ajoute le fichier en version initial
$matchingFiles[] = $fichier;
// Parcourir la liste des fichiers
foreach ($liste_fichiers as $element)
{
// Extraire la partie du nom sans extension
$currentBaseName = pathinfo($element, PATHINFO_FILENAME);
// Vérifier si le fichier partage une partie commune de nom avec le fichier de référence
if (strpos($currentBaseName, $baseName) === 0 && $currentBaseName !== $baseName)
{
$matchingFiles[] = $element;
}
}
return($matchingFiles);
}
function format_filesize($size, $precision = 2)
{
$units = array('B','kB','MB','GB','TB','PB','EB','ZB','YB');
$step = 1024;
$i = 0;
while (($size / $step) > 0.9)
{
$size = $size / $step;
$i++;
}
return round($size, $precision).$units[$i];
}
function info_data_fichiers($chemin_format, $liste_fichiers)
{
$liste_fichiers_data = [];
foreach ($liste_fichiers as $fichier)
{
// creation du chemin
$recherche_fichier = $chemin_format ."/" .$fichier;
// sauvegarde le chemin
$toto [] = $recherche_fichier;
// Récupérer les informations sur le fichier à partir du chemin
$taille = filesize($recherche_fichier); // Taille en octets
$fichier_creation = filectime($recherche_fichier); // Timestamp de la création
$taille_format = format_filesize($taille, $precision = 2);
// Ajouter les informations au tableau
$liste_fichiers_data[] = [
'nom' => $fichier,
'taille' => $taille_format,
'date_creation' => date('d-m-Y H:i:s', $fichier_creation), // Formater la date
];
}
// non utiliser
// je retournes un tableau qui contient les 2 tableaux
//$transfert = [];
//$transfert[] = $toto;
//$transfert[] = $liste_fichiers_data;
//return( $transfert);
return( $liste_fichiers_data);
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Module gestion des versions</title>
<link rel="icon" type="image/x-icon" href="version.png">
<!-- Lien vers Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
button {
padding: 8px 16px;
background-color: #007BFF;
color: white;
border: none;
cursor: pointer;
font-size: 14px;
}
button:hover {
background-color: #0056b3;
}
.center_bouton {
display: flex;
justify-content: center;
align-items: center;
height: 50px;
/*border: 3px solid green; */
}
</style>
<script>
// Fonction pour afficher la modale avec l'ID du fichier
function showModal(fileId)
{
const validateButton = document.getElementById('validateDownload');
validateButton.dataset.fileId = fileId; // Stocker l'ID du fichier dans le bouton
const modal = new bootstrap.Modal(document.getElementById('actionModal'));
modal.show();
}
// Fonction pour valider et fermer la modale
function validateDownload()
{
const validateButton = document.getElementById('validateDownload');
const fileId = validateButton.dataset.fileId;
const modal = bootstrap.Modal.getInstance(document.getElementById('actionModal')); // Récupérer la modale
modal.hide(); // Fermer la modale
//window.location.href = "?download=" + fileId; // Rediriger pour télécharger le fichier
/*
$page_reference = isset($_GET['source']) ? htmlspecialchars($_GET['source']) : '';
$fichier = isset($_GET['fichier']) ? htmlspecialchars($_GET['fichier']) : '';
$chemin = isset($_GET['path']) ? htmlspecialchars($_GET['path']) : '';
*/
const valeur1 = "<?php echo urlencode($page_reference); ?>";
const valeur2 = "<?php echo urlencode($fichier); ?>";
const valeur3 = "<?php echo urlencode($chemin_format); ?>";
let url = "?download=" + encodeURIComponent(fileId) +
"¶m1=" + valeur1 +
"¶m2=" + valeur2 +
"¶m3=" + valeur3;
window.location.href = url; // Rediriger pour télécharger le fichier
// window.location.href = "?download=" + fileId; // Rediriger pour télécharger le fichier
}
// Fonction pour revenir à la page source
function goBack()
{
window.location.href = "<?php echo htmlspecialchars($page_reference); ?>";
}
</script>
</head>
<body>
<div class="container mt-5">
<h1 class="text-center mb-4">Liste des versions disponibles</h1>
<!-- Tableau -->
<table class="table table-striped table-hover table-bordered">
<thead class="table-dark">
<tr>
<th>Nom</th>
<th>Taille</th>
<th>Heure</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php foreach ($liste_fichiers_donnees as $index => $row):
$blase = $row['nom'];
?>
<tr>
<td><?= htmlspecialchars($row['nom']) ?></td>
<td><?= htmlspecialchars($row['taille']) ?></td>
<td><?= htmlspecialchars($row['date_creation']) ?></td>
<td>
<!-- Bouton pour ouvrir la modale -->
<button onclick="showModal(<?= $index ?>)" class="btn btn-primary btn-sm">
Télécharger
</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<div class="center_bouton">
<button onclick="goBack()">Retour à l'explorateur</button>
</div>
<!-- Fenêtre modale Bootstrap -->
<div class="modal fade" id="actionModal" tabindex="-1" aria-labelledby="actionModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="actionModalLabel">Confirmer le téléchargement</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Voulez-vous télécharger ce fichier ?
</div>
<div class="modal-footer">
<button id="validateDownload" onclick="validateDownload()" class="btn btn-success">Valider</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
</div>
</div>
</div>
</div>
<!-- Lien vers Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>