Completed
Push — master ( 38ebfc...6072da )
by Elf
04:56
created

AssetsVersion::updateAssetsVersionConfigFile()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 2
dl 0
loc 7
ccs 0
cts 7
cp 0
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace ElfSundae\Laravel\Support\Console\Commands;
4
5
use Illuminate\Console\Command;
6
7
class AssetsVersion extends Command
8
{
9
    /**
10
     * The name and signature of the console command.
11
     *
12
     * @var string
13
     */
14
    protected $signature = 'support:assets-version
15
        {--filename=assets-version : The filename of the assets version configuration}';
16
17
    /**
18
     * The console command description.
19
     *
20
     * @var string
21
     */
22
    protected $description = 'Update assets version configuration';
23
24
    /**
25
     * Execute the console command.
26
     *
27
     * @return mixed
28
     */
29
    public function handle()
30
    {
31
        $filename = (string) $this->option('filename');
32
33
        $assets = $this->laravel['config']->get($filename);
34
35
        $revisioned = $this->revisionAssets($assets);
36
37
        if ($assets !== $revisioned) {
38
            $this->updateAssetsVersionConfigFile($filename, $revisioned);
39
40
            $this->laravel['config'][$filename] = $revisioned;
41
        }
42
43
        $this->info('Assets version configuration'.
44
            ' <comment>'.$this->getConfigFilePath($filename).'</comment> '.
45
            (is_null($assets) ? 'created!' : 'updated!'));
46
    }
47
48
    /**
49
     * Revision assets.
50
     *
51
     * @param  array|null  $assets
52
     * @return array
53
     */
54
    protected function revisionAssets($assets)
55
    {
56
        $newAssets = [];
57
58
        if (is_array($assets)) {
59
            foreach ($assets as $filename => $value) {
60
                if (is_numeric($filename)) {
61
                    $filename = $value;
62
                    $value = '0';
63
                }
64
65
                $filename = trim($filename, DIRECTORY_SEPARATOR);
66
67
                $path = public_path($filename);
68
69
                if (is_file($path)) {
70
                    $value = substr(md5_file($path), 0, 10);
71
                } else {
72
                    $this->error("Revisioning file [{$filename}] failed.");
73
                }
74
75
                $newAssets[$filename] = $value;
76
            }
77
        }
78
79
        return $newAssets;
80
    }
81
82
    /**
83
     * Update assets version config file.
84
     *
85
     * @param  string  $filename
86
     * @param  mixed  $assets
87
     */
88
    protected function updateAssetsVersionConfigFile($filename, $assets)
89
    {
90
        file_put_contents(
91
            $this->getConfigFilePath($filename),
92
            sprintf("<?php\n\nreturn %s;\n", var_export($assets, true))
93
        );
94
    }
95
96
    /**
97
     * Get config file path.
98
     *
99
     * @param  string  $filename
100
     * @return string
101
     */
102
    protected function getConfigFilePath($filename)
103
    {
104
        return config_path($filename.'.php');
105
    }
106
}
107