Completed
Push — master ( 27c241...f00300 )
by Freek
03:39
created

DirectoryCleanupCommand::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 6
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
namespace Spatie\DirectoryCleanup;
4
5
use Carbon\Carbon;
6
use Illuminate\Console\Command;
7
use Illuminate\Filesystem\Filesystem;
8
9
class DirectoryCleanupCommand extends Command
10
{
11
    /**
12
     * The console command name.
13
     *
14
     * @var string
15
     */
16
    protected $signature = 'clean:directories';
17
    /**
18
     * The console command description.
19
     *
20
     * @var string
21
     */
22
    protected $description = 'Clean up directories.';
23
24
    /** @var \Illuminate\Filesystem\Filesystem */
25
    protected $filesystem;
26
27
    public function __construct(Filesystem $filesystem)
28
    {
29
        parent::__construct();
30
31
        $this->filesystem = $filesystem;
32
    }
33
34
    public function handle()
35
    {
36
        $this->comment('Cleaning directories...');
37
38
        $directories = collect(config('laravel-directory-cleanup.directories'));
39
40
        collect($directories)->each(function ($config, $directory) {
41
42
            $this->deleteFilesIfOlderThanMinutes($directory, $config['deleteAllOlderThanMinutes']);
43
44
        });
45
46
        $this->comment('All done!');
47
    }
48
49
    protected function deleteFilesIfOlderThanMinutes(string $directory, int $minutes)
50
    {
51
        $timeInPast = Carbon::now()->subMinutes($minutes);
52
53
        $files = collect($this->filesystem->files($directory))
54
            ->filter(function ($file) use ($timeInPast) {
55
56
                $timeWhenFileWasModified = Carbon::createFromTimestamp(filemtime($file));
57
58
                return $timeWhenFileWasModified->lt($timeInPast);
59
60
            })
61
            ->each(function ($file) {
62
                $this->filesystem->delete($file);
63
            });
64
65
        $this->info("Deleted {$files->count()} file(s) from {$directory}.");
66
    }
67
}
68