Skip to content

Commit fc69ee5

Browse files
committed
Filesystem 2.0.5
1 parent 8931653 commit fc69ee5

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# v2.0.5, 2019-08-21
2+
* New method getDirTimestamp() added.
3+
14
# v2.0.4, 2019-08-11
25
* Doctrine Coding Standard fixes
36

Filesystem.php

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,30 @@
99

1010
namespace Flextype\Component\Filesystem;
1111

12+
use FilesystemIterator;
13+
use RecursiveDirectoryIterator;
14+
use RecursiveIteratorIterator;
1215
use SplFileInfo;
1316
use const FILEINFO_MIME_TYPE;
1417
use const PATHINFO_EXTENSION;
1518
use function array_filter;
19+
use function chmod;
20+
use function clearstatcache;
21+
use function fileperms;
22+
use function filetype;
1623
use function finfo_close;
1724
use function finfo_file;
1825
use function finfo_open;
1926
use function function_exists;
2027
use function is_dir;
28+
use function octdec;
2129
use function pathinfo;
2230
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;
2436

2537
class Filesystem
2638
{
@@ -140,6 +152,37 @@ public static function listContents(string $directory = '', bool $recursive = fa
140152
return array_filter($result);
141153
}
142154

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+
143186
/**
144187
* Returns the mime type of a file. Returns false if the mime type is not found.
145188
*
@@ -325,7 +368,7 @@ public static function copy(string $path, string $newpath, bool $recursive = fal
325368
mkdir($newpath);
326369
}
327370

328-
$splFileInfoArr = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::SELF_FIRST);
371+
$splFileInfoArr = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
329372

330373
foreach ($splFileInfoArr as $fullPath => $splFileinfo) {
331374
//skip . ..
@@ -452,10 +495,10 @@ protected static function getFilePath(SplFileInfo $file) : string
452495
return $path;
453496
}
454497

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
456499
{
457-
return new \RecursiveIteratorIterator(
458-
new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS),
500+
return new RecursiveIteratorIterator(
501+
new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS),
459502
$mode
460503
);
461504
}

0 commit comments

Comments
 (0)