public function getFileList($directory, $recursive = false) { $recursiveIteratorIterator = new \RegexIterator(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(rtrim($this->rootPath . '/' . $directory, '/')), \RecursiveIteratorIterator::SELF_FIRST), '/^((?!thumb(_[a-z]+)?).)*$/'); $jsonFileArray = array(); $thumbnailList = UploaderConfiguration::getInstance()->getThumbnails(); foreach ($recursiveIteratorIterator as $file) { /** * @var $file \SplFileInfo */ $extension = 'Dir'; if (!$file->isDir()) { $extension = ucfirst(pathinfo($file->getFilename(), PATHINFO_EXTENSION)); } // filters if ($file->getFilename() == '.' || $file->getFilename() == 'index.php' || 0 === strpos($file->getFilename(), '.')) { continue; } // set preview if image $preview = 'none'; $thumbnails = array(); if ($this->isImage($extension)) { $thumbnails = $this->getThumbnails($thumbnailList, $extension, $file, $thumbnails); $preview = current($thumbnails); if (!file_exists($this->cx->getWebsitePath() . $preview)) { $preview = ''; } } $fileInfos = array('filepath' => mb_strcut($file->getPath() . '/' . $file->getFilename(), mb_strlen($this->cx->getWebsitePath())), 'name' => $file->getFilename(), 'size' => $this->formatBytes($file->getSize()), 'cleansize' => $file->getSize(), 'extension' => ucfirst(mb_strtolower($extension)), 'preview' => $preview, 'active' => false, 'type' => $file->getType(), 'thumbnail' => $thumbnails); // filters if ($fileInfos['name'] == '.' || preg_match('/\\.thumb/', $fileInfos['name']) || $fileInfos['name'] == 'index.php' || 0 === strpos($fileInfos['name'], '.')) { continue; } $path = array($file->getFilename() => array('datainfo' => $fileInfos)); for ($depth = $recursiveIteratorIterator->getDepth() - 1; $depth >= 0; $depth--) { $path = array($recursiveIteratorIterator->getSubIterator($depth)->current()->getFilename() => $path); } $jsonFileArray = array_merge_recursive($jsonFileArray, $path); } return $jsonFileArray; }
public function getFileList($directory, $recursive = false, $readonly = false) { if (isset($this->fileListCache[$directory][$recursive][$readonly])) { return $this->fileListCache[$directory][$recursive][$readonly]; } $recursiveIteratorIterator = new \RegexIterator(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(rtrim($this->rootPath . '/' . $directory, '/')), \RecursiveIteratorIterator::SELF_FIRST), '/^((?!thumb(_[a-z]+)?).)*$/'); $jsonFileArray = array(); $thumbnailList = $this->cx->getMediaSourceManager()->getThumbnailGenerator()->getThumbnails(); foreach ($recursiveIteratorIterator as $file) { /** * @var $file \SplFileInfo */ $extension = 'Dir'; if (!$file->isDir()) { $extension = ucfirst(pathinfo($file->getFilename(), PATHINFO_EXTENSION)); } // filters if ($file->getFilename() == '.' || $file->getFilename() == 'index.php' || 0 === strpos($file->getFilename(), '.')) { continue; } // set preview if image $preview = 'none'; $hasPreview = false; $thumbnails = array(); if ($this->isImage($extension)) { $hasPreview = true; $thumbnails = $this->getThumbnails($thumbnailList, $extension, $file, $thumbnails); $preview = current($thumbnails); if (!file_exists($this->cx->getWebsitePath() . $preview)) { $hasPreview = false; } } $size = \FWSystem::getLiteralSizeFormat($file->getSize()); $fileInfos = array('filepath' => mb_strcut($file->getPath() . '/' . $file->getFilename(), mb_strlen($this->cx->getWebsitePath())), 'name' => $file->getFilename(), 'size' => $size ? $size : '0 B', 'cleansize' => $file->getSize(), 'extension' => ucfirst(mb_strtolower($extension)), 'preview' => $preview, 'hasPreview' => $hasPreview, 'active' => false, 'type' => $file->getType(), 'thumbnail' => $thumbnails); if ($readonly) { $fileInfos['readonly'] = true; } // filters if ($fileInfos['name'] == '.' || preg_match('/\\.thumb/', $fileInfos['name']) || $fileInfos['name'] == 'index.php' || 0 === strpos($fileInfos['name'], '.')) { continue; } $path = array($file->getFilename() => array('datainfo' => $fileInfos)); for ($depth = $recursiveIteratorIterator->getDepth() - 1; $depth >= 0; $depth--) { $path = array($recursiveIteratorIterator->getSubIterator($depth)->current()->getFilename() => $path); } $jsonFileArray = $this->array_merge_recursive($jsonFileArray, $path); } $jsonFileArray = $this->utf8EncodeArray($jsonFileArray); $this->fileListCache[$directory][$recursive][$readonly] = $jsonFileArray; return $jsonFileArray; }
private static function _searchAllInternal($needle, array $array, array &$keys = null, $const = 0) { try { $iterator = new \RegexIterator(new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array)), $needle, \RegexIterator::MATCH, $const); $result = []; /** @var \RecursiveIteratorIterator $iterator */ foreach ($iterator as $value) { $result[] = ['key' => $iterator->key(), 'value' => $value]; $_keys = []; foreach (range(0, $iterator->getDepth()) as $depth) { $_keys[] = $iterator->getSubIterator($depth)->key(); } $keys[][$iterator->key()] = $_keys; } } catch (\Exception $e) { throw new ArrayException($e->getMessage(), [], $e); } return $result; }