From 49180ab4ed64a83950dd7ab131a193bad0a1e6de Mon Sep 17 00:00:00 2001 From: fredtempez Date: Sat, 16 Mar 2024 08:36:52 +0100 Subject: [PATCH] =?UTF-8?q?Dossiers=20d=C3=A9pli=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/folder/folder.php | 149 ++++++++++++++++---------- module/folder/view/config/config.php | 14 ++- module/folder/view/index/index.css | 17 ++- module/folder/view/index/index.js.php | 11 ++ 4 files changed, 131 insertions(+), 60 deletions(-) create mode 100644 module/folder/view/index/index.js.php diff --git a/module/folder/folder.php b/module/folder/folder.php index dc86ddba..bb6b9447 100644 --- a/module/folder/folder.php +++ b/module/folder/folder.php @@ -36,9 +36,13 @@ class folder extends common public function index() { + // Configuration de l'affichage $config['showsubfolder'] = $this->getData(['module', $this->getUrl(0), 'subfolder']); $config['sort'] = $this->getData(['module', $this->getUrl(0), 'sort']); + $config['showdetails'] = $this->getData(['module', $this->getUrl(0), 'details']); + $config['initialfolderstate'] = $this->getData(['module', $this->getUrl(0), 'folderstate']); + // Générer l'affichage self::$folders = $this->getFolderContent($this->getData(['module', $this->getUrl(0), 'path']), $config); // Valeurs en sortie @@ -66,7 +70,8 @@ class folder extends common 'sort' => $this->getInput('folderConfigSort', helper::FILTER_BOOLEAN), 'subfolder' => $this->getInput('folderConfigSubfolder', helper::FILTER_BOOLEAN), 'folder' => $this->getInput('folderConfigFolder', helper::FILTER_BOOLEAN), - + 'details' => $this->getInput('folderConfigDetails', helper::FILTER_BOOLEAN), + 'folderstate' => $this->getInput('folderConfigFolderState', helper::FILTER_BOOLEAN), ] ]); @@ -88,74 +93,104 @@ class folder extends common ]); } + private function getFolderContent($chemin, $config = []) + { + $showSubFolder = isset ($config['showsubfolder']) ? $config['showsubfolder'] : true; + $sort = isset ($config['sort']) ? $config['sort'] : true; + $showDetails = isset ($config['showdetails']) ? $config['showdetails'] : false; + $initialFolderState = isset ($config['initialfolderstate']) ? $config['initialfolderstate'] : 'collapsed'; -private function getFolderContent($chemin, $config = []) -{ - $showSubFolder = isset($config['showsubfolder']) ? $config['showsubfolder'] : true; - $sort = isset($config['sort']) ? $config['sort'] : true; + // Vérifier si le chemin existe et est un dossier + if (is_dir($chemin)) { + // Ouvrir le dossier + if ($dh = opendir($chemin)) { + // Initialiser les tableaux pour les sous-dossiers et les fichiers + $subDirectories = []; + $files = []; - // Vérifier si le chemin existe et est un dossier - if (is_dir($chemin)) { - // Ouvrir le dossier - if ($dh = opendir($chemin)) { - // Initialiser les tableaux pour les sous-dossiers et les fichiers - $subDirectories = []; - $files = []; + // Parcourir les éléments du dossier + while (($element = readdir($dh)) !== false) { + // Exclure les éléments spéciaux + if ($element != '.' && $element != '..') { + // Construire le chemin complet de l'élément + $cheminComplet = $chemin . '/' . $element; - // Parcourir les éléments du dossier - while (($element = readdir($dh)) !== false) { - // Exclure les éléments spéciaux - if ($element != '.' && $element != '..') { - // Construire le chemin complet de l'élément - $cheminComplet = $chemin . '/' .$element; + // Vérifier si c'est un dossier + if (is_dir($cheminComplet)) { + // Ajouter le dossier au tableau des sous-dossiers + $subDirectories[] = $element; + } else { + // Ajouter le fichier au tableau des fichiers + $files[] = $element; + } + } + } - // Vérifier si c'est un dossier - if (is_dir($cheminComplet)) { - // Ajouter le dossier au tableau des sous-dossiers - $subDirectories[] = $element; - } else { - // Ajouter le fichier au tableau des fichiers - $files[] = $element; - } - } - } + // Fermer le dossier + closedir($dh); - // Fermer le dossier - closedir($dh); + // Trier les sous-dossiers et les fichiers si nécessaire + if ($sort) { + sort($subDirectories); + sort($files); + } - // Trier les sous-dossiers et les fichiers si nécessaire - if ($sort) { - sort($subDirectories); - sort($files); - } + // Initialiser la liste des éléments + $items = '"; + return $items; + } + } - return $items; - } - } + return ''; + } + + + + private function formatSizeUnits($bytes) + { + $units = array('octest', 'Ko', 'Mo', 'Go', 'To'); + $i = 0; + while ($bytes >= 1024) { + $bytes /= 1024; + $i++; + } + return round($bytes, 2) . ' ' . $units[$i]; + } - return ''; -} diff --git a/module/folder/view/config/config.php b/module/folder/view/config/config.php index 8960452c..2d7702f5 100644 --- a/module/folder/view/config/config.php +++ b/module/folder/view/config/config.php @@ -34,16 +34,26 @@
-
+
$this->getData(['module', $this->getUrl(0), 'sort']) ]); ?>
-
+
$this->getData(['module', $this->getUrl(0), 'subfolder']) ]); ?>
+
+ $this->getData(['module', $this->getUrl(0), 'details']) + ]); ?> +
+
+ $this->getData(['module', $this->getUrl(0), 'folderstate']) + ]); ?> +
diff --git a/module/folder/view/index/index.css b/module/folder/view/index/index.css index ac52c9db..821c8cb3 100644 --- a/module/folder/view/index/index.css +++ b/module/folder/view/index/index.css @@ -1,7 +1,7 @@ #dirindex article { display: block; margin: 0 auto; - width: 480px; + width: 600px; } #dirindex a { @@ -42,4 +42,19 @@ #dirindex li { padding-left: 5px; list-style-position : outside; +} + +/* Style pour le pliage/dépliage des dossiers */ +.toggle { + cursor: pointer; +} + +/* Style pour les sous-éléments des dossiers */ +.sub-items { + list-style-type: none; +} + +/* Style pour les informations de fichier */ +.file-info { + float: right; } \ No newline at end of file diff --git a/module/folder/view/index/index.js.php b/module/folder/view/index/index.js.php new file mode 100644 index 00000000..106f4cbb --- /dev/null +++ b/module/folder/view/index/index.js.php @@ -0,0 +1,11 @@ + + +$(document).ready(function() { + // Gérer le clic sur les éléments avec la classe toggle + $('.toggle').click(function() { + // Trouver le prochain élément de type ul avec la classe sub-items + var subItems = $(this).next('ul.sub-items'); + // Toggle pour afficher ou cacher les sous-éléments + subItems.slideToggle(); + }); +});