* @copyright Copyright (C) 2018-2024, Frédéric Tempez * @license CC Attribution-NonCommercial-NoDerivatives 4.0 International * @link http://zwiicms.fr/ */ class folder extends common { const VERSION = '2.00'; const REALNAME = 'Partage de ressources'; const DATADIRECTORY = ''; // Contenu localisé inclus par défaut (page.json et module.json) public static $actions = [ 'config' => self::GROUP_EDITOR, 'index' => self::GROUP_VISITOR, ]; // Contenu du chemin sélectionné public static $folders = ''; public static $sharePath = [ 'site/file/source/' ]; public static $iconPack = [ 'cla' => 'Classique', 'hct' => 'Contraste élevé', 'sqo' => 'Carré', 'viv' => 'Vivid' ]; public static $iconSize = [ 'md' => 'Standard', 'lg' => 'Moyenne', 'xl' => 'Grande' ]; public static $target = [ 'data-lity' => 'Images dans une lightbox (lity), sinon téléchargement', 'blank' => 'Nouvel onglet', 'download' => 'Téléchargement forcé', ]; public function index() { // Générer l'affichage self::$folders = $this->getFolderContent($this->getData(['module', $this->getUrl(0), 'path']), $this->getData(['module', $this->getUrl(0)])); // Valeurs en sortie $this->addOutput([ 'showBarEditButton' => true, 'showPageContent' => true, 'view' => 'index' ]); } public function config() { // Soumission du formulaire if ( $this->getUser('permission', __CLASS__, __FUNCTION__) === true && $this->isPost() ) { $this->setData([ 'module', $this->getUrl(0), [ 'path' => preg_replace('/^\\./', '', $this->getInput('folderConfigPath')), 'title' => $this->getInput('folderConfigTitle'), '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), 'expandcontrol' => $this->getInput('folderConfigExpandControl', helper::FILTER_BOOLEAN), 'iconpack' => $this->getInput('folderConfigiconPack'), 'iconsize' => $this->getInput('folderConfigIconSize'), 'target' => $this->getInput('folderConfigTarget'), ] ]); // Valeurs en sortie $this->addOutput([ 'redirect' => helper::baseUrl() . $this->getUrl(0), 'notification' => helper::translate('Modifications enregistrées'), 'state' => true ]); } self::$sharePath = $this->getSubdirectories('site/file/source'); self::$sharePath = array_flip(self::$sharePath); // Valeurs en sortie $this->addOutput([ 'view' => 'config' ]); } private function getFolderContent($chemin, $config = []) { $showSubFolder = isset($config['subfolder']) ? $config['subfolder'] : true; $sort = isset($config['sort']) ? $config['sort'] : true; $showDetails = isset($config['details']) ? $config['details'] : false; $initialFolderState = isset($config['folderstate']) ? $config['folderstate'] : 'collapsed'; $iconPack = isset($config['iconpack']) || !empty($config['iconpack']) ? $config['iconpack'] : 'classic'; $iconSize = isset($config['iconsize']) || !empty($config['iconsize']) ? $config['iconsize'] : 'md'; $target = isset($config['target']) || !empty($config['target']) ? $config['target'] : 'data-lity'; // 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; // 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); // Trier les sous-dossiers et les fichiers si nécessaire if ($sort) { sort($subDirectories); sort($files); } // Initialiser la liste des éléments $items = '