Nouveau scanDir avec filter dans helper

This commit is contained in:
Deltacms 2022-11-17 11:42:22 +01:00
parent a3605edf67
commit e3bd66b5d1
2 changed files with 41 additions and 23 deletions

View File

@ -590,5 +590,44 @@ class helper {
list($encrypted_data, $iv) = explode('::', base64_decode($garble), 2);
return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
}
/**
* Scan le contenu d'un dossier et de ses sous-dossiers, retourne ceux contenant au moins un fichier
* dont l'extension est contenue dans $filter
* @param string $dir Dossier à scanner
* @param array $filter array des extensions à filtrer
* @return array
*/
public static function scanDir($dir, $filter = []) {
$exclu = ["agenda", "backup", "fonts", "icones", "theme"];
$dirContent = [];
$iterator = new DirectoryIterator($dir);
foreach($iterator as $fileInfos) {
if($fileInfos->isDot() === false AND $fileInfos->isDir()) {
if(in_array($fileInfos, $exclu)) continue;
$dirContent[] = $dir . '/' . $fileInfos->getBasename();
$dirContent = array_merge($dirContent, self::scanDir($dir . '/' . $fileInfos->getBasename()));
}
}
if( $filter ===[] ){
return $dirContent;
} else {
$dirContentFilter =[];
foreach($dirContent as $dirco){
$dirImg = opendir( $dirco );
// Dossier avec au moins 1 image ?
while (($file = readdir($dirImg)) !== false) {
if(is_file($dirco .'/'. $file)){
if(in_array(preg_replace("#(.+)\.(.+)#", "$2", $file), $filter)){
$dirContentFilter[] = $dirco;
continue(2);
}
}
}
closedir($dirImg);
}
return $dirContentFilter;
}
}
}

View File

@ -366,9 +366,10 @@ class gallery extends common {
*/
public function dirs() {
// Valeurs en sortie
$filter = ['jpg', 'jpeg', 'png', 'gif', 'tiff', 'ico', 'webp'];
$this->addOutput([
'display' => self::DISPLAY_JSON,
'content' => galleriesHelper::scanDir(self::FILE_DIR.'source')
'content' => helper::scanDir(self::FILE_DIR.'source', $filter)
]);
}
@ -729,25 +730,3 @@ class gallery extends common {
}
class galleriesHelper extends helper {
/**
* Scan le contenu d'un dossier et de ses sous-dossiers
* @param string $dir Dossier à scanner
* @return array
*/
public static function scanDir($dir) {
$exclu = ["agenda", "backup", "fonts", "icones", "theme"];
$dirContent = [];
$iterator = new DirectoryIterator($dir);
foreach($iterator as $fileInfos) {
if($fileInfos->isDot() === false AND $fileInfos->isDir()) {
if(in_array($fileInfos, $exclu)) continue;
$dirContent[] = $dir . '/' . $fileInfos->getBasename();
$dirContent = array_merge($dirContent, self::scanDir($dir . '/' . $fileInfos->getBasename()));
}
}
return $dirContent;
}
}