|
9 | 9 |
|
10 | 10 | namespace Flextype\Component\Filesystem; |
11 | 11 |
|
| 12 | +use FilesystemIterator; |
| 13 | +use RecursiveDirectoryIterator; |
| 14 | +use RecursiveIteratorIterator; |
12 | 15 | use SplFileInfo; |
13 | 16 | use const FILEINFO_MIME_TYPE; |
14 | 17 | use const PATHINFO_EXTENSION; |
15 | 18 | use function array_filter; |
| 19 | +use function chmod; |
| 20 | +use function clearstatcache; |
| 21 | +use function fileperms; |
| 22 | +use function filetype; |
16 | 23 | use function finfo_close; |
17 | 24 | use function finfo_file; |
18 | 25 | use function finfo_open; |
19 | 26 | use function function_exists; |
20 | 27 | use function is_dir; |
| 28 | +use function octdec; |
21 | 29 | use function pathinfo; |
22 | 30 | use function preg_match; |
23 | | -use function clearstatcache; |
| 31 | +use function scandir; |
| 32 | +use function sprintf; |
| 33 | +use function substr; |
| 34 | +use function unlink; |
| 35 | +use function reset; |
24 | 36 |
|
25 | 37 | class Filesystem |
26 | 38 | { |
@@ -140,6 +152,37 @@ public static function listContents(string $directory = '', bool $recursive = fa |
140 | 152 | return array_filter($result); |
141 | 153 | } |
142 | 154 |
|
| 155 | + /** |
| 156 | + * Get directory timestamp |
| 157 | + * |
| 158 | + * @param string $directory The directory |
| 159 | + * |
| 160 | + * @return int directory timestamp |
| 161 | + */ |
| 162 | + public static function getDirTimestamp(string $directory) : int |
| 163 | + { |
| 164 | + $_directory = new RecursiveDirectoryIterator( |
| 165 | + $directory, |
| 166 | + FilesystemIterator::KEY_AS_PATHNAME | |
| 167 | + FilesystemIterator::CURRENT_AS_FILEINFO | |
| 168 | + FilesystemIterator::SKIP_DOTS |
| 169 | + ); |
| 170 | + $_iterator = new RecursiveIteratorIterator( |
| 171 | + $_directory, |
| 172 | + RecursiveIteratorIterator::SELF_FIRST |
| 173 | + ); |
| 174 | + $_resultFile = $_iterator->current(); |
| 175 | + foreach ($_iterator as $file) { |
| 176 | + if ($file->getMtime() <= $_resultFile->getMtime()) { |
| 177 | + continue; |
| 178 | + } |
| 179 | + |
| 180 | + $_resultFile = $file; |
| 181 | + } |
| 182 | + |
| 183 | + return $_resultFile->getMtime(); |
| 184 | + } |
| 185 | + |
143 | 186 | /** |
144 | 187 | * Returns the mime type of a file. Returns false if the mime type is not found. |
145 | 188 | * |
@@ -325,7 +368,7 @@ public static function copy(string $path, string $newpath, bool $recursive = fal |
325 | 368 | mkdir($newpath); |
326 | 369 | } |
327 | 370 |
|
328 | | - $splFileInfoArr = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::SELF_FIRST); |
| 371 | + $splFileInfoArr = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); |
329 | 372 |
|
330 | 373 | foreach ($splFileInfoArr as $fullPath => $splFileinfo) { |
331 | 374 | //skip . .. |
@@ -452,10 +495,10 @@ protected static function getFilePath(SplFileInfo $file) : string |
452 | 495 | return $path; |
453 | 496 | } |
454 | 497 |
|
455 | | - protected static function getRecursiveDirectoryIterator(string $path, int $mode = \RecursiveIteratorIterator::SELF_FIRST) : \RecursiveIteratorIterator |
| 498 | + protected static function getRecursiveDirectoryIterator(string $path, int $mode = RecursiveIteratorIterator::SELF_FIRST) : RecursiveIteratorIterator |
456 | 499 | { |
457 | | - return new \RecursiveIteratorIterator( |
458 | | - new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS), |
| 500 | + return new RecursiveIteratorIterator( |
| 501 | + new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), |
459 | 502 | $mode |
460 | 503 | ); |
461 | 504 | } |
|
0 commit comments