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) +
                                "&param1=" + valeur1 +
                                "&param2=" + valeur2 +
                                "&param3=" + 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>