44
55namespace Tempest \Http \Static ;
66
7+ use FilesystemIterator ;
78use RecursiveDirectoryIterator ;
89use RecursiveIteratorIterator ;
910use SplFileInfo ;
10- use Tempest \Console \Console ;
1111use Tempest \Console \ConsoleCommand ;
1212use Tempest \Console \HasConsole ;
1313use Tempest \Console \Middleware \CautionMiddleware ;
1919 use HasConsole;
2020
2121 public function __construct (
22- private Console $ console ,
2322 private Kernel $ kernel ,
2423 ) {
2524 }
@@ -29,12 +28,22 @@ public function __construct(
2928 middleware: [ForceMiddleware::class, CautionMiddleware::class]
3029 )]
3130 public function __invoke (): void
31+ {
32+
33+ $ directoryIterator = new RecursiveDirectoryIterator ($ this ->kernel ->root .'/public ' );
34+ $ directoryIterator ->setFlags (FilesystemIterator::SKIP_DOTS );
35+
36+ $ this ->removeFiles ($ directoryIterator );
37+ $ this ->removeEmptyDirectories ($ directoryIterator );
38+
39+ $ this ->success ('Done ' );
40+ }
41+
42+ private function removeFiles (RecursiveDirectoryIterator $ directoryIterator ): void
3243 {
3344 /** @var SplFileInfo[] $files */
3445 $ files = [];
3546
36- $ directoryIterator = new RecursiveDirectoryIterator ($ this ->kernel ->root . '/public ' );
37-
3847 /** @var SplFileInfo $file */
3948 foreach (new RecursiveIteratorIterator ($ directoryIterator ) as $ file ) {
4049 if ($ file ->getExtension () === 'html ' ) {
@@ -49,7 +58,25 @@ public function __invoke(): void
4958
5059 $ this ->writeln ("- <u> {$ pathName }</u> removed " );
5160 }
61+ }
5262
53- $ this ->success ('Done ' );
63+ private function removeEmptyDirectories (RecursiveDirectoryIterator $ directoryIterator ): void
64+ {
65+ /** @var SplFileInfo $file */
66+ foreach (new RecursiveIteratorIterator ($ directoryIterator , RecursiveIteratorIterator::CHILD_FIRST ) as $ file ) {
67+ if (! $ file ->isDir ()) {
68+ continue ;
69+ }
70+
71+ if (count (glob ($ file ->getPathname ().'/* ' )) > 0 ) {
72+ continue ;
73+ }
74+
75+ rmdir ($ file ->getPathname ());
76+
77+ $ pathName = str_replace ('\\' , '/ ' , $ file ->getPathname ());
78+
79+ $ this ->writeln ("- <u> {$ pathName }</u> directory removed " );
80+ }
5481 }
5582}
0 commit comments