<?php
							 | 
						|
								
							 | 
						|
								namespace App;
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 *
							 | 
						|
								 *
							 | 
						|
								 *
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								class FileManager
							 | 
						|
								{
							 | 
						|
								    /**
							 | 
						|
								     *
							 | 
						|
								     *
							 | 
						|
								     *  @param  [type] $path [description]
							 | 
						|
								     *  @return [type]       [description]
							 | 
						|
								     *
							 | 
						|
								     */
							 | 
						|
								    public function find($path)
							 | 
						|
								    {
							 | 
						|
								        $results = [];
							 | 
						|
								
							 | 
						|
								        $directories = [];
							 | 
						|
								
							 | 
						|
								        $files = [];
							 | 
						|
								
							 | 
						|
								        // getting files from directory
							 | 
						|
								        $items = scandir($path);
							 | 
						|
								
							 | 
						|
								        foreach($items as $file) {
							 | 
						|
								
							 | 
						|
								            // ignore parent directories
							 | 
						|
								            if ($file === '.' || $file === '..') {
							 | 
						|
								                continue;
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            // getting meta for file
							 | 
						|
								            $meta = stat($path.'/'.$file);
							 | 
						|
								
							 | 
						|
								            $result = [
							 | 
						|
								                'filename' => $file,
							 | 
						|
								                'is_file' => is_file($path.'/'.$file),
							 | 
						|
								                'meta' => [
							 | 
						|
								                    'updated_at' => \Carbon\Carbon::parse($meta['mtime'])->format('d.m.Y h:m:i')
							 | 
						|
								                ]
							 | 
						|
								            ];
							 | 
						|
								
							 | 
						|
								            if ($result['is_file']) {
							 | 
						|
								                $result['meta']['size'] = $this->formatBytes($meta['size']);
							 | 
						|
								                $files[] = $result;
							 | 
						|
								            } else {
							 | 
						|
								                $directories[] = $result;
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        // sorting by filename
							 | 
						|
								        usort($directories, [$this, 'sortByFilename']);
							 | 
						|
								        usort($files, [$this, 'sortByFilename']);
							 | 
						|
								
							 | 
						|
								        // adding directories
							 | 
						|
								        foreach($directories as $directory) {
							 | 
						|
								            $results[] = $directory;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        //  adding files
							 | 
						|
								        foreach($files as $file) {
							 | 
						|
								            $results[] = $file;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        return $results;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     *  sorting by filename, function for usort 
							 | 
						|
								     *
							 | 
						|
								     */
							 | 
						|
								    private function sortByFilename($a, $b)
							 | 
						|
								    {
							 | 
						|
								        if (strtolower($a['filename']) < strtolower($b['filename'])) {
							 | 
						|
								            return 0;
							 | 
						|
								        } else {
							 | 
						|
								            return 1;
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     *
							 | 
						|
								     *  @param  [type]  $size      [description]
							 | 
						|
								     *  @param  integer $precision [description]
							 | 
						|
								     *  @return [type]             [description]
							 | 
						|
								     */
							 | 
						|
								    private function formatBytes($size, $precision = 1)
							 | 
						|
								    {
							 | 
						|
								        if ($size === 0) {
							 | 
						|
								            return '0 bytes';
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $base = log($size, 1024);
							 | 
						|
								        $suffixes = array('bytes', 'kB', 'MB', 'G', 'T');
							 | 
						|
								
							 | 
						|
								        return round(pow(1024, $base - floor($base)), $precision).' '.$suffixes[floor($base)];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								}
							 |