File "work02.php"

Full Path: /home/analogde/www/Python/Monsta-FTP-master/affichahe _expand_collpase_tableau/work02.php
File size: 15.63 KB
MIME-type: text/x-php
Charset: utf-8

<?php

    // Vérifier si une valeur a été envoyée via GET
    if (isset($_GET['file'])) 
    {
        $file = htmlspecialchars($_GET['file']); // Éviter les injections avec htmlspecialchars
        echo "<p>Vous avez cliqué sur le lien pour le fichier : <strong>$file</strong></p>";

        $chemin = "/home/analogde//www/Document_workarea/patrice/plouf";

        $fichier_telechargement = $chemin ."/" . $file;

        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();
        }

    }

/********************************************************************************/

    $chemin = "/home/analogde//www/Document_workarea/patrice/plouf";

    $liste_fichier_repertoire = [];
    $liste_fichier_repertoire = Listing_fichiers_repertoire($chemin);

    //echo "<pre>";
    //print_r($liste_fichier_repertoire);
    //echo "<pre>";

    $result =  groupFilesByVersion($liste_fichier_repertoire);

    // Affichage du résultat
    //echo "<pre>";
    //print_r($result);
    //echo "</pre>";

    // on rajoute la version initial pour toutes les clés
    foreach ($result as $key => &$subArray) 
    {
        //if (empty($subArray)) 
        //{
            $subArray[] = $key; // Insérer la clé dans le tableau vide
        //}
    }

    // Trie les versions dans chaque groupe
    foreach ($result as $baseFile => &$versions) 
    {
        usort($versions, function($a, $b) 
        {
            // Extraction des numéros de version pour le tri
            preg_match('/_v(\d+)\./', $a, $matchesA);
            preg_match('/_v(\d+)\./', $b, $matchesB);
            $versionA = isset($matchesA[1]) ? (int)$matchesA[1] : 0;
            $versionB = isset($matchesB[1]) ? (int)$matchesB[1] : 0;
            return $versionA - $versionB;
        });
    }

    //print_r($result);

    $data = completion_data($result, $chemin );

    // Parcours du tableau et changement du path par le nom du fichier
    foreach ($data as $key => &$subArrays) 
    {
        foreach ($subArrays as &$subArray) 
        {
            if (isset($subArray['file_name'])) 
            {
                // Remplacer le chemin complet par le nom du fichier
                $subArray['file_name'] =  basename($subArray['file_name']); // getFileName($subArray['file_name']);
            }
        }
    }

    echo "<pre>";
    print_r($data);
    echo "</pre>";

/*
    foreach ($data as $mainFile => $details) 
    {
        echo "Fichier principal : $mainFile\n";
        foreach ($details as $fileInfo) {
            echo "  Nom complet : " . $fileInfo['file_name'] . "<br>";
            echo "  Taille : " . $fileInfo['size'] . " octets " . "<br>";
            echo "  Date de création : " . $fileInfo['creation_date'] . "<br>";
            echo "----------------------------------------" ."<br>";
        }
    }
*/

/*************************************************************/

function groupFilesByVersion($files) 
{
            $groupedFiles = [];

            foreach ($files as $file) 
            {
                // Vérifie si le fichier contient la sous-chaîne '_vxx'
                if (preg_match('/(.*)_v\d+\.(\w+)$/', $file, $matches)) 
                {
                    $baseName = $matches[1] . '.' . $matches[2];
                    $groupedFiles[$baseName][] = $file;
                } 
                else 
                {
                    // Ajoute les fichiers de base sans version
                    if (!isset($groupedFiles[$file])) 
                    {
                        $groupedFiles[$file] = [];
                    }
                }
            }

            // Trie les versions dans chaque groupe
            /*foreach ($groupedFiles as $baseFile => &$versions) 
            {
                usort($versions, function($a, $b) 
                {
                    // Extraction des numéros de version pour le tri
                    preg_match('/_v(\d+)\./', $a, $matchesA);
                    preg_match('/_v(\d+)\./', $b, $matchesB);
                    $versionA = isset($matchesA[1]) ? (int)$matchesA[1] : 0;
                    $versionB = isset($matchesB[1]) ? (int)$matchesB[1] : 0;
                    return $versionA - $versionB;
                });
            }*/

        return $groupedFiles;
}

/*************************************************************/

function Listing_fichiers_repertoire($repertoire) 
{

    $liste_fichier_repertoire = [];

    if (is_dir($repertoire)) 
    {
        $fichiers = scandir($repertoire);
        foreach ($fichiers as $fichier) 
        {
            if ($fichier !== '.' && $fichier !== '..') 
            {
                $liste_fichier_repertoire[] = $fichier;
            }
        }
    } 
    return($liste_fichier_repertoire);
}

/*************************************************************/

function completion_data($data, $chemin)
{
    // Parcourir le tableau et ajouter les informations de taille et date de création pour chaque fichier
    foreach ($data as $key => &$subArray) 
    { 
        // Utiliser une référence pour modifier directement le tableau
        foreach ($subArray as &$fileName) 
        { 
            // Parcourir chaque nom de fichier dans le sous-tableau
            // Vérifier si le fichier existe avant de récupérer ses informations

            $fileName = $chemin ."/" . $fileName;

            if (file_exists($fileName)) 
            {
                $fileSize = filesize($fileName); // Taille du fichier en octets
                $fileCreationTime = filectime($fileName); // Date de création en timestamp
                $formattedDate = date("Y-m-d H:i:s", $fileCreationTime); // Formater la date

                // Ajouter un sous-tableau avec les informations du fichier
                $fileName = array(
                    'file_name' => $fileName, // Nom du fichier
                    'size' => $fileSize, // Taille du fichier
                    'creation_date' => $formattedDate // Date de création formatée
                );
            } 
            else 
            {
                // Si le fichier n'existe pas, insérer une erreur
                $fileName = array(
                    'file_name' => $fileName, 
                    'error' => "File not found"
                );
            }
        }
    }

    // Afficher le tableau modifié
    //echo "<pre>";
    //print_r($data);
    //echo "</pre>";
    return($data);
}

/**************************************************************************************/

function affiche()
{ 

    foreach ($data as $filename => $file_versions) 
    {
        // Afficher le nom de fichier
        echo "Fichier : $filename\n";

        $subarray_count = count($file_versions);

        echo " ploug " .$subarray_count ."<br>";

        foreach ($file_versions as $index => $version) 
        {
            // Afficher l'index du sous-tableau (index de la version du fichier)
            echo "  Sous-tableau "  .$index  . "<br>";
            echo "    Nom du fichier : " . $version['file_name'] . "<br>";
            echo "    Taille : " . $version['size'] . " octets" . "<br>";
            echo "    Date de création : " . $version['creation_date'] . "<br>";
            echo "----------------------------\n";  // Séparateur pour chaque version
        }

        // Accéder à un sous-tableau par indice

        /*
        $file_key = "91782786.jpg";  // Le fichier auquel on veut accéder
        $subarray_index = 3;        // L'indice du sous-tableau (par exemple, la deuxième version)

        echo "5555555555555555555555555555555555555555555555" ."<br>";
        // Vérifier si la clé existe et l'indice est valide
        if (isset($data[$file_key]) && isset($data[$file_key][$subarray_index])) 
        {
            $subarray = $data[$file_key][$subarray_index];
            // Afficher le contenu du sous-tableau
            echo "Nom du fichier : " . $subarray['file_name'] . "\n";
            echo "Taille : " . $subarray['size'] . " octets\n";
            echo "Date de création : " . $subarray['creation_date'] . "\n";
        } 
        else 
        {
            echo "Sous-tableau ou clé non trouvée.\n";
        }
        */

        // Parcourir les versions de chaque fichier
        /*foreach ($file_versions as $version) 
        {
            // Afficher les informations de chaque version
            echo "Compteur " $file_version ."<br>";
            echo "  Nom du fichier : " . $version['file_name'] . "<br>";
            echo "  Taille : " . $version['size'] . " octets" . "<br>" ;
            echo "  Date de création : " . $version['creation_date'] . "<br>";
            echo "----------------------------" . "<br>";  // Séparateur pour chaque version
        }*/
    }

}

    //recherche($data, "91782786.jpg", 3);
    //$keys = array_keys($data);
    //foreach ($keys as $key) 
    //{
    //    echo "Clé : " .$key ."<br>";
    //}


function recherche($data, $file_key, $subarray_index)
{
    echo "5555555555555555555555555555555555555555555555" ."<br>";

    // Vérifier si la clé existe et l'indice est valide
    if (isset($data[$file_key]) && isset($data[$file_key][$subarray_index])) 
    {
        $subarray = $data[$file_key][$subarray_index];
        // Afficher le contenu du sous-tableau
        echo "Nom du fichier : " . $subarray['file_name'] . "\n";
        echo "Taille : " . $subarray['size'] . " octets\n";
        echo "Date de création : " . $subarray['creation_date'] . "\n";
    } 
    else 
    {
        echo "Sous-tableau ou clé non trouvée.\n";
    }
}

/************************************************************************************/


?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Tableau des fichiers</title>

    <!-- Bootstrap CSS -->

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">

    <style>
 a {
            color: blue; /* Couleur du lien */
            text-decoration: none; /* Suppression du soulignement */
        }
        a:hover {
            text-decoration: underline; /* Ajouter le soulignement au survol si désiré */
        }
    </style>    

</head>

<body>

    <div class="container mt-5">

        <h2 class="text-center mb-4">Liste des fichiers</h2>
<!--
        <table class="table table-striped table-hover">
-->
        <table class="table table-hover">
        
            <thead class="table-dark">
                <tr>
                    <th scope="col">File Name</th>
                    <th scope="col">Number of Elements</th>
                    <th scope="col">Size (Bytes)</th>
                    <th scope="col">Creation Date</th>
                    <th scope="col">Action</th> <!-- Colonne Action -->
                </tr>
            </thead>
            
            <tbody>
<?php
               

                foreach ($data as $key => $entries) 
                {
                    $numElements = count($entries); // Nombre d'éléments dans le sous-tableau

                    if ($numElements == 1) 
                    {
                        // Si un seul élément, afficher le fichier normalement
                        $entry = $entries[0]; // Seulement une entrée
                        echo "<tr>";
                        echo "<td>" . htmlspecialchars($entry['file_name']) . "</td>";

                        echo "<td>" . $numElements . "</td>";

                        echo "<td>" . htmlspecialchars(number_format($entry['size'])) . "</td>";
                        echo "<td>" . htmlspecialchars($entry['creation_date']) . "</td>";
                        echo "<td></td>"; // Pas de bouton d'action pour les fichiers sans versions supplémentaires
                        echo "</tr>";
                    } 
                    else 
                    {
                        // Si plusieurs versions, afficher la première ligne puis les suivantes dans des lignes cachées
                        $firstEntry = $entries[0]; // Première version, visible
                        
                        echo "<tr>";
                        echo "<td>" . htmlspecialchars($firstEntry['file_name']) . "</td>";

                        echo "<td>" . $numElements . "</td>";

                        echo "<td>" . htmlspecialchars(number_format($firstEntry['size'])) . "</td>";
                        echo "<td>" . htmlspecialchars($firstEntry['creation_date']) . "</td>";
                        // Bouton d'action pour afficher les autres versions
                        echo "<td><button class='btn btn-primary btn-sm' data-bs-toggle='collapse' data-bs-target='#collapse_" . md5($key) . "' aria-expanded='false' aria-controls='collapse_" . md5($key) . "'>Expand</button></td>";
                        echo "</tr>";

                        // Afficher les autres versions dans des lignes cachées
                        foreach (array_slice($entries, 1) as $entry) 
                        { 


                            // On saute la première version table-danger
                            echo "<tr class='collapse  table-primary' id='collapse_" . md5($key) . "'>";
                            //echo "<td colspan='4'>" . htmlspecialchars($entry['file_name']) . "</td>";

//<td><a href="https://example.com/fichier2" target="_blank">Télécharger</a></td>

//echo "<td>" . "<a href='https://example.com/fichier2' >"  . htmlspecialchars($entry['file_name']) . "</a>" . "</td>";

$pipo = "12345";

//echo "<td>" ."<a href='?file=<?php echo urlencode($pipo); ?>'>" Voir Fichier "</a></td>";
     

     
?>

   <!--                                       
<td><a href="?file=<?php echo urlencode($entry['file_name']); ?>"><?php echo htmlspecialchars($entry['file_name']); ?></a></td>
                        -->


<td><a href="?file=<?php echo urlencode($entry['file_name']); ?>"><?php echo htmlspecialchars($entry['file_name']); ?></a></td>

<?php       

$key = "1234";
//echo "<td><a href='#' class='btn btn-primary open-modal' data-bs-toggle='modal' data-bs-target='#actionModal' data-file='$key'>Action</a></td>";

/*
//echo "<td>" . "<a href='?file='  >"  . htmlspecialchars($entry['file_name']) . "</a>" . "</td>";

//<td><a href="?file=<?php echo urlencode($file2); ?>">Voir Fichier 2</a></td>

//<td><a href="?file=<?php echo urlencode($file2); ?>">Voir Fichier 2</a></td>


//<td><a href="?file=fichier2">Voir Fichier 2</a></td>*/

                          /*  echo "<td>" . htmlspecialchars($firstEntry['file_name']) . "</td>";*/

                            echo "<td>" . "</td>";
                            
                            echo "<td>" . htmlspecialchars(number_format($firstEntry['size'])) . "</td>";
                            echo "<td>" . htmlspecialchars($firstEntry['creation_date']) . "</td>";
                            
                            echo "<td>" . "</td>";

                            echo "</tr>";
                        }
                    }

                }

?>

            </tbody>

        </table>

    </div>



    <!-- Bootstrap JS and dependencies -->

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

</body>

</html>