Completed
Push — master ( fdbeef...265a2d )
by jerome
21:34
created

UpdateWatcherService::process()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 15
rs 9.2
cc 4
eloc 8
nc 4
nop 0
1
<?php
2
3
/**
4
 * This file is part of Dedipanel project
5
 *
6
 * (c) 2010-2015 Dedipanel <http://www.dedicated-panel.net>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace DP\Core\CoreBundle\Service;
13
14
class UpdateWatcherService
15
{
16
    private $currentVersion;
17
    private $updateAvailable = false;
18
    private $versionAvailable;
19
    private $versionFile;
20
21
    public function __construct($currentVersion, $watcherDir)
22
    {
23
        $this->currentVersion = $currentVersion;
24
        $this->versionFile = $watcherDir . '/version.json';
25
26
        $this->process();
27
    }
28
29
    public function getCurrentVersion()
30
    {
31
        return $this->currentVersion;
32
    }
33
34
    public function isUpdateAvailable()
35
    {
36
        return $this->updateAvailable;
37
    }
38
39
    public function getAvailableVersion()
40
    {
41
        return $this->versionAvailable;
42
    }
43
44
    private function process()
45
    {
46
        $version = '';
47
48
        if (!file_exists($this->versionFile)
49
        || filemtime($this->versionFile) <= mktime(0, 0, 0)) {
50
            $version = $this->fetchData();
51
        }
52
53
        if (empty($version)) {
54
            $version = file_get_contents($this->versionFile);
55
        }
56
57
        $this->processVersion($version);
58
    }
59
    
60
    private function fetchData()
61
    {
62
        $context = stream_context_create(array(
63
            'http' => array(
64
                'method'  => 'GET',
65
                'timeout' => 1, 
66
            )
67
        ));
68
69
        $version = @file_get_contents('http://www.dedicated-panel.net/version.json', false, $context);
70
71
        if ($version !== false) {
72
            file_put_contents($this->versionFile, $version);
73
        }
74
75
        return $version;
76
    }
77
78
    private function processVersion($version)
79
    {
80
        $version = json_decode($version);
81
82
        $this->versionAvailable = $version->version;
83
        $this->updateAvailable  = false;
84
85
        if (version_compare($this->versionAvailable, $this->currentVersion) == 1) {
86
            $this->updateAvailable = true;
87
        }
88
    }
89
}
90