예제 #1
0
 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;
 }
예제 #2
0
 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;
 }
예제 #3
0
 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;
 }